Книга: Искусство программирования на языке сценариев командной оболочки
Приложение E. Локализация
Приложение 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
Если система корректно настроена на русскую локаль, то пользователь, запустивший сценарий, будет видеть сообщения на русском языке.
#!/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.
- Часть 1. Введение
- Часть 2. Основы
- Часть 3. Углубленный материал
- Часть 4. Материал повышенной сложности
- Литература
- Приложение A. Дополнительные примеры сценариев
- Приложение B. Маленький учебник по Sed и Awk
- Приложение C. Коды завершения, имеющие предопределенный смысл
- Приложение D. Подробное введение в операции ввода-вывода и перенаправление ввода-вывода
- Приложение E. Локализация
- Приложение F. История команд
- Приложение G. Пример файла .bashrc
- Приложение H. Преобразование пакетных (*.bat) файлов DOS в сценарии командной оболочки
- Приложение I. Упражнения
- Приложение J. Авторские права
- Сноски из книги
- Содержание книги
- Популярные страницы
- Региональные настройки и локализация
- Глава 13 Интернационализация и локализация
- Приложение 9 Акт выполненных работ (к Договору на оказание информационных услуг)
- Приложение 21 Образец должностной инструкции начальника отдела по работе с сетевыми клиентами
- Приложение 19 Образец должностной инструкции мерчендайзера
- Приложение I Диаграммы взаимовлияния
- Приложение 10. Коды ошибок
- Приложение 1 Оптические процессоры
- Приложение 1 Тестирование ПК при включении
- Приложение 2 Интернет-ресурсы
- Приложение 3 Производители компьютерного оборудования в Интернете
- Приложение 4 Материнская плата, основные термины