简单形式I18n标签

时间:2014-05-14 07:54:38

标签: ruby-on-rails internationalization simple-form

大家好,在我的应用中,我建立了一个搜索框。它看起来像这样:

= 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翻译这些标签。我怎么能这样做?

2 个答案:

答案 0 :(得分:11)

查看有关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')

答案 1 :(得分:2)

首先,我首先阅读docs,特别是第3部分。对于基于活动记录模型的表单,Rails有一些自定义内置支持(参见文档的第4.6部分)。例如,要将您的Car模型名称转换为“Car”以外的其他名称,您可以这样做:

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

(替换您选择的语言以支持I18n。)

但是,要使用I18n,您可以调用Rails提供的translate方法,缩写为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'

这将使用文本呈现标签:'Automobile'。