Создать тег выбора из опций проверки с I18N - PullRequest
4 голосов
/ 20 января 2012

Можно ли создать тег выбора из проверки моделей без проблем с I18N?

Например, если бы у меня была такая модель:

Модель:

class Coffee < ActiveRecord::Base
  SIZES = [ "small", "medium", "big" ]
  validates :size, :inclusion => { :in => SIZES,
    :message => "%{value} is not a valid size" }
end

Форма:

<%= f.label :size %><br />  
<%= select(:coffee, :size, Coffee::SIZES.collect {|d| [d, d]}) %>

Как я могу сделать этот язык независимым?

Ответы [ 2 ]

5 голосов
/ 23 января 2012

Лучший способ справиться с этим - иметь независимые от локали значения в БД и локализованные метки в пользовательском интерфейсе.Вы можете добиться этого, изменив параметры для вашего выбора следующим образом:

<%= select(:coffee, :size, Coffee::SIZES.collect {|d| [I18n.t(d), d]}) %>

и имея это в вашем файле локали:

some-language:
  small:  "small-translation"
  medium: "medium-translation"
  big:    "big-translation"

Это будет генерировать HTML так:1008 *

Пользователь увидит локализованные опции в select, но в параметрах запроса будут опубликованы независимые от локали значения, поэтому ваша проверка будет работать как надо.

4 голосов
/ 23 января 2012

Если вы пытаетесь сделать сообщение проверки независимым, вам на самом деле не нужно указывать, какой размер является недопустимым, просто это так.Вы передаете форму выбора HTML, если они выбрали другой размер, скорее всего, они что-то связывают, поэтому точное сообщение об ошибке не требуется.

Для самого выделенного текста вы можете просто передать егоСистема i18n и справиться с этим в этом.Создав массив с Coffee::SIZE.collect {|d| [t(".#{d}"), d]}, вы можете добавить small, medium, big в ваш файл i18n для этого представления, чтобы получить локализованные значения на основе ваших параметров проверки.

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