Самый простой способ создания файлов локализации - PullRequest
21 голосов
/ 11 апреля 2009

В настоящее время я пишу приложение на Python, и мне нужно обеспечить его локализацию.

Я могу использовать gettext и прилагаемые к нему утилиты для генерации файлов .po и .mo. Но редактирование .po файлов для каждого языка, один за другим, кажется немного утомительным. Затем создание каталогов для каждого языка и генерация файлов .mo, один за другим, кажется излишним. Конечный результат примерно такой:

/en_US/LC_MESSAGES/en_US.mo
/en_CA/LC_MESSAGES/en_CA.mo
etc.

Я могу ошибаться, но, похоже, должен быть лучший способ сделать это. У кого-нибудь есть какие-либо инструменты, приемы или общие знания, которые я еще не нашел?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Чтобы быть немного яснее, я ищу что-то, что ускоряет процесс. поскольку это уже довольно легко. Например, в .NET я могу сгенерировать все строки, которые нужно перевести в файл Excel. Затем переводчики могут заполнить файл Excel и добавить столбцы для каждого языка. Затем я могу использовать xls2resx для генерации файлов языковых ресурсов. Есть ли что-нибудь подобное для gettext? Я понимаю, что могу написать скрипт для создания и чтения из csv и создания файлов - я просто надеялся, что что-то уже сделано.

Ответы [ 7 ]

29 голосов
/ 03 июля 2009

Я только что сделал это для проекта, над которым я работаю, для нас процесс такой:

Во-первых, у меня есть файл POTFILES.in, который содержит список исходных файлов, нуждающихся в переводе. На самом деле у нас есть два файла (например, admin.in и user.in), поскольку интерфейс администратора не всегда нуждается в переводе. Таким образом, мы можем отправлять переводчикам только файл, содержащий строки, которые видят пользователи.

Выполнение следующей команды создаст шаблон .pot из файла POTFILES.in:

.
xgettext --files-from=POTFILES.in --directory=.. --output=messages.pot

Запустите указанную выше команду из каталога po /, который должен быть подкаталогом вашего проекта и содержать файл POTFILES.in. Файл .pot имеет тот же формат, что и файл .po, но это шаблон, не содержащий переводов. Вы создаете новый шаблон всякий раз, когда в ваши исходные файлы добавляются новые переводимые строки.

Чтобы обновить уже переведенные .po файлы и добавить в них новые строки, выполните:

msgmerge --update --no-fuzzy-matching --backup=off da.po messages.pot

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

Наконец, запустите msgfmt для создания файлов .mo из файлов .po:

msgfmt nl.po --output-file nl.mo

Конечно, вы не захотите запускать это вручную каждый раз, поэтому создайте несколько сценариев (или, предпочтительно, один или несколько файлов Makefile), чтобы сделать это для вас.

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

6 голосов
/ 25 февраля 2012

Вы можете использовать Transifex , используемый довольно многими проектами Python (Django, Mercurial). Он имеет веб-редактор и клиент командной строки для автоматизации, а также поддерживает .NET, если это может помочь.

Отказ от ответственности: я руководитель проекта Transifex.

4 голосов
/ 11 апреля 2009

Это ускользает от меня, как вы хотите добиться реального перевода без редактирования файлов .po для каждого языка? Магия

Редактировать (после комментария) - как автоматизировать генерацию .po файлов:

Я не использую Gettext, но со страницы вики похоже, что вам нужно всего лишь позвонить

msginit --locale = xx --input = name.pot

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

3 голосов
/ 31 мая 2009

Вы можете попробовать Translate Toolkit для различных преобразований po файлов (например, po2csv). Дочерние проекты Pootle позволяют управлять переводами через Интернет.

3 голосов
/ 11 апреля 2009

Используйте скрипты. Предположим, ваш исходный код находится в каталоге $ SRC, поэтому создайте каталог $ SRC / po для файлов i18n (pot, po, mo и т. Д.). Затем создайте файл $ SRC / po / POTFILES.in, где укажите путь к файлам исходного кода с помощью вызовов функций gettext. Это может выглядеть так:

[encoding: UTF-8]
./main.cpp
./plugins/list.cpp

Теперь вы можете использовать следующие команды (внутри директории $ SRC):

Для обновления мастер-файла messages.pot:

intltool-update --pot --gettext-package=messages --verbose

Для объединения изменений из messages.pot в файл fr.po, например:

msgmerge -U fr.po messages.pot

Для создания файла mo используйте команду:

msgmerge -o - fr.po messages.pot | msgfmt -c -o fr/LC_MESSAGES/programname.mo -

Конечно, каталог fr / LC_MESSAGES / должен быть создан до этого вызова, вы также можете удалить существующий файл fr / LC_MESSAGES / programname.mo перед выполнением

Чтобы ускорить процесс, поместите все такие команды, например, в соответствующие .sh-файлы.

2 голосов
/ 31 мая 2009

Мое предложение: django-rosetta , которое предоставляет вам веб-интерфейс для редактирования ваших переводов. Django вообще не нуждается в вашем приложении, вы просто используете его для онлайн-редактирования .PO.

Еще один интересный новый сайт для перевода, который, как мне кажется, был создан с использованием Django / Pinax, - это Transifex , хотя я не уверен, позволяет ли он напрямую редактировать файлы .PO.

2 голосов
/ 11 апреля 2009

Я использую poEdit для переводов.

...