Приложение G. Локализация
Возможность локализации сценариев Bash нигде в документации не описана.
Локализованные сценарии выводят текст на том языке, который
используется системой, в соответствии с настройками. Пользователь
Linux, живущий в Берлине (Германия), будет видеть сообщения на
немецком языке, в то время как другой пользователь, проживающий в
Берлине штата Мэриленд (США) -- на английском.
Для создания локализованых сценариев можно использовать
следующий шаблон, предусматривающий вывод всех сообщений на языке
пользователя (сообщения об ошибках, приглашения к вводу и
т.п.).
#!/bin/bash
# localized.sh
# Автор Stephane Chazelas, дополнил Bruno Haible
. gettext.sh
E_CDERROR=65
error()
{
printf "$@" >&2
exit $E_CDERROR
}
cd $var || error "`eval_gettext \"Can't cd to \$var.\"`"
read -p "`gettext \"Enter the value: \"`" var
# ...
bash$ bash -D localized.sh
"Can't cd to %s."
"Enter the value: "
Это список всех текстовых сообщений, которые подлежат
локализации. (Ключ -D выводит список строк в
двойных кавычках, которым предшествует символ
$, без запуска сценария на исполнение.)
bash$ bash --dump-po-strings localized.sh
#: a:6
msgid "Can't cd to %s."
msgstr ""
#: a:7
msgid "Enter the value: "
msgstr ""
Ключ --dump-po-strings в Bash напоминает
ключ -D, но выводит строки в формате
"po", с помощью утилиты
gettext.
|
Bruno Haible отмечает, что:
Начиная с версии gettext-0.12.2, вместо bash --dump-po-strings localized.sh,
рекомендуется использовать xgettext -o - localized.sh, потому что
xgettext . . .
1. понимает команды gettext и eval_gettext (тогда как
bash --dump-po-strings только свой синтаксис в виде
$"..." )
2. может извлекать комментарии программиста,
предназначенные для переводчика.
Такой код не привязан к определенной версии Bash и
может быть исполнен в Bash 1.x или других реализациях
/bin/sh.
|
Теперь построим файл language.po,
для каждого языка, на которые предполагается перевести сообщения
сценария. Например:
Файл ru.po сделан переводчиком, в оригинальном документе
локализация выполнена на примере французского языка
ru.po:
#: a:6
msgid "Can't cd to %s."
msgstr "Невозможно перейти в каталог %s."
#: a:7
msgid "Enter the value: "
msgstr "Введите число: "
Затем запустите msgfmt.
msgfmt -o localized.sh.mo
ru.po
Перепишите получившийся файл localized.sh.mo в каталог /usr/share/locale/ru/LC_MESSAGES и добавьте в
начало сценария строки:
TEXTDOMAINDIR=/usr/share/locale
TEXTDOMAIN=localized.sh
Если система корректно настроена на русскую локаль, то
пользователь, запустивший сценарий, будет видеть сообщения на
русском языке.
|
В старых версиях Bash или в других командных
оболочках, потребуется воспользоваться услугами утилиты
gettext, с ключом -s. В этом случае наш сценарий будет
выглядеть так:
#!/bin/bash
# localized.sh
E_CDERROR=65
error() {
local format=$1
shift
printf "$(gettext -s "$format")" "$@" >&2
exit $E_CDERROR
}
cd $var || error "Can't cd to %s." "$var"
read -p "$(gettext -s "Enter the value: ")" var
# ...
|
А переменные TEXTDOMAIN и TEXTDOMAINDIR, необходимо будет экспортировать в
окружение.
---
Это приложение написано Stephane Chazelas, и дополнено Bruno
Haible, ведущим разработчиком GNU gettext.
Назад |Содержание | Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|