
Rails i18n: eksiksiz Ruby on Rails uluslararasılaştırma rehberi
İlk yerel ayar dosyasından üretime kadar Rails I18n'i yapılandırın, t() yardımcısını kullanın, CLDR çoğul biçimlerini yönetin, yaygın sorunları düzeltin ve akıllı yerel ayar geri dönüş zincirleri ekleyin.
Rails I18n mimarisini anlayın
Rails, yerleşik I18n gem'i ile birlikte gelir. Çeviri dosyaları config/locales/ içinde varsayılan olarak YAML veya Ruby dosyaları biçiminde bulunur. Görünümlerde, denetleyicilerde, modellerde ve posta göndericilerinde I18n.translate işlevinin diğer adı olan t() yardımcısını kullanabilirsiniz. Rails I18n bilinçli olarak sade tasarlanmıştır; temel çeviriyi, değer yerleştirmeyi ve çoğul biçimlerini kullanıma hazır olarak yönetir.
# 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
endYerel ayar seçeneklerini yapılandırın
default_locale, available_locales ve geri dönüş davranışını config/application.rb içinde veya bir başlatıcıda belirleyin. Yerel ayarı URL, oturum, çerez veya Accept-Language üst bilgisinden belirlemek için ApplicationController içinde before_action kullanarak yerel ayar algılamayı yapılandırın.
# 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"t() yardımcısını kullanın
t() yardımcısı Rails'in her yerinde kullanılabilir: görünümler, denetleyiciler, modeller, posta göndericileri ve işler. Bir anahtarı, isteğe bağlı değer yerleştirme değişkenlerini ve varsayılan değerler ile kapsam gibi seçenekleri kabul eder. Rails, görünümlerde anahtarları geçerli denetleyiciye ve eyleme göre otomatik olarak kapsamlandıran göreli aramaları destekler.
# 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')) %>Çoğul biçimleri yönetin
Rails I18n şu CLDR çoğul kategorilerini kullanır: zero, one, two, few, many, other. İngilizce yalnızca one ve other kategorilerine ihtiyaç duyar, ancak diğer diller daha fazla biçim gerektirir. Çoğul çevirilerini hedef dillerinizin gerektirdiği count kategorileri altında iç içe YAML anahtarları olarak tanımlayın.
# 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) %>Yerel ayar geri dönüş zincirleri ekleyin
Rails'in yerleşik I18n.fallbacks özelliği, bölgesel yerel ayardan varsayılan yerel ayara yalnızca temel bir geri dönüş sağlar. Eksik anahtarla karşılaşan pt-BR kullanıcısı pt-PT yerine İngilizce görür. rails-locale-chain, yapılandırılabilir derin birleştirme zincirleri ekleyerek bölgesel kullanıcıların her zaman mevcut en yakın çeviriyi görmesini sağlar.
# 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"Çevirileri otomatikleştirin
Rails I18n kurulumunuz tamamlandıktan sonra YAML yerel ayar dosyalarınızı yapay zeka kullanarak çevirin. i18n Agent, YAML'ı yerel olarak destekler; kaynak yerel ayar dosyanızı gösterdiğinizde iç içe anahtarları, yerleştirme değişkenlerini ve çoğul biçimlerini koruyarak tüm hedef dilleri oluşturur.
# 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 enYaygın sorunlar
InvalidPluralizationData hataları
Görünümler dışında kısa aramalar
YAML söz dizimi hatalarının tüm çevirileri bozması
i18n Agent'ı şimdi deneyin
Çeviri dosyanızı buraya bırakın
JSON, YAML, PO, XML, CSV, Markdown, Properties
veya göz atmak için tıklayın
Hedef diller