텍스트 취득

gettext
텍스트 취득
원저작자Sun Microsystems
개발자여러가지
초기 릴리즈1990년; 32년 전(1990년)[1]
안정된 릴리스
0.21 / 2020년 7월 27일[2], 2년 전(2020-07-27)
저장소OpenSolaris 및 GNU gettext에 기반한 다양한 기능
운영 체제크로스 플랫폼
유형국제화와 현지화
면허증.다양한 무료 소프트웨어 라이선스
웹 사이트www.gnu.org/software/gettext/

컴퓨팅에서 gettext는 Unix와 유사컴퓨터 운영 체제에서 다국어 프로그램을 작성하기 위해 일반적으로 사용되는 국제화 및 현지화(i18n 및 l10n) 시스템입니다.gettext의 주요 장점 중 하나는 프로그래밍과 [3]번역을 분리한다는 것입니다.gettext의 가장 일반적으로 사용되는 구현은 GNU gettext로,[4] 1995년 GNU 프로젝트에 의해 출시되었습니다.런타임 라이브러리는 libintl입니다.gettext는 여러 형식의 명사에 다른 문자열을 사용할 수 있는 옵션을 제공하지만 이 기능은 문법적인 성별을 지원하지 않습니다.

역사

처음에 POSIX는 메시지를 현지화하는 수단을 제공하지 않았습니다.1980년대 후반에 1988년 Uniforum gettext와 1989년 X/Open catgets(XPG-3 5 5)라는 두 가지 제안이 제기되었다.Sun Microsystems는 1993년에 첫 gettext를 구현했습니다.Unix와 POSIX 개발자들은 어떤 인터페이스를 사용해야 하는지에 대해 전혀 합의하지 않았기 때문에 (다른 옵션은 X/Open catgets) glibc를 포함한 많은 C 라이브러리가 둘 [5]다 구현되었다.2019년 8월 현재 오스틴 그룹에서는 오래된 적이 이미 사용 불능이 되었음에도 불구하고 gettext를 POSIX에 포함시켜야 하는지 여부가 여전히 논쟁거리였다.우려 사항으로는 시스템 설정 로케일(멀티스레딩 문제의 영향을 받는 글로벌 변수)에 대한 의존성과 새로운 C 언어 확장자 지원(와이드 [6]스트링 포함)이 꼽혔습니다.

GNU Project는 gettext의 message-as-key 접근법이 더 단순하고 친근하다고 결정했다(catget을 포함한 대부분의 다른 시스템은 개발자가 모든 문자열에 대해 "key" 이름을 생각해내야 한다).[7]그들은 [1]1995년에 시스템의 무료 소프트웨어 구현인 GNU gettext를 출시했다.GNU에 관계없이 Gettext는 많은 프로그래밍 [8]언어로 이식되었습니다.po의 심플함과 폭넓은 에디터 지원으로 인해 비프로그램 컨텍스트에서 텍스트 문서용 또는 다른 현지화 형식 간의 중간으로 채택될 수 있습니다.또한 po4a(무엇을 위한 po)나 Translate Toolkit 등의 변환기가 등장하여 이러한 [9][10]브릿지를 제공합니다.

작동

프로그래밍

일반적인 gettext 워크플로우.왼쪽의 de.po 인스턴스는 msgmerge를 통한 변환의 "갱신"을 보여줍니다.

gettext의 기본 인터페이스는gettext(const char*)이 함수는 사용자가 원래 언어(일반적으로 영어)로 볼 수 있는 문자열을 받아들입니다.입력 시간을 절약하고 코드 혼란을 줄이기 위해 이 함수는 일반적으로 다음과 같은 별칭을 가집니다._:

인쇄물(텍스트 취득("저는 %s라고 합니다.\n"), my_name); 인쇄물(_("저는 %s라고 합니다.\n"), my_name); // 같으나 더 짧다 

gettext()그러면 지정된 문자열이 변환 검색 키로 사용되며 변환이 없을 때 원래 문자열이 반환됩니다.POSIX와는 대조적입니다. catgets() ,[11] AmigaOS GetString()또는 Microsoft Windows LoadString()여기서 프로그램 ID(종종 정수)가 사용됩니다.동일한 원문 텍스트가 다른 의미를 가질 수 있는 경우를 처리하기 위해 gettext는 다음과 같은 기능을 가지고 있습니다.cgettext()추가 "syslog" 문자열을 받아들입니다.

