2
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),extensions=['jinja2.ext.i18n'], autoescape = True)
jinja_env.install_gettext_translations(i18n)

config['webapp2_extras.i18n'] = {
    'translations_path': 'locale',
    'template_path': 'views'
}

app = webapp2.WSGIApplication([
    ('/', MainController.MainPageHandler)
], config=config, debug=True)

在 messages.po 文件中。

"Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2013-01-19 19:26+0800\n" "PO-修订日期:2013-01-19 19:13+0800\n" "最后译者:全名 \n" "语言团队:en_US \n" "复数形式:nplurals=2;复数=(n ! = 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9 .6\n"

#~ msgstr "Hello-World"

#~ msgstr "Hello World"

在处理程序中:

from webapp2_extras import i18n

from webapp2_extras.i18n import gettext as _

class MainPageHandler(Handler.Handler):
    def get(self):
        locale = self.request.GET.get('locale', 'en_US')
        i18n.get_i18n().set_locale(locale)
        logging.info(locale)
        message = _('Hello-World')
        logging.info(message)
        self.render("main.html")

在 html 文件中:

<div id="main">

    {{ _("Hello-World") }}
</div>

当导航到网页时,它返回字符串“Hello-World”而不是“Hello World”。我不知道怎么了。任何人都可以帮忙吗?

4

3 回答 3

5

有几件事可能是错误的,或者可能只是描述中缺少...

webapp2 翻译的默认“域”是“messages”,而不是“message”,因此如果您键入的文件实际上是“message.po”,则需要更改。

其次,翻译工作在编译后的 .mo 文件上,而不是 .po 上,所以如果你还没有运行编译步骤 ( pybabel compile -f -d ./locale),你需要这样做。你应该有一个文件locale/en_US/LC_MESSAGES/messages.mo

于 2013-01-19T16:03:33.870 回答
3

谢谢,@tipsywacky,我对 jinja2、babel 和 GAE 有点迷茫,你的代码让我走上了正确的道路。

我想为其他“堆栈器”分享我的代码,您可以在其中欣赏一件奇怪的事情:不知道为什么,但我不需要设置配置变量来使所有工作正常。

import webapp2
import jinja2
import os
import logging
# Internacionalization functions
from webapp2_extras import i18n
from webapp2_extras.i18n import gettext as _
# Put here the path to the jinja templates, relative to the actual file
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "views"))),
        extensions=['jinja2.ext.i18n'],
        autoescape=False)
jinja_env.install_gettext_translations(i18n)


# This controller handles the generation of the front page.
class MainPage(webapp2.RequestHandler):
    def get(self):
        locale = self.request.get('locale', 'es_ES')
        i18n.get_i18n().set_locale(locale)
        logging.info(_('Hello-World'))
        template = jinja_environment.get_template('main.html')
        self.response.out.write(template.render())

app = webapp2.WSGIApplication([('/', MainPage)], debug=True)

仅使用此代码和您的 HTML 文件(以及已编译的 message.mo 文件):

<div id="main">
    {{ _("Hello-World") }}
</div>

我的应用程序会翻译日志记录文本和 HTML 文本。

太好了,我花了一整天的时间寻找一种本地化的方法,最后我得到了它。

我唯一不明白的是你的配置变量。为什么我不需要它?

于 2013-05-24T16:24:40.613 回答
2

好吧,弄清楚出了什么问题。

在 messages.po 文件中,我#: gettext_example.py:16msgid "Hello-World". 然后重新编译它,它就可以工作了。

于 2013-01-19T20:32:06.690 回答