텍스트 취득
gettext| 원저작자 | Sun Microsystems |
|---|---|
| 개발자 | 여러가지 |
| 초기 릴리즈 | 전([1] |
| 안정된 릴리스 | 0.21 / 2020년 27일[2], 전( |
| 저장소 | OpenSolaris 및 GNU gettext에 기반한 다양한 기능 |
| 운영 체제 | 크로스 플랫폼 |
| 유형 | 국제화와 현지화 |
| 면허증. | 다양한 무료 소프트웨어 라이선스 |
| 웹 사이트 | www |
컴퓨팅에서 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월[update] 현재 오스틴 그룹에서는 오래된 적이 이미 사용 불능이 되었음에도 불구하고 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의 기본 인터페이스는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 라이브러리도 제공합니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b "History of gettext() et al? - comp.unix.solaris". Compgroups.net. Retrieved 3 April 2016.
- ^ "Index of /Pub/Gnu/Gettext".
- ^ 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.
- ^ 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.
- ^ "Message Translation". The GNU C Library.
- ^ "0001122: POSIX should include gettext() and friends - Austin Group Defect Tracker". Austin Group Defect Tracker.
- ^ "The Programmer's View". gettext 0.10.35. 30 April 1998.
- ^ "GNU gettext utilities: List of Programming Languages".
- ^ "po4a". po4a.org.
- ^ "The essential toolkit for localization engineers". Translate Toolkit.
- ^ "About catgets". gnu.org. Retrieved 24 October 2017.
- ^ "GNU gettext utilities: sh".
- ^ "GNU gettext utilities: bash".
- ^ a b "GNU gettext utilities: PO Files". Gnu.org. Retrieved 3 April 2016.
- ^ "How to Translate With GetText PO and POT Files". Icanlocalize.com. Retrieved 3 April 2016.
- ^ "Files Conveying Translations". Gnu.org. Retrieved 22 April 2014.
- ^ "msgfmt Invocation". GNU gettext utilities.
- ^ "GNU gettext utilities: Locale Environment Variables". Gnu.org. Retrieved 3 April 2016.
- ^ "Language Plural Rules". unicode.org.
- ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 3 April 2016.
- ^ "turquoiseowl/i18n: Smart internationalization for ASP.NET". GitHub.com. Retrieved 3 April 2016.
- ^ "NGettext.Wpf - Proper internationalization support for WPF (via NGettext)". GitHub. 16 August 2019.
- ^ "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.
- ^ "Gettext". php.net. Retrieved 24 October 2017.
- ^ "gettext – Multilingual internationalization services – Python 3.7.0 documentation". docs.python.org. Retrieved 21 September 2018.
- ^ "gettext: Translate Text Messages". rdrr.io. Retrieved 13 November 2021.
- ^ "makkarpov/scalingua: A simple gettext-like internationalization library for Scala". github.com. Retrieved 28 April 2016.
- ^ "DanielBaulig/node-gettext: An adaption of Joshua I. Miller's Javascript Gettext library for node.js". GitHub.com. Retrieved 3 April 2016.
- ^ "hulab/POLocalizedString: gettext for iOS/OS X/watchOS/tvOS". GitHub. hulab. 19 September 2019.
- ^ "microsoft/LocalizedStringKit: Generate .strings files directly from your code". GitHub. Microsoft. 12 February 2020.