xgettext소스에 따라 실행되어.pot(Portable Object Template) 파일.이 파일에는 소스로부터 추출된 모든 변환 가능 문자열 목록이 포함되어 있습니다.코멘트 선두///는 번역자에게 힌트를 주기 위해 사용되지만 다른 프레픽스도 범위를 더욱 제한하도록 설정할 수 있습니다.이러한 일반적인 접두사 중 하나는TRANSLATORS:.

예를 들어, 코멘트가 있는 입력 파일은 다음과 같습니다.

/// TRANSLATORS: %s 에는 [환경설정]에 지정된 사용자 이름이 포함되어 있습니다. 인쇄물(_("저는 %s라고 합니다.\n"), my_name); 

xgettext는 다음 명령을 사용하여 실행됩니다.

xgettext -c /

결과적으로 생성되는 .pot 파일은 다음과 같이 표시됩니다(xgettext는 문자열을 C 언어 printf 형식 문자열로 인식합니다).

#. Translators: %s 에는 [환경설정]에 지정된 사용자 이름이 포함되어 있습니다. #, c형식 #: src/name.c:36 메시지 "저는 %s라고 합니다.\n" 메시지 "" 

POSIX스크립트에서 gettext는 다음과 같은 기능을 제공합니다.gettext.sh 라이브러리 1은 유사한 [12]언어로 gettext가 제공하는 많은 동일한 기능을 제공하는 것을 포함할 수 있습니다.GNU bash는 간단한 구성도 가지고 있습니다.$"msgid"간단한 gettext 함수의 경우, C 라이브러리에 따라 다르지만gettext()기능합니다.[13]

번역 중

번역자가 추출하는 것은.po(Portable Object) 파일을 사용하여 템플릿에서msginit번역 [14]내용을 입력합니다. msginit는 변환을 초기화합니다.예를 들어 프랑스어 번역의 경우 실행하는 명령어는 다음과 같습니다.[15]

msginit --syslog=fr --input=name.냄비

이렇게 하면fr.po그런 다음 번역자는 손으로 또는 Poedit, Emacs 등의 번역 도구를 사용하여 파일을 편집합니다..po편집된 엔트리는 다음과 같습니다.

#: src/name.c:36 메시지 "저는 %s라고 합니다.\n" 메시지 "Je m'appel %s.\n" 

마지막으로 .po 파일은 다음과 같이 컴파일됩니다.msgfmt2진법으로.mo(Machine Object) 파일.GNU gettext는 자체 파일 이름 확장자를 사용할 수 있습니다..gmo다른 gettext가 [16]구현되어 있는 시스템에서 사용할 수 있습니다.소프트웨어 패키지와 함께 배포할 준비가 되었습니다.

GNUmsgfmt는 프로그래밍 언어로 사용되는 형식 문자열과 관련된 몇 가지 체크도 수행할 수 있습니다.또한 [17]MO 이외의 언어 고유의 형식으로 출력할 수도 있습니다.X/Open은 다음과 같습니다.gencat.

개발 워크플로우의 후반 단계에서msgmerge를 사용하여 오래된 변환을 새로운 템플릿으로 "업데이트"할 수 있습니다.또 있다msgunfmt역회전용.mo배치 처리를 위한 파일 및 기타 많은 유틸리티.

입니다.

유닉스 타입의 시스템에서는, 유저가 환경 변수를 설정합니다. LC_MESSAGES, 프로그램이 선택한 언어로 문자열을 표시합니다..mo신청해 주세요.

GNU 변종 사용자는 환경변수를 사용할 수도 있습니다.LANGUAGE대신.Unix 변수와의 주요 차이점은 폴백을 [18]위해 콜론으로 구분된 여러 언어를 지원한다는 것입니다.

복수형

ngettext()interface는 문자열 내의 명사 수를 계산합니다.의 관례와 마찬가지로gettext()에일리어스 되는 경우가 많습니다.N_실용적으로코드 샘플에 대해 생각해 보겠습니다.

// 파라미터: 영어 단수, 영어 복수, 정수 카운트 인쇄물(텍스트(%d 번역된 메시지", 번역된 메시지 %d개, n), n); 

의 헤더""(빈 문자열) PO 파일의 엔트리는 몇 가지 메타데이터를 저장하며, 그 중 하나는 언어가 사용하는 복수 형식이며, 보통 C 스타일의 3진 연산자를 사용하여 지정됩니다.예를 들어 슬로베니아어로 번역합니다.

메시지 "" 메시지 "" "..." "언어:sl\n" "복수 양식:nplurals=4;복수=(n%100==1?1:n%100==2?2:n%100==3n%100==4?3:0);\n" 

이제 4개의 복수 형식이 있기 때문에 최종 po는 다음과 같습니다.

