2010-05-25 7 views
8

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

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

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

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

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

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

"Project-Id-Version: ПРОЕКТ VERSION \ п" "Language-Team: en_US \ п"

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

Спасибо, Malcolm

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

+0

Почему вы не хотите использовать только утилиты GNU gettext, перенесенные в win32 для извлечения сообщений? http://gnuwin32.sf.net – bialix

+1

Hi Bializ: Установка GNU gettext utlities не удобна для наших клиентов, которые поддерживают свои собственные файлы PO. Еще одно преимущество утилит Babel заключается в том, что они работают по умолчанию в режиме UTF-8. У нас были некоторые проблемы с получением утилит GNU gettext, чтобы сделать это последовательно (они по умолчанию ASCIII). – Malcolm

ответ

8

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

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

+0

Привет Денис: Спасибо, что обратились за помощью.Я знаю параметр -k, но не могу найти способ сопоставить N_ или n_ с функцией ngettext, чтобы параметры этой функции обрабатывались как множественные числа (создание msgid_plural, msgid [0] и т. Д.) По сравнению с псевдонимом gettext. Я ценю ссылку на использование N_ в качестве перевода NULL. Это похоже на специфический синтаксис Python (?), А не на другие языковые реализации gettext, которые поддерживают N_ или n_ как псевдонима ngettext. – Malcolm

+0

Привет Денис: Ваша техника «-k n_: 1,2» работает отлично - спасибо вам большое! Для архивов: Мы решили использовать N_ vs. n_, чтобы следить за тем, какой внешний вид нравится стандарту deacto для аббревиатуры ngettext. – Malcolm

1

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

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

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

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

Смежные вопросы