Flask Babel
Implements i18n and l10n support for Flask. This is based on the Python babel module as well as pytz both of which are installed automatically for you if you install this library.
Documention
The latest documentation is available here.
It would be nice to be able to stash the current language somewhere and use another one for a while during a request execution.
The main use-case I see is sending out emails with Flask-Email. The email should be translated according to the recipient's language and not the current user's language.
Something like:
from flaskext.babel import stash, unstash
# do stuff with current user's language
print _('foo')
# Now switch to th recipient language
stash(new_lang=recipient.language)
send email with i18n tags
unstash()
# Now the language is back to the current user's lang
Well the API is terrible, but you get the idea..
This allows to specify in which folder the translations should be looked for instead of having it hardcoded (still defaults to "translations").
This is done either via a folder param passed to the constructor or via the BABEL_TRANSLATIONS_FOLDER configuration variable.
TypeError is being thrown:
$ pybabel update -i messages.pot -d translations/
updating catalog 'translations/en/LC_MESSAGES/messages.po' based on 'messages.pot'
Traceback (most recent call last):
File "/home/georg/env/main/bin/pybabel", line 9, in <module>
load_entry_point('Babel==1.3', 'console_scripts', 'pybabel')()
File "/home/georg/env/main/lib/python3.3/site-packages/babel/messages/frontend.py", line 1151, in main
return CommandLineInterface().run(sys.argv)
File "/home/georg/env/main/lib/python3.3/site-packages/babel/messages/frontend.py", line 665, in run
return getattr(self, cmdname)(args[1:])
File "/home/georg/env/main/lib/python3.3/site-packages/babel/messages/frontend.py", line 1130, in update
width=options.width)
File "/home/georg/env/main/lib/python3.3/site-packages/babel/messages/pofile.py", line 444, in write_po
_write(comment_header + u'\n')
File "/home/georg/env/main/lib/python3.3/site-packages/babel/messages/pofile.py", line 388, in _write
fileobj.write(text)
TypeError: must be str, not bytes
There should be a short introduction in how to use gettext, trans etc in Jinja the jkji2 templates - it's not obvious from the docs that the jinja2 i18n ext is used and that the user does not need to configure this separately.
This fixes issue #117 by setting babel_locale in force_locale context manager instead of replacing locale getter. Babel extension instance is shared across threads (through Flask.extensions) which may cause wrong locale to be selected in request that is processed at the same time in one thread while another thread is using force_locale. Setting locale to request context is thread-safe as Flask doesn't share request contexts between threads. I've added a test case to verify that this fix works, and it failed without changes to force_locale.
Right now Flask breaks if you request content in a locale that is unknown by Babel even if the translation files actually exist.
This commit allows translations to be loaded even if the locale is unknown by Babel. Numbers and datetimes ~are returned directly~ use the default locale as a fallback.
I am getting a:
'Babel' object has no attribute 'translation_directories'
error after updating Flask-Babel from 0.9 to 0.11.1.
I found a similar reference at https://github.com/airbnb/superset/issues/847 which claims the issue was flask extension compatibility related.
I have been looking for any sort of documentation that indicates what flask extensions have compatibility with one another, is it just assumed that the minor version (major.minor.build) must match to be compatible?
Here are my current application versions that are having the issue:
Babel (2.3.4) Flask (0.11.1) Flask-Babel (0.11.1) Flask-BabelEx (0.9.3) Flask-Compress (1.3.2) Flask-Login (0.4.0) itsdangerous (0.24) Jinja2 (2.8) MarkupSafe (0.23) pytz (2016.7) setuptools (28.8.0) speaklater (1.3) Werkzeug (0.11.11)
Again, all works with version 0.9 of flask-babel, just trying to understand if compatibility is the root cause or is there a real issue lurking.
I use flask_script (and flask_migrate) to migrate my sql schema. Since version 0.10 i got this error. Everything works well with 0.9
File "/usr/local/lib/python2.7/dist-packages/flask_babel/__init__.py", line 215, in get_translations
babel = current_app.extensions['babel']
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 343, in __getattr__
return getattr(self._get_current_object(), name)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 302, in _get_current_object
return self.__local()
File "/usr/local/lib/python2.7/dist-packages/flask/globals.py", line 34, in _find_app
raise RuntimeError('working outside of application context')
Hi, all. I have two subprocesses. one for flask web(called web.py), and one for some background tasks(called task.py). flask-babel works inside the web context, but also the task subprocess will need some translations. so, I import web app into the task.py and use the app.test_request_context in order to make translations work for me. it works at first but then I found task.py will also get the default language only. here is the web.py:
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
babel = Babel(app)
@babel.localeselector
def get_locale():
return request.accept_languages.best_match(['zh', 'en'])
task.py
from web import app
def task():
try:
with app.test_request_context() as ctx:
sio.emit('loading', {'data': _("please wait a moment.")})
....
so how can I get the correct locale before I return the translation?? TIA :)
I have a base.html file and navbar.html file. The navbar.html is included in base.html and base extended in other templates. The problem is that babel does not extract strings from navbar.html even though i can see it read it.
extraction log
babel.cfg
[jinja2: **.htm*]
encoding = utf-8
extensions=jinja2.ext.autoescape,jinja2.ext.with_
What could be the problem?
I have some words in 3's f-Strings sql code. such as
s = f"""
SELECT * FROM aa
balabala ...
case bala...
{_("abc")}
WHERE b=1
"""
after I excute the order
$ pybabel extract -F babel.cfg -o messages.pot .
but I cannot find the words 'abc' from file messages.pot
If I have html file content like
<html>
{% cache 3600, request.url %}
<tag>{{ _('h1') }}</tag>
{% endcache %}
</html>
And run
pybabel extract -F babel.cfg -k _l -o translations/messages.pot .
Flask Babel cannot find new words in {% cache %} block
Hi there
I have a question So we all know that .mo will be cached in flask app I just want to know if when we run flask server it caches all .mo files at the beginning? Or is it just when we switch languages then it creates domain objects and caches that .mo file?
I thought caching all mo files at the beginning would minimize IO time
Now with Flask-Babel it is not possible to use gettext particular callables (pgettext, npgettext) in Jinja templates, but install_gettext_callables() supports it. This PR fixes that.
Not a problem with the code itself, but it looks like someone needs to update pypi ... it's the first hit on google for the project, and is still linking to https://flask-babel.tkte.ch/ for the documentation, which doesn't exist.
There is a small typo in flask_babel/init.py.
Should read translations rather than tranlations.
Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md
Starting with version 2, flask-babel drops official support for Python2. Python versions 3.5 through 3.9-beta1 are tested and supported, as well as pypy3.
Starting with version 1, flask-babel has changed to Semantic Versioning.
Flask-Matomo Flask-Matomo is a library which lets you track the requests of your Flask website using Matomo (Piwik). Installation pip install flask-ma
Parallel TTS web demo based on Flask + Vue (Vuetify).
Flask-profiler version: 1.8 Flask-profiler measures endpoints defined in your flask application; and provides you fine-grained report through a web in
Flask-Reggie Enable Regex Routes within Flask Installation pip install flask-reggie Configuration To enable regex routes within your application from
Program the Amazon Echo with Python Flask-Ask is a Flask extension that makes building Alexa skills for the Amazon Echo easier and much more fun. Flas
Source code for backpainfree.org - a Q&A platform similar to StackOverFlow, which is designed specifically for people with back pain problems. Users can ask questions, post answers and comments, vote
flask-s3 Seamlessly serve the static assets of your Flask app from Amazon S3. Maintainers Flask-S3 is maintained by @e-dard, @eriktaubeneck and @SunDw
Flask-forum forum written for learning purposes using SQLalchemy and flask How to install install requirements pip install sqlalchemy flask clone repo
Flask Multi Site With Login This is a basic website login system with an uncomplete api system NOTICE : This is NOT complete and is made to be a bare
Microsub Server This repository contains the code that powers my personal Microsub server. Microsub is an IndieWeb specification currently in developm
Flask Live Corona Info Live Corona statistics and information site with flask. Tools Flask Scrapy Matplotlib How to Run Project Download Codes git clo
Flask API Browsable web APIs for Flask. Status: This project is in maintenance mode. The original author (Tom Christie) has shifted his focus to API S
Flask REST Template About the project (some comments): The ideia behind the project is to create an useful and simple template for an rest app . Besid
smescan A simple web application built using python flask. It can be used to scan SMEVai accounts for broken pages. Development Process Step 0: Clone
Discover Flask Full Stack Web Development with Flask. http://discoverflask.com Flask is a micro web framework powered by Python. Its API is fairly sma
Welcome to Paycord Paid roles for discord using Stripe, Python, Flask & Docker. Setup Production On stripe dashboard, go Developers ➡️ Webhooks ➡️ Add
subdomainer-flask A Flask application for Subdomain Enumeration steps to be done git clone https://github.com/gokulapap/subdomainer-flask pip3 install
SeCl SeCl it's a really easy to deploy and use made-on Flask API to manage your
Python Flask Server Template Check the Github Repository for updates Flask is an application builder. It is very common in Python but can also be used
Serverless Framework Python Flask API service backed by DynamoDB on AWS Python Flask API service, backed by DynamoDB, running on AWS Lambda using the