
Rails i18n: Πλήρης οδηγός διεθνοποίησης του Ruby on Rails
Από το πρώτο αρχείο locale έως την παραγωγή: ρυθμίστε το Rails I18n, χρησιμοποιήστε τη βοηθητική συνάρτηση t(), χειριστείτε τον πληθυντικό CLDR, διορθώστε συνήθεις παγίδες και προσθέστε έξυπνες αλυσίδες εναλλακτικών locale.
Κατανοήστε την αρχιτεκτονική του Rails I18n
Το Rails περιλαμβάνει ενσωματωμένο το gem I18n. Τα αρχεία μετάφρασης βρίσκονται στο config/locales/ ως αρχεία YAML (προεπιλογή) ή Ruby. Το framework παρέχει τη βοηθητική συνάρτηση t() (ψευδώνυμο του I18n.translate) σε views, controllers, models και mailers. Το 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Ρυθμίστε τις επιλογές locale
Ορίστε τα default_locale, available_locales και τη συμπεριφορά εναλλακτικής γλώσσας στο config/application.rb ή σε έναν initializer. Ρυθμίστε τον εντοπισμό locale στο ApplicationController χρησιμοποιώντας before_action, ώστε το locale να ορίζεται από το URL, τη συνεδρία, ένα cookie ή την κεφαλίδα 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"Χρησιμοποιήστε τη βοηθητική συνάρτηση t()
Η βοηθητική συνάρτηση t() είναι διαθέσιμη παντού στο Rails — σε views, controllers, models, mailers και jobs. Δέχεται ένα κλειδί, προαιρετικές μεταβλητές παρεμβολής και επιλογές όπως προεπιλεγμένες τιμές και scope. Στα views, το Rails υποστηρίζει σχετικές αναζητήσεις που περιορίζουν αυτόματα τα κλειδιά στον τρέχοντα controller και action.
# 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, αλλά άλλες γλώσσες απαιτούν περισσότερες μορφές. Ορίστε τις μεταφράσεις πληθυντικού ως ένθετα κλειδιά YAML κάτω από τις κατηγορίες count που απαιτούν οι γλώσσες προορισμού.
# 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) %>Προσθέστε αλυσίδες εναλλακτικών locale
Το ενσωματωμένο I18n.fallbacks του Rails παρέχει μόνο μια βασική μετάβαση από το περιφερειακό στο προεπιλεγμένο locale. Ένας χρήστης του 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, μεταφράστε τα αρχεία locale YAML με τη χρήση AI. Το i18n Agent υποστηρίζει εγγενώς το YAML — υποδείξτε του το αρχείο locale προέλευσης και θα δημιουργήσει τα αντίστοιχα αρχεία για όλες τις γλώσσες προορισμού, διατηρώντας τα ένθετα κλειδιά, τις μεταβλητές παρεμβολής και τις μορφές πληθυντικού.
# 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
Σχετικές αναζητήσεις εκτός των views
Τα συντακτικά σφάλματα YAML διακόπτουν όλες τις μεταφράσεις
Δοκιμάστε τώρα το i18n Agent
Αφήστε εδώ το αρχείο μετάφρασής σας
JSON, YAML, PO, XML, CSV, Markdown, Properties
ή κάντε κλικ για να επιλέξετε αρχείο
Γλώσσες-στόχοι