2016-08-12 59 views
0

我已经将本站与Tornado及其模板引擎一起运行,我想要国际化,所以我想使用gettext来帮助我。使用gettext翻译龙卷风模板的错误

因为我的网站已经在葡萄牙,我message.po(模板)文件在葡萄牙所有MSGID的以及(例如):

xgettext -i *.html -L Python --from-code UTF-8 

#: base.html:30 base.html:51 
msgid "Início" 
msgstr "" 

它与产生了xgettext

后来我用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语言环境询问网站时,它加载正常,但是当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 btw!

回答

1

1 - 如何告诉Tornado我的模板具有葡萄牙语文本,因此它不会去寻找我没有的pt语言环境?

这是set_default_locale方法的用途。在启动时拨打tornado.locale.set_default_locale('pt')(或pt_BR等),告诉龙卷风你的模板源是葡萄牙语。

2 - 使用en_US语言环境询问网站时,它加载正常,但是当Tornado要翻译时,它会引发编码异常。

请记住,在Python 2中,包含非ascii字符的字符串需要标记为unicode。而不是_("Início"),请使用_(u"Início")

+0

非常感谢您的帮助!你是一个拯救生命的人! = d – ademarizu