Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Автор (ы) оригинала | Sun Microsystems |
---|---|
Разработчики) | разные |
Первый выпуск | 1990 [1] |
Стабильный выпуск | 0.21 [2] / 27 июля 2020 г . |
Репозиторий | различные на основе OpenSolaris и GNU gettext |
Операционная система | Кроссплатформенность |
Тип | Интернационализация и локализация |
Лицензия | Различные лицензии на бесплатное программное обеспечение |
Веб-сайт | www |
В вычислении , Gettext является интернационализации и локализации (i18n и l10n) система обычно используется для написания многоязычных программ на Unix-подобных компьютер операционных систем . Одним из основных преимуществ gettext является то, что он отделяет программирование от перевода. [3] Наиболее часто используемый реализация Gettext является ГНУ Gettext , [4] выпущен проекта GNU в 1995 году библиотека времени выполнения является libintl . gettext предоставляет возможность использовать разные строки для любого количества форм множественного числа существительных, но не поддерживает грамматический род.
История [ править ]
Первоначально POSIX не предоставлял средств локализации сообщений. В конце 1980-х было выдвинуто два предложения: Gettext Uniforum 1988 г. и X / Open 1989 г. (XPG-3 § 5). Sun Microsystems реализовала первый gettext в 1993 году. Разработчики Unix и POSIX никогда не договаривались, какой интерфейс использовать (другой вариант - это X / Open catgets), поэтому многие библиотеки C , включая glibc , реализовали оба. [5] По состоянию на август 2019 [update]года вопрос о том, должен ли gettext быть частью POSIX, все еще обсуждался в Austin Group , несмотря на то, что его старый противник уже вышел из употребления. Приведенные опасения включали его зависимость от установленного системой языкового стандарта ( глобальная переменнаяподвержены проблемам многопоточности) и его поддержка новых расширений языка C, включающих широкие строки. [6]
Проект GNU решил, что подход gettext, использующий сообщение как ключ, проще и удобнее. (Большинство других систем, включая catgets, требует, чтобы разработчик придумывал "ключевые" имена для каждой строки.) [7] Они выпустили GNU gettext, бесплатную реализацию системы в 1995 году. [1] Gettext, GNU или нет. , с тех пор был перенесен на многие языки программирования. [8] Простота po и широкая поддержка редакторов даже привели к их внедрению в непрограммных контекстах для текстовых документов или в качестве промежуточного звена между другими форматами локализации, с появлением таких конвертеров, как po4a (po для чего угодно) и Translate Toolkit, обеспечивающие такую возможность. мост. [9] [10]
Операция [ править ]
Программирование [ править ]
Базовый интерфейс gettext - это gettext(const char*)
функция, которая принимает строку, которую пользователь увидит на исходном языке, обычно на английском. Чтобы сэкономить время набора текста, а также для уменьшения кода помех, эта функция обычно псевдонимы в _
:
printf ( gettext ( "Меня зовут% s. \ n " ), my_name ); printf ( _ ( "Меня зовут% s. \ n " ), my_name ); // то же самое, но короче
gettext()
затем использует предоставленные строки в качестве ключей для поиска переводов и возвращает исходную строку, если перевод недоступен. В этом отличие от POSIX catgets()
, [11] AmigaOS GetString()
или Microsoft Windows, LoadString()
где используется программный идентификатор (часто целочисленный). Чтобы справиться с ситуацией, когда один и тот же текст на исходном языке может иметь разные значения, gettext имеет такие функции, cgettext()
которые принимают дополнительную строку «контекста».
xgettext
запускается в источниках для создания .pot
файла (Portable Object Template), который содержит список всех переводимых строк, извлеченных из источников. Комментарии, начинающиеся с ///
, используются для подсказок переводчикам, хотя другие префиксы также можно настроить для дальнейшего ограничения объема. Один из таких распространенных префиксов - TRANSLATORS:
.
Например, входной файл с комментарием может выглядеть так:
/// ПЕРЕВОДЧИКИ:% s содержит имя пользователя, как указано в настройках printf ( _ ( "Меня зовут% s. \ N " ), my_name );
xgettext
запускается с помощью команды:
xgettext -c /
Результирующий файл .pot с комментарием выглядит следующим образом (обратите внимание, что xgettext распознает строку как строку формата printf на языке C ):
#. ПЕРЕВОДЧИКИ:% s содержит имя пользователя, указанное в настройках #, c-format #: src / name.c: 36 msgid " Меня зовут% s. \ N" msgstr ""
В сценарии оболочки POSIX gettext предоставляет gettext.sh
библиотеку, которую можно включить, которая предоставляет многие те же функции, которые gettext предоставляет на схожих языках. [12] GNU bash также имеет упрощенную конструкцию $"msgid"
для простой функции gettext, хотя она зависит от библиотеки C для предоставления gettext()
функции. [13]
Перевод [ править ]
Переводчик извлекает .po
файл (переносимый объект) из шаблона с помощью msginit
программы, а затем заполняет переводы. [14] msginit
инициализирует переводы, поэтому, например, для французского перевода команда для запуска будет: [15]
msginit --locale = fr --input = name.pot
Это создаст fr.po
. Затем переводчик редактирует полученный файл вручную или с помощью инструмента перевода, такого как Poedit , или Emacs с его режимом редактирования .po
файлов. Отредактированная запись будет выглядеть так:
#: src / name.c: 36 msgid " Меня зовут% s. \ n" msgstr "Je m'appelle% s. \ n"
Наконец, файлы .po компилируются msgfmt
в двоичные .mo
файлы (машинные объекты). GNU gettext может использовать собственное расширение имени файла .gmo
в системах с другой реализацией gettext. [16] Теперь они готовы к распространению вместе с программным пакетом.
GNU msgfmt
также может выполнять некоторые проверки, относящиеся к строке формата, используемой языком программирования. Он также позволяет выводить в языковые форматы, отличные от MO; [17] X / Open эквивалент gencat
.
На более поздних этапах рабочего процесса разработки msgmerge
может использоваться для «обновления» старого перевода на новый шаблон. Также есть утилиты для msgunfmt
обратной компиляции .mo
файлов и множество других утилит для пакетной обработки.
Бег [ править ]
В системах типа Unix пользователь устанавливает переменную среды LC_MESSAGES
, и программа будет отображать строки на выбранном языке, если для этого есть .mo
файл.
Пользователи вариантов GNU также могут LANGUAGE
вместо этого использовать переменную среды . Его основное отличие от переменной Unix заключается в том, что она поддерживает несколько языков, разделенных двоеточием, для возврата. [18]
Форма множественного числа [ править ]
ngettext()
Интерфейс счет для подсчета существительного в строке. Как и в случае с условным обозначением gettext()
, N_
в практическом использовании он часто называется псевдонимом . Рассмотрим пример кода:
// параметры: английское единственное число, английское множественное число, целое число printf ( ngettext ( "% d переведенное сообщение" , "% d переведенное сообщение" , n ), n );
Заголовок в ""
(пустой строке) вхождении PO файл хранит некоторые метаданные, один из которых является форма множественного числа , что язык , используемые, как правило , задается с помощью C-стилем оператора трехкомпонентного . Допустим, мы хотим перевести на словенский язык :
MSGID "" выводе , "" "..." " Язык: сл \ п" " Plural-Forms: ? nplurals = 4; множественное число = (п% 100 == 1 1: п% 100 == 2 2: п% 100 == 3 || n% 100 == 4? 3: 0); \ n "
Поскольку теперь существует четыре формы множественного числа, окончательное по будет выглядеть так:
#: SRC / msgfmt.c: 876 #, C-формат MsgID "% d переведенное сообщение" msgid_plural "% D переведенных сообщения" вывод , [ 0 ] "% d prevedenih sporočil" вывод , [ 1 ] "% d prevedeno sporočilo" вывод , [ 2 ] "% d prevedeni sporočili" msgstr [ 3 ] "% d prevedena sporočila"
Правила множественного числа ссылок для языков предоставляются консорциумом Unicode . [19] msginit также предварительно заполняет соответствующее правило при создании файла для одного конкретного языка. [14]
Реализации [ править ]
В дополнение к C , gettext имеет следующие реализации: C # для ASP.NET [20] [21] и для WPF , [22] Perl , [23] PHP , [24] Python , [25] Scala , [26] и Node.js . [27]
GNU gettext имеет встроенную поддержку Objective-C, но пока нет поддержки языка программирования Swift . Часто используемой реализацией gettext на этих платформах Какао является POLocalizedString. [28] Группа разработчиков Microsoft Outlook для iOS также предоставляет библиотеку LocalizedStringsKit с API, подобным gettext. [29]
См. Также [ править ]
Викискладе есть медиафайлы, связанные с GNU gettext . |
- переводчик
- Poedit
- Translate Toolkit
- Virtaal
- Weblate
Ссылки [ править ]
- ^ a b "История gettext () и др.? - comp.unix.solaris" . Compgroups.net . Проверено 3 апреля 2016 года .
- ^ https://ftp.gnu.org/pub/gnu/gettext/
- ↑ Мартиндейл, Линда (1 ноября 2002 г.). «Преодоление цифрового разрыва в Южной Африке | Linux Journal» . linuxjournal.com . Linux Journal . Архивировано 17 сентября 2019 года . Проверено 17 сентября 2019 года .
- ^ Tykhomyrov, Olexiy Ye (1 ноября 2002). «Введение в программирование интернационализации | Linux Journal» . linuxjournal.com . Linux Journal . Архивировано 17 сентября 2019 года . Проверено 17 сентября 2019 года .
- ^ «Перевод сообщений» . GNU C Library .
- ^ «0001122: POSIX должен включать gettext () и друзей - Austin Group Defect Tracker» . Система отслеживания дефектов Austin Group .
- ^ "Взгляд программиста" . gettext 0.10.35 . 30 апреля 1998 г.
- ^ "Утилиты GNU gettext: Список языков программирования" .
- ^ "po4a" . po4a.org .
- ^ «Необходимый инструментарий для инженеров по локализации» . Перевести Toolkit .
- ^ "О котгетсах" . gnu.org . Проверено 24 октября 2017 года .
- ^ "Утилиты GNU gettext: sh" .
- ^ "Утилиты GNU gettext: bash" .
- ^ a b "Утилиты GNU gettext: PO-файлы" . Gnu.org . Проверено 3 апреля 2016 года .
- ^ «Как переводить с помощью GetText PO и POT файлов» . Icanlocalize.com . Проверено 3 апреля 2016 года .
- ^ «Файлы, передающие переводы» . Gnu.org . Проверено 22 апреля 2014 года .
- ^ "вызов msgfmt" . Утилиты GNU gettext .
- ^ «Утилиты GNU gettext: переменные среды локали» . Gnu.org . Проверено 3 апреля 2016 года .
- ^ "Языковые правила множественного числа" . unicode.org .
- ^ «Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code» . Code.google.com . Проверено 3 апреля 2016 года .
- ^ "turquoiseowl / i18n: Интеллектуальная интернационализация для ASP.NET" . GitHub.com . Проверено 3 апреля 2016 года .
- ^ «NGettext.Wpf - Правильная поддержка интернационализации для WPF (через NGettext)» .
- ^ "libintl-perl - Библиотека интернационализации для Perl, которая стремится быть совместимой с системой переводов сообщений Uniforum, реализованной, например, в GNU Gettext" . github.com . Проверено 14 сентября 2017 года .
- ^ "Gettext" . php.net . Проверено 24 октября 2017 года .
- ^ "gettext - Многоязычные службы интернационализации - Документация Python 3.7.0" . docs.python.org . Проверено 21 сентября 2018 года .
- ^ "makkarpov / scalingua: Простая библиотека интернационализации, подобная gettext для Scala" . github.com . Проверено 28 апреля 2016 года .
- ^ "DanielBaulig / node-gettext: Адаптация библиотеки Javascript Gettext Джошуа И. Миллера для node.js" . GitHub.com . Проверено 3 апреля 2016 года .
- ^ "hulab / POLocalizedString: gettext для iOS / OS X / watchOS / tvOS" . GitHub . хулаб. 19 сентября 2019.
- ^ «microsoft / LocalizedStringKit: Создавайте файлы .strings прямо из вашего кода» . GitHub . Microsoft. 12 февраля 2020.
Внешние ссылки [ править ]
- Официальный сайт GNU gettext