gettext - gettext

редактировать
Программное обеспечение для интернационализации и локализации GNU
gettext
Автор (ы) оригинала Sun Microsystems
Разработчик (и)) различные
Первоначальный выпуск1990 г.; 30 лет назад (1990 г.)
Стабильный выпуск 0.21 / 27 июля 2020 г.; 2 месяца назад (27.07.2020)
Репозиторий на основе OpenSolaris и GNU gettext
Операционная система Кросс-платформенный
Тип Интернационализация и локализация
Лицензия Различные лицензии на бесплатное программное обеспечение
Веб-сайтwww.gnu.org / software / gettext /

В вычислениях, gettext - это система интернационализации и локализации (i18n и l10n), обычно используемая для написания многоязычных программ на Unix-подобных компьютерах операционных системах. Одним из основных преимуществ gettext является то, что он отделяет программирование от перевода. Наиболее часто используемая реализация gettext - это GNU gettext, выпущенная GNU Project в 1995 году. Библиотека времени выполнения - libintl . gettext предоставляет возможность использовать разные строки для любого количества форм множественного числа существительных, но он не поддерживает грамматический род.

Содержание
  • 1 История
  • 2 Операция
    • 2.1 Программирование
    • 2.2 Перевод
    • 2.3 Запуск
  • 3 Форма множественного числа
  • 4 Реализации
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
История

Изначально в POSIX не было средств локализации сообщений. В конце 1980-х были выдвинуты два предложения: Gettext Uniforum 1988 г. и X / Open 1989 г. (XPG-3 § 5). Sun Microsystems реализовала первый gettext в 1993 году. Разработчики Unix и POSIX никогда не договаривались, какой интерфейс использовать (другой вариант - это X / Open catgets), поэтому многие библиотеки C, включая glibc, реализовали оба. По состоянию на август 2019 года вопрос о том, должен ли gettext быть частью POSIX, все еще оставался предметом споров в Austin Group, несмотря на то, что его старый противник уже вышел из употребления. В число упомянутых проблем входили его зависимость от установленного системой языкового стандарта (глобальная переменная, подверженная проблемам с многопоточностью) и его поддержка новых расширений языка C с использованием широких строк.

GNU Проект решил, что подход gettext, использующий сообщение как ключ, проще и удобнее. (Большинство других систем, включая catgets, требует, чтобы разработчик придумывал «ключевые» имена для каждой строки.) Они выпустили GNU gettext, бесплатную реализацию системы в 1995 году. Gettext, GNU или нет., с тех пор был перенесен на многие языки программирования. Простота po и широкая поддержка редактора даже привели к его внедрению в непрограммных контекстах для текстовых документов или в качестве промежуточного звена между другими форматами локализации, с появлением таких преобразователей, как po4a (po для чего угодно) и Translate Toolkit, обеспечивающие такой мост. 4>

Операция

Программирование

Типичный рабочий процесс gettext. Экземпляр de.po слева показывает "обновление" переводов через msgmerge.

Базовым интерфейсом gettext является функция gettext (const char *), которая принимает string, который пользователь увидит на исходном языке, обычно английском. Чтобы сэкономить время ввода и уменьшить беспорядок в коде, эта функция обычно имеет псевдоним с на _:

printf (gettext ("Меня зовут% s. \ N"), my_name); printf (_ ("Меня зовут% s. \ n"), my_name); // то же самое, но короче

gettext ()затем использует предоставленные строки в качестве ключей для поиска переводов и вернет исходную строку, если перевод недоступен. В этом отличие от POSIX catgets(),AmigaOS GetString ()или Microsoft Windows LoadString (), где используется программный идентификатор (часто целое число). Чтобы справиться со случаем, когда один и тот же текст на исходном языке может иметь разные значения, gettext имеет такие функции, как cgettext (), которые принимают дополнительную строку «контекста».

xgettextзапускается в источниках для создания файла .pot(шаблон переносимого объекта), который содержит список всех переводимых строк, извлеченных из источников. Комментарии, начинающиеся с ///, используются для подсказок переводчикам, хотя другие префиксы также могут быть настроены для дальнейшего ограничения объема. Одним из таких распространенных префиксов является ПЕРЕВОДЧИКИ:.

. Например, входной файл с комментарием может выглядеть так:

/// ПЕРЕВОДЧИКИ:% s содержит имя пользователя, указанное в настройках printf (_ ("Мой имя% s. \ n "), my_name);

xgettextзапускается с помощью команды:

