
Rails i18n: kompletná príručka internacionalizácie Ruby on Rails
Od prvého lokalizačného súboru po produkciu: nakonfigurujte Rails I18n, používajte pomocnú funkciu t(), spracujte tvary množného čísla CLDR, opravte bežné nástrahy a pridajte inteligentné reťazce náhradných lokalizácií.
Pochopte architektúru Rails I18n
Rails obsahuje vstavaný gem I18n. Prekladové súbory sa nachádzajú v config/locales/ vo formáte YAML (predvolený) alebo Ruby. Framework poskytuje pomocnú funkciu t() (alias I18n.translate) v zobrazeniach, kontroléroch, modeloch a maileroch. Rails I18n je zámerne jednoduchý – hneď po inštalácii spracúva základný preklad, interpoláciu a tvary množného čísla.
# 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 nastavenia lokalizácie
Nastavte default_locale, available_locales a správanie náhrad v config/application.rb alebo inicializátore. Rozpoznávanie lokalizácie nakonfigurujte v ApplicationController pomocou before_action, ktoré nastaví lokalizáciu podľa URL, relácie, súboru cookie alebo 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žívajte pomocnú funkciu t()
Pomocná funkcia t() je dostupná všade v Rails – v zobrazeniach, kontroléroch, modeloch, maileroch aj úlohách. Prijíma kľúč, voliteľné interpolačné premenné a voľby, ako sú predvolené hodnoty a rozsah. V zobrazeniach Rails podporuje lenivé vyhľadávania, ktoré automaticky obmedzia kľúče na aktuálny kontrolér a akciu.
# 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')) %>Spracujte tvary množného čísla
Rails I18n používa kategórie množného čísla CLDR: zero, one, two, few, many, other. Angličtina potrebuje iba one a other, iné jazyky však viac tvarov. Preklady množného čísla definujte ako vnorené kľúče YAML pod kategóriami počtu, ktoré vyžadujú Vaše cieľové jazyky.
# 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) %>Pridajte reťazce náhradných lokalizácií
Vstavané I18n.fallbacks v Rails poskytuje iba základnú náhradu z regionálnej na predvolenú lokalizáciu. Používateľ pt-BR s chýbajúcim kľúčom uvidí angličtinu namiesto pt-PT. rails-locale-chain pridáva konfigurovateľné reťazce s hĺbkovým zlúčením, aby regionálni používatelia vždy videli najbližší dostupný preklad.
# 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"Automatizujte preklady
Po dokončení nastavenia Rails I18n preložte svoje lokalizačné súbory YAML pomocou AI. i18n Agent natívne podporuje YAML – zadajte mu zdrojový lokalizačný súbor a vygeneruje všetky cieľové jazyky so zachovaním vnorených kľúčov, interpolačných premenných a tvarov množného čísla.
# 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 enBežné nástrahy
Chyby InvalidPluralizationData
Lenivé vyhľadávania mimo zobrazení
Chyby syntaxe YAML narušia všetky preklady
Vyskúšajte i18n Agent teraz
Potiahnite súbor na preklad sem
JSON, YAML, PO, XML, CSV, Markdown, Properties
alebo kliknite a vyberte súbor
Cieľové jazyky