Перевести Rails модельную ассоциацию - не работает - PullRequest
7 голосов
/ 13 февраля 2012

У кого-нибудь есть несколько советов, как переводить ассоциации моделей в Rails?

Например: у меня есть модель Person, в которой может быть много телефонов.Однако человеку необходимо иметь хотя бы один телефон.Я не могу перевести это подтверждение.Лучшее, что я мог сделать, это:

validates_presence_of :phones, :message => "At least one phone is required."

И в моем YAML я заменил эту строку, чтобы пропустить %{attribute}:

format: ! '%{message}'

Таким образом отображается только мое сообщение,и я избегаю отображения непереведенного имени поля.

Это вызывает у меня сильную головную боль, потому что некоторые драгоценные камни просто не позволяют мне пропустить :message => "something describing the error", поэтому я хотел настроить всесообщения об ошибках через мой YAML.

Кроме того, с некоторыми моделями я могу переводить их атрибуты, а с другими - нет.Например:

activerecord:  
  attributes:
    additional_info:
      account_manager: "Manager"

Это работает.Я могу видеть в моей форме "Менеджер".Однако, когда в этом поле есть ошибка, Rails отобразит его как "Additional info account manager can't be blank".

Я попробовал это:

activerecord:          
  errors:
    models:
      additional_info:
        attributes:
          account_manager: "Manager"

Но не повезло.

Я читал документы, но понятия не имел, почему это происходит.

Ответы [ 2 ]

10 голосов
/ 30 июня 2015

Вот правильные пути ключей для Rails 4.1:

# Basic Attribute on Model
activerecord:
  attributes:
    #{model_class.model_name.i18n_key}:
      #{attribute_name}:
        "Localized Value"

# Attribute on Nested Model
activerecord:
  attributes:
    #{model_class.model_name.i18n_key}/#{association_name}:
      #{attribute_name}:
        "Localized Value"
    #{association_name}:
      #{attribute_name}:
        "Fallback Localized Value"

Итак, учитывая данную модель (которая имеет i18n_key из :person):

class Person
  has_many :friends
end

У вас будут следующие определения локалей:

activerecord:
  attributes:
    person:
      first_name:
        "My Name"
    person/friends:
      first_name:
        "My Friend's Name"
    friends:
      first_name:
        "A Friend's Name"

Если ваша модель является пространством имен, например:

class MyApp::Person
  has_many :friends
end

i18n_key становится :my_app/person, а ваша / клавиша начинает изнашиваться:

activerecord:
  attributes:
    my_app/person:
      first_name:
        "My Name"
    my_app/person/friends:
      first_name:
        "My Friend's Name"
    friends:
      first_name:
        "A Friend's Name"
10 голосов
/ 14 февраля 2012

Rails 3.2 изменил это поведение.То, как я писал ранее, не рекомендуется.

Теперь, чтобы перевести ассоциации, необходимо добавить косую черту (вместо того, чтобы вкладывать все).Поэтому вместо этого:

    activerecord:
      attributes:
        person:
          additional_info:
            account_manager: "Manager"

Теперь верно:

    activerecord:
      attributes:
        person:
          additional_info/account_manager: "Manager"

Также я выяснил, что has_many ассоциации переводятся не так, как это.Если вы хотите перевести их, может помочь следующий пример:

    activerecord:
      attributes:
         emails:
           address: "E-mail field"

Вместо названия модели, как я делал выше, вам нужно передать имя ассоциации, в данном случае emails.

Проверьте этот комментарий и запросите дополнительную информацию:

https://github.com/rails/rails/commit/c19bd4f88ea5cf56b2bc8ac0b97f59c5c89dbff7#commitcomment-619858

https://github.com/rails/rails/pull/3859

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...