xgettext -c /

Результирующий файл.pot с комментарием выглядит следующим образом (обратите внимание, что xgettext распознает строку как C -язык printf строка формата):

#. ПЕРЕВОДЧИКИ:% s содержит имя пользователя, как указано в настройках #, c-формат #: src / name.c: 36 msgid "Меня зовут% s. \ N" msgstr ""

В сценарии оболочки POSIX , gettext предоставляет библиотеку gettext.sh, которую можно включить, которая предоставляет многие те же функции, что и gettext на аналогичных языках. GNU bash также имеет упрощенную конструкцию $ " msgid "для простой функции gettext, хотя это зависит от библиотеки C для предоставления функции gettext().

Перевод

Переводчик выводит .po(переносимый объект) из шаблона с помощью программы msginit, затем заполняет переводы. msginitинициализирует переводы так, например, для французского языкового перевода, команда для запуска будет выглядеть так:

msginit --locale = fr --input = name.pot

Будет создан fr.po. Затем переводчик редактирует полученный файл вручную или с помощью инструмента перевода, например, или Emacs с его режимом редактирования для файлов .po. Отредактированная запись будет выглядеть так:

#: src / name.c: 36 msgid "Меня зовут% s. \ N" msgstr "Je m'appelle% s. \ N"

Наконец,.po файлы компилируются с помощью msgfmtв двоичные файлы .mo(машинный объект). GNU gettext может использовать собственное расширение имени файла .gmoв системах с другой реализацией gettext. Теперь они готовы к распространению вместе с программным пакетом.

GNU msgfmtтакже может выполнять некоторые проверки, относящиеся к строке формата , используемой языком программирования. Он также позволяет выводить данные в языковые форматы, отличные от MO.

На более поздних этапах рабочего процесса разработки msgmergeможно использовать для «обновления» старого перевода на новый шаблон. Также существует msgunfmtдля обратной компиляции файлов .moи многие другие утилиты для пакетной обработки.

Запуск

Пользователь в системах типа Unix устанавливает переменную среды LC_MESSAGES, и программа отображать строки на выбранном языке, если для него есть файл .mo.

Пользователи вариантов GNU также могут использовать вместо этого переменную среды LANGUAGE. Его основное отличие от переменной Unix заключается в том, что он поддерживает несколько языков, разделенных двоеточием, для резервных вариантов.

Форма множественного числа

Интерфейс ngettext ()учитывает количество существительного в строке. Как и в случае с условным обозначением gettext (), на практике он часто называется псевдонимом N_. Рассмотрим пример кода:

// параметры: английский в единственном числе, английский во множественном числе, число целых чисел printf (ngettext («% d переведенное сообщение», «% d переведенных сообщений», n), n);

Заголовок в записи ""(пустая строка) файла PO хранит некоторые метаданные, одна из которых - форма множественного числа, используемая языком, обычно указываемая с использованием стиля C тернарный оператор. Допустим, мы хотим перевести словенский язык :

msgid "" msgstr "" "..." "Language: sl \ n" "Множественные формы: nplurals = 4; plural = (n% 100 = = 1? 1: n% 100 == 2? 2: n% 100 == 3 || n% 100 == 4? 3: 0); \ n "

Поскольку теперь существует четыре формы множественного числа, последняя po будет выглядеть так:

#: src / msgfmt.c: 876 #, c-format msgid "% d переведенное сообщение" msgid_plural "% d переведенное сообщение" msgstr [0] "% d prevedenih sporočil" msgstr [1] "% d преведено спорочило" msgstr [2] "% d prevedeni sporočili" msgstr [3] "% d prevedena sporočila"

Справочные правила множественного числа для языков предусмотрены консорциумом Unicode. msginit также предварительно заполняет соответствующее правило при создании файла для одного конкретного языка.

Реализации

Помимо C, gettext имеет следующие реализации: C # для ASP.NET и для WPF, Perl, PHP, Python, Scala и Node.js.

GNU gettext имеет встроенную поддержку Objective-C, но пока нет поддержки языка программирования Swift. Часто используемой реализацией gettext на этих платформах Какао является POLocalizedString. Команда Microsoft Outlook для iOS также предоставляет библиотеку LocalizedStringsKit с API-интерфейсом, подобным gettext.

См. Также
Викискладе есть носители, связанные с GNU gettext.
  • Free и open- портал исходного программного обеспечения
Ссылки
Внешние ссылки

Последняя правка сделана 2021-05-21 07:21:36
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте