
Rails i18n: celovit vodnik po internacionalizaciji Ruby on Rails
Od prve jezikovne datoteke do produkcije: nastavite Rails I18n, uporabljajte pomožno funkcijo t(), obravnavajte množinske oblike CLDR, odpravite pogoste pasti in dodajte pametne verige nadomestnih jezikovnih različic.
Spoznajte arhitekturo Rails I18n
Rails vključuje vgrajeni gem I18n. Prevodi so v config/locales/ kot datoteke YAML (privzeto) ali Ruby. Ogrodje v pogledih, krmilnikih, modelih in pošiljevalnikih e-pošte ponuja pomožno funkcijo t() (drugo ime za I18n.translate). Rails I18n je namerno preprost: že v osnovi obravnava osnovno prevajanje, interpolacijo in množinske oblike.
# 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
endNastavite jezikovne različice
V config/application.rb ali inicializatorju nastavite default_locale, available_locales in vedenje nadomeščanja. V svojem ApplicationController s before_action nastavite zaznavanje jezikovne različice iz naslova URL, seje, piškotka ali glave 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"Uporabljajte pomožno funkcijo t()
Pomožna funkcija t() je na voljo povsod v Railsu: v pogledih, krmilnikih, modelih, pošiljevalnikih e-pošte in opravilih. Sprejme ključ, neobvezne interpolacijske spremenljivke in možnosti, kot sta privzeta vrednost in obseg. Rails v pogledih podpira lena iskanja, ki obseg ključev samodejno prilagodijo trenutnemu krmilniku in dejanju.
# 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')) %>Obravnavajte množinske oblike
Rails I18n uporablja množinske kategorije CLDR: zero, one, two, few, many in other. Angleščina potrebuje samo one in other, drugi jeziki pa več oblik. Množinske prevode določite kot ugnezdene ključe YAML pod kategorijami števila, ki jih zahtevajo Vaši ciljni jeziki.
# 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 verige nadomestnih jezikovnih različic
Vgrajeni I18n.fallbacks v Railsu omogoča le osnovno nadomeščanje od regionalne do privzete jezikovne različice. Uporabnik različice pt-BR pri manjkajočem ključu namesto pt-PT vidi angleščino. rails-locale-chain doda nastavljive verige z globokim združevanjem, tako da regionalni uporabniki vedno vidijo najbližji razpoložljivi 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"Avtomatizirajte prevode
Ko je nastavitev Rails I18n končana, svoje jezikovne datoteke YAML prevedite z umetno inteligenco. i18n Agent izvorno podpira YAML: pokažite mu izvorno jezikovno datoteko in ustvaril bo vse ciljne jezike, pri tem pa ohranil ugnezdene ključe, interpolacijske spremenljivke in množinske oblike.
# 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 enPogoste pasti
Napake InvalidPluralizationData
Lena iskanja zunaj pogledov
Napake v skladnji YAML pokvarijo vse prevode
Preizkusite i18n Agent zdaj
Spustite prevajalsko datoteko sem
JSON, YAML, PO, XML, CSV, Markdown, Properties
ali kliknite za izbiro
Ciljni jeziki