6

私は小さなテーブルを持っています:

create_table :cities do |t|
  t.string :name
end

「名前」列を国際化する必要があり、このために別のテーブルを作成したくありません。「都市」テーブルに翻訳用の列を追加することは可能ですか? 結果として、このテーブルの移行は次のようになります。

create_table :cities do |t|
 t.string :en_name
 t.string :de_name
 t.string :fr_name
end

現在、「globalize」gem を使用しようとしていますが、これには他のソリューションを使用する必要があるかもしれません。アドバイスをお願いします。

4

1 に答える 1

1

標準的な方法は、globalize gem で変換テーブルを使用することです。globalize gem を使用したくない場合は、次のようにします。

class City < ActiveRecord::Base
   AVAILABLE_LOCALES = [:en, :de, :fr]
   def name
     current_locale = I18n.locale
     if AVALIABLE_LOCALES.include? current_locale
        self.send("#{current_locale.to_s}_name")  
     else
        #default language to use
        self.en_name
     end
   end
end

これは、アクセサー (name 関数) のコードを示しているだけです。現在のロケールに基づいて値を設定できるように、ミューテーター (name= 関数) を記述することもできます。I18n.locale は現在のロケールを提供します。

于 2014-08-01T13:23:04.240 に答える