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

53.2. 사설 토토 사이트의 경우

53.2.1. 역학

이 섹션에서는 다음의 일부인 프로그램이나 라이브러리에서 모국어 지원을 구현하는 방법을 설명합니다.PostgreSQL배포. 현재는 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);

    (gettextNLS 지원이 구성되지 않은 경우 무작동으로 정의됩니다.)

    이것은 많은 혼란을 추가하는 경향이 있습니다. 일반적인 단축키 중 하나는 다음을 사용하는 것입니다.

    #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(단수 및 복수 메시지 인수 식별).

빌드 시스템은 메시지 카탈로그 구축 및 설치를 자동으로 처리합니다.

53.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 문서를 참조하세요.

  • 메시지가 다른 출력과 어떻게 정렬되는지 등 번역자에게 무언가를 전달하려면 문자열 앞에 다음으로 시작하는 주석을 추가하세요.번역자, 예:

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

    이 댓글은 번역자가 볼 수 있도록 메시지 카탈로그 파일에 복사됩니다.