Configurez l’i18n et la localisation Rails pour votre application. Organisez les fichiers de traduction, basculez entre les langues et automatisez les traductions avec l’IA.
Pour montrer comment fonctionne l’internationalisation Rails en pratique, nous avons créé une petite application de démonstration Ruby on Rails. L’application affiche l’heure actuelle du serveur avec un bouton d’actualisation et comprend un sélecteur de langue simple.
Vous pouvez appliquer ces concepts à votre application Rails existante, ou créer une nouvelle application Rails avec rails new YourAppName et la développer avec nous.
Pour le code source complet, consultez GitHub : Application de démonstration Rails i18n
Configuration de l’internationalisation Rails (i18n)
L’internationalisation Rails nécessite trois étapes de configuration : définir les paramètres régionaux disponibles, ajouter les paramètres régionaux à vos URL et faire en sorte que Rails charge les bons paramètres régionaux pour chaque requête. Vous voudrez également installer la gem rails-i18n, qui fournit des données de paramètres régionaux telles que les noms de mois traduits, les règles de pluralisation et les messages d’erreur Rails par défaut.
Définir les paramètres régionaux disponibles
Tout d’abord, dans config/application.rb, indiquez à Rails quelles langues l’application doit prendre en charge et définissez des paramètres régionaux par défaut :
config.i18n.default_locale = :en
config.i18n.available_locales = [:en, :es, :de]Cette configuration indique à Rails :
- L’anglais (
:en) est la langue par défaut - L’application prend en charge l’anglais, l’espagnol et l’allemand
- Les utilisateurs peuvent basculer entre ces trois langues
Vous pouvez ajouter tous les codes de langue dont vous avez besoin.
Ajouter les paramètres régionaux aux URL
Ensuite, ajoutez les paramètres régionaux à l’URL afin que chaque langue ait son propre chemin, comme /en/time ou /es/time :
# config/routes.rb
scope "/:locale" do
get '/time', to: 'home#index', as: :time_display
endCela crée des URL spécifiques aux paramètres régionaux pour votre application Rails. Les utilisateurs peuvent accéder aux différentes versions linguistiques en modifiant le paramètre de paramètres régionaux dans l’URL.
Configurer le changement de paramètres régionaux
Enfin, dans app/controllers/application_controller.rb, assurez-vous que Rails charge les bons paramètres régionaux à partir de l’URL et les inclut dans tous les liens :
class ApplicationController < ActionController::Base
around_action :switch_locale
def switch_locale(&action)
locale = params[:locale] || I18n.default_locale
I18n.with_locale(locale, &action)
end
def default_url_options
{ locale: I18n.locale }
end
endCe code :
- Lit les paramètres régionaux à partir du paramètre d’URL
- Revient aux paramètres régionaux par défaut si aucun paramètre n’est présent
- Garantit que toutes les URL générées incluent les paramètres régionaux actuels
Installer la gem rails-i18n
La gem rails-i18n fournit des données de paramètres régionaux pour plusieurs langues, notamment les noms de mois traduits, les règles de pluralisation et les messages d’erreur Rails par défaut. Cela vous évite de traduire vous-même ces chaînes standard.
Ajoutez-la à votre Gemfile :
gem 'rails-i18n'
Ensuite, exécutez :
bundle install
Rails est maintenant entièrement configuré pour l’internationalisation.
Ajouter un sélecteur de langue
Maintenant que votre application Rails prend en charge plusieurs paramètres régionaux, vos utilisateurs internationaux ont besoin d’un moyen de basculer entre les langues. Rails rend cela simple car la méthode default_url_options dans ApplicationController inclut automatiquement les paramètres régionaux actuels dans toutes les URL générées.
Cela signifie que vous pouvez créer un sélecteur de langue qui met uniquement à jour le paramètre de paramètres régionaux tout en gardant l’utilisateur sur la même page.
Créer l’interface du sélecteur de langue
Ajoutez le sélecteur de langue à votre fichier de mise en page. Dans notre application de démonstration, le sélecteur est ajouté dans app/views/layouts/application.html.erb :
<nav>
<%= link_to "English", url_for(locale: :en) %> |
<%= link_to "Español", url_for(locale: :es) %> |
<%= link_to "Deutsch", url_for(locale: :de) %>
</nav>Chaque lien utilise url_for(locale: :locale_code) pour générer une URL avec les paramètres régionaux spécifiés. Lorsqu’un utilisateur clique sur un lien :
- La méthode
switch_localedans ApplicationController détecte le changement - Rails affiche la page dans la nouvelle langue
Parce que vous avez défini default_url_options dans ApplicationController, Rails inclut automatiquement les paramètres régionaux dans tous les liens générés. Cela signifie que les paramètres régionaux persistent lorsque les utilisateurs naviguent dans votre application. Vous n’avez pas besoin d’ajouter manuellement des paramètres de paramètres régionaux à chaque lien.
Styliser votre sélecteur de langue
Vous pouvez styliser le sélecteur de langue dans app/assets/stylesheets/application.css pour qu’il corresponde à votre design. L’application de démonstration inclut un style de base pour rendre le sélecteur visible et convivial.
Configuration des clés de traduction dans les vues Rails
Avant de pouvoir traduire votre application, tout le texte visible par l’utilisateur doit se trouver dans les fichiers i18n Rails au lieu d’être codé en dur. Rails fournit la méthode d’aide t (abréviation de translate) pour rechercher et afficher les chaînes traduites.
Remplacer le texte codé en dur par des clés de traduction
Rails utilise l’aide intégrée I18n.t (ou simplement t) pour rechercher des chaînes dans vos fichiers de traduction.
Correct (en utilisant les clés de traduction) :
<h1><%= t(:hello) %></h1>
<p><%= t(:current_time, time: @time) %></p>
<button id="click-me"><%= t(:refresh) %></button>
Incorrect (texte codé en dur) :
<h1>Hello</h1>
<p>Current time: <%= @time %></p>
<button>Refresh</button>Le texte codé en dur n’apparaîtra pas dans votre fichier YAML, ce qui signifie qu’il ne pourra pas être traduit ultérieurement. Utilisez toujours des clés de traduction pour tout texte visible par l’utilisateur.
Utiliser l’interpolation dans les traductions
Avez-vous remarqué le paramètre time: @time dans l’exemple ci-dessus ? C’est ce qu’on appelle l’interpolation. Elle vous permet d’insérer des valeurs dynamiques dans vos traductions. La chaîne de traduction dans votre fichier YAML utilise %{time} comme placeholder :
current_time: "Current time: %{time}"Lorsque vous appelez l’aide t avec time: @time, Rails remplace %{time} par la valeur réelle. Vous pouvez utiliser les noms de variables que vous souhaitez – assurez-vous simplement qu’ils correspondent entre le fichier YAML et votre vue.
Recherche paresseuse pour un code plus propre
Lorsque vos clés de traduction sont organisées pour correspondre à la structure de votre dossier de vues, Rails vous permet d’utiliser un raccourci appelé recherche paresseuse. Au lieu d’écrire le chemin complet de la clé, utilisez un point initial :
<!-- Instead of this: -->
<%= t('home.index.hello') %>
<!-- You can write this: -->
<%= t('.hello') %>
Rails examine dans quel fichier de vue vous vous trouvez (home/index.html.erb) et ajoute automatiquement home.index. devant votre clé. Cela rend votre code plus propre et facilite le déplacement des vues. Si vous renommez ou déplacez une vue, les chemins de recherche paresseuse se mettent à jour automatiquement.
Créer et organiser les fichiers de traduction
Maintenant que vous avez ajouté des clés de traduction à vos vues, vous devez définir ces clés dans un fichier YAML. Rails stocke ces définitions dans le répertoire config/locales/.
Ajouter des clés à votre fichier anglais
Les fichiers de traduction Rails utilisent une structure clé-valeur simple. Ouvrez config/locales/en.yml et ajoutez les clés que vous avez référencées dans vos vues :
# config/locales/en.yml
en:
hello: "Hello"
current_time: "Current time: %{time}"
refresh: "Refresh"
Dans cette structure i18n Rails :
enest le code de langue (anglais)hellocurrent_timeetrefreshsont des clés de traduction- Les chaînes à droite sont le texte réel
%{time}est un placeholder pour le contenu dynamique (interpolation)
Il s’agit de votre fichier source. Il contient tout le texte dans votre langue par défaut. Plus loin dans ce tutoriel, vous utiliserez PTC pour générer automatiquement des versions en espagnol, en allemand et dans d’autres langues.
Organiser les clés avec l’imbrication
Pour utiliser la recherche paresseuse (le raccourci .hello de la section précédente), organisez vos clés pour qu’elles correspondent à la structure de votre dossier de vues :
en:
home:
index:
hello: "Hello"
current_time: "Current time: %{time}"
refresh: "Refresh"
Cela regroupe toutes les traductions pour app/views/home/index.html.erb sous home.index. Vous pouvez maintenant utiliser t('.hello') dans cette vue au lieu de t('home.index.hello').
Au fur et à mesure que votre application Rails se développe, vous pouvez également créer des espaces de noms pour les traductions partagées (comme shared.navigation pour les menus) afin de garder les choses organisées, mais cela est facultatif.
Ajouter des chaînes JavaScript au YAML
Vos vues Rails sont maintenant internationalisées, mais qu’en est-il de JavaScript ? Rails n’extrait pas automatiquement le texte des fichiers JavaScript. Si votre application contient du texte côté client comme des alertes, des infobulles ou des messages de confirmation, vous devez les ajouter à votre fichier de traduction anglais.
Par exemple, pour traduire une fenêtre de confirmation, ajoutez la chaîne à config/locales/en.yml :
# config/locales/en.yml
en:
confirm: "Are you sure?"À ce stade, votre fichier en.yml contient tout le texte qui apparaît dans votre application – à la fois dans les vues Rails et dans JavaScript.
Lorsque vous utilisez PTC pour traduire votre application (abordé dans la section suivante), ces chaînes JavaScript seront traduites en même temps que tout le reste.
Traduire des applications Rails avec PTC
Il est maintenant temps d’obtenir les traductions pour tout le texte de votre application stocké dans le fichier YAML. Au lieu de traduire manuellement des centaines de chaînes, vous pouvez utiliser Private Translation Cloud (PTC).
PTC utilise l’IA pour traduire automatiquement vos fichiers YAML Rails tout en préservant leur structure et leurs clés. Vous pouvez commencer avec l’essai gratuit, qui vous permet de traduire 20 000 mots dans deux langues, sans carte de crédit. Ensuite, vous ne payez que ce que vous traduisez (pas de frais d’abonnement).
Une fois que vous avez téléchargé et traduit votre premier fichier, vous pouvez passer à un flux de travail de localisation continue :
- Intégration GitHub, GitLab ou Bitbucket – Connectez votre dépôt. PTC trouve vos fichiers YAML, les traduit et renvoie une demande de fusion avec les nouveaux fichiers de langue.
- API/CLI – Intégrez dans votre pipeline CI/CD en utilisant l’API PTC. Consultez un exemple de dépôt Rails avec GitHub Actions.
Pour ce guide, nous avons utilisé l’intégration Git pour un flux de travail entièrement automatisé. PTC s’est connecté à notre dépôt, a créé des versions traduites comme es.yml et de.yml, et a ouvert une pull request avec les nouveaux fichiers dans le même dossier.
Une fois que vous fusionnez la pull request, Rails charge automatiquement les traductions. Lorsque les utilisateurs changent de langue, votre application affiche le texte correct.
Pour une présentation complète de la configuration, consultez notre Guide de démarrage.
Convertir les traductions pour JavaScript
Maintenant que vous avez des fichiers YAML traduits de PTC, vous devez rendre ces traductions disponibles pour JavaScript. JavaScript ne peut pas lire directement les fichiers YAML – il a besoin de fichiers JSON.
Installer i18n-js
La gem i18n-js convertit vos fichiers de traduction YAML au format JSON que les navigateurs peuvent lire.
Ajoutez la gem à votre Gemfile :
gem 'i18n-js'
Ensuite, exécutez :
bundle install
Après l’installation, initialisez la gem :
i18n init
Cela génère un fichier de configuration. Mettez-le à jour pour exporter les traductions vers public/locales.json :
# config/i18n.rb
require "i18n-js"
I18n::JS.config do |config|
config.export_i18n_js = false
config.translations_path = "public/locales.json"
end
Exporter les traductions vers JSON
Exécutez la commande d’exportation pour générer le fichier JSON :
i18n export
Cela lit tous vos fichiers YAML (en.yml, es.yml, de.yml) et crée public/locales.json avec toutes les traductions dans un format que JavaScript peut utiliser.
Charger les traductions dans JavaScript
Rails 7+ inclut Importmap pour gérer les dépendances JavaScript sans bundlers.
Épinglez la bibliothèque i18n-js dans config/importmap.rb :
# config/importmap.rb
pin "i18n-js", to: "https://esm.sh/i18n-js@latest/dist/import/index.js"
pin "load_locale", to: "load_locale.js"
Créez une fonction de chargement dans app/javascript/load_locale.js :
// app/javascript/load_locale.js
export async function loadLocale() {
const response = await fetch('/locales.json');
const data = await response.json();
return data;
}
Cette fonction récupère le fichier JSON contenant toutes vos traductions.
Utiliser les traductions dans JavaScript
Transmettez les paramètres régionaux actuels à JavaScript en les ajoutant à la balise <body> dans votre mise en page :
<!-- app/views/layouts/application.html.erb -->
<body data-locale="<%= I18n.locale %>">Ensuite, importez i18n-js et utilisez les traductions dans votre JavaScript :
// app/javascript/application.js
import { I18n } from "i18n-js"
import { loadLocale } from "./load_locale"
document.addEventListener('turbo:load', async () => {
// Load all translations
const translations = await loadLocale()
const i18n = new I18n(translations)
// Set the locale from the body tag
i18n.locale = document.body.dataset['locale']
// Use translations in your JavaScript
if (confirm(i18n.t('confirm'))) {
// User clicked OK
}
})
La méthode i18n.t() fonctionne comme l’aide t de Rails. Lorsque les utilisateurs changent de langue, JavaScript utilise automatiquement les traductions correctes à partir de l’attribut data-locale.
Autres fonctionnalités i18n Rails
Ce guide a couvert le flux de travail d’internationalisation Rails de base : configuration de l’i18n, organisation des traductions et automatisation du processus de traduction. Rails i18n inclut des fonctionnalités supplémentaires dont vous pourriez avoir besoin au fur et à mesure que votre application se développe.
Comment localiser les dates et les heures ?
Rails fournit l’aide l (abréviation de localize) pour formater les dates et les heures selon les conventions de chaque paramètre régional :
<%= l Time.now, format: :long %>La gem rails-i18n que vous avez installée fournit des formats de date et d’heure par défaut pour de nombreuses langues, y compris les noms de mois traduits et le formatage spécifique aux paramètres régionaux. Vous pouvez également définir des formats personnalisés dans vos fichiers YAML.
Comment localiser les nombres et les devises ?
Rails inclut des aides pour formater les nombres et les devises selon les paramètres régionaux :
<%= number_to_currency(100, locale: :es) %> <!-- €100.00 -->
<%= number_with_delimiter(1000000) %> <!-- 1,000,000 -->
Ces aides respectent les conventions spécifiques aux paramètres régionaux pour les séparateurs décimaux, les délimiteurs de milliers et les symboles de devise.
Puis-je créer différents fichiers de vue pour chaque langue ?
Oui. Pour les pages dont le contenu varie considérablement selon les paramètres régionaux, vous pouvez créer des fichiers de vue distincts :
app/views/pages/
about.html.erb <!-- Default -->
about.es.html.erb <!-- Spanish version -->
about.de.html.erb <!-- German version -->
Rails affiche automatiquement la vue appropriée en fonction des paramètres régionaux actuels.
Prêt à traduire votre application Rails ?
Démarrez votre essai gratuit de 30 jours avec PTC et obtenez 20 000 mots traduits en deux langues — aucune carte de crédit requise.
