Как перевести модель в пространство имен классов / модулей Ruby? - PullRequest
40 голосов
/ 08 октября 2011

У меня есть модель Товары :: Авто. Как я могу перевести его атрибуты?

Я уже пробовал это:

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

А это:

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

Но если я попытаюсь использовать Products :: Car.model_name.human, все равно будет написано "Car". Мои другие переводы работают хорошо, и язык установлен на: ru.

Ответы [ 2 ]

102 голосов
/ 08 октября 2011

Я проверил исходный код '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: "Владелец"

и это работает!

EDIT:

Для дальнейшего использования: i18n_key установлен в инициализаторе ActiveModel::Name https://github.com/rails/rails/blob/375a4143cf5caeb6159b338be824903edfd62836/activemodel/lib/active_model/naming.rb#L147

и он просто основан на

MyClass.name.underscore
0 голосов
/ 25 февраля 2013

По состоянию на рельсы 3.2.12, похоже, он снова преобразован в следующее:

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

И products/car: "Автомобиль" больше не работает

...