이 섹션에서는 모국어 구현 방법을 설명합니다. 다음의 일부인 프로그램이나 라이브러리에서 지원합니다.포스트그레SQL배포. 현재는 C 프로그램에만 적용됩니다.
프로그램에 NLS 지원 추가
이 코드를 시작 시퀀스에 삽입하세요. 젠 토토램:
#ifdef ENABLE_NLS
#include <locale.h
#endif
...
#ifdef ENABLE_NLS
setlocale(LC_ALL, "");
바인딩텍스트도메인("젠 토토램명", LOCALEDIR);
텍스트도메인("젠 토토램명");
#endif
(그젠 토토램명할 수 있다 실제로 자유롭게 선택될 수 있습니다.)
번역 후보인 메시지가 있는 곳마다
찾았습니다.에 대한 호출입니다.gettext()삽입해야 합니다.
예:
fprintf(stderr, "패닉 레벨 %d\n", lvl);
다음으로 변경됩니다:
fprintf(stderr, gettext("패닉 레벨 %d\n"), lvl);
(gettext무작동으로 정의됨 NLS 지원이 구성되지 않은 경우.)
이것은 많은 혼란을 추가하는 경향이 있습니다. 하나의 공통점 단축키는 다음을 사용하는 것입니다:
#define _(x) gettext(x)
젠 토토램이 많은 일을 한다면 또 다른 해결책이 가능합니다
하나 또는 몇 가지 기능을 통한 통신
와 같이ereport()에
백엔드. 그런 다음 이 함수를 호출합니다.gettext내부적으로 모든 입력에 대해
문자열.
파일 추가nls.mk에 프로그램 소스가 있는 디렉토리입니다. 이 파일은 makefile로 읽습니다. 다음 변수 할당 여기서 만들어야 합니다:
다음에 제공된 프로그램 이름텍스트도메인()전화하세요.
제공된 번역 목록 — 처음에는 비어있습니다.
번역 가능한 문자열을 포함하는 파일 목록,
즉, 다음과 같이 표시된 것입니다.gettext또는 대안
솔루션. 결국 여기에는 거의 모든 항목이 포함됩니다.
젠 토토램의 소스 파일. 이 목록이 너무 커지면
오랫동안 당신이 먼저 만들 수 있습니다"파일"되다+그리고 두 번째 단어는 다음과 같은 파일입니다
한 줄에 하나의 파일 이름을 포함합니다.
다음에 대한 메시지 카탈로그를 생성하는 도구입니다.
작업할 번역가는 어떤 기능을 알아야 하는지 알아야 합니다.
통화에는 번역 가능한 문자열이 포함되어 있습니다. 기본적으로
만gettext()호출
알려져 있습니다. 사용한 경우_또는 필요한 기타 식별자
여기에 나열하겠습니다. 번역 가능한 문자열이 다음과 같은 경우
첫 번째 인수가 아닌 항목은 다음 인수에 속해야 합니다.
양식func:2(의 경우
두 번째 주장). 해당 기능이 있는 경우
복수형 메시지를 지원하면 항목이 다음과 같아야 합니다.
좋아요func:1,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를 참조하세요
문서.
번역가에게 무언가를 전달하고 싶다면, 예를 들어 메시지가 어떻게 정렬될 것인지에 대해 다른 출력에서는 문자열 발생 앞에 로 시작하는 댓글번역자, 예:
/* 번역자: 이 메시지는 보이는 것과 다릅니다. */
이 설명은 메시지 카탈로그 파일에 복사됩니다 번역가들이 볼 수 있도록 말이죠.