Интернационализация приложения Python 2.6 через Babel

Мы оцениваем Babel 0.9.5 [1] под Windows для использования с Python 2.6, и у нас есть следующие вопросы, на которые мы не смогли ответить, прочитав документацию или поискав в Google.

1) Я хотел бы использовать сокращение _ для обозначения ungettext. Есть ли консенсус по поводу того, следует ли использовать для этого n_ или N_?

n_, похоже, не работает. Babel не извлекает текст.

N_, похоже, работает частично. Babel извлекает текст так же, как и для gettext, но не форматирует для ngettext (отсутствует аргумент во множественном числе и msgstr [n].)

2) Есть ли способ установить начальные поля msgstr, как показано ниже, при создании файла POT?

Я подозреваю, что есть способ сделать это с помощью файлов cfg Babel, но мне не удалось найти документацию по формату файлов Babel cfg.

"Project-Id-Version: PROJECT VERSION \ n" "Language-Team: en_US \ n"

3) Есть ли способ сохранить "устаревшие" msgid / msgstr в наших файлах PO? Когда я использую команду обновления Babel, вновь созданные устаревшие строки помечаются префиксом # ~, но существующие устаревшие строки сообщений удаляются.

Спасибо, Малькольм

[1] http://babel.edgewall.org/


person Malcolm    schedule 25.05.2010    source источник
comment
Почему вы не хотите использовать только утилиты GNU gettext, портированные на win32, для извлечения сообщений? gnuwin32.sf.net   -  person bialix    schedule 25.05.2010
comment
Привет Bializ: Установка утилит GNU gettext не удобна для наших клиентов, которые поддерживают свои собственные файлы PO. Еще одним преимуществом утилит Babel является то, что они по умолчанию работают в режиме UTF-8. У нас были некоторые проблемы с тем, чтобы утилиты GNU gettext выполняли это последовательно (по умолчанию они используют ASCIII).   -  person Malcolm    schedule 25.05.2010


Ответы (2)


По умолчанию pybabel extract распознает следующие ключевые слова: _, gettext, ngettext, ugettext, ungettext, dgettext, _8 _, _ 9_. Используйте -k option, чтобы добавить других. N_ часто используется для NULL-переводов (также называемых отложенными переводами).

Обновление: параметр -k может отображать аргументы функции, которая должна быть помещена в каталог. Итак, если вы используете n_ = ngettext, попробуйте pybabel extract -k n_:1,2 ....

person Denis Otkidach    schedule 25.05.2010
comment
Привет Денис: Спасибо за помощь. Я знаю опцию -k, но не могу найти способ сопоставить N_ или n_ с функцией ngettext, чтобы параметры этой функции обрабатывались как множественное число (создание msgid_plural, msgid [0] и т. Д.) По сравнению с псевдонимом. из gettext. Я ценю ссылку на использование N_ в качестве перевода NULL. Это похоже на синтаксис, специфичный для Python (?), В отличие от реализаций gettext на других языках, которые поддерживают N_ или n_ в качестве псевдонимов ngettext. - person Malcolm; 25.05.2010
comment
Привет Денис: Ваш метод -k n_: 1,2 работает отлично - большое вам спасибо !! Для архивов: мы решили использовать N_ vs. n_, чтобы следовать тому, что похоже на промышленный стандарт defacto для аббревиатуры ngettext. - person Malcolm; 25.05.2010

Чтобы ответить на вопрос 2):

Если вы запускаете Babel через pybabel extract, вы можете установить Project-Id-Version с помощью параметров --project и --version.

Если вы запускаете Babel через setup.py extract_messages, то Project-Id-Version берется из раздачи (название проекта и версия в файле setup.py).

Оба способа также поддерживают параметры --msgid-bugs-address и --copyright-holder для установки метаданных POT.

person Cito    schedule 22.01.2012