Как создать интернационализированное приложение Google App Engine - PullRequest
12 голосов
/ 22 декабря 2009

Я хотел бы предоставить свой веб-сайт Python GAE на языке пользователя, используя только инструменты, доступные непосредственно в App Engine. Для этого я хотел бы использовать файлы gettext GNU (файлы .po и .mo).

Кто-нибудь успешно объединил файлы Python Google App Engine и gettext ? Если да, не могли бы вы указать, какие шаги вы использовали?

Я начал обсуждение в группе Google GAE , но не смог извлечь из него то, как я хотел бы это сделать: я не хочу добавлять внешние зависимости, такие как Babel (предлагается в обсуждении). Я хочу использовать простой ванильный Google App Engine, поэтому не нужно обновлять вручную Django или подобные вещи.

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

В качестве справочной информации, чтобы дать вам более подробную информацию о том, что я пытаюсь сделать, я хотел бы интернационализировать Issue Tracker Tracker , приложение с открытым исходным кодом, которое я разместил на Launchpad. Я планирую использовать платформу перевода Launchpad (объясняя, почему я хотел бы использовать .mo файлы). Вы можете взглянуть на исходный код в его ветке Bazaar (извините, нет ссылки из-за предела предотвращения спама stackoverflow для новых пользователей ...)

Спасибо за помощь в продвижении этого проекта!

Ответы [ 2 ]

6 голосов
/ 22 декабря 2009

Поскольку мои потребности были простыми, я использовал простой хак вместо (недоступного) gettext. Я создал файл со строковыми переводами, translate.py. Примерно так:

en={}
ru={}

en['default_site_title']=u"Site title in English"
ru['default_site_title']=u"Название сайта по-русски"

Затем в основном коде я определил функцию, которая возвращает словарь с переводами на наиболее подходящий язык из списка (используется первый, который имеет перевод или английский):

import translate

def get_messages(languages=[]):
    msgs=translate.en
    for lang in languages:
        if hasattr(translate,lang):
            msgs=getattr(translate,lang)
            break
    return msgs

Использование:

msgs = get_messages(["it","ru","en"])
hi = msgs['hello_message'] % 'yourname'

Я также определил вспомогательную функцию, которая извлекает список языков из заголовка Accept-Language.

Это не самое гибкое решение, но оно не имеет внешних зависимостей и работает для меня (в игрушечном проекте). Я думаю translate.py может быть сгенерировано автоматически из файлов gettext.

Если вы хотите увидеть больше, мой фактический источник - здесь .

4 голосов
/ 22 декабря 2009

Вы можете использовать инструмент интернационализации Django, как объяснено здесь .

Они также говорят, что не существует простого способа сделать это.

Я надеюсь, что это поможет вам:)

...