получить текст
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Оригинальный автор(ы) | Сан Микросистемс [ 1 ] |
---|---|
Разработчик(и) | различный |
Первоначальный выпуск | 1990 год [ 2 ] |
Стабильная версия | 0.22.5 [ 3 ] ![]() |
Репозиторий | различные на основе OpenSolaris и GNU gettext |
Операционная система | Кросс-платформенный |
Тип | Интернационализация и локализация |
Лицензия | Различные лицензии свободного программного обеспечения |
Веб-сайт | www ![]() |
В технике вычислительной gettext — это система интернационализации и локализации (i18n и l10n), обычно используемая для написания многоязычных программ в Unix-подобных компьютерных операционных системах . Одним из основных преимуществ gettext является то, что он отделяет программирование от перевода. [ 4 ] Наиболее часто используемая реализация gettext — GNU gettext . [ 5 ] выпущен проектом GNU Project в 1995 году. Библиотека времени выполнения — libintl . gettext предоставляет возможность использовать разные строки для любого количества форм множественного числа существительных, но эта функция не поддерживает грамматический род . Основными расширениями имен файлов, используемыми в этой системе, являются .POT (шаблон переносимого объекта), .PO (переносной объект) и .MO (машинный объект). [ 6 ]
История
[ редактировать ]Первоначально POSIX не предоставлял средств локализации сообщений. В конце 1980-х годов было выдвинуто два предложения: gettext Uniforum 1988 года и X/Open catgets 1989 года (XPG-3 § 5). Sun Microsystems реализовала первый gettext в 1993 году. [ 1 ] Разработчики Unix и POSIX так и не пришли к единому мнению относительно того, какой интерфейс использовать (другой вариант — катжеты X/Open), поэтому многие библиотеки C , включая glibc , реализовали оба. [ 7 ] По состоянию на август 2019 г. [update]Вопрос о том, должен ли gettext быть частью POSIX, все еще оставался предметом споров в Austin Group , несмотря на то, что его старый враг уже вышел из употребления. Выраженные опасения включали его зависимость от установленного в системе языкового стандарта ( глобальная переменная, подверженная проблемам многопоточности) и поддержку новых расширений языка C, включающих широкие строки. [ 8 ]
Проект GNU решил, что подход gettext с использованием сообщения как ключа более простой и дружелюбный. (Большинство других систем, включая catgets, требуют, чтобы разработчик придумывал «ключевые» имена для каждой строки.) [ 9 ] В 1995 году они выпустили GNU gettext, бесплатную программную реализацию системы. [ 2 ] Gettext, независимо от того, GNU он или нет, с тех пор был портирован на многие языки программирования. [ 10 ] Простота po и широкая поддержка редакторов даже привели к его использованию в непрограммном контексте для текстовых документов или в качестве промежуточного звена между другими форматами локализации, при этом появились такие конвертеры, как po4a (po для чего угодно) и Translate Toolkit, которые стали таким мостом. [ 11 ] [ 12 ]
Операция
[ редактировать ]Программирование
[ редактировать ]
Базовый интерфейс gettext — это gettext(const char*)
функция, которая принимает строку , которую пользователь увидит на исходном языке, обычно английском. Чтобы сэкономить время набора текста и уменьшить беспорядок в коде, эту функцию называют обычно _
: [ 13 ]
printf(gettext("My name is %s.\n"), my_name);
printf(_("My name is %s.\n"), my_name); // same, but shorter
gettext()
затем использует предоставленные строки в качестве ключей для поиска переводов и возвращает исходную строку, когда перевод недоступен. Это отличие от POSIX. catgets()
, [ 14 ] АмигаОС GetString()
, [ 15 ] или Microsoft Windows LoadString()
где используется программный идентификатор (часто целое число). Чтобы справиться со случаем, когда один и тот же текст на исходном языке может иметь разные значения, в gettext есть такие функции, как cgettext()
которые принимают дополнительную «контекстную» строку.
xgettext
запускается на исходниках для создания .pot
(шаблон переносимого объекта), который содержит список всех переводимых строк, извлеченных из источников. Комментарии, начинающиеся с ///
используются для подсказки переводчикам, хотя другие префиксы также можно настроить для дальнейшего ограничения области применения. Одним из таких распространенных префиксов является TRANSLATORS:
.
Например, входной файл с комментарием может выглядеть так:
/// TRANSLATORS: %s contains the user's name as specified in Preferences
printf(_("My name is %s.\n"), my_name);
xgettext
запускается с помощью команды:
xgettext -c /
Результирующий файл .pot с комментарием выглядит следующим образом (обратите внимание, что xgettext распознает строку как C на языке строку формата printf ):
#. TRANSLATORS: %s contains the user's name as specified in Preferences
#, c-format
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""
В сценарии оболочки POSIX gettext предоставляет gettext.sh
библиотеку, которую можно включить и которая предоставляет множество тех же функций, которые gettext предоставляет на аналогичных языках. [ 16 ] GNU bash также имеет упрощенную конструкцию. $"msgid"
для простой функции gettext, хотя ее предоставление зависит от библиотеки C. gettext()
функция. [ 17 ]
Перевод
[ редактировать ]Переводчик выводит .po
(Переносимый объект) из шаблона с помощью msginit
программа, затем заполняет переводы. [ 18 ] msginit
инициализирует переводы, поэтому, например, для перевода на французский язык команда для запуска будет такой: [ 6 ]
msginit --locale=fr --input=name.pot
Это создаст fr.po
. Затем переводчик редактирует полученный файл либо вручную, либо с помощью инструмента перевода, такого как Poedit , или Emacs с его режимом редактирования для .po
файлы. Отредактированная запись будет выглядеть так:
#: src/name.c:36
msgid "My name is %s.\n"
msgstr "Je m'appelle %s.\n"
Наконец, файлы .po компилируются с помощью msgfmt
в двоичный формат .mo
(Машинный объект). GNU gettext может использовать собственное расширение имени файла. .gmo
в системах с другой реализацией gettext. [ 19 ] Теперь они готовы к распространению вместе с пакетом программного обеспечения.
ГНУ msgfmt
также может выполнять некоторые проверки, относящиеся к строке формата , используемой языком программирования. Он также позволяет выводить данные в форматы, специфичные для конкретного языка, кроме MO; [ 20 ] X /Open : эквивалент gencat
.
На более поздних этапах процесса разработки msgmerge
может использоваться для «обновления» старого перевода до нового шаблона. Существует также msgunfmt
для обратной компиляции .mo
файлы и многие другие утилиты для пакетной обработки.
Бег
[ редактировать ]Пользователь в Unix системах типа устанавливает переменную среды LC_MESSAGES
, и программа будет отображать строки на выбранном языке, если есть .mo
файл для этого.
Пользователи вариантов GNU также могут использовать переменную среды. LANGUAGE
вместо. Ее основное отличие от переменной Unix заключается в том, что она поддерживает несколько языков, разделенных двоеточием, в качестве резервного варианта. [ 21 ]
Форма множественного числа
[ редактировать ]The ngettext()
Интерфейс учитывает количество существительных в строке. Как и в случае с конвенцией gettext()
, его часто называют псевдонимом N_
в практическом использовании. Рассмотрим пример кода:
// parameters: english singular, english plural, integer count
printf(ngettext("%d translated message", "%d translated messages", n), n);
Заголовок в ""
(пустая строка) запись PO-файла хранит некоторые метаданные, одна из которых представляет собой форму множественного числа, используемую в языке, обычно задаваемую с помощью тернарного оператора C-стиля . Предположим, мы хотим перевести на словенский язык :
msgid ""
msgstr ""
"..."
"Language: sl\n"
"Plural-Forms: 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 translated message"
msgid_plural "%d translated messages"
msgstr[0] "%d prevedenih sporočil"
msgstr[1] "%d prevedeno sporočilo"
msgstr[2] "%d prevedeni sporočili"
msgstr[3] "%d prevedena sporočila"
Справочные правила множественного числа для языков предоставлены консорциумом Unicode . [ 22 ] msginit также предварительно заполняет соответствующее правило при создании файла для одного конкретного языка. [ 18 ]
Реализации
[ редактировать ]Помимо C , gettext имеет следующие реализации: C# для ASP.NET. [ 23 ] [ 24 ] и для WPF , [ 25 ] Перл , [ 26 ] PHP , [ 27 ] Питон , [ 28 ] Р , [ 29 ] Скала , [ 30 ] и Node.js. [ 31 ]
пока нет GNU gettext имеет встроенную поддержку Objective-C, но поддержки языка программирования Swift . Обычно используемая реализация gettext на этих платформах Cocoa — POLocalizedString. [ 32 ] Команда Microsoft Outlook для iOS также предоставляет библиотеку LocalizedStringsKit с API-интерфейсом, похожим на gettext. [ 33 ]
См. также
[ редактировать ]
Ссылки
[ редактировать ]- ^ Jump up to: а б «О gettext» . gnu.org . Проверено 9 мая 2024 г.
- ^ Jump up to: а б «История gettext() и др.? — comp.unix.solaris» . Compgroups.net . Архивировано из оригинала 23 марта 2012 года . Проверено 3 апреля 2016 г.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ Бруно Хайбле (22 февраля 2024 г.). «Выпущен GNU gettext 0.22.5» . Проверено 7 марта 2024 г.
- ^ Мартиндейл, Линда (1 ноября 2002 г.). «Преодоление цифрового разрыва в Южной Африке | Linux Journal» . linuxjournal.com . Linux-журнал . Архивировано из оригинала 17 сентября 2019 года . Проверено 17 сентября 2019 г.
- ^ Тихомиров, Алексей Е (1 ноября 2002 г.). «Введение в интернационализацию программирования | Linux Journal» . linuxjournal.com . Linux-журнал . Архивировано из оригинала 17 сентября 2019 года . Проверено 17 сентября 2019 г.
- ^ Jump up to: а б «Как переводить с помощью файлов GetText PO и POT» . Icanlocalize.com . Проверено 3 апреля 2016 г.
- ^ «Перевод сообщений» . Библиотека GNU C.
- ^ «0001122: POSIX должен включать gettext() и его друзей — Austin Group Defect Tracker» . Трекер дефектов Austin Group .
- ^ «Взгляд программиста» . получить текст 0.10.35 . 30 апреля 1998 г.
- ^ «Утилиты GNU gettext: Список языков программирования» .
- ^ "по4а" . po4a.org .
- ^ «Основной набор инструментов для инженеров по локализации» . Инструментарий для перевода .
- ^ «Утилиты GNU gettext: как метки появляются в источниках» . www.gnu.org . Архивировано из оригинала 25 марта 2024 года . Проверено 3 апреля 2024 г.
- ^ «О кошках» . gnu.org . Проверено 24 октября 2017 г.
- ^ «Руководство по AmigaOS: Модули и пакеты Python — Wiki-документация AmigaOS» . Wiki.amigaos.net . Проверено 9 июля 2023 г.
- ^ «Утилиты GNU gettext: sh» .
- ^ «Утилиты GNU gettext: bash» .
- ^ Jump up to: а б «Утилиты GNU gettext: файлы PO» . Gnu.org . Проверено 3 апреля 2016 г.
- ^ «Файлы, передающие переводы» . Gnu.org . Проверено 22 апреля 2014 г.
- ^ «Вызов msgfmt» . Утилиты GNU gettext .
- ^ «Утилиты GNU gettext: переменные среды локали» . Gnu.org . Проверено 3 апреля 2016 г.
- ^ «Правила множественного числа языков» . unicode.org .
- ^ «Архив кода Google — долгосрочное хранилище для хостинга проектов Google Code» . Code.google.com . Проверено 3 апреля 2016 г.
- ^ «turquoiseowl/i18n: умная интернационализация ASP.NET» . GitHub.com . Проверено 3 апреля 2016 г.
- ^ «NGettext.Wpf — правильная поддержка интернационализации для WPF (через NGettext)» . Гитхаб . 16 августа 2019 г.
- ^ «libintl-perl — библиотека интернационализации Perl, которая призвана быть совместима с системой перевода сообщений Uniforum, реализованной, например, в GNU Gettext» . github.com . Проверено 14 сентября 2017 г.
- ^ «Получить текст» . php.net . Проверено 24 октября 2017 г.
- ^ «gettext – Службы многоязычной интернационализации – Документация Python 3.7.0» . docs.python.org . Проверено 21 сентября 2018 г.
- ^ «gettext: переводить текстовые сообщения» . rdrr.io. Проверено 13 ноября 2021 г.
- ^ "makkarpov/scalingua: простая библиотека интернационализации для Scala, похожая на gettext" . github.com . Проверено 28 апреля 2016 г.
- ^ «DanielBaulig/node-gettext: адаптация библиотеки Gettext Javascript Джошуа И. Миллера для node.js» . GitHub.com . Проверено 3 апреля 2016 г.
- ^ «hulab/POLocalizedString: gettext для iOS/OS X/watchOS/tvOS» . Гитхаб . хулаб. 19 сентября 2019 г.
- ^ «microsoft/LocalizedStringKit: создавайте файлы .strings непосредственно из вашего кода» . Гитхаб . Майкрософт. 12 февраля 2020 г.