Перевод приложений с поддержкой gettext

Описан процесс перевода приложений с помощью редактирования файла перевода (*.mo, *.po) в текстовом редакторе.

Статья находится в разработке!

В папке /usr/share/locale/ru/LC_MESSAGES (где ещё?) находятся файлы с расширением «.mo».

Технически, получается, что если в этой папке имеется файл, с таким же именем (обычно), как и программа, то программа автоматически становится русифицированная. Наша задача — поместить туда эти файлы.

Во-первых, стоит поискать файлы «mo» в бинарных пакетах на сайте разработчика. Как узнать этот сайт? Можно поискать информацию в разделе «About» каждой конкретной программы. Или поискать в Google.

Переходим на сайт разработчика. На сайте находим раздел «Download» и загружаем бинарный пакет или исходники. Очень желательно, чтобы совпадали версии установленной у вас программы и скачанной с сайта, иначе может потребоваться дополнительное «допиливание», зачастую сложное (придется обкатывать программу во всех режимах, открывать все ее окна и допускать все возможные ошибки в поисках непереведенных строк).

Остается «препарировать» скачанный бинарный пакет и вытащить из него «mo» (или вытащить «po» из тарбола с исходниками; что с ним делать дальше, рассмотрим потом). Существует несколько форматов пакетов, и для того, чтобы не заморачиваться с командами для распаковки, есть такое универсальное решение — Universal Extractor. Программа работает в Windows, она автоматически распознаёт формат файлов по их содержимому, понимает большое количество форматов пакетов, архивов, установщиков. В использовании для этих целей Windows нет ничего зазорного, если так удобнее, быстрее, и, к тому же, установлена лицензионная Windows с голографической наклейкой. Также можно попробовать архиватор PeaZip, он довольно всеяден (Дать ссылку на закачку пакета pet).

При переносе файлов из не-linux-разделов следите за правами доступа к файлам, они должны быть rw-r--r-- (читать имеют право все, записывать — владелец, исполнять — нет надобности). Писать (читай — заносить файлы) в папку с локалями позволено только root. (Похоже, это для Puppy совсем не актуально, т.к. пользователь всегда работает с правами root.)

Теперь о файлах «po». Вообще, в чём различие между «mo» и «po» («pot»)? Файлы «mo» больше подходят для машины, они бинарные и позволяют утилите gettext быстро найти перевод необходимой строки. Файлы «po» — текстовые, предназначены для переводчиков. В принципе, их можно править даже в любимом текстовом редакторе. Буква «t» в слове «pot» обозначает «template» — шаблон, файл с пустым переводом, содержит только строки, которые нужно перевести.

Для работы с этими файлами устанавливаем полный пакет gettext (ссылка на закачку пакета gettext, если данные команды (см. ниже) не поддерживаются «из коробки»).

По этой ссылке (http://www.mediafire.com/?sharekey=9bc26a6df26c9540aaca48175a79d1c3155b6e91b3604889d9ecd7d091ba63d2) я разместил все необходимые для работы пакеты f329

Теперь мы можем преобразовывать форматы:

из «po» в «mo»:

mgsfmt имя_файла.po -o имя_файла.mo

из «mo» в «po»:

mgsunfmt имя_файла.mo -o имя_файла.po

msgfmt и msgunfmt правильные команды. f329

Для правки файлов «po» рекомендую простой текстовый редактор LeafPad (или Geany), он может понадобиться нам для добавления в файл новых строк, требующих перевода. А, собственно переводом, комфортно заниматься в программе Poedit (устанавливаем — ссылка на закачку пакета Gettext).

При первом запуске Poedit пожелает познакомиться с вами — введите ваши имя и фамилию (обычно это пишется транслитом) и адрес электронной почты. Эта информация будет помещаться в каждый переводимый вами файл в строке «Last Translator» (последним этот файл переводил…). Не стесняйтесь, возможно, кто-то захочет связаться с вами по поводу переводов. Изменить эту информацию можно в любое время в Poedit в меню Правка — Установки.

Дальнейшие строки требуют серьезной переработки. Пример для Puppy нужно выбрать совершенно другой.

Допустим, к какой-то программе мы не нашли ни 'mo', ни 'po', и будем переводить ее самостоятельно. Такая программа — Sudoku Savant. Выполняем нашу работу от имени root. Заходим в папку с французской локалью /usr/share/locale/fr/LC_MESSAGES/ и видим там файл sudoku-savant.mo. Нажимаем F4, чтобы вызвать терминал в данной папке (если терминал еще не определен, выберите xterm). В окне терминала командуем:

msgunfmt sudoku-savant.mo -o sudoku-savant.po

Не забывайте активно пользоваться клавишей Tab для автоматического дополнения имени файла. Вводим первые три буквы имени «sud» и нажимаем Tab. Получившийся «po»-файл переносим в надежное место — в домашнюю папку, на флешку или раздел жесткого диска. Теперь нажатием на этот файл открываем его в Poedit. Сразу заходим в меню Каталог — Настройки, на вкладке «Информация о проекте» исправляем или вводим значения.

  • «Название проекта и версия»: пишем «Sudoku Savant 1.2.1» (версию и название узнаём обычно из Help — About).
  • «Команда» и «E-mail адрес команды» — я переводчик-одиночка, поэтому — пусто.
  • «Язык» — обязательно выбираем «Russian» из списка.
  • «Страна» — я оставляю поле пустым, подразумевая тем, что этот перевод подойдет для русскоговорящих из любой страны.
  • «Кодировка» — utf-8 — хороший выбор, тем более, выбирать-то особо и не из чего.
  • «Кодировка исходного кода» — можно оставить пустой, т.к. исходный код обычно английский, и он одинаков в разных кодировках.
  • «Формы множественного числа» — если переводимая программа использует множественное число (например, 1 минута, 2 минуты, 5 минут), то обязательно введите в это поле такую хитрую строку для русского языка:
    nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);

