• 20 hours
  • Medium

Free online content available in this course.

course.header.alt.is_certifying

Got it!

Last updated on 1/17/17

Let’s get started!

Log in or subscribe for free to enjoy all this course has to offer!

L'objectif de cette partie est de vous apprendre à rendre votre site multi-lingues, afin d'adapter les textes affichés à l'utilisateur en fonction de la langue qu'il choisit.

Partez d’un nouveau projet et faites :

rails g scaffold post content:text
rake db:migrate

Vous avez peut-être déjà remarqué que les textes générés sont en anglais. Comme cet extrait de l’index :

# app/views/posts/index.html.erb
<h1>Listing Posts</h1>

Il est tentant de simplement mettre le texte dans la langue de votre choix. C’est une mauvaise solution si vous travaillez pour quelqu’un. En effet : quelle est la probabilité, en entreprise, que l’on vous demande d’adapter la langue du site en fonction de la langue de l’utilisateur ? Très haute. Pour gérer cela, il y a ce que l’on appelle l’internationalisation, abrégée en i18n (car il y a 18 lettres entre le i et le n).

L’i18n consiste à remplacer vos textes par des appels de fonctions qui choisiront à votre place s’il faut afficher le texte dans telle ou telle langue.

Voici comment appliquer l’internationalisation dans l’extrait de l’index vu ci-dessus : on remplace le texte anglais “Listing Posts” par la fonction t() (abréviation de translate, traduire en anglais) qui appellera le texte dans la langue désirée.

# app/views/posts/index.html.erb
<h1><%= t(".title") %></h1>

Nous allons maintenant faire en sorte que ce texte apparaisse en français. Pour cela, décommentez dans la configuration de votre application la ligne de la langue (aussi appelée locale) de votre site :

# config/application.rb
config.i18n.default_locale = :fr

Enfin, créez et complétez la liste des traductions de votre site (attention à l’indentation !) :

# config/locales/fr.yml
fr:
  posts:
    index:
      title: "Liste des posts"

Il faut redémarrer votre serveur à chaque fois que vous modifiez un fichier de configuration ou que vous créez un nouveau fichier de locale – les simples modifications ne sont pas concernées. t(".title") retourne alors "Liste des posts".

Explications

Reprenons le code que nous avons utilisé pour internationaliser l’extrait de notre index :

# app/views/posts/index.html.erb
<h1><%= t(".title") %></h1>

Le  .title  est appelé clé de traduction partielle. La clé au complet serait plutôt : posts.index.title. Le point initial devant “title” demande juste à Rails : "S’il-te-plaît, devine le début de la clé par rapport aux dossiers et ficher dans lequel je me trouve". Ainsi, toutes les clés d’un même fichier seront côte à côte dans le fichier fr.yml.

Et dans ce fichier, la règle est simple : on augmente l’indentation en suivant l’arborescence de vos répertoires. Le voici en plus complet :

# config/locales/fr.yml
fr:
  posts:
    index:
      title: "Liste des posts"
      content: "Contenu"
      show: "Afficher"
      edit: "Modifier"
      destroy: "Supprimer"
      sure: "Êtes-vous sûr de vouloir supprimer ce post ?"
      new: "Nouveau post"
Example of certificate of achievement
Example of certificate of achievement