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 <https://python-babel.github.io/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!