Теперь можем заняться, собственно, переводом. На верхней панели кнопки «Открыть», «Сохранить», неактивная кнопка «Обновить», кнопка с облаком «Неточный перевод», «Комментарий», «Во весь экран». Основное пространство занимают строки. Непереведенные и неточно переведенные строки Poedit автоматически помещает вверх списка. Слева помещается особый значок для свежих и автоматических правок.

У нас теперь есть небольшое преимущество. Мы можем переводить как с английского, так и с французского языка. Хочу сказать пару слов о кавычках. Англичане используют `такие' кавычки, русские и французы — «такие», а немцы — »такие«. Не будем оригинальничать, и применим наши родные кавычки «лапками», как и положено. Как же их ввести с клавиатуры? Очень просто!

Переводим все строки. Сохраняем. В той же папке у нас появится файл с расширением «mo». Копируем его в папку с локалями /usr/share/locale/ru/LC_MESSAGES. Запускаем программу: Меню — Игры — Исследователь судоку. Проверяем качество нашего перевода. Возможно, где-то нужно перевести по-другому. Ведь самое главное при переводе — перевести смысл, а не сделать дословный перевод. При необходимости возвращаемся в Poedit и изменяем перевод. И так до тех пор, пока перевод не удовлетворит нас.

Кроме такого, ручного, перевода, Poedit позволяет производить и автоматический перевод на основе памяти переводов. Для этого перейдите Меню — Правка — Установки — Память переводов. Нужно выбрать русский язык и сгенерировать базу данных. Теперь можно будет нажать правую кнопку мыши на непереведенной строке и Poedit предложит готовые переводы похожих строк из просканированных «mo»-файлов. Также можно выбрать Меню — Каталог — Перевести автоматически, используя ПП.

Вот и вся премудрость в использовании Poedit. Он имеет еще несколько возможностей, но для меня они неактуальны.

Может случиться так, что мы добросовестно перевели все строки, а всё равно непереведенные строки остались в программе. Скорее всего, это говорит о том, что программа у нас новее, чем файл перевода. Можно попробовать добавить эти строки. Открываем «po» в LeafPad и видим простую структуру. После служебных заголовков строки идут попарно — оригинал и перевод. Вот так:

msgid="original"
msgstr="перевод"

Стоит отметить, что строки располагаются по алфавиту — так легче искать, но это не обязательное требование. Аккуратно прописываем нашу строку. Обратите внимание, что кавычка в тексте должна быть «экранирована» символом «бэкслэш», вот так: \», переход на новую строку — комбинация \n, табуляция — \t. Кроме того, в исходных строках могут стоять пробелы в начале или в конце строки. В общем, лучше получить «po» файл у разработчика, и соответствующей версии; но иногда можно обойтись «малой кровью» — решать вам.

На этом тема перевода не заканчивается. Еще я собираюсь написать о создании файлов .po из исходных текстов - в этом уже есть какой-никакой опыт, в таком случае никогда не будет непереведенных строк. Есть еще способ перевода непосредственно исходных текстов, но делать это стоит только тогда, когда данная программа не поддерживает (или частично не поддерживает) gettext. Мне кажется, именно так и переводили BusyBox (это почти все программки командной строки в одном файле) в PuppyRus, потому что в сети я не видел и намека на локализацию.

 
articles/gettext-translate.txt · Последние изменения: 01.03.2016 в 18:18 (внешнее изменение)
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki