Перевод программ


Переводы программ находятся в папке /usr/share/locale/ru/LC_MESSAGES в формате *.mo. Это сжатый архив, так как при попытке сжать его архиватором размер архива остаётся прежний. Для перевода используется программа Poedit или любой текстовый редактор, но предварительно нужно преобразовать файл в *.po. Сделать это можно командой:
msgunfmt path_to_file.mo > path_to_file.po

Например (в папку пользователя):
msgunfmt /usr/share/locale/ru/LC_MESSAGES/rox.mo > ~/rox.po

Правка

Программа Poedit открывает перевод в виде 2-х колонок, слева оригинал, справа перевод. Снизу выделенная строка готовая для редактирования. Вводим улучшение и сохраняем. Так как *.po является текстовым файлом, то править перевод можно открыв его в любом текстовом редакторе. Для переноса строк используется метасимвол \n, например для форматирования подсказок. Комментарий начинается с #

Описание PO-Files

Пример как выглядит перевод в текстовом редакторе
msgid "Name"
msgstr "Имя"
Здесь пример, если строка перевода содержит единственное или множественное число. Но это является внутренней поддержкой программы, нельзя просто добавить это в любом месте.
msgid "%'d hour"
msgid_plural "%'d hours"
msgstr[0] "%'d час"
msgstr[1] "%'d часа"
msgstr[2] "%'d часов"

Сохранение в *.mo

В Poedit выбрать пункт "Файл → Компилировать в формат MO..."

Зависимость от версии программы

Всвязи с обновлениями программы в ней могут появиться новые строки перевода. Программа делает запрос определённой строки, и если не находит его от оставляет непереведённый оригинал. Но это не сложно исправить, нужно всего лишь добавить непереведённую строку и её перевод и сохранить в *.mo.

Отсутствует перевод

Если программа не имеет перевода, т.е. файла *.mo в соответствующей папке, то ищем этот файл в других папках, например немецкий (de) или французский (fr), и соответственно перевести на русский и положить в папку с идентификатором "ru".

Сравнение переводов

Сравнить *.po можно программой сравнения, например Meld. Найти новые строки в переводе новой версии можно удалив переводы с помощью регулярного выражения msgstr(.+\n)+ и сравнить, в этом случае строки перевода не будут создавать ложные различия.