Программа для перевода файлов po

Обновлено: 02.07.2024

Несмотря на то, что мировая культура в лице Википедии и Пола Маккартни уверяет нас, что Mary had a little lamb, на территории одной восьмой части суши продолжают считать, что на самом деле «У Мэри был ягнёнок». Кто же на самом деле был у Мэри, и как записать это на разных языках мира? Попробуем выяснить это (а также понять, что думают по этому поводу японцы) вместе с нашим любимым Python-ом и встроенным в него модулем поддержки многоязычных переводов gettext.

Приступим

Начнём с того, что напомним, что библиотека gettext используется для перевода не только программ на Python, а на многих различных языках. Он позволяет использовать в нашей программе шаблоны фраз, которые можно переводить с помощью отдельных и независимых файлов перевода. В самой программе мы, как и прежде, выводим текст сразу на экран, на диск, в логи или ещё куда-нибудь, всего лишь пометив переводимые строки особым образом; библиотека gettext же позволяет взять эти переводимые строки, наборы файлов перевода, и, при наличии подходящего для текущего языка файла перевода, подставить нужную строку.

В Python доступ к механизмам библиотеки gettext осуществляется с помощью идущего в комплекте с Python-ом модуля gettext. Так что не будем путать систему gettext как таковую (внешнюю по отношению к Python-у и совершенно не требующуюся ему для работы сущность; тем не менее, в комплект которой входят удобные утилиты для работы с файлами gettext) и встроенный в Python модуль gettext.

name = _("Mary")
animal = _("lamb")

print _("%s had a little %s") % (name, animal)

При использовании модуля gettext принято помечать переводимые строки вызовом функции _() . Пока эта функция не определена (впрочем, никто не мешает нам временно определить что-нибудь наподобие _ = lambda x: x ), поэтому программа даже наверняка не сможет запуститься… но нам пока и не надо.

Вы уже, наверное, подумали, что сейчас мы будем создавать новый текстовый файл с ассоциациями, в котором надо будет не забыть указать все переводимые строки из программы? В нашем случае таких строк всего 3, но в серьёзной программе их может быть намного больше…

Шаблон перевода: .pot

… вы почти угадали. Создавать файл мы будем. Но при этом воспользуемся приятной возможностью системы gettext — анализом файлов с исходниками на предмет переводимых строк. Поскольку мы их благоразумно пометили вызовом функции _() ещё до того, как этот вызов стал всерьёз использовать gettext, теперь синтаксический анализатор может их быстро собрать.

Что это такое? Это шаблон для перевода всей нашей программы. Если у нас есть большая команда переводчиков, то мы можем дать этот шаблон каждому переводчику для каждого целевого языка, и он должен нам будет вернуть заполненный шаблон для его языка. Обычно шаблоны имеют расширение .pot, а заполненные файлы имеют расширение .po.

Синтаксис у файла достаточно прозрачный. Комментарии, пометки авторских прав на перевод, пары из оригинальных строк и переводов. Выкинем из файла всё лишнее, кроме строчки с «Content-Type:» и необходимых для перевода строк, укажем кодировку UTF-8 и напишем переводы:

Файл перевода: .po

msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"

msgid "Mary"
msgstr "Мэри"

msgid "lamb"
msgstr "ягнёнок"

msgid "%s had a little %s"
msgstr "У %s был маленький %s"

В нашем случае файл достаточно маленький и простой; будь он посложнее, было бы удобнее использовать специализированные редакторы .po-файлов, наподобие Poedit, или «специализированного редактора всего» Emacs.

Скомпилированный файл перевода: .mo

Итак, строки в нашей программе мы перевели. Зря, кстати. gettext направлен исключительно на перевод законченных готовых предложений, и перевод отдельных слов и шаблонов предложений в нём делать опасно… (например, gettext совершенно не поддерживает падежи и рода и кое-как поддерживает разве что различение единственного и множественного числа; так что, чтобы подставить вместо Мэри «Таню» или «Свету», придётся учитывать падеж для каждого возможного употребления исходного имени.) Ну да ладно — в нашем случае это не принципиально. Сейчас у нас задача в другом: подготовить файл перевода к использованию.

Использовать исходный текстовый файл было бы неудобно по соображениям производительности (для программ, в которых много переводимого текста), поэтому система gettext использует скомпилированные в специальный формат файлы. Для компиляции мы можем воспользоваться либо тулой msgfmt из комплекта gettext, либо msgfmt.py из комплекта Python (в дебианоподобных дистрибутивах она входит в состав пакета python2.5-examples). Воспользуемся второй:

Ага, видим файл mary.mo. В отличие от mary.po он уже явно не предназначен для ручного редактирования.

Структура каталогов и запуск программы

Если бы мы подготавливали программу к инсталляции в служебные директории, то мы бы создали примерно такую иерархию (в случае Debian linux): системный каталог /usr/share/locale, в нём подкаталоги для разных языков — ru, en и т.п.; в них — по каталогу LC_MESSAGES, а там уже — файл наподобие mary.mo (с максимально уникальным именем, чтобы не пересечься с другими программами). Но в нашем учебном случае мы просто сделаем подкаталог locale в нашем каталоге, создадим в нём подкаталоги ru/LC_MESSAGES, а в последний уже положим mary.mo.

Теперь наконец добавим в нашу программу поддержку gettext:

gettext.install('mary', './locale', unicode=True)

name = _("Mary")
animal = _("lamb")

print _("%s had a little %s") % (name, animal)

Что изменилось? Мы проимпортировали модуль gettext (ну, это очевидно). А ещё мы проинсталлировали в глобальное пространство программы функцию _(), которая для перевода строк в подкаталоге ./locale (второй аргумент) найдёт каталог с нашей текущей локалью (тот самый подкаталог ru), а в его подкаталоге LC_MESSAGES будет искать юникодный (третий аргумент) файл mary.mo перевода программы mary (первый аргумент).

Что имеется в виду под словом «проинсталлировали»? А то, что, после этого действия, мы можем импортировать другие модули нашей программы, и функция _() в них будет уже определена.

Запускаем нашу программу…

1:/tmp/mary> ./mary.py
У Мэри был маленький ягнёнок

Бонус

Согласно Google Translate, .po-файл для японского языка будет выглядеть примерно так:
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"

msgid "Mary"
msgstr "メアリー"

msgid "lamb"
msgstr "子羊"

msgid "%s had a little %s"
msgstr "%sの%sいた"

И для нормальной поддержки японского языка (помимо русского) нам придётся поменять последнюю строку кода на
print (_("%s had a little %s") % (name, animal)).encode('UTF-8')

Перевод темы WordPress на компьютере

В этом посте я попробую рассказать вам, дамы и господа, о том, как переводить темы/шаблоны WordPress на русский язык с помощью программы Poedit. К большому сожалению не все существующие шаблоны/темы для WordPress можно перевести на русский язык. Это прежде всего зависит от того, подготовил ли автор свою тему к переводу на различные языки или нет.

Быстро переводите темы и плагины WordPress

Перевод тем/шаблона WordPress с помощью редактора Poedit

Poedit (ранее — poEdit) — бесплатный и открытый кросс-платформенный инструмент редактирования каталогов локализации для gettext.

Если программа использует эту систему для её перевода на новый язык, достаточно сопоставить соответствие английскому термину из словаря программы термин нужного языка и поместить получившийся файл локализации в каталог программы, для чего собственно и предназначен Poedit.

Перевод тем/шаблона WordPress с помощью редактора Poedit

Настольное приложение Poedit

И так, после того как вы скачали нужную тему для перевода, сначала разархивируйте её, а затем найдите в ней папку languages:

tema-papka-languages

В ней содержатся файлы перевода темы на различные языки, а так же шаблон для перевода на любой другой язык. Название файла соответствует названию локализации конкретного языка. Для русского языка, это ru_RU:

fajl-ru_RU

Файлы перевода имеют расширение .po и .mo. Файлы .po содержат переведённые строки в текстовом формате. С этими файлами работает переводчик темы. Файлы .mo это те же строки, но в скомпилированом варианте. С этими файлами работает ядро WordPress для отображения перевода. После редактирования перевода в файле .po, его нужно скомпилировать в файл .mo, чтобы изменения вступили в силу. Программа Poedit делает это автоматически.

После запуска программы для создания нового перевода следует создать каталог из рот - файла через пункт меню Файл. Выберите файл .pot (или .po) из директории languages в вашей теме. Poedit попросит вас заполнить небольшую форму о переводе, после чего предложит вам сохранить ваш новый каталог. Сохраняйте его в той же директории languages с названием локализации, например ru_RU.po.

