이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 55.2.사설 토토 사이트 위해버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

47.2. 프로그래머의 경우

47.2.1. 역학

이 섹션에서는 모국어 구현 방법을 설명합니다. 다음의 일부인 프로그램이나 라이브러리에서 지원합니다.포스트그레SQL배포. 현재는 C 프로그램에만 적용됩니다.

프로그램에 NLS 지원 추가

  1. 이 코드를 시작 시퀀스에 삽입하세요. 젠 토토램:

    #ifdef ENABLE_NLS
    #include <locale.h
    #endif
    
    ...
    
    #ifdef ENABLE_NLS
    setlocale(LC_ALL, "");
    바인딩텍스트도메인("젠 토토램명", LOCALEDIR);
    텍스트도메인("젠 토토램명");
    #endif

    (그젠 토토램명할 수 있다 실제로 자유롭게 선택될 수 있습니다.)

  2. 번역 후보인 메시지가 있는 곳마다 찾았습니다.에 대한 호출입니다.gettext()삽입해야 합니다. 예:

    fprintf(stderr, "패닉 레벨 %d\n", lvl);

    다음으로 변경됩니다:

    fprintf(stderr, gettext("패닉 레벨 %d\n"), lvl);

    (gettext무작동으로 정의됨 NLS 지원이 구성되지 않은 경우.)

    이것은 많은 혼란을 추가하는 경향이 있습니다. 하나의 공통점 단축키는 다음을 사용하는 것입니다:

    #define _(x) gettext(x)

    젠 토토램이 많은 일을 한다면 또 다른 해결책이 가능합니다 하나 또는 몇 가지 기능을 통한 통신 와 같이ereport()에 백엔드. 그런 다음 이 함수를 호출합니다.gettext내부적으로 모든 입력에 대해 문자열.

  3. 파일 추가nls.mk에 프로그램 소스가 있는 디렉토리입니다. 이 파일은 makefile로 읽습니다. 다음 변수 할당 여기서 만들어야 합니다:

    CATALOG_NAME

    다음에 제공된 프로그램 이름텍스트도메인()전화하세요.

    AVAIL_LANGUAGES

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

    GETTEXT_FILES

    번역 가능한 문자열을 포함하는 파일 목록, 즉, 다음과 같이 표시된 것입니다.gettext또는 대안 솔루션. 결국 여기에는 거의 모든 항목이 포함됩니다. 젠 토토램의 소스 파일. 이 목록이 너무 커지면 오랫동안 당신이 먼저 만들 수 있습니다"파일"되다+그리고 두 번째 단어는 다음과 같은 파일입니다 한 줄에 하나의 파일 이름을 포함합니다.

    GETTEXT_TRIGGERS

    다음에 대한 메시지 카탈로그를 생성하는 도구입니다. 작업할 번역가는 어떤 기능을 알아야 하는지 알아야 합니다. 통화에는 번역 가능한 문자열이 포함되어 있습니다. 기본적으로 만gettext()호출 알려져 있습니다. 사용한 경우_또는 필요한 기타 식별자 여기에 나열하겠습니다. 번역 가능한 문자열이 다음과 같은 경우 첫 번째 인수가 아닌 항목은 다음 인수에 속해야 합니다. 양식func:2(의 경우 두 번째 주장). 해당 기능이 있는 경우 복수형 메시지를 지원하면 항목이 다음과 같아야 합니다. 좋아요func:1,2(식별 단수 및 복수 메시지 인수).

빌드 시스템이 자동으로 빌딩을 관리합니다 메시지 카탈로그를 설치합니다.

47.2.2. 메시지 작성 지침

다음은 메시지 작성에 대한 몇 가지 지침입니다. 쉽게 번역할 수 있습니다.

  • 런타임에 다음과 같은 문장을 구성하지 마십시오:

    printf("파일은 %s였습니다.\n", 플래그 ? "복사됨" : "제거됨");

    문장의 단어 순서는 다음과 같이 다를 수 있습니다. 다른 언어. 또한 기억하고 전화를 했어도gettext()각 조각에 대해, 조각이 별도로 잘 번역되지 않을 수 있습니다. 그것은 각 메시지가 번역될 수 있는 것은 일관된 전체이다. 숫자, 파일만 이름 및 이와 유사한 런타임 변수를 삽입해야 합니다. 런타임에 메시지 텍스트로 변환됩니다.

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

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

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

    if (n==1)
        printf("1개의 파일을 복사했습니다.");
    그렇지 않으면
        printf("%d개의 파일을 복사했습니다", n):

    그러면 실망하세요. 일부 언어에는 두 개 이상의 언어가 있습니다. 특별한 규칙이 있는 형태로 만들어졌습니다. 디자인하는 것이 가장 좋은 경우가 많습니다. 예를 들어 문제를 완전히 방지하라는 메시지 이렇게:

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

    정말로 적절한 복수형을 구성하고 싶다면 메시지, 이에 대한 지원이 있지만 조금 어색합니다. 기본 또는 세부 오류 메시지를 생성할 때ereport(), 쓸 수 있어요 이런 것:

    errmsg_plural("%d 파일을 복사했습니다",
                  "%d개의 파일을 복사했습니다",
                  엔,
                  n)

    첫 번째 인수는 다음에 적합한 형식 문자열입니다. 영어 단수형, 두 번째는 형식 문자열입니다. 영어의 복수형에 적합하며 세 번째는 어떤 복수형을 사용할지 결정하는 정수 제어 값 사용. 후속 인수는 형식에 따라 형식이 지정됩니다. 평소처럼 문자열. (보통 복수화 제어값은 또한 형식을 지정할 값 중 하나이므로 두 번 써야 합니다.) 영어에서는 다음 여부만 중요합니다.n은 1이거나 1이 아니지만, 다른 언어에는 다양한 복수형이 있을 수 있습니다. 번역가는 두 개의 영어 형식을 하나의 그룹으로 보고 여러 대체 문자열을 제공할 수 있는 기회가 있습니다. 에 따라 적절한 것이 선택됩니다. 런타임 값n.

    전달되지 않는 메시지를 복수화해야 하는 경우 직접적으로errmsg또는errdetail신고하세요. 기본 함수를 사용하세요gettext. gettext를 참조하세요 문서.

  • 번역가에게 무언가를 전달하고 싶다면, 예를 들어 메시지가 어떻게 정렬될 것인지에 대해 다른 출력에서는 문자열 발생 앞에 로 시작하는 댓글번역자, 예:

    /* 번역자: 이 메시지는 보이는 것과 다릅니다. */

    이 설명은 메시지 카탈로그 파일에 복사됩니다 번역가들이 볼 수 있도록 말이죠.