이 섹션은의 일부인 프로그램 또는 도서관에서 모국어 지원을 구현하는 방법에 대해 설명합니다.무지개 토토분포. 현재 C 프로그램에만 적용됩니다.
프로그램에 NLS 지원 추가
이 코드를 프로그램의 시작 시퀀스에 삽입 :
#ifdef enable_nlsProgname
", LocalEdir);Progname
");
(Progname
실제로 자유롭게 선택할 수 있습니다.)
번역 후보자 인 메시지가 찾을 수있는 곳, 전화getText ()
삽입해야합니다. 예 :
fprintf (stderr, "panic level %d \ n", lvl);
다음으로 변경됩니다.
fprintf (stderr, gettext ( "panic level %d \ n"), lvl);
(getText
NLS 지원이 구성되지 않은 경우 NO-OP로 정의됩니다.)
이것은 많은 혼란을 더하는 경향이 있습니다. 일반적인 바로 가기 중 하나는 사용하는 것입니다.
#define _ (x) getText (x)
프로그램이 하나 또는 몇 가지 기능을 통해 많은 커뮤니케이션을 수행하는 경우 다른 솔루션이 가능합니다.Ereport ()
백엔드에서. 그런 다음이 기능을 호출합니다getText
모든 입력 문자열에 내부적으로.
파일 추가nls.mk
프로그램 소스가있는 디렉토리에서. 이 파일은 makefile로 읽습니다.
catalog_name
프로그램 이름,TextDomain ()
전화.
avail_languages
제공된 번역 목록 - 처음에는 비어 있습니다.
getText_Files
번역 가능한 문자열이 포함 된 파일 목록, 즉.getText
또는 대체 솔루션. 결국 여기에는 프로그램의 거의 모든 소스 파일이 포함됩니다.“파일”a+
그리고 두 번째 단어는 줄 당 하나의 파일 이름을 포함하는 파일입니다.
getText_triggers
번역기가 작업 할 수 있도록 메시지 카탈로그를 생성하는 도구는 어떤 기능 호출에 번역 가능한 문자열이 포함되어 있는지 알아야합니다. 기본적으로 만getText ()
통화가 알려져 있습니다. 사용한 경우_
또는 기타 식별자는 여기에 나열해야합니다. 번역 가능한 문자열이 첫 번째 인수가 아닌 경우 항목은 양식이어야합니다func : 2
(두 번째 인수의 경우). 복수 메시지를 지원하는 함수가있는 경우 항목은처럼 보일 것입니다.func : 1,2
(단수 및 복수 메시지 인수 식별).
빌드 시스템은 자동으로 메시지 카탈로그 구축 및 설치를 처리합니다.
다음은 쉽게 번역 할 수있는 메시지를 작성하기위한 몇 가지 지침입니다.
런타임에 문장을 구성하지 마십시오 :
printf ( "파일은 %s. \ n", flag? "복사": "제거");
문장 내의 단어 순서는 다른 언어에서 다를 수 있습니다. 또한 전화를 기억하더라도getText ()
각 조각에서 조각이 별도로 잘 번역되지 않을 수 있습니다. 번역 할 각 메시지가 일관된 전체가되도록 작은 코드를 복제하는 것이 좋습니다.
비슷한 이유로 작동하지 않습니다 :
printf ( "복사 된 %d 파일 %s", n, n! = 1? "s": "");
복수형이 어떻게 형성되는지 가정하기 때문입니다. 당신이 이것처럼 해결할 수 있다고 생각했다면 :
if (n == 1)
실망하십시오. 일부 언어에는 일부 독특한 규칙이있는 두 가지 이상의 형식이 있습니다.
printf ( "복사 된 파일 수 : %d", n);
실제로 적절하게 복수 메시지를 구성하려면 이에 대한 지원이 있지만 조금 어색합니다. 에서 기본 또는 세부 오류 메시지를 생성 할 때Ereport ()
, 당신은 다음과 같은 글을 쓸 수 있습니다 :
errmsg_plural ( "복사 된 %d 파일",
첫 번째 인수는 영어 단수 형식에 적합한 형식 문자열이고, 두 번째 인수는 영어 복수 형식에 적합한 형식 문자열이며, 세 번째는 사용할 복수 양식을 결정하는 정수 제어 값입니다. 후속 인수는 평소와 같이 형식 문자열에 따라 형식화됩니다.n
1이거나 1이 아니지만 다른 언어로는 여러 개의 복수형이있을 수 있습니다. 번역기는 두 개의 영어 양식을 그룹으로보고 다중 대체 문자열을 공급할 수있는 기회가 있으며, 런타임 값에 따라 적절한 것을 선택합니다.n
.
직접 이동하지 않는 메시지를 복수화 해야하는 경우errmsg
또는errdetail
보고서, 기본 함수를 사용해야합니다NGETTEXT
. GetText 문서를 참조하십시오.
메시지가 다른 출력과 일치하는 방법과 같은 번역기에게 무언가를 전달하려면로 시작하는 주석으로 문자열 발생에 앞서번역기
, 예 :
/* Translator :이 메시지는 그 모습이 아닙니다. */
이 주석은 번역가가 볼 수 있도록 메시지 카탈로그 파일에 복사됩니다.
문서에 맞지 않는 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면