Gettext

Правильный заголовок этой статьи — gettext. Первая буква стала прописной из-за технических ограничений.

GNU gettext — библиотека проекта GNU для интернационализации. Основным отличием от других подобных инструментов является использование английских строк вместо специальных идентификаторов в тексте программы и поддержка множественного числа. Последняя версия на данный момент — 0.16.

Содержание

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

Кроме стандартного Си, поддерживаются также: C++, Objective-C, сценарии sh, сценарии bash, Python, Перл, PHP, GNU CLISP, Emacs Lisp, librep, GNU Smalltalk, Java, GNU awk, Паскаль, wxWidgets (с использованием класса wxLocale), YCP (язык YaST2), Tcl, Pike и R. Использование в большинстве языков схоже с использованием в Си.

Библиотека широко применяется в свободном ПО.

Интернационализация

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

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

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

преобразуется в

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

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

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

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

Переводчик создаёт на основе каталога .po-файл, содержащий перевод на конкретный язык. (Для этого можно использовать утилиту msginit.) В нём необходимо перевести все строки, например, для русского перевода:

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

Для редактирования .po-файлов существует множество инструментов, но в крайнем случае можно использовать простой текстовый редактор.

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

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

Поддержка существующих переводов

Обновление переводов с использованием новых и изменившихся строк, появившихся в исходном коде, осуществляется утилитой msgmerge. При этом, естественно, сохраняются все уже переведённые строки.

См. также

Ссылки

В Википедии есть портал
«Свободное ПО»
 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home