이 문서는 지원되지 않는 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, "");
    바인딩텍스트도메인("토토 꽁 머니램명", 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(식별 단수 및 복수 메시지 인수).

빌드 시스템은 자동으로 빌딩 및 작업을 처리합니다. 메시지 카탈로그를 설치 중입니다.

50.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)

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

    직접 전달되지 않는 메시지를 복수화해야 하는 경우 anerrmsg또는errdetail보고하려면 기본을 사용해야 합니다. 기능gettext. gettext를 참조하세요 문서.

  • 번역가에게 다음과 같은 내용을 전달하고 싶다면 메시지가 다른 출력과 어떻게 정렬되는지에 대해 문자열이 시작되기 전에 주석이 시작됩니다. 와 함께번역가, 예:

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

    이 설명은 메시지 카탈로그 파일에 복사되어 다음과 같습니다. 번역가가 볼 수 있습니다.