Разработки проекта PuppyRus > Интернационализация программ

Интернационализация (перевод). Теория, инструменты

(1/3) > >>

sfs:
Обобщил свой опыт перевода xpnstools в http://wiki.puppyrus.org/programming/intern
rodin.s - проверьте опытным глазом  ;)

QT

rodin.s:
Как-то всё сложно. Если бы я читал в первый раз - ничего-бы не понял. Я изначально использовал информацию из "Advanced Bush Scripring Guide".
Быстро не найду ссылку на эту страницу. Также что-то дополнил Барри, когда также начал использовать gettext. И недавно L18L дал эту ссылку, где также много полезной информации, которой я раньше не знал.
В принципе там всё просто.
Такую шапку всегда добавляю, иногда не задумываясь необходимости некоторых её частей. Например TEXTDOMAINDIR и так по умолчанию туда указывает. Вместо pupcontrol - имя mo-файла, который в этом каталоге будет находится для перевода этого файла. .gettext.sh также можно не указывать если не будет использоваться eval_gettext:


--- Код ---
export TEXTDOMAIN=pupcontrol # имя mo-файла
export TEXTDOMAINDIR=/usr/share/locale
export OUTPUT_CHARSET=UTF-8
. gettext.sh
--- Конец кода ---

Я использовал следующие способы добавления gettext в скрипт в зависимости от ситуации:

--- Код ---
$(gettext 'Hello world!')
`gettext \"Hello world! Can't do it!\" # если есть апостроф и одинарные кавычки не работают
--- Конец кода ---
И если сообщение в строгих кавычках:

--- Код ---
echo ' '$(gettext 'Hello world!')' '
--- Конец кода ---
Если в сообщении переменная:

--- Код ---
`eval_gettext \"Hello \\\$var world!\"`
--- Конец кода ---
Это основные приёмы, которые я долго использовал и не задумывался о других способах раз эти работали. Хотя другие способы тоже есть.
Барри подсказал простую штуку, как решить проблему с апострофом:

--- Код ---
$(gettext "Hello world! Can't do it")
--- Конец кода ---
Правда это сбивает с толку цветовую подсветку geany.
Ну и новый для меня синтаксис из ссылки выше, например для eval_gettext:

--- Код ---
eval_gettext "text \$variable again text"
eval_gettext 'text $variable again text'
--- Конец кода ---

После того, как скрипт отмечен или даже в процессе разметки использую:

--- Код ---
xgettext -L Shell PupControl -o - # чтобы посмотреть отмеченные строки в процессе работы
--- Конец кода ---
и

--- Код ---
xgettext -L Shell PupControl -o pupcontrol.pot # чтобы создать pot-файл - шаблон для перевода
--- Конец кода ---

Последнюю строку использую всё реже. Сейчас в Puppy есть Momanager, который сам находит скрипты с gettext (правда делает это долго - несколько минут), там можно будет выбрать нужный скрипт и он будет открыт в poedit для перевода (будет автоматически сгенерирован его po-файл и mo-файл будет автоматически помещён куда надо после окончания перевода).

Дальше использую poedit. Создаю на основе pot-файла русский po-файл с переводом и при его сохранении автоматически генерируется mo-файл, который копирую с учётом правильного имени, указанного в шапке, в /usr/share/locale/ru/LC_MESSAGES.
Полезная команда msgunfmt позволяет из mo-файла получить po-файл, если его нет в наличии. Как было сказано po-файл - это обычный текстовый файл - его можно редактировать в geany (poedit удобнее - есть проверка правописания и база данных переводов), mo-файл - это бинарный файл который используется в процессе работы и должен быть помещён в каталог для mo-файлов.

sfs:
Основная инфа - перевод буржуйской статьи. Сократил и упростил по максимуму.
Неужели и мой пример в конце сложен? Может его перенести в начало?
Ок. Вашу инфу чуть позже добавлю. Если есть идеи по переделке статьи - не молчите.
Mo-manager - будет работать только в puppy? Есть смысл с ним заморачиваться?

rodin.s:
Нет, пример в конце не сложен, но в начале не совсем понятно. Например, eval_gettext используется только если в сообщении есть переменная, а в начале он используется как основной пример. Я тоже находил статьи по интернационализации bash, которые были очень сложными и если бы я им следовал, но не перевёл бы ни одного скрипта.
MoManager можно использовать только в Puppy. 
Также есть ещё интересная штука - ngettext для перевода множественного числа. Нигде пока не довелось применить в bash, разве, что в Hardinfo, но там код C.

sfs:
Перекроил статью:
Свой пример перенес в начало.
Добавил ссылку на http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html#LOCALIZATION и форум
Хотел перенести Ваши варианты использования gettext из 2го поста, но засомневался - не запутать бы. Может хватит ссылки на этот пост...

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии