- F.A.B. has support for 16 languages (planning for some more):
- Chinese
- Dutch
- English
- French
- German
- Japanese
- Polish
- Portuguese
- Portuguese Brazil
- Russian
- Slovenian
- Spanish
- Greek
- Korean
- Italian
- Turkish
This means that all messages, builtin on the framework are translated to these languages.
You can add your own translations for your application, using Flask-Babel.
You can add your own translations, and your own language support. Take a look at Flask-Babel for setup an babel initial configuration.
On your projects root create a directory named babel, then create and edit a file named babel.cfg with the following content (this configuration is already made on the base skeleton application):
[python: **.py] [jinja2: **/templates/**.html] encoding = utf-8
First, create your translations, for example to portuguese, spanish and german, execute on you projects root:
pybabel init -i ./babel/messages.pot -d app/translations -l pt pybabel init -i ./babel/messages.pot -d app/translations -l es pybabel init -i ./babel/messages.pot -d app/translations -l de
Next extract your strings to be translated, execute on you projects root:
$ flask fab babel-extract
If you want to, or if you're using a version prior to 1.3.0 you can use:
pybabel extract -F ./babel/babel.cfg -k lazy_gettext -o ./babel/messages.pot .
Let's work with the contacts application example, so you want to add translations for the menus "List Groups" and "List Contacts".
from flask_babel import lazy_gettext as _ class GroupModelView(ModelView): datamodel = SQLAInterface(ContactGroup) related_views = [ContactModelView] label_columns = {'name':_('Name')} genapp.add_view(GroupModelView(), "List Groups",icon = "th-large", label=_('List Groups'), category = "Contacts", category_icon='fa-envelope', category_label=_('Contacts')) genapp.add_view(ContactModelView(), "List Contacts",icon = "earphone", label=_('List Contacts'), category = "Contacts")
1 - Run the extraction, from the root directory of your project:
$ flask fab babel-extract
If you want to, or if you're using a version prior to 1.3.0 you can use:
pybabel extract -F ./babel/babel.cfg -k lazy_gettext -o ./babel/messages.pot .
2 - Make your translations
On app/translations/pt/LC_MESSAGES/messages.po you will find the messages you added to translate:
msgid "Name" msgstr "" msgid "Contacts" msgstr "" msgid "List Groups" msgstr "" msgid "List Contacts" msgstr ""Translate them:
msgid "Name" msgstr "Nome" msgid "Contacts" msgstr "Contactos" msgid "List Groups" msgstr "Lista de Grupos" msgid "List Contacts" msgstr "Lista de Contactos"
3 - Compile your translations, from the root directory of your project:
$ flask fab babel-compile
4 - Add your language support to the framework
On config tell the framework the languages you support. With this you will render a menu with the corresponding country flags. use the config var 'LANGUAGES' with a dict whose first key is a string with the corresponding babel language code, the value is another dict with two keys 'flag' and 'name', with the country flag code, and text to be displayed:
LANGUAGES = { 'en': {'flag':'gb', 'name':'English'}, 'pt': {'flag':'pt', 'name':'Portuguese'} }
And that's it!