Подтвердить что ты не робот

Самый простой способ генерации файлов локализации

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

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

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

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

Спасибо заранее!

EDIT: Чтобы быть немного более ясным, я ищу что-то, что ускоряет процесс. так как это уже довольно легко. Например, в .NET я могу сгенерировать все строки, которые нужно перевести в файл excel. Затем переводчики могут заполнять файл excel и добавлять столбцы для каждого языка. Затем я могу использовать xls2resx для генерации файлов языковых ресурсов. Есть ли что-то подобное для gettext? Я понимаю, что я мог написать script для создания и чтения из csv и генерации файлов - я просто надеялся, что что-то уже сделано.

4b9b3361

Ответ 1

Я только что сделал это для проекта, над которым я работаю, для нас процесс выглядит следующим образом:

Во-первых, у меня есть файл 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), чтобы сделать это для вас.

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

Ответ 2

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

Отказ от ответственности: я возглавляю проект Transifex.

Ответ 3

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

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

Я не использую Gettext, но из wiki page похоже, вам нужно только позвонить

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

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

Ответ 4

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

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

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

Для обновления master-file 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 файлы, например.

Ответ 5

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

Ответ 6

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

Ответ 7

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

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