|
||||
|
Приложение E. ЛокализацияВозможность локализации сценариев Bash нигде в документации не описана. Локализованные сценарии выводят текст на том языке, который используется системой, в соответствии с настройками. Пользователь Linux, живущий в Берлине (Германия), будет видеть сообщения на немецком языке, в то время как другой пользователь, проживающий в Берлине штата Мэриленд (США) -- на английском. Для создания локализованых сценариев можно использовать следующий шаблон, предусматривающий вывод всех сообщений на языке пользователя (сообщения об ошибках, приглашения к вводу и т.п.). #!/bin/bash # localized.sh E_CDERROR=65 error() { printf "$@" >&2 exit $E_CDERROR } cd $var || error $"Can't cd to %s." "$var" read -p $"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. Теперь построим файл 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. |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Другие сайты | Наверх |
||||
|