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 "

#〜msgid "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>

Webページに移動すると、「HelloWorld」ではなく「Hello-World」という文字列が返されます。何が悪いのかわかりません。誰でも助けることができますか?

4

3 に答える 3

5

間違っている可能性がある、または説明から欠落している可能性があるいくつかのこと...

webapp2変換のデフォルトの「ドメイン」は「メッセージ」ではなく「メッセージ」であるため、入力したファイルが実際には「message.po」である場合は、それを変更する必要があります。

次に、変換は.poではなくコンパイルされた.moファイルで機能するため、コンパイル手順(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:16で、の先頭に置きましたmsgid "Hello-World"。次に、それを再コンパイルすると、機能します。

于 2013-01-19T20:32:06.690 に答える