Jump to content

получить текст

(Перенаправлено с GNU Gettext )

получить текст
Оригинальный автор(ы) Сан Микросистемс [ 1 ]
Разработчик(и) различный
Первоначальный выпуск 1990 год ; 34 года назад ( 1990 ) [ 2 ]
Стабильная версия
0.22.5 [ 3 ]  Отредактируйте это в Викиданных / 21 февраля 2024 г .; 6 месяцев назад ( 21 февраля 2024 г. )
Репозиторий различные на основе OpenSolaris и GNU gettext
Операционная система Кросс-платформенный
Тип Интернационализация и локализация
Лицензия Различные лицензии свободного программного обеспечения
Веб-сайт www .gnu .org /программное обеспечение /gettext /  Edit this on Wikidata

В технике вычислительной 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 г. Вопрос о том, должен ли 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. Экземпляр de.po слева показывает «обновление» переводов через msgmerge.

Базовый интерфейс 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 ]

См. также

[ редактировать ]
  1. ^ Jump up to: а б «О gettext» . gnu.org . Проверено 9 мая 2024 г.
  2. ^ Jump up to: а б «История gettext() и др.? — comp.unix.solaris» . Compgroups.net . Архивировано из оригинала 23 марта 2012 года . Проверено 3 апреля 2016 г. {{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  3. ^ Бруно Хайбле (22 февраля 2024 г.). «Выпущен GNU gettext 0.22.5» . Проверено 7 марта 2024 г.
  4. ^ Мартиндейл, Линда (1 ноября 2002 г.). «Преодоление цифрового разрыва в Южной Африке | Linux Journal» . linuxjournal.com . Linux-журнал . Архивировано из оригинала 17 сентября 2019 года . Проверено 17 сентября 2019 г.
  5. ^ Тихомиров, Алексей Е (1 ноября 2002 г.). «Введение в интернационализацию программирования | Linux Journal» . linuxjournal.com . Linux-журнал . Архивировано из оригинала 17 сентября 2019 года . Проверено 17 сентября 2019 г.
  6. ^ Jump up to: а б «Как переводить с помощью файлов GetText PO и POT» . Icanlocalize.com . Проверено 3 апреля 2016 г.
  7. ^ «Перевод сообщений» . Библиотека GNU C.
  8. ^ «0001122: POSIX должен включать gettext() и его друзей — Austin Group Defect Tracker» . Трекер дефектов Austin Group .
  9. ^ «Взгляд программиста» . получить текст 0.10.35 . 30 апреля 1998 г.
  10. ^ «Утилиты GNU gettext: Список языков программирования» .
  11. ^ "по4а" . po4a.org .
  12. ^ «Основной набор инструментов для инженеров по локализации» . Инструментарий для перевода .
  13. ^ «Утилиты GNU gettext: как метки появляются в источниках» . www.gnu.org . Архивировано из оригинала 25 марта 2024 года . Проверено 3 апреля 2024 г.
  14. ^ «О кошках» . gnu.org . Проверено 24 октября 2017 г.
  15. ^ «Руководство по AmigaOS: Модули и пакеты Python — Wiki-документация AmigaOS» . Wiki.amigaos.net . Проверено 9 июля 2023 г.
  16. ^ «Утилиты GNU gettext: sh» .
  17. ^ «Утилиты GNU gettext: bash» .
  18. ^ Jump up to: а б «Утилиты GNU gettext: файлы PO» . Gnu.org . Проверено 3 апреля 2016 г.
  19. ^ «Файлы, передающие переводы» . Gnu.org . Проверено 22 апреля 2014 г.
  20. ^ «Вызов msgfmt» . Утилиты GNU gettext .
  21. ^ «Утилиты GNU gettext: переменные среды локали» . Gnu.org . Проверено 3 апреля 2016 г.
  22. ^ «Правила множественного числа языков» . unicode.org .
  23. ^ «Архив кода Google — долгосрочное хранилище для хостинга проектов Google Code» . Code.google.com . Проверено 3 апреля 2016 г.
  24. ^ «turquoiseowl/i18n: умная интернационализация ASP.NET» . GitHub.com . Проверено 3 апреля 2016 г.
  25. ^ «NGettext.Wpf — правильная поддержка интернационализации для WPF (через NGettext)» . Гитхаб . 16 августа 2019 г.
  26. ^ «libintl-perl — библиотека интернационализации Perl, которая призвана быть совместима с системой перевода сообщений Uniforum, реализованной, например, в GNU Gettext» . github.com . Проверено 14 сентября 2017 г.
  27. ^ «Получить текст» . php.net . Проверено 24 октября 2017 г.
  28. ^ «gettext – Службы многоязычной интернационализации – Документация Python 3.7.0» . docs.python.org . Проверено 21 сентября 2018 г.
  29. ^ «gettext: переводить текстовые сообщения» . rdrr.io. ​Проверено 13 ноября 2021 г.
  30. ^ "makkarpov/scalingua: простая библиотека интернационализации для Scala, похожая на gettext" . github.com . Проверено 28 апреля 2016 г.
  31. ^ «DanielBaulig/node-gettext: адаптация библиотеки Gettext Javascript Джошуа И. Миллера для node.js» . GitHub.com . Проверено 3 апреля 2016 г.
  32. ^ «hulab/POLocalizedString: gettext для iOS/OS X/watchOS/tvOS» . Гитхаб . хулаб. 19 сентября 2019 г.
  33. ^ «microsoft/LocalizedStringKit: создавайте файлы .strings непосредственно из вашего кода» . Гитхаб . Майкрософт. 12 февраля 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1042c742c779c267944b06b5406c21b7__1719028200
URL1:https://arc.ask3.ru/arc/aa/10/b7/1042c742c779c267944b06b5406c21b7.html
Заголовок, (Title) документа по адресу, URL1:
gettext - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)