Ruby クラス/モジュール名前空間でモデルを翻訳するにはどうすればいいですか? 質問する

Ruby クラス/モジュール名前空間でモデルを翻訳するにはどうすればいいですか? 質問する

Products::Car というモデルがあります。その属性を翻訳するにはどうすればよいでしょうか?

私はすでにこれを試しました:

activerecord: 
  models:
    products:
      car: "Автомобиль"
  attributes:
    products:
      car:
        owner: "Владелец"

この:

activerecord: 
  models:
    products_car: "Автомобиль"
  attributes:
    products_car:
      owner: "Владелец"

しかし、Products::Car.model_name.human を使用しようとすると、依然として「Car」と表示されます。他の翻訳は正常に機能し、言語は :ru に設定されています。

ベストアンサー1

'model_name.human' ソースコードをチェックし、 'i18n_key' メソッドを見つけました。これを試しました:

irb(main):006:0> Products::Car.model_name.i18n_key
=> :"products/car"

次に、yml ファイルを次のように変更しました。

activerecord:    
  models:
    products/car: "Автомобиль"   
  attributes:
    products/car:
      owner: "Владелец"

そしてそれは機能します!

編集:

さらに詳しい情報: は、i18n_keyの初期化子で設定されます。ActiveModel::Name https://github.com/rails/rails/blob/375a4143cf5caeb6159b338be824903edfd62836/activemodel/lib/active_model/naming.rb#L147

それは単純に

MyClass.name.underscore

おすすめ記事