Traduire l'application ###################### Chaque application possède un répertoire :file:`lang` dans lequel sont placés les fichiers de traductions, qu'on appellera **dictionnaires**. Ce répertoire contient autant de sous-répertoires que de langues dans lesquelles on veut traduire notre application, et qui contiennent eux-même les dictionnaires. Ces répertoires de langues portent des noms de locales, comme par exemple :file:`fr` (Français), ou :file:`en` (Anglais). .. image:: images/i18n_folder_structure.png Les dictionnaires sont des fichiers PHP qui retournent un tableau PHP, un peu comme les fichiers de configuration. .. seealso:: :ref:`API de la classe I18n ` Fichier :file:`metadata.config.php` =================================== Les ``metadata`` étant un peu spéciales, elles nécessitent un fichier de traduction à part. La première étape est d'indiquer dans quel dictionnaire se trouvent les traductions du fichier :file:`metadata.config.php`. .. code-block:: php :emphasize-lines: 6 'My app', 'namespace' => 'My\App', 'i18n_file' => 'my_app::metadata', // ... autres clés ); Comme toute modification sur les :file:`metadata`, ne pas oublier d'appliquer les changements dans le gestionnaire d'applications. Ensuite, il faut créer le dictionnaire :file:`my_app::lang/fr/metadata.lang.php` : .. code-block:: php 'Mon appli', ); Novius OS sait automatiquement quelles clés peuvent / ont besoin d'être traduites dans le fichier :file:`metadata` et ira chercher les traductions correspondantes. Autres fichiers =============== Partout ailleurs, vous pouvez utiliser la fonction :func:`__()` qui ira chercher (par défaut) les traductions dans le dictionnaire :file:`my_app::default`. Par exemple : .. code-block:: php /default.lang.php __('Translate this'); Mode avancé : configurez vos dictionnaires ------------------------------------------- Si vous ne souhaitez pas mettre vos traductions dans le fichier :file:`default.lang.php`, vous pouvez configurer dans quel dictionnaire sont situées les traductions, **fichier par fichier**. C'est assez simple pour les vues et la configuration : .. code-block:: php /common.lang.php C'est plus pointu pour les contrôleurs, car la langue dépend de l'utilisateur et n'est connue qu'après la phase d'authentification, qui a lieu dans le ``before()``. C'est pourquoi un point d'entrée ``prepare_i18n()`` a été créé : .. code-block:: php :emphasize-lines: 9-12 /dictionary.lang.php si elle existe // Ou dans my_app::lang//common.lang.php sinon __('Translate this');