Этикетки простой формы I18n

Привет всем, в моем приложении я создаю окно поиска. Это выглядит так:

= simple_form_for :cars, {url: cars_path, method: :get} do |f|
  = f.input :handover_location, collection: Location.all.map{|hl| [hl.name, hl.id]}
  = f.input :return_location, collection: Location.all.map{|rl| [rl.name, rl.id]}
  = f.input :car_class, collection: CarClass.all.map { |c| [c.name, c.id] }, include_blank: true
  = f.submit 

И теперь я не знаю, как перевести эти метки с помощью I18n. Как я могу это сделать?


person Mateusz Urbański    schedule 14.05.2014    source источник


Ответы (2)


Ознакомьтесь с документацией по простой форме, касающейся i18n: https://github.com/plataformatec/simple_form#i18n

Описано очень хорошо, все подробно описано.

Так, например (из документации):

en:
  simple_form:
    labels:
      defaults:
        username: 'User name'
        password: 'Password'
        new:
          username: 'Choose a user name'
    hints:
      defaults:
        username: 'User name to sign in.'
        password: 'No special characters, please.'
    placeholders:
      defaults:
        username: 'Your username'
        password: '****'

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

Во-вторых, вы также можете сделать это явно, например так

= f.input :car, label: I18n.t('my_car_label'), prompt: I18n.t('my-car-prompt'), placeholder: I18n.t('my-placeholder')
person nathanvda    schedule 14.05.2014
comment
Я думаю, что это лучший ответ из-за того, что основное внимание уделяется драгоценному камню простой формы. - person nicohvi; 14.05.2014
comment
Документация в простой форме плохо описана только потому, что примеры содержат только вторую часть - словарь, а примера формы для этого словаря нет. Из вашего ответа я не могу понять, как должен выглядеть тег simple_form_for, либо вы не объяснили, как должен выглядеть словарь для формы в вопросе. - person pasha.zhukov; 10.02.2016
comment
Хотя это не так сложно, и документация хорошо это объясняет, зачем мне повторяться? Так или иначе, короче вы ничего не адаптируете в форме, а в переводе используете модель-название, а потом глубже пишете имя атрибута, мне это кажется очевидным. Вам нужен более конкретный пример? - person nathanvda; 12.02.2016

Во-первых, я бы начал с изучения документов, особенно части 3. Для форм, основанных на активных записи моделей, в Rails есть некоторая встроенная поддержка (см. часть 4.6 документации). Например, чтобы перевести название вашей модели Car во что-то отличное от «Автомобиль», вы можете сделать это:

# config/locales/en.yml
en:
  activerecord:
    models:
      car:
        one: Automobile
        other: Automobiles

(Замените выбранный вами язык на поддержку I18n.)

Однако, чтобы использовать I18n в целом, вы должны вызвать метод translate, предоставляемый Rails, сокращенно t. Пример:

= simple_form_for :cars, {url: cars_path, method: :get} do |f|
  ..
  = f.label t('forms.car_class')
  = f.input :car_class, collection: CarClass.all.map { |c| [c.name, c.id] }, include_blank: true
  ..
  = f.submit 

# config/locales/en.yml

en:
  forms:
    car_class: 'Automobile'

Который будет отображать метку с текстом: «Автомобиль».

person nicohvi    schedule 14.05.2014