i18n Translations ================= Introduction ------------ 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. 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 . Quick How to ------------ 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!