
Rails i18n : le guide complet de l'internationalisation Ruby on Rails
Du premier fichier de locale à la mise en production : configurez Rails I18n, utilisez le helper t(), gérez le pluriel CLDR, corrigez les pièges courants et ajoutez des chaînes de repli de locales intelligentes.
Comprendre l'architecture de Rails I18n
Rails intègre nativement la gem I18n. Les fichiers de traduction se trouvent dans config/locales/, au format YAML (par défaut) ou Ruby. Le framework fournit le helper t() (alias de I18n.translate) dans les vues, les contrôleurs, les modèles et les mailers. Rails I18n est simple par conception : il gère nativement la traduction de base, l'interpolation et le pluriel.
# Rails includes i18n out of the box via the i18n gem
# config/application.rb
module MyApp
class Application < Rails::Application
# Default locale
config.i18n.default_locale = :en
# Available locales
config.i18n.available_locales = [:en, :de, :ja, :es, :fr, :'pt-BR']
# Fallback to default locale when translation is missing
config.i18n.fallbacks = true
# Load translations from nested directories
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
end
end# config/routes.rb
Rails.application.routes.draw do
scope "/:locale", locale: /en|de|ja|es|fr|pt-BR/ do
root "home#index"
resources :products
end
root "home#index"
end
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
around_action :switch_locale
private
def switch_locale(&action)
locale = params[:locale] || I18n.default_locale
I18n.with_locale(locale, &action)
end
def default_url_options
{ locale: I18n.locale }
end
endConfigurer les paramètres de locale
Définissez default_locale, available_locales et le comportement de repli dans config/application.rb ou dans un initializer. Configurez la détection de la locale dans votre ApplicationController à l'aide d'un before_action, pour définir la locale à partir de l'URL, de la session, du cookie ou de l'en-tête Accept-Language.
# config/locales/en.yml
en:
nav:
home: "Home"
about: "About"
settings: "Settings"
greeting: "Hello, %{name}!"
cart:
item_count:
one: "%{count} item"
other: "%{count} items"
# config/locales/de.yml
de:
nav:
home: "Startseite"
about: "Über uns"
settings: "Einstellungen"
greeting: "Hallo, %{name}!"
cart:
item_count:
one: "%{count} Artikel"
other: "%{count} Artikel"Utiliser le helper t()
Le helper t() est disponible partout dans Rails : vues, contrôleurs, modèles, mailers et jobs. Il accepte une clé, des variables d'interpolation facultatives et des options comme des valeurs par défaut et une portée (scope). Dans les vues, Rails prend en charge les recherches paresseuses (lazy lookups), qui limitent automatiquement les clés au contrôleur et à l'action en cours.
# In views (ERB)
<h1><%= t('nav.home') %></h1>
<p><%= t('greeting', name: @user.name) %></p>
# In controllers
flash[:notice] = t('flash.product_created')
# In models
validates :name, presence: { message: I18n.t('errors.blank') }
# With HTML (safe)
<%= t('terms_html', link: link_to(t('terms_link'), '/terms')) %>Gérer la pluralisation
Rails I18n utilise les catégories de pluriel CLDR : zero, one, two, few, many, other. L'anglais n'a besoin que de one et other, mais d'autres langues nécessitent davantage de formes. Définissez les traductions au pluriel sous forme de clés YAML imbriquées, selon les catégories de nombre requises par vos langues cibles.
# In YAML:
en:
cart:
item_count:
zero: "No items"
one: "%{count} item"
other: "%{count} items"
# Arabic (6 forms):
ar:
cart:
item_count:
zero: "لا عناصر"
one: "عنصر واحد"
two: "عنصران"
few: "%{count} عناصر"
many: "%{count} عنصرًا"
other: "%{count} عنصر"
# Usage in views:
<%= t('cart.item_count', count: @cart.items.size) %>Ajouter des chaînes de repli de locale
Le mécanisme intégré I18n.fallbacks de Rails ne fournit qu'un repli basique de la locale régionale vers la locale par défaut. Un utilisateur pt-BR confronté à une clé manquante voit l'anglais au lieu du pt-PT. rails-locale-chain ajoute des chaînes de fusion profonde configurables, afin que les utilisateurs régionaux voient toujours la traduction disponible la plus proche.
# Lazy lookups use the controller/action as scope
# app/views/products/index.html.erb
# Instead of t('products.index.title'), just use:
<h1><%= t('.title') %></h1>
<p><%= t('.description') %></p>
# Rails looks up: products.index.title and products.index.description
# config/locales/en.yml
en:
products:
index:
title: "All Products"
description: "Browse our catalog"Automatiser les traductions
Une fois votre configuration Rails I18n terminée, traduisez vos fichiers de locale YAML à l'aide de l'IA. i18n Agent prend en charge le YAML nativement : indiquez-lui votre fichier de locale source, et il génère toutes les langues cibles en préservant les clés imbriquées, les variables d'interpolation et les formes de pluriel.
# Gemfile
gem 'rails-locale-chain'
# config/initializers/locale_chain.rb
Rails.application.config.i18n.fallbacks = {
'pt-BR': ['pt', 'en'],
'zh-Hant-TW': ['zh-Hant', 'zh', 'en'],
'es-419': ['es', 'en'],
}
# The gem deep-merges translations across the chain
# pt-BR -> pt -> en
# Missing keys in pt-BR are filled from pt, then enPièges courants
Erreurs InvalidPluralizationData
Recherches paresseuses en dehors des vues
Les erreurs de syntaxe YAML cassent toutes les traductions
Essayez i18n Agent maintenant
Déposez votre fichier de traduction ici
JSON, YAML, PO, XML, CSV, Markdown, Properties
ou cliquez pour parcourir
Langues cibles