
Rails i18n: Kompletní průvodce internacionalizací pro Ruby on Rails
Od prvního souboru locale po produkci: nakonfigurujte Rails I18n, používejte helper t(), řešte pluralizaci podle CLDR, opravte běžná úskalí a přidejte inteligentní locale fallback řetězce.
Pochopte architekturu Rails I18n
Rails obsahuje gem I18n vestavěně. Překladové soubory jsou v config/locales/ jako YAML (výchozí) nebo Ruby soubory. Framework poskytuje helper t() (alias pro I18n.translate) ve views, controllerech, modelech i mailerech. Rails I18n je záměrně jednoduché — out of the box řeší základní překlad, interpolaci i pluralizaci.
# 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
endNakonfigurujte nastavení locale
Nastavte default_locale, available_locales a fallback chování v config/application.rb nebo v initializeru. Detekci locale nakonfigurujte v ApplicationController pomocí before_action, který nastaví locale podle URL, session, cookie nebo hlavičky 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"Používejte helper t()
Helper t() je v Rails dostupný všude — ve views, controllerech, modelech, mailerech i jobech. Přijímá klíč, volitelné interpolační proměnné a volby jako výchozí hodnoty a scope. Ve views Rails podporuje lazy lookups, které automaticky nastavují scope klíčů podle aktuálního controlleru a action.
# 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')) %>Zpracování plurálu
Rails I18n používá kategorie plurálu CLDR: zero, one, two, few, many, other. Angličtina potřebuje pouze one a other, ale jiné jazyky vyžadují více tvarů. Překlady plurálu definujte jako vnořené YAML klíče pod kategoriemi count, které Vaše cílové jazyky vyžadují.
# 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) %>Přidat fallback řetězce locale
Vestavěné I18n.fallbacks v Rails poskytuje jen základní fallback z regionálního locale na výchozí locale. Uživatel pt-BR s chybějícím klíčem uvidí angličtinu místo pt-PT. rails-locale-chain přidává konfigurovatelné deep-merge řetězce, takže regionální uživatelé vždy uvidí nejbližší dostupný překlad.
# 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"Automatizovat překlady
S dokončeným nastavením Rails I18n přeložte své YAML locale soubory pomocí AI. i18n Agent nativně podporuje YAML — namiřte jej na zdrojový locale soubor a vygeneruje všechny cílové jazyky se zachováním vnořených klíčů, proměnných interpolace a tvarů plurálu.
# 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 enBěžná úskalí
Chyby InvalidPluralizationData
Lazy lookups mimo views
Chyby syntaxe YAML rozbijí všechny překlady
Vyzkoušejte i18n Agent nyní
Sem přetáhněte svůj překladový soubor
JSON, YAML, PO, XML, CSV, Markdown, Properties
nebo klikněte a vyberte soubor
Cílové jazyky