2016-08-12 60 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