Как переводить sh-сценарии

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
Строка 1: Строка 1:
[[Категория:Devel]]
[[Категория:Devel]]
[[Категория:Локализация]]
[[Категория:Локализация]]
-
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/КакПереводитьСценарииBash}}
 
-
== Как переводить сценарии bash ==
+
== Пометка локализуемых строк и получение .pot ==
-
Консольные скрипты, выводящие локализованные тексты в консоль, должны быть локализованы с помощью gettext.
+
=== Правильный способ ===
 +
gettext "An example"; echo
 +
eval_gettext "An example: \$VAR"; echo
 +
Далее
 +
$ xgettext -o program.pot program.sh
-
<div style="display: inline; color: red;">Небезопасный способ:</div> строки в скрипте должны быть в двойных кавычках, предварённых знаком '$', то есть выполнены так:
+
=== Небезопасный способ, к тому же работающий только в bash ===
-
<pre>echo $"An example: $PATH"</pre>
+
Только для справки!
-
Далее выполняем
+
-
<pre>$ bash --dump-po-strings program.sh >program.po</pre>
+
-
Переводим нужные строки.
+
-
<div style="display: inline; color: red;">Правильный способ:</div>
+
Предварить локализуемые строки в скрипте символом <tt>$</tt>:
-
<pre>gettext "An example"; echo</pre>
+
echo $"An example: $PATH"
-
или если требуется вычисление переменных.
+
Далее
-
<pre>eval_gettext "An example: \$PATH"; echo</pre>
+
$ bash --dump-po-strings program.sh > program.pot
-
Далее выполняем
+
-
<pre>$ xgettext -o program.po program.sh</pre>
+
-
Переводим нужные строки.
+
-
Компилируем переведённый файл сообщений
+
== Установка переводов ==
-
<pre>$ msgfmt -o program.mo program.po</pre>
+
-
Файл program.mo должен быть скопирован в <tt>/usr/share/locale/ru/LC_MESSAGES</tt> (ru — в зависимости от языка)
+
Компилируем переведённый файл сообщений
 +
$ msgfmt -o program.mo program-<lang>.po
 +
И копируем его в <tt>/usr/share/locale/<lang>/LC_MESSAGES</tt>
-
Сценарий должен начинаться со строк
+
== Использование переводов ==
-
<pre>. gettext.sh
+
-
TEXTDOMAIN=program
+
В начале скрипта:
-
TEXTDOMAINDIR='/usr/share/locale'
+
. gettext.sh
-
export TEXTDOMAINDIR TEXTDOMAIN</pre>
+
-
TEXTDOMAINDIR и так по умолчанию /usr/share/locale, так что его можно и опустить
+
 +
TEXTDOMAIN=program
 +
export TEXTDOMAIN
-
=== Смотри также ===
+
== Ссылки ==
-
* info gettext
+
* <tt>info gettext</tt>
* примеры в <tt>/usr/share/doc/gettext*</tt>
* примеры в <tt>/usr/share/doc/gettext*</tt>
* [http://www.gnu.org/software/gawk/manual/gawk.html#Internationalization локализация gawk-сценариев]
* [http://www.gnu.org/software/gawk/manual/gawk.html#Internationalization локализация gawk-сценариев]

Версия 10:32, 5 августа 2008


Содержание

Пометка локализуемых строк и получение .pot

Правильный способ

gettext "An example"; echo
eval_gettext "An example: \$VAR"; echo

Далее

$ xgettext -o program.pot program.sh

Небезопасный способ, к тому же работающий только в bash

Только для справки!

Предварить локализуемые строки в скрипте символом $:

echo $"An example: $PATH"

Далее

$ bash --dump-po-strings program.sh > program.pot

Установка переводов

Компилируем переведённый файл сообщений

$ msgfmt -o program.mo program-<lang>.po

И копируем его в /usr/share/locale/<lang>/LC_MESSAGES

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

В начале скрипта:

. gettext.sh


TEXTDOMAIN=program
export TEXTDOMAIN

Ссылки

 
Личные инструменты