Более простой i18n для Python / Django - PullRequest
3 голосов
/ 06 августа 2010

Мой вопрос касается i18n в Python.Из того, что я понимаю, это включает в себя:

  • Создание файла сообщений для языка (ТОЛЬКО ОДИН?!).
  • в этом файле каждое сообщение будет иметь формат
    • English message here
    • Message en Francais ici (да, дерьмовый французский ..)
  • , затем скомпилируйте этот файл в другой более быстрый двоичный формат
  • повторите для всех других необходимых языков *
  • в коде приложения (Django). Используйте метод translate с английским (или по умолчанию) языком, который будет корректно переведен в зависимости от локали ... tr('English message Here')

Вероятно, я немного сбился с пути, но это кажется общим смыслом, верно?

Что мне интересно, есть ли более простой способ?Я имею в виду, что в мире Java-приложений вы настраиваете файлы пакетов сообщений в формате bundleName_locale.properties.В каждом из них у вас обычно есть отношение ключ к сообщению, например greeting = Hello World.. У вас может быть много разных файлов свойств для разных подразделов вашего сайта / приложения.Все файлы языковых стандартов являются иерархическими, и отсутствующие ключи в подчиненном языковом стандарте переходят к родителю и т. Д. Все это выполняется автоматически Java, настройка не требуется.

Есть ли что-нибудь подобное в мире Django / Python?Это просто безумие, чтобы следовать по этому маршруту?Могу ли я подделать это, используя модуль в качестве замены для файла Java Proproties?Извините за скучный вопрос, и спасибо за любой вклад.

1 Ответ

13 голосов
/ 06 августа 2010

Хотя вы могли бы сделать это довольно просто, я бы спросил почему.

Как есть:

  1. i18n Django основан на gettext, что никогда не вызывало у меня проблем с производительностью.
  2. Вам не нужно создаватьфайл сообщений, Django сделает это за вас .
  3. Файлы сообщений, создаваемые Django, могут быть отправлены в виде текстового файла любому человеку для перевода.
    • Я потратил около 5 минут, объясняя кому-то, как их использовать, и через день получил фантастический перевод всего моего сайта.
  4. Отмечая строки в вашемКод очень прост.
    • _("My String") является нормальным для .py файлов с использованием from django.utils.translation import ugettext as _.
    • {% trans "My String" %} в ваших шаблонах.Опять же, довольно просто.
    • Выписывание bundle.getString("My String") кажется, что это быстро устареет.
  5. Вы можете легко включить i18n Django в свой JavaScript , если это необходимо.
  6. Есть веб-редакторы дляфайлы сообщений.
  7. Вам не нужно определять строку более одного раза, она объединяет все экземпляры в один токен во всем приложении.
    • Сколько раз вам нужно определить «Сохранить» в файлах свойств Java?
  8. Все еще в приятном текстовом файле, удобном для отслеживания версий.
  9. Если вы соберете вместе .properties -подобный способ определения ваших строк, вы все равно захотите скомпилировать их, чтобы вам не приходилось анализировать текстовый файл во время выполнения.

Пример пустого .po файла:

#: templates/inquiries/settings/new_field.html:12
#: templates/inquiries/settings/new_form.html:4
msgid "Save"
msgstr ""

Лично я не вижу причин беспокоиться о взломе замены решения, которое уже существует и работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...