Flask babel没有简单的翻译工作?

时间:2016-07-19 08:24:49

标签: python flask babel

好的我有以下应用:

babel.cfg

[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

露/的初始化的.py

babel = Babel()

def create_app(object_name):
  app = Flask(__name__)
  app.config.from_object(object_name)

  app.register_blueprint(main_blueprint)
  app.register_blueprint(category_blueprint)
  app.register_blueprint(item_blueprint)

  babel.init_app(app)
  db.init_app(app)
  return app


@babel.localeselector
def get_locale():
  return 'de'

露/控制器/ main.py

main_blueprint = Blueprint(
    'main',
    __name__,
    template_folder='../templates/main',
)

@main_blueprint.route('/debug')
def debug():
  print get_locale()
  return gettext('A simple string')

我运行了以下命令:

  1. pybabel extract -F babel.cfg -o messages.pot。
  2. pybabel init -i messages.pot -d translations -l de
  3. pybabel compile -d translations /
  4. 这就是我的项目结构:

    .
    |-- README.md
    |-- babel.cfg
    |-- fabfile.py
    |-- lucy
    |   |-- __init__.py
    |   |-- config.py
    |   |-- controllers
    |   |   |-- __init__.py
    |   |   |-- category.py
    |   |   |-- item.py
    |   |   `-- main.py
    |   |-- forms.py
    |   |-- models.py
    |   |-- static
    |   |   |-- css
    |   |   `-- js
    |   `-- templates
    |       |-- boilerplate
    |       |   |-- items.html
    |       |   `-- layout.html
    |       |-- category
    |       |   `-- show.html
    |       |-- item
    |       |   |-- index.html
    |       |   `-- show.html
    |       `-- main
    |           `-- signup.html
    |-- manage.py
    |-- messages.pot
    |-- requirements.txt
    |-- tests
    |   |-- __init__.py
    |   `-- test_models.py
    `-- translations
        `-- de
            `-- LC_MESSAGES
                |-- messages.mo
                `-- messages.po
    

    这些是翻译的结果:

    messages.pot

    # Translations template for PROJECT.
    # Copyright (C) 2016 ORGANIZATION
    # This file is distributed under the same license as the PROJECT project.
    # FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
    #
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: PROJECT VERSION\n"
    "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    "POT-Creation-Date: 2016-07-19 16:07+0800\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    "Language-Team: LANGUAGE <LL@li.org>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=utf-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Generated-By: Babel 2.3.4\n"
    
    #: lucy/controllers/main.py:20
    msgid "A simple string"
    msgstr ""
    

    翻译/ DE / LC_MESSAGES / message.po

    # German translations for PROJECT.
    # Copyright (C) 2016 ORGANIZATION
    # This file is distributed under the same license as the PROJECT project.
    # FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: PROJECT VERSION\n"
    "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    "POT-Creation-Date: 2016-07-19 16:07+0800\n"
    "PO-Revision-Date: 2016-07-19 16:07+0800\n"
    "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    "Language: de\n"
    "Language-Team: de <LL@li.org>\n"
    "Plural-Forms: nplurals=2; plural=(n != 1)\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=utf-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Generated-By: Babel 2.3.4\n"
    
    #: lucy/controllers/main.py:20
    msgid "A simple string"
    msgstr "german string berlin"
    

    翻译/ DE / LC_MESSAGES / message.mo

    ??,<=?M?A simple stringProject-Id-Version: PROJECT VERSION
    Report-Msgid-Bugs-To: EMAIL@ADDRESS
    POT-Creation-Date: 2016-07-19 16:07+0800
    PO-Revision-Date: 2016-07-19 16:07+0800
    Last-Translator: FULL NAME <EMAIL@ADDRESS>
    Language: de
    Language-Team: de <LL@li.org>
    Plural-Forms: nplurals=2; plural=(n != 1)
    MIME-Version: 1.0
    Content-Type: text/plain; charset=utf-8
    Content-Transfer-Encoding: 8bit
    Generated-By: Babel 2.3.4
    german string berlin
    

    当我访问/调试时,我发现我的语言环境是de。但是,我仍然看到A simple string正在输出。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

对我来说,解决方案是设置BABEL_TRANSLATION_DIRECTORIES变量。它包含一个字符串,其路径以';'分隔。

在我的配置中(只有一个位置):

BABEL_TRANSLATION_DIRECTORIES ='/ home / work / python / project / translations'

答案 1 :(得分:2)

我的答案与fmelan相同,但是我使用绝对路径:

ax.set_xlim(0.0,)

答案 2 :(得分:0)

从fmelan的答案扩展:如果您的translations目录与flask_app.py位于同一位置,那么您可以这样做:

app.config['BABEL_TRANSLATION_DIRECTORIES'] = './translations'

...,而不必担心绝对路径是否在应用程序运行的任何地方都可以使用。

对我来说,这很好地解决了将页面部署到PythonAnywhere时的怪异行为。

相关问题