#: src/msgfmt.c:876 #, c형식 메시지 %d 번역된 메시지" msgid_messages 번역된 메시지 %d개 메시지0] %d prevedenih 스포로칠 메시지1] %d prevedeno sporochilo 메시지2] %d prevedeni 스포로칠리 메시지3] %d 프리베데나 스포로칠라 

언어의 참조는 [19]Unicode 컨소시엄에 의해 제공됩니다.또한 msginit은 하나의 특정 [14]언어에 대한 파일을 작성할 때 적절한 규칙을 프리퍼런스합니다.

실장

gettext에는 C 양쪽 ASP에 대한 C# 구현이 있습니다.NET[20][21] 및 WPF,[22] Perl,[23] [24]PHP, [25]Python, R,[26] Scala [27]및 Node.js[28]경우.

GNU gettext는 Objective-C를 네이티브로 지원하지만 Swift 프로그래밍 언어는 아직 지원하지 않습니다.이러한 코코아 플랫폼에서 일반적으로 사용되는 gettext 구현은 POLocalizedString입니다.[29]Microsoft Outlook for iOS 팀은 gettext와 같은 [30]API를 갖춘 LocalizedStringsKit 라이브러리도 제공합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b "History of gettext() et al? - comp.unix.solaris". Compgroups.net. Retrieved 3 April 2016.
  2. ^ "Index of /Pub/Gnu/Gettext".
  3. ^ Martindale, Linda (1 November 2002). "Bridging the Digital Divide in South Africa Linux Journal". linuxjournal.com. Linux Journal. Archived from the original on 17 September 2019. Retrieved 17 September 2019.
  4. ^ Tykhomyrov, Olexiy Ye (1 November 2002). "Introduction to Internationalization Programming Linux Journal". linuxjournal.com. Linux Journal. Archived from the original on 17 September 2019. Retrieved 17 September 2019.
  5. ^ "Message Translation". The GNU C Library.
  6. ^ "0001122: POSIX should include gettext() and friends - Austin Group Defect Tracker". Austin Group Defect Tracker.
  7. ^ "The Programmer's View". gettext 0.10.35. 30 April 1998.
  8. ^ "GNU gettext utilities: List of Programming Languages".
  9. ^ "po4a". po4a.org.
  10. ^ "The essential toolkit for localization engineers". Translate Toolkit.
  11. ^ "About catgets". gnu.org. Retrieved 24 October 2017.
  12. ^ "GNU gettext utilities: sh".
  13. ^ "GNU gettext utilities: bash".
  14. ^ a b "GNU gettext utilities: PO Files". Gnu.org. Retrieved 3 April 2016.
  15. ^ "How to Translate With GetText PO and POT Files". Icanlocalize.com. Retrieved 3 April 2016.
  16. ^ "Files Conveying Translations". Gnu.org. Retrieved 22 April 2014.
  17. ^ "msgfmt Invocation". GNU gettext utilities.
  18. ^ "GNU gettext utilities: Locale Environment Variables". Gnu.org. Retrieved 3 April 2016.
  19. ^ "Language Plural Rules". unicode.org.
  20. ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 3 April 2016.
  21. ^ "turquoiseowl/i18n: Smart internationalization for ASP.NET". GitHub.com. Retrieved 3 April 2016.
  22. ^ "NGettext.Wpf - Proper internationalization support for WPF (via NGettext)". GitHub. 16 August 2019.
  23. ^ "libintl-perl - An Internationalization Library for Perl That Aims To Be Compatible With the Uniforum Message Translations System as Implemented For Example in GNU Gettext". github.com. Retrieved 14 September 2017.
  24. ^ "Gettext". php.net. Retrieved 24 October 2017.
  25. ^ "gettext – Multilingual internationalization services – Python 3.7.0 documentation". docs.python.org. Retrieved 21 September 2018.
  26. ^ "gettext: Translate Text Messages". rdrr.io. Retrieved 13 November 2021.
  27. ^ "makkarpov/scalingua: A simple gettext-like internationalization library for Scala". github.com. Retrieved 28 April 2016.
  28. ^ "DanielBaulig/node-gettext: An adaption of Joshua I. Miller's Javascript Gettext library for node.js". GitHub.com. Retrieved 3 April 2016.
  29. ^ "hulab/POLocalizedString: gettext for iOS/OS X/watchOS/tvOS". GitHub. hulab. 19 September 2019.
  30. ^ "microsoft/LocalizedStringKit: Generate .strings files directly from your code". GitHub. Microsoft. 12 February 2020.

외부 링크