
Rails i18n: Ruby on Rails अंतरराष्ट्रीयकरण की संपूर्ण गाइड
पहली लोकेल फ़ाइल से प्रोडक्शन तक: Rails I18n कॉन्फ़िगर करें, t() हेल्पर का उपयोग करें, CLDR बहुवचन संभालें, आम समस्याएँ ठीक करें और बेहतर लोकेल फ़ॉलबैक चेन जोड़ें।
Rails I18n आर्किटेक्चर को समझें
Rails में I18n gem पहले से शामिल होता है। अनुवाद फ़ाइलें config/locales/ में YAML (डिफ़ॉल्ट) या Ruby फ़ाइलों के रूप में रहती हैं। फ़्रेमवर्क व्यू, कंट्रोलर, मॉडल और मेलर में t() हेल्पर (I18n.translate का उपनाम) उपलब्ध कराता है। Rails I18n को जानबूझकर सरल रखा गया है—यह बिना किसी अतिरिक्त सेटअप के बुनियादी अनुवाद, इंटरपोलेशन और बहुवचन संभालता है।
# 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
endलोकेल सेटिंग्स कॉन्फ़िगर करें
config/application.rb या किसी इनिशियलाइज़र में default_locale, available_locales और फ़ॉलबैक व्यवहार सेट करें। URL, सेशन, कुकी या Accept-Language हेडर से लोकेल सेट करने के लिए before_action का उपयोग करके अपने ApplicationController में लोकेल की पहचान कॉन्फ़िगर करें।
# 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() हेल्पर का उपयोग करें
t() हेल्पर Rails में हर जगह उपलब्ध है—व्यू, कंट्रोलर, मॉडल, मेलर और जॉब में। यह एक कुंजी, वैकल्पिक इंटरपोलेशन वेरिएबल और डिफ़ॉल्ट मान तथा स्कोप जैसे विकल्प स्वीकार करता है। व्यू में Rails लेज़ी लुकअप का समर्थन करता है, जो कुंजियों का स्कोप अपने-आप मौजूदा कंट्रोलर और एक्शन के अनुसार तय करता है।
# 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')) %>बहुवचन संभालें
Rails I18n इन CLDR बहुवचन श्रेणियों का उपयोग करता है: zero, one, two, few, many, other। अंग्रेज़ी में केवल one और other की आवश्यकता होती है, लेकिन अन्य भाषाओं में अधिक रूपों की आवश्यकता होती है। अपनी लक्षित भाषाओं के लिए आवश्यक count श्रेणियों के अंतर्गत बहुवचन अनुवादों को नेस्ट की गई YAML कुंजियों के रूप में परिभाषित करें।
# 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) %>लोकेल फ़ॉलबैक चेन जोड़ें
Rails में अंतर्निहित I18n.fallbacks क्षेत्रीय लोकेल से डिफ़ॉल्ट लोकेल तक केवल बुनियादी फ़ॉलबैक देता है। किसी कुंजी के न होने पर pt-BR यूज़र को pt-PT के बजाय अंग्रेज़ी दिखाई देती है। rails-locale-chain कॉन्फ़िगर की जा सकने वाली डीप-मर्ज चेन जोड़ता है, जिससे क्षेत्रीय यूज़र को हमेशा निकटतम उपलब्ध अनुवाद दिखाई देता है।
# 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 I18n का सेटअप पूरा होने के बाद AI का उपयोग करके अपनी YAML लोकेल फ़ाइलों का अनुवाद करें। i18n Agent, YAML का मूल रूप से समर्थन करता है—इसे अपनी स्रोत लोकेल फ़ाइल दें और यह नेस्ट की गई कुंजियों, इंटरपोलेशन वेरिएबल और बहुवचन रूपों को सुरक्षित रखते हुए सभी लक्षित भाषाएँ जनरेट कर देगा।
# 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आम समस्याएँ
InvalidPluralizationData त्रुटियाँ
व्यू के बाहर लेज़ी लुकअप
YAML सिंटैक्स की त्रुटियाँ सभी अनुवादों को रोक देती हैं
i18n Agent अभी आज़माएँ
अपनी अनुवाद फ़ाइल यहाँ छोड़ें
JSON, YAML, PO, XML, CSV, Markdown, Properties
या ब्राउज़ करने के लिए क्लिक करें
लक्षित भाषाएँ