Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

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

Описание

Цикл генерации и обновления переводов Gettext

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

В gettext есть поддержка множественного числа. Для этого в исходном коде программы используется специальная функция, и приводятся две строки — в единственном и множественном числе. При подстановке перевода на другой язык используется столько форм строки-перевода, сколько нужно для этого языка. Для этого в заголовке файла перевода должно быть специфичное для этого языка выражение для выбора по числу номера строки-перевода.

Библиотека gettext предполагает хранение перевода в файлах с расширениями .mo (англ. Machine Object, бинарный файл, удобный для чтения программой и специфичный для платформы) или .gmo (GNU .mo), .po (англ. Portable Object, человеко-читаемый файл перевода, не зависящий от платформы) и .pot (англ. PO template — каталог, заготовка файла .po для перевода на новый язык).[2] Кроме самих строк перевода, .po-файлы могут содержать комментарии переводчика и различные служебные пометки.

Для формирования и обновления этих файлов при изменении программы предполагается использование ряда утилит, входящих в библиотеку gettext.

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

Для начала перевода программы на конкретный язык переводчик создаёт .po-файл: копирует .pot-файл в нужное место и меняет в нём заголовок. Для этого можно использовать программу msginit. Готовый файл перевода конвертируется в .mo-файлы утилитой msgfmt.[2].

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

  • Poedit кроссплатформенный использует wxWidgets (при сохранении .po-файла пересобирает и соответствующий .mo -файл).
  • Lokalize (ранее kBabel) для KDE.
  • Gtranslator для GNOME.
  • Pootle машинный перевод в онлайн и инструмент управления переводами.
  • gted плагин для Eclipse IDE.
  • TM-database машинный перевод .po-файлов c помощью онлайн-переводчика и память переводов
  • В крайнем случае можно использовать простой текстовый редактор.

Кроме базовой реализации gettext для стандартного Си, существуют реализации аналогичного подхода для языков C++, Objective-C, сценариев sh/bash, Python, Perl, PHP, GNU CLISP, Emacs Lisp, librep, GNU Smalltalk, Java, Scala[3], GNU awk, Паскаль, wxWidgets (с использованием класса wxLocale), YCP (язык YaST2), Tcl, Pike и R, языков платформы Mono (пространство имён Mono.Unix), а также для фреймворка Qt. Часть этих языков поддерживается непосредственно упомянутыми выше утилитами.[2].

Использование в большинстве языков схоже с использованием в Си.

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

Для программиста

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

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

printf(gettext("Hello! My name is %s.\n"), name);

Обычно для уменьшения размера исходного кода и улучшения читаемости объявляют и используют короткий синоним функции #define _ gettext (символ подчёркивания). Таким образом, вызов преобразуется в

printf(_("Hello! My name is %s.\n"), name);

Для вышеприведённой строки в каталоге появится запись вроде этой, после соответствующей обработки командами xgettext и msginit:

#: src/name.c:36
msgid "Hello! My name is %s.\n"
msgstr ""

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

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

printf(ngettext("%d day ago", "%d days ago", $daysAgo), $daysAgo);

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

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

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

Затем он переводит строки в этом файле, например, для русского перевода:

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

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

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

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

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

Выражение для plural здесь пишется с использованием синтаксиса языка Си, и может опираться лишь на переменную n, которая обозначает выводимое число.

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

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

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

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

См. также

Примечания

  1. https://ftp.gnu.org/gnu/gettext/
  2. 1 2 3 Руководство GNU gettext Архивная копия от 5 декабря 2007 на Wayback Machine (англ.)
  3. makkarpov/scalingua: A simple gettext-like internationalization library for Scala. github.com. Дата обращения: 28 апреля 2016. Архивировано 24 апреля 2020 года.
  4. Так выглядит строка в файле перевода .po. Знак \n в конце строки означает перенос строки.

Ссылки

Эта страница в последний раз была отредактирована 27 мая 2022 в 20:45.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).