Gettext
| GNU gettext | |
|---|---|
| | |
| Тып | лакалізацыя праграмнага забеспячэння |
| Аўтар | Ульрых Дрэпэр |
| Распрацоўшчыкі | суполка |
| Напісана на | C |
| Інтэрфейс | камандны радок |
| Аперацыйная сістэма | Linux і іншыя UNIX-падобныя, Windows |
| Мовы інтэрфейсу |
|
| Першы выпуск | 1990[1] |
| Апошняя версія | 0.20.1 (12 мая 2019[2]) |
| Рэпазіторый | git.savannah.gnu.org/cgi… |
| Фарматы чытаных файлаў | GNU Gettext Machine Object (big endian)[d], GNU Gettext Machine Object (litte endian)[d] і Gettext catalog file[d] |
| Фарматы ствараных файлаў | GNU Gettext Machine Object (big endian)[d], GNU Gettext Machine Object (litte endian)[d] і Gettext catalog file[d] |
| Стан | актыўны |
| Ліцэнзія |
бібліятэка — LGPL інструменты — GPL дакументацыя — GFDL/GPL |
| Сайт | gnu.org/software/gettext/ |
gettext — бібліятэка праекта GNU для інтэрнацыяналізацыі, якая шырока ўжываецца ў свабодным ПЗ.
Апісанне

Асноўным адрозненнем ад іншых падобных інструментаў з’яўляецца тое, што ў gettext для пазначэння перакладаных радкоў у тэксце праграмы ўжываюцца іх англійскія арыгіналы, а не адмысловыя ідэнтыфікатары. Такім чынам, для адлюстравання інтэрфейсу на англійскай мове праграме не патрэбныя файлы перакладу. Гэта, як правіла, зручна, таму што большасць праграм і так маюць інтэрфейс на англійскай мове.
У gettext ёсць падтрымка множнага ліку. Для гэтага ў зыходным кодзе праграмы ўжываецца адмысловая функцыя, і прыкладаюцца два радкі — у адзіночным і множным ліку. Пры падстаноўцы перакладу на іншую мову ўжываецца столькі форм радкоў-перакладаў, колькі патрэбна для гэтай мовы. Для гэтага ў загалоўку файла перакладу мае быць спецыфічны для гэтай мовы выраз для выбару праз лік нумара радка-перакладу.
Бібліятэка gettext прапануе захоўваць пераклады ў файлах з пашырэннямі .mo (англ.: Machine Object, бінарны файл, зручны для чытання праграмай і спецыфічны для платформы), ці .gmo (GNU .mo), .po (англ.: Portable Object, чытэльны для чалавека файл перакладу, не залежны ад платформы) і .pot (англ.: PO template — каталог, загатоўка .po-файла для перакладу на новую мову).[3] Акрамя саміх радкоў перакладу, .po-файлы могуць змяшчаць каментарыі перакладчыка і разнастайныя службовыя нататкі.
Для фарміравання і абнаўлення гэтых файлаў пры змяненні праграмы прапануецца ўжываць шэраг утыліт.
Першапачаткова радкі з зыходнага тэксту праграмы збіраюцца з дапамогай праграмы xgettext у .pot-файл (каталог). Абнаўленне гэтага файла і файлаў перакладаў з ужываннем новых і змененых радкоў, якія з’явіліся ў зыходным кодзе, ажыццяўляецца праграмай msgmerge. Пры гэтым захоўваюцца ўсе ўжо перакладзеныя радкі, а тыя, якія змяніліся, пазначаюцца як недакладныя (англ.: fuzzy). Прадвызначана, што такія радкі не будуць выкарыстоўваюцца праграмай. Яны патрэбны для зручнасці перакладчыка: часта прасцей грунтавацца на існуючым, хоць і састарэлым, перакладзе, чым перакладаць усю фразу наноў.
Для перакладу праграмы на пэўную мову перакладчык стварае .po-файл: капіруе .pot-файл у патрэбнае месца і змяняе ў ім загаловак. Для гэтага можна выкарыстоўваць праграму msginit. Гатовы файл перакладу канвертуецца ў .mo-файлы ўтылітай msgfmt.[3].
Таксама існуюць утыліты для перакладчыкаў, якія палягчаюць рэдагаванне перакладу, напрыклад:
- Poedit, кросплатформавы. Ужывае wxWidgets (пры захаванні .po-файла перазбірае і адпаведны .mo-файл).
- Lokalize (раней kBabel) для KDE.
- Gtranslator для GNOME.
- Pootle Архівавана 12 сакавіка 2009. — машынны пераклад у анлайне і інструмент кіравання перакладамі.
- gted — плагін для Eclipse IDE.
- На крайні выпадак можна карыстацца простым тэкставым рэдактарам.
Акрамя базавай рэалізацыі gettext для стандартнай C, існуюць рэалізацыі аналагічнага падыходу для моў C++, Objective-C, сцэнарыі sh/bash, Python, Perl, PHP, GNU CLISP, Emacs Lisp, librep, GNU Smalltalk, Java, GNU awk, Паскаль, wxWidgets (з ужываннем класу wxLocale), YCP (мова YaST2), Tcl, Pike и R, моў платформы Mono (прастора імёнаў Mono.Unix), а таксама для фрэймворку Qt. Некаторыя з гэтых моў непасрэдна падтрымліваюцца вышэйзгаданымі ўтылітамі.[3].
Ужыванне ў большасці моў праграмавання падобна да ўжывання у C.
Ужыванне
Для праграміста
Простыя радкі
Радкі, якія пры рабоце праграмы паказваюцца карыстальніку і адпаведна патрабуюць перакладу, у зыходным кодзе праграмы пішуцца па-англійску і пазначаюцца выклікам функцыі gettext, ngettext або падобнай.
printf(gettext("Hello! My name is %s.\n"), name);
Звычайна для памяншэння памеру зыходнага кода і паляпшэння чытэльнасці аб’яўляюць і ўжываюць кароткі сінонім функцыі gettext — _ (сімвал падкрэслівання). Такім чынам, выклік пераўтвараецца ў
printf(_("Hello! My name is %s.\n"), name);
Для вышэйзгаданага радка ў каталогу з’явіцца запіс накшталт такога:
#: src/name.c:36 msgid "Hello! My name is %s.\n" msgstr ""
Множны лік
Для перакладу множнага ліку ўжываецца функцыя ngettext, якая прымае ў якасці параметраў два англамоўныя радкі (для адзіночнага і множнага ліку адпаведна) і цэлы лік. У PHP выклік ngettext для вываду радка з лікам выглядае наступным чынам:
printf(ngettext("%d day ago", "%d days ago", $daysAgo), $daysAgo);
Функцыя ngettext сама па сабе не здзяйсняе падстаноўку лікавага значэння замест %d, таму праграмісту трэба выклікаць функцыю printf ці падобную ёй для фарміравання патрэбнага радка з лікам.
Для перакладчыка
Простыя радкі
Перакладчык дадае адпаведныя радкі з перакладам у .po-файл:
#: src/name.c:36 msgid "Hello! My name is %s.\n" msgstr "Вітаю! Маё імя %s.\n"
Множны лік
Для перакладу множных лікаў патрэбна, каб у загалоўку (там, дзе пазначаюцца такія звесткі, як Project-Id-Version і PO-Revision-Date) .po-файла было ўказана правіла фарміравання множных лікаў для дадзенай мовы. Напрыклад, у беларускай мове існуюць тры формы множных лікаў:
- 1, 21, 31… дзень
- 2, 3, 4, 22, 23, 24, 32, 33, 34… дні
- 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 35, 36… дзён
Выбар адной з гэтых трох форм у залежнасці ад ліку ажыццяўляецца наступнай формулай[4]:
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
Выраз для plural тут пішацца з ужываннем сінтаксісу мовы C і можа апірацца толькі на пераменную n, якая пазначае выводны лік.
Пасля такога аб’яўлення формы набываюць нумары 0, 1 і 2, і пераклад фразы ажыццяўляецца наступным чынам:
msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d дзень таму" msgstr[1] "%d дні таму" msgstr[2] "%d дзён таму"
Для карыстальніка
Звычайна карыстальніку ў UNIX-падобных аперацыйных сістэмах не патрэбна прадпрымаць дадатковых дзеянняў для выбару пэўнага перакладу. Пераклад вызначаецца сістэмнай пераменнай LANG, якая звычайна ўжо мае пэўнае значэнне.
Гл. таксама
Зноскі
- ↑ https://web.archive.org/web/20120323032211/http://compgroups.net/comp.unix.solaris/History-of-gettext-et-al Праверана 1 снежня 2024.
- ↑ Афіцыйны рэпазіторый gettext
- ↑ а б в Дапаможнік GNU gettext Архівавана 5 снежня 2007. (англ.)
- ↑ Так выглядае радок у .po-файле перакладу. Знак \n пад канец радка значыць перанос радка.
Спасылкі
- Сайт GNU gettext (англ.)(недаступная спасылка). Архівавана з першакрыніцы 17 лютага 2012. Праверана 23 лістапада 2009.
- Практическое применение gettext для локализации и интернационализации приложений (руск.)(недаступная спасылка). Архівавана з першакрыніцы 17 лютага 2012. Праверана 23 лістапада 2009.
- Gettext для .NET и Mono (англ.)(недаступная спасылка). Архівавана з першакрыніцы 13 красавіка 2013. Праверана 12 верасня 2014.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.