У меня этот сайт работает сверху с Tornado и его движком шаблонов, который я хочу интернационализировать, поэтому я подумал об использовании gettext, чтобы помочь мне в этом.Ошибка при переводе шаблона Tornado с gettext
Поскольку мой сайт уже на португальском языке, мой файл message.po (шаблон) имеет все MsgID это находится в португальском, а также (пример):
#: base.html:30 base.html:51
msgid "Início"
msgstr ""
Он был создан с: зная искомых
xgettext -i *.html -L Python --from-code UTF-8
Позже я использовал Poedit, чтобы сгенерировать файл перевода en_US.po, а затем скомпилировать его как en_US.mo. Хранится в моей папке перевода:
translation/en_US/LC_MESSAGES/site.mo
До сих пор, так хорошо.
Я создал действительно простой RequestHandler, который будет отображать и возвращать переведенный сайт.
import os
import logging
from tornado.web import RequestHandler
import tornado.locale as locale
LOG = logging.getLogger(__name__)
class SiteHandler(RequestHandler):
def initialize(self):
locale.load_gettext_translations(os.path.join(os.path.dirname(__file__), '../translations'), "site")
def get(self, page):
LOG.debug("PAGE REQUESTED: %s", page)
self.render("site/%s.html" %page)
Насколько я знаю, что должно работать отлично, но почему-то я столкнулся некоторые проблемы:
1 - Как я могу сказать, что мой Торнадо шаблон имеет свой текст на португальском языке, поэтому он не будет пойти искать язык, который у меня нет?
2 - При запросе сайта с en_US locale он загружается нормально, но когда Tornado собирается переводить, он выдает исключение для кодирования.
TypeError: not all arguments converted during string formatting
ERROR:views.site:Could not load template
Traceback (most recent call last):
File "/Users/ademarizu/Dev/git/new_plugin/site/src/main/py/views/site.py", line 20, in get
self.render("site/%s.html" %page)
File "/Users/ademarizu/Dev/virtualEnvs/execute/lib/python2.7/site-packages/tornado/web.py", line 664, in render
html = self.render_string(template_name, **kwargs)
File "/Users/ademarizu/Dev/virtualEnvs/execute/lib/python2.7/site-packages/tornado/web.py", line 771, in render_string
return t.generate(**namespace)
File "/Users/ademarizu/Dev/virtualEnvs/execute/lib/python2.7/site-packages/tornado/template.py", line 278, in generate
return execute()
File "site/home_html.generated.py", line 11, in _tt_execute
_tt_tmp = _("Início") # site/base.html:30
File "/Users/ademarizu/Dev/virtualEnvs/execute/lib/python2.7/site-packages/tornado/locale.py", line 446, in translate
return self.gettext(message)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gettext.py", line 406, in ugettext
return self._fallback.ugettext(message)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gettext.py", line 407, in ugettext
return unicode(message)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
Любая помощь?
А, я запускаю python 2.7 битв!
благодарит за вас за помощь! Ты спасатель жизни! = D – ademarizu