Depuis sa version 2.2, Ruby on Rails permet de gérer les sites multi langue et leurs divers contenus.
Nous allons voir, dans cet article, comment utiliser le module I18n dans votre application.
Tout d’abord, voyons les diverses méthodes de ce module dont vous aurez l’utilisation dans un cas basique.
- available_locales. Retourne un tableau contenant toutes les langues disponibles pour l’application (qui ont au moins une chaine de traduction présente).
- default_locale. Retourne ou définit la langue par défaut (uniquement pour le chargement courant. Ne change aucune configuration et ne mets rien en session).
- locale. Retourne ou définit la langue en cours pour la page.
- localize. Localise certains objets tels que les dates (en Français, retournera jj/mm/yy; en Anglais, mm/jj/yy).
- translate. Retourne la chaine dans la langue appropriée. Si celle-ci n’existe pas, retourne la langue et le nom de l’élément transmis.
Traduire vos pages
Vous avez vu les méthodes translate et localize plus haut qui permettent de récupérer les valeurs appropriées à afficher sur votre page.
Ces deux méthodes ont des abbréviations, t et l.
Pour traduire une chaine, vous ferez donc :
<%= t :hello %>
Ou bien pour localize :
<%= l Time.now %>
Définir la langue actuelle
La méthode available_locales retourne un tableau de toutes les langues disponibles.
Il vous suffit donc de définir la langue que vous désirez, de la manière que vous désirez : en la récupérant dans le nom de domaine; en paramètre; en session; dans les préférences du navigateur. A vous de choisir la méthode que vous désirez.
Puis définissez votre locale :
I18n.locale = my_locale if available_locales.include? my_locale
Ainsi, si la langue existe, celle-ci sera définie. Sinon vous conservez la langue par défaut.
Traduire les messages flash
Les méthodes t et l fonctionne dans les vues. Mais également dans les contrôleurs. En conséquent, pour traduire vos messages flash, il vous suffit de faire :
flash[:notice] = t(:my_message)
Séparer ses fichiers de langue
Avoir toutes ses variables de langue dans un même fichiers peut rapidement rendre la chose illisible et inmaintenable.
Vous pouvez donc organiser vos fichiers en sous-répertoires :
- en.yml
- fr.yml
|- user
|– en.yml
|– fr.yml
|- faq
|– en.yml
|– fr.yml
|— category
|—- en.yml
|—- fr.yml
La seule condition pour que cela fonctionne est d’indiquer à Rails de parser également les sous-répertoires en mettant, dans config/environment.rb :
config.i18n.load_path += Dir[File.join(RAILS_ROOT, 'config', 'locales', '**', '*.{rb,yml}')]
Traduction des modèles
Vous pouvez traduire les noms des champs de vos bases de données.
en:
activerecord:
models:
user: Bro
attributes:
user:
login: "Who are you"
La méthode User.human_name retournera Bro. Et User.human_attribute_name(:login) retournera Who are you.
Je m’arrête ici. Mais je vous invite à lire la documentation officielle, qui reprends tous ces éléments plus en profondeur et explique également divers autres détails non mentionnés ici. La traduction des erreurs de validation des modèles par exemple.
Du coup après ça vous n’aurez plus aucune raison de ne pas concevoir vos applications rails en plusieurs langues.





