Skip to main content

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.

1

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.

config/application.rb
# 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
# 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
end
Rails, config/locales/ içindeki tüm .yml ve .rb dosyalarını otomatik olarak yükler. Bunları istediğiniz gibi düzenleyebilirsiniz: dile göre (en.yml, de.yml), özelliğe göre (en/users.yml, en/orders.yml) veya her ikisine göre (en/users.yml, de/users.yml). Rails tüm dosyaları başlatma sırasında birleştirir.
2

Yerel 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
# 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"
I18n.locale değerini before_action içinde belirlemek istek başına güvenlidir, ancak I18n.default_locale değerini çalışma zamanında belirlemek küresel düzeyde etkilidir ve tüm iş parçacıklarını etkiler. İstek kapsamındaki yerel ayar değişikliklerinde her zaman I18n.locale (iş parçacığına özel) kullanın, hiçbir zaman I18n.default_locale kullanmayın.
3

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.

app/views/example.html.erb
# 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')) %>
4

Ç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.

Plural forms
# 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) %>
Etkin yerel ayar için gerekli çoğul kategorisi eksikse Rails, I18n::InvalidPluralizationData hatası oluşturur. Rusça yerel ayarınız yalnızca İngilizceden kopyalanmış one ve other biçimlerini tanımlıyorsa 2, 3 ve 4 gibi sayılar çökmeye yol açar; çünkü Rusça few kategorisini gerektirir. Her dil için tüm CLDR kategorilerini mutlaka tanımlayın.
5

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
# 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"
rails-locale-chain, 11 dil ailesini kapsayan 75+ yerleşik geri dönüş zinciriyle gelir. Bunu Gemfile dosyanıza ekleyip bir başlatıcıda yapılandırdığınızda bölgesel kullanıcılar İngilizce boşluklar yerine hemen üst yerel ayar çevirilerini görür.
6

Ç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.

config/initializers/locale_chain.rb
# 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 en
Artımlı çeviri yapın; yeni anahtarlar eklediğinizde yalnızca farkı çevirin. Böylece mevcut çeviriler korunur ve değişmeyen dizeler yeniden oluşturulmaz.

Yaygın sorunlar

InvalidPluralizationData hataları

Gerekli bir CLDR çoğul kategorisi eksik olduğunda Rails, I18n::InvalidPluralizationData hatasıyla çöker. Bu durum en çok İngilizce çoğul biçimleri (one/other), daha fazla kategori gerektiren dillere kopyalandığında görülür (Rusça few, Arapça zero/two/few/many gerektirir). Doğru CLDR kuralları için rails-i18n'i yükleyin ve tüm kategorileri tanımlayın.

Görünümler dışında kısa aramalar

Kısa aramalar (t('.key')) yalnızca Rails'in denetleyiciyi ve eylemi bildiği görünümlerde çalışır. Bir modelde, posta göndericisinde veya hizmet nesnesinde t('.key') kullanmak eksik çeviri hatası döndürür. Görünümlerin dışında tam anahtarları (t('users.show.key')) kullanın.

YAML söz dizimi hatalarının tüm çevirileri bozması

Tek bir YAML söz dizimi hatası (hatalı girinti, tırnak içine alınmamış özel karakterler, boşluk yerine sekme) yerel ayar dosyasının tamamının yüklenmesini engeller. Dosyadaki tüm çeviriler eksik anahtar hatası döndürür. YAML dosyalarını CI içinde bir denetleyiciyle doğrulayın ve iki nokta, köşeli ayraç ya da başta özel karakter içeren dizeleri tırnak içine alın.

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

Kayıt gerekmezAnında fiyat tahmini

Rails i18n hakkında sık sorulan sorular