Для редактирования существующего перевода, достаточно открыть соответствующий файл .po.

Работать с редактором Poedit на мой взгляд достаточно просто — исходный текст слева, перевод справа. Для редактирования перевода щёлкните на соответствующую строку и введите новый перевод, внизу программы. При сохранении, Poedit автоматически скомпилирует ваш перевод и создаст соответствующий файл .mo.

programma-Poedit

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

Вот вроде и всё, о чём я хотел вам рассказать сегодня. До встречи, увидимся.

Преимущество платной версии в том, что программа предлагает несколько вариантов перевода, которые уже имеются в базе Poedit. Но обо все по порядку.

2. Установите и запустите программу.

Если вы решительно настроены переводить свою тему и вам это действительно нужно, тогда смело можете покупать полную версию.

Где же взять нужные файлы для перевода? Для этого у вас должен быть установлен FTP клиент типа FileZilla. Подключитесь и переходите в:

В разных шаблонах, название папки где находятся файлы для перевода, могут различаться. Ваша задача их найти.

В итоге вы должны будете добраться до файлов .mo, .po, .pot (см скриншот ниже):

FilleZilla -файлы для перевода темы

Что такое файлы .po .mo .pot?

Итак, чтобы закрепить вышесказанное, файл .POT это основа, как книга на английском языке, которую нужно перевести. Файл .PO, это как документ Word, куда вы записываете свой перевод, а файл .MO используется для того, чтобы WordPress смог прочитать ваш перевод.

Что делать, если вы не нашли файл с форматом .POT в своей теме? Для перевода также могут использоваться исходный файл .PO, например:

файлы могут быть названы просто default.mo и default.po и подразумеваться здесь будет именно английский язык, как главный. Т.е. вы можете начать перевод и из файла .PO.

Надеюсь, что с форматами удалось разобраться. Теперь перейдем непосредственно к практике и попробуем перевести что-нибудь.

Начало перевода с помощью Poedit.

Файлы для перевода мы нашли, теперь загрузим их и начнем перевод. Для этого сделайте следующее:

1. Перенесите файлы для перевода из FTP клиента на рабочий стол или в любую удобную для вас папку.

2. Запустите программу Poedit.

создать новый перевод в Poedit

файл с форматом pot

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

выбор языка на который будем переводить в Poedit

Итак, исходя из скриншота выше, мы имеем 2625 не переведенных слов и различных символов.

перевод текста в поедит

Выбираете более подходящий для вас вариант и переходите к следующим словам.

Также вы будете встречать слова, которые идут с различными знаками и символами, их не в коем случае нельзя удалять, чтобы в последствии все корректно продолжало свою работу. Пример:

перевод текста в поедит не удалять символы

  • Имя файла: ru_RU
  • Тип файла: Файлы перевода PO (*.po)

Файл .mo создается автоматически, т.е. на рабочем столе у вас должно появиться два одинаковых файла, один с форматом .po, второй с форматом .mo.

готовые файлы поедит



Windows 7


Windows 8


Windows 10

Главное окно

Свойства каталога

Окно настроек

О Программе

Основная информация о программе

Poedit - крайне полезная программа для тех, кто занимается переводом текста и локализацией веб-ресурсов. Внешне приложение напоминает текстовый редактор, разбитый на панели с исходным текстом и переводом. Инструменты и подсказки по работе здесь сосредоточены на боковой и верхней панелях и занимают совсем немного места на экране, что позволяет полностью сосредоточиться на процессе перевода. В общем, графическая оболочка у Poedit крайне простая и удобная.

В первую очередь данное решение заточено под локализацию сайтов. Этим обусловлена поддержка экспорта в готовые проекты формата HTML и тесная интеграция с движком Wordpress. В меню редактора даже есть отдельный пункт, позволяющий импортировать в рабочий проект все файлы, содержащие текст для перевода. Помимо HTML в программе используется также формат документов .po (собственно благодаря ему данный редактор получил свое название).

Из прочих полезных возможностей Poedit стоит отметить поддержку добавления заметок к переводам, быстрый импорт и экспорт данных, настраиваемое расположение панелей, создание закладок в проекте, минимальное использование системных ресурсов и обширный справочный файл (на английском языке). В общем, перед нами крайне удобное и, что немаловажно, совершенно бесплатное программное решение для осуществления переводов, которое особенно подходит для работы с Wordpress и каталогами gettext.

Читайте также: