Создание интернационализированных скриптов
После того как вы отметили строки в скрипте, которые нужно перевести, с помощью $"…", создайте файл-шаблон gettext командой
bash --dump-po-strings scriptname > domain.pot
domain — это домен сообщений. Это произвольная строка, используемая для идентификации файлов, необходимых gettext, например имя пакета или скрипта. Она должна быть уникальной среди всех доменов сообщений в системах, где вы устанавливаете переводы, чтобы gettext знал, какие переводы соответствуют вашему скрипту. Файл-шаблон используется для создания переводов на каждый целевой язык. По соглашению файл-шаблон имеет суффикс «.pot».
Скопируйте этот файл-шаблон в отдельный файл для каждого целевого языка, который вы хотите поддерживать (такие файлы называются файлами «PO» и имеют суффикс «.po»). Для файлов PO используются различные соглашения об именовании, но при переводе файла-шаблона на определённый язык сначала скопируйте его в файл, имя которого соответствует целевому языку и заканчивается суффиксом «.po». Например, испанские переводы строк будут храниться в файле с именем «es.po», а чтобы начать работу с доменом сообщений с именем «example», выполните
cp example.pot es.po
В конечном счёте файлы PO часто именуются domain.po и устанавливаются в каталоги, содержащие несколько файлов переводов для определённого языка.
Какое бы соглашение об именовании вы ни выбрали, строки в файлах PO необходимо перевести на соответствующие языки. Это нужно сделать вручную.
Когда переводы и файлы PO будут готовы, воспользуйтесь инструментами gettext для создания так называемых файлов «MO» — скомпилированных версий файлов PO, которые инструменты gettext используют для эффективного поиска переводов. Файлы MO также называются файлами «каталога сообщений». Для этого используется программа msgfmt. Например, если у вас есть файл с испанскими переводами, выполните
msgfmt -o es.mo es.po
чтобы создать соответствующий файл MO.
Создав файлы MO, решите, куда их установить, и используйте переменную оболочки TEXTDOMAINDIR, чтобы сообщить инструментам gettext, где они находятся. При установке файлов MO обязательно используйте для их именования тот же домен сообщений, что и для файлов PO.
Пользователи смогут выбрать нужный язык с помощью переменных оболочки LANG или LC_MESSAGES.
Присвойте переменной TEXTDOMAIN домен сообщений скрипта. Как указано выше, домен сообщений используется для именования файлов переводов.
Вы или, возможно, ваши пользователи задаёте для переменной TEXTDOMAINDIR имя каталога, в котором хранятся файлы каталогов сообщений. Если вы устанавливаете файлы сообщений в стандартный системный каталог, задавать эту переменную не нужно.
Каталог, в котором хранятся файлы каталогов сообщений, различается в разных системах. В некоторых используется каталог сообщений, выбранный переменной оболочки LC_MESSAGES. В других имя каталога сообщений формируется из значения переменной оболочки TEXTDOMAIN, возможно, с добавлением суффикса «.mo». Если вы используете переменную TEXTDOMAIN, возможно, потребуется задать для переменной TEXTDOMAINDIR расположение файлов каталогов сообщений, как описано выше. Часто обе переменные используют таким образом: $TEXTDOMAINDIR/$LC_MESSAGES/LC_MESSAGES/$TEXTDOMAIN.mo.
Если вы используете последнее соглашение и хотите сохранить каталоги сообщений с переводами на испанский (es) и эсперанто (eo) в локальном каталоге, предназначенном для пользовательских файлов переводов, выполните
TEXTDOMAIN=example
TEXTDOMAINDIR=/usr/local/share/locale
cp es.mo ${TEXTDOMAINDIR}/es/LC_MESSAGES/${TEXTDOMAIN}.mo
cp eo.mo ${TEXTDOMAINDIR}/eo/LC_MESSAGES/${TEXTDOMAIN}.mo
После выполнения всех этих действий и установки файлов каталогов сообщений с скомпилированными переводами в нужное место пользователи смогут просматривать переведённые строки на любом из поддерживаемых языков, задав переменные среды LANG или LC_MESSAGES перед запуском скрипта.
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Creating-Internationalized-Scripts.html