Gettext

Gettext

gettext

gettext
Тип библиотека для интернационализации
Разработчик Ульрих Дреппер
Написана на Си
ОС различные
Версия 0.17 (7 декабря 2007)
Лицензия библиотека — LGPL
инструменты — GPL
документация — GFDL/GPL
Сайт http://www.gnu.org/software/gettext/

gettext — библиотека проекта GNU для интернационализации, широко применяемая в свободном ПО.

Основным отличием от других подобных инструментов является то, что в gettext для обозначения переводимых строк в тексте программы используются их английские оригиналы, а не специальные идентификаторы. Кроме того, в gettext есть поддержка множественного числа.

Содержание

Использование

Кроме стандартного Си, поддерживаются также: 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 ""

Множественные числа

Для перевода множественного числа используется функция ngettext, которая принимает в качестве параметров две строки (для единственного и множественного числа соответственно) и целое число. В PHP вызов ngettext выглядит следующим образом:

ngettext("%d day ago", "%d days ago", $days_ago)

Две строки необходимы для того, чтоб не делать отдельный перевод этой фразы на английский язык, т.к. большинство разрабатываемых приложений и так пишутся на английском. Функция ngettext сама по себе не производит подстановку числового значения вместо %d, поэтому программисту необходимо вызвать функцию printf или подобную ей для формирования нужной строки с числом.

Для переводчика

Простые строки

Переводчик создаёт на основе каталога .po-файл, содержащий перевод на конкретный язык. (Для этого можно использовать программу msginit.) Затем он переводит строки в этом файле, например, для русского перевода:

#: src/name.c:36
msgid "Hello! My name is %s.\n"
msgstr "Привет! Меня зовут %s.\n"

Для редактирования .po-файлов существует множество инструментов, к примеру:

  • poEdit кросплатформенный использует wxWidgets.
  • kBabel для KDE.
  • Gtranslator для GNOME
  • Pootle машинный перевод в он-лайн и инструмент управления переводами.
  • gted плагин для Eclipse IDE.
  • В крайнем случае можно использовать простой текстовый редактор.

Множественные числа

Для перевода множественных чисел необходимо, чтобы в заголовке (там, где указываются такие данные, как 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... дней

Выбор одной из этих трёх форм в зависимости от числа осуществляется следующей формулой:

"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"

Эта формула имеет вид выражения на языке Си, в котором переменная n обозначает число.

После такого объявления формы приобретают номера 0, 1 и 2, и перевод фразы осуществляется следующим образом:

msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d день назад"
msgstr[1] "%d дня назад"
msgstr[2] "%d дней назад"

Для пользователя

Обычно пользователю в UNIX-подобных операционных системах не нужно предпринимать дополнительных шагов для выбора конкретного перевода. Перевод определяется системной переменной LANG, которая обычно уже установлена в требуемое значение.

Поддержка существующих переводов

Обновление переводов с использованием новых и изменившихся строк, появившихся в исходном коде, осуществляется программой msgmerge. При этом сохраняются все уже переведённые строки, а те, которые изменились, помечаются как неточные (англ. fuzzy). По умолчанию, такие строки не будут использоваться программой. Они нужны для удобства переводчика: часто проще базироваться на существующем, пусть и устаревшем, переводе, чем переводить всю фразу заново.

См. также

Ссылки

Heckert GNU white.svg
В Википедии есть портал
«Свободное ПО»

Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Gettext" в других словарях:

  • gettext — Developer(s) Various Stable release 0.18 (GNU gettext) / May 9, 2010 (GNU gettext) Operating system Cross platform Type Internationalization and localization …   Wikipedia

  • Gettext — est la bibliothèque GNU d internationalisation (i18n). Elle est couramment utilisée pour écrire des programmes multilingues. Sommaire 1 Processus 1.1 Programmeur 1.1.1 Commentaires pour les traducteurs …   Wikipédia en Français

  • Gettext — es la biblioteca GNU de internacionalización (i18n). Comúnmente se usa para escribir programas con interfaz en varios idiomas. La última versión es la 0.18. Contenido 1 Flujo de trabajo 1.1 Programador 1.2 Traductor 1.3 …   Wikipedia Español

  • Gettext — es la libreria GNU de internacionalizacion (i18n). Es comunmente usada para escribir programas multilenguaje. La ultima version es la 0.14 …   Enciclopedia Universal

  • Gettext — GNU gettext Entwickler: Das GNU gettext Team (Maintainer: Bruno Haible) Aktuelle Version: 0.17 (27. November 2006) Betriebssystem: Unix artige Betriebssysteme, Windows (s. Weblinks) …   Deutsch Wikipedia

  • gettext — GNU gettext Тип локализация программного обеспечения Автор Ульрих Дреппер Разработчики сообщество Написана на C Интерфейс командная строка Операционная система Linux и др …   Википедия

  • GNU gettext — gettext Développeur Projet GNU Dernière version 0.18.1 ( …   Wikipédia en Français

  • GNU gettext — Infobox Software name = gettext developer = The GNU Project latest release version = 0.17 latest release date = November 11, 2007 operating system = Cross Platform genre = Development, Translation license = LGPL (library), GPL (tools), GFDL/GPL… …   Wikipedia

  • GNU gettext — Entwickler Das GNU gettext Team (Maintainer: Bruno Haible) Aktuelle Version 0.18.1.1 (6. Juni 2010) Betriebssystem Unix artige Betriebssysteme, Windows (s. Weblinks) Kategorie …   Deutsch Wikipedia

  • GNU gettext — …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»