Ok I have the following app:
[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
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_blueprint = Blueprint(
'main',
__name__,
template_folder='../templates/main',
)
@main_blueprint.route('/debug')
def debug():
print get_locale()
return gettext('A simple string')
I ran the following commands:
This is what my project structure looks like:
.
|-- 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
These are the results from translation:
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 <[email protected]>\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 ""
translation/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 <[email protected]>\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"
translation/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 <[email protected]>
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
When I visit /debug, I see that my locale is de
. However, I still see A simple string
being outputted. Any ideas why?
For me the solution was to set the BABEL_TRANSLATION_DIRECTORIES variable. It contains a string with paths separated by ';'.
In my config (only one location):
BABEL_TRANSLATION_DIRECTORIES = '/home/work/python/project/translations'
My answer is the same as fmelan's, but I use absolute path:
from flask import Flask
import os
base_dir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config["BABEL_TRANSLATION_DIRECTORIES"] = os.path.join(base_dir, "app/translation")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With