이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 55.2.사설 토토 꽁 머니 사이트 위해버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

50.2. 토토 꽁 머니래머를 위해

50.2.1. 역학

이 섹션에서는 모국어 지원을 구현하는 방법에 대해 설명합니다 의 일부인 토토 꽁 머니램 또는 도서관에서postgresql분포. 현재, 그것은 단지입니다 C 토토 꽁 머니램에 적용됩니다.

토토 꽁 머니램에 NLS 지원 추가

  1. 이 코드를 토토 꽁 머니램의 시작 시퀀스에 삽입 :

    #ifdef enable_nls
    #include <locale.h
    #endif
    
    ...
    
    #ifdef enable_nls
    setLocale (lc_all, "");
    BindTextDomain ( "Progname", LocalEdir);
    TextDomain ( "Progname");
    #endif

    (Progname실제로 할 수 있습니다 자유롭게 선택되었습니다.)

  2. 번역 후보자 인 메시지가 어디에 있든, 전화getText ()삽입. 예 :

    fprintf (stderr, "panic level %d \ n", lvl);

    :로 변경됩니다.

    fprintf (stderr, getText ( "panic level %d \ n"), lvl);

    (getTextNLS 인 경우 NO-OP로 정의됩니다 지원이 구성되지 않습니다.)

    이것은 많은 혼란을 더하는 경향이 있습니다. 일반적인 바로 가기는 하나입니다 사용:

    #define _ (x) getText (x)

    토토 꽁 머니램이 많은 것을하는 경우 다른 솔루션이 가능합니다. 와 같은 하나 또는 몇 가지 기능을 통한 커뮤니케이션Ereport ()백엔드에서. 그럼 당신은 이것을 만듭니다 함수 호출getText내부적으로 모든 입력 문자열.

  3. 파일 추가nls.mk디렉토리에서 토토 꽁 머니램 소스와 함께. 이 파일은 makefile로 읽습니다. 그만큼 다음은 다음과 같은 할당해야합니다.

    catalog_name

    토토 꽁 머니램 이름,TextDomain ()전화.

    avail_languages

    제공된 번역 목록 - 처음에는 비어 있습니다.

    getText_files

    번역 가능한 문자열이 포함 된 파일 목록, 즉 그 파일 목록 표시getText또는 대안 해결책. 결국 여기에는 거의 모든 소스 파일이 포함됩니다 토토 꽁 머니램. 이 목록이 너무 길어지면 첫 번째로 만들 수 있습니다"파일"a+두 번째 단어는 파일 이름이 하나씩 포함 된 파일입니다. 선.

    getText_triggers

    번역기를위한 메시지 카탈로그를 생성하는 도구 어떤 기능 호출에 번역 가능한 기능을 포함하는지 알아야 할 필요 문자열. 기본적으로 만getText ()통화가 알려져 있습니다. 사용한 경우_또는 다른 식별자는 여기에 나열해야합니다. 번역 가능한 경우 문자열은 첫 번째 인수가 아니며 항목은 양식이어야합니다func : 2(두 번째 인수의 경우). 당신이 복수 메시지를 지원하는 기능이 있으면 항목이 같아func : 1,2(식별 단수 및 복수 메시지 논쟁).

빌드 시스템은 자동으로 건물을 관리하고 메시지 카탈로그 설치.

50.2.2. 메시지 작성 가이드 라인

다음은 쉽게 메시지를 작성하기위한 몇 가지 지침입니다. 번역 가능한.

  • 런타임에 문장을 구성하지 마십시오 :

    printf ( "파일은 %s. \ n", flag? "복사": "제거";

    문장 내의 단어 순서는 다른 것과 다를 수 있습니다. 언어. 또한 전화를 기억하더라도getText ()각 조각에서 조각이있을 수 있습니다 별도로 잘 번역하지 마십시오. 조금 복제하는 것이 좋습니다 번역 할 각 메시지가 일관된 전체가되도록 코드. 숫자, 파일 이름 및 그러한 런타임 변수 만 런 타임에 메시지 텍스트에 삽입됩니다.

  • 비슷한 이유로 작동하지 않습니다 :

    printf ( "복사 된 %d 파일 %s", n, n! = 1? "s": "");

    복수형이 어떻게 형성되는지 가정하기 때문입니다. 당신이 당신을 생각했다면 다음과 같이 해결할 수 있습니다 :

    if (n == 1)
        printf ( "복사 1 파일");
    또 다른
        printf ( "Coveried %d 파일", n) :

    실망하십시오. 일부 언어에는 두 가지 이상의 형식이 있으며 몇 가지 독특한 규칙이 있습니다. 메시지를 디자인하는 것이 가장 좋습니다 예를 들어 다음과 같은 문제를 피하십시오.

    printf ( "복사 된 파일 수 : %d", n);

    적절하게 복수 메시지를 만들고 싶다면, 이것에 대한 지원이 있지만 조금 어색합니다. 생성 할 때 의 기본 또는 세부 오류 메시지Ereport (), 당신은 다음과 같은 것을 쓸 수 있습니다 :

    errmsg_plural ( "복사 된 %d 파일",
                  "복사 된 %d 파일",
                  N,
                  N)

    첫 번째 인수는 영어에 적합한 형식 문자열입니다. 단일 형식, 두 번째는 형식 문자열입니다. 영어 복수 형태, 세 번째는 정수 제어 가치입니다. 그것은 어떤 복수 형태를 사용할 것인지 결정합니다. 후속 주장은 평소와 같이 형식 문자열에 따라 형식화됩니다. (일반적으로 복수화 제어 값은 또한 값 중 하나가 될 것입니다. 형식화되어 있으므로 두 번 작성해야합니다.) 영어로만 문제n1 또는 NOT 1, 그러나 다른 언어에는 많은 다른 복수형이있을 수 있습니다. 번역가는 두 개의 영어 양식을 그룹으로보고 여러 대체 문자열을 공급할 수있는 기회 런타임 값을 기준으로 선택되는 적절한 것n.

    직접 진행되지 않는 메시지를 복수화 해야하는 경우errmsg또는errdetail보고서, 기본을 사용해야합니다 기능NGETTEXT. getText를 참조하십시오 선적 서류 비치.

  • 당신이 다음과 같이 번역기에게 무언가를 전달하려는 경우 메시지가 다른 출력과 일치하는 방법에 대해 시작하는 주석으로 문자열의 발생 앞에 와 함께번역기, 예 :

    /* Translator :이 메시지는 그 모습이 아닙니다. */

    이 주석은 메시지 카탈로그 파일에 복사됩니다. 번역가는 그들을 볼 수 있습니다.