Как-то всё сложно. Если бы я читал в первый раз - ничего-бы не понял. Я изначально использовал информацию из "Advanced Bush Scripring Guide".
Быстро не найду ссылку на эту страницу. Также что-то дополнил Барри, когда также начал использовать gettext. И недавно L18L дал эту ссылку (http://forum.slitaz.org/topic/i18n-rules-tips-tricks), где также много полезной информации, которой я раньше не знал.
В принципе там всё просто.
Такую шапку всегда добавляю, иногда не задумываясь необходимости некоторых её частей. Например 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-файлов.
чтоб приступить к переводу мне надо разобраться с паппи слако 5.60. Скорее всего буду переустанавливать, всю систему, так как программа переводчик momanager требует файл сохранения.
Все проще.
Подключаете devx
msgunfmt -o name_of_shell_script.po name_of_shell_script.mo
.po - редактируете как текст
msgfmt script.po -o /usr/share/locale/ru/LS_MESSAGES/script.mo
Вот и все ;)
http://wiki.puppyrus.org/programming/intern
Спасибо, я понял.
Получается, благодаря выше описанной схеме, я смогу переводить в любом текстовом редакторе, на любом устройстве..
Хоть на компе по 5 мин в день,
хоть на моём телефоне LG A390 с установленным текстовым редактором всё "незанятое время" (к примеру по дороге куда-нибудь).
Только не ясно, а где найти эти файлы которые Вы запросили для перевода? Поиском пройтись? Я прошёл. Файлы не найдены.
Да , основная работа - просто редактирование текста в любом редакторе
Есть более продвинутые спецредакторы (poedit), но жизнь они не упрощают
Если он будет не юниксовый - возможны нюансы с переводом строк и т.п (решаемо - расскажу)
.mo файлы находятся как правило в /usr/share/locale/ru/LC_MESSAGES/
В тексте программы должны быть конструкции $(gettext 'eng-txt или любой др. язык")
Если их нет - надо приводить к такому виду + (http://wiki.puppyrus.org/programming/intern#%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%BE%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0)
Т.е. указано где искать .mo
Если .mo другого языка есть - конвертируем в .po, правим в текст. редакторе на нужный язык. Всё
Не обязательно исходный текст должен быть англ. - любой