Gettext
-
Медіафайли у Вікісховищі
gettext — бібліотека проекту GNU для інтернаціоналізації. Основною відмінністю від інших подібних інструментів є використання англійських рядків замість спеціальних ідентифікаторів в тексті програми і підтримка множини іменників. Остання версія станом на травень 2019 — 0.20.1.
Використання
Окрім стандартної мови програмування С, також підтримуються: 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. Використання в більшості мов схоже з використанням в С.
Бібліотека широко застосовується у вільному ПЗ.
Інтернаціоналізація
Для програміста
Рядки, які необхідно перекласти, розмічаються у джерельному коді викликом функції gettext
, ngettext
або подібною. Зазвичай для зменшення розміру джерельних текстів та полегшення читання, для gettext
оголошують і використовують короткий синонім _
(символ підкреслення). Таким чином, виклик
printf(gettext("Hello! My name is %s.\n"), name);
перетвориться у
printf (_("Hello! My name is %s.\n"), name);
Розмічені рядки збираються у каталог за допомогою утиліти xgettext
. Наприклад, для вищенаведеного рядка у каталозі з'явиться запис на зразок цього:
#: src/name.c:36 msgid "Hello! My name is %s.\n" msgstr ""
Коментарі розміщуються безпосередньо перед рядками позначеними для перекладу:
/// ПЕРЕКЛАДАЧІ: будь ласка, залиште '%s' так, як є, тому що воно взаємодіє з програмою. /// Спасибі за сприяння цьому проекту. printf(_("My name is %s.\n"), my_name);
У цьому прикладі коментар починається з /// і передається до xgettext при побудові файлу шаблону .pot, щоб передати коментарі перекладачам.
xgettext --add-comments=///
Файл .pot з коментарями виглядає так:
#. ПЕРЕКЛАДАЧІ: будь ласка, залиште '%s' так, як є, тому що воно взаємодіє з програмою. #. Спасибі за сприяння цьому проекту. #: src/name.c:36 msgid "My name is %s.\n" msgstr ""
Для перекладача
Перекладач створює на основі каталогу .po
-файл, що міститиме переклад певною мовою. Для цього можна використати утиліту msginit
. msginit зачинає переклад, отож, для прикладу, якщо ми хочемо створити український переклад, то необхідно виконати
msginit --locale=uk --input=name.pot
В результаті утвориться файл uk.po. У ньому є колекція елементів на зразок цього
#: src/name.c:36 msgid "Hello! My name is %s.\n" msgstr ""
У ньому необхідно перекласти усі рядки, наприклад, для українського перекладу:
#: src/name.c:36 msgid "Hello! My name is %s.\n" msgstr "Привіт! Мене звати %s.\n"
Для редагування .po
-файлів існує безліч інструментів, наприклад poEdit, kBabel, Gtranslator, Pootle, але в крайньому разі можна використовувати простий текстовий редактор.
Для користувача
Зазвичай користувачеві в UNIX-подібних операційних системах не потрібно робити додаткових кроків для вибору конкретного перекладу. Переклад визначається системною змінною LANG
, яка зазвичай вже встановлена у необхідне значення.
Підтримка наявних перекладів
Оновлення перекладів з використанням змінених рядків та нових з джерельного коду, здійснюється утилітою msgmerge
. При цьому зберігаються усі вже перекладені рядки, а ті, що змінилися, позначаються як неточні (англ. fuzzy).
Див. також
- Інтернаціоналізація
- Локалізація програмного продукту
- Українізація програмного забезпечення
- Пам'ять перекладів
Посилання
- Офіційний сайт Gettext [Архівовано 17 лютого 2012 у WebCite]
- Офіційна документація Gettext [Архівовано 5 грудня 2007 у Wayback Machine.] (зокрема підтримка мов програмування [Архівовано 25 жовтня 2007 у Wayback Machine.])
- Сайт проекту "gettext for Win32 [Архівовано 24 вересня 2019 у Wayback Machine.]
- GNU gettext для Delphi, C++ Builder, Kylix, FreePascal та Lazarus
- Gettext Commons — gettext-утиліти для Java
- бібліотека GetTextLog
- Translate Toolkit [Архівовано 21 січня 2012 у Wayback Machine.]