
Rails i18n: kompletan vodič za Ruby on Rails internacionalizaciju
Od prve datoteke lokala do produkcije: podesite Rails I18n, koristite pomoćnu funkciju t(), obradite CLDR množinu, ispravite uobičajene zamke i dodajte pametne lance rezervnih lokala.
Razumite arhitekturu sistema Rails I18n
Rails sadrži ugrađeni I18n gem. Datoteke prevoda nalaze se u config/locales/ kao YAML (podrazumevano) ili Ruby datoteke. Radni okvir pruža pomoćnu funkciju t() (pseudonim za I18n.translate) u prikazima, kontrolerima, modelima i mailer komponentama. Rails I18n je namerno jednostavan — odmah obrađuje osnovno prevođenje, interpolaciju i množinu.
# 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
endPodesite postavke lokala
Postavite default_locale, available_locales i ponašanje rezerve u config/application.rb ili initializer datoteci. Podesite otkrivanje lokala u ApplicationController pomoću before_action da postavite lokal iz URL adrese, sesije, kolačića ili Accept-Language zaglavlja.
# 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"Koristite pomoćnu funkciju t()
Pomoćna funkcija t() dostupna je svuda u Rails sistemu — u prikazima, kontrolerima, modelima, mailer komponentama i zadacima. Prihvata ključ, neobavezne promenljive interpolacije i opcije kao što su podrazumevane vrednosti i opseg. U prikazima Rails podržava lenje pretrage koje automatski ograničavaju ključeve na trenutni kontroler i radnju.
# 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')) %>Obradite množinu
Rails I18n koristi CLDR kategorije množine: zero, one, two, few, many, other. Engleskom su potrebni samo one i other, ali drugim jezicima je potrebno više oblika. Definišite prevode množine kao ugnežđene YAML ključeve pod kategorijama broja koje su potrebne ciljnim jezicima.
# 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) %>Dodajte lance rezervnih lokala
Ugrađeni Rails I18n.fallbacks pruža samo osnovnu rezervu od regionalnog do podrazumevanog lokala. Korisnik lokala pt-BR sa nedostajućim ključem vidi engleski umesto pt-PT. rails-locale-chain dodaje podesive lance sa dubinskim spajanjem kako bi regionalni korisnici uvek videli najbliži dostupan prevod.
# 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 prevode
Kada podesite Rails I18n, prevedite YAML datoteke lokala pomoću AI tehnologije. i18n Agent izvorno podržava YAML — usmerite ga na datoteku izvornog lokala i generisaće sve ciljne jezike uz očuvanje ugnežđenih ključeva, promenljivih interpolacije i oblika množine.
# 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 enUobičajene zamke
Greške InvalidPluralizationData
Lenje pretrage izvan prikaza
Greške YAML sintakse narušavaju sve prevode
Isprobajte i18n Agent sada
Pustite datoteku za prevođenje ovde
JSON, YAML, PO, XML, CSV, Markdown, Properties
ili kliknite za izbor
Ciljni jezici