Rails 3 / 3.1和I18n:在语言之间切换时验证命中

时间:2012-01-17 12:51:25

标签: ruby-on-rails-3 internationalization ruby-on-rails-3.1

数据库以英语和格式的值播种,例如:hourlyrate => 20.90。首次启动时(语言默认为英语),输入表单会正确显示字段的内容。我可以修改并保存,没问题。 如果我切换到德语,则数字正确显示为20,90。如果我在此表单上编辑任何内容,则无法再次保存,因为验证会将该数字视为无效。

我的问题是,在保存之前我是否必须在控制器中执行更正,或者我是否错过了Rails的一些内置函数?

代码的相关部分

助手:

def my_number_with_precision(value)
  if value 
    # value
    number_with_precision(value, :precision => 2)
  end  
end

验证:

validates :hourlyrate, :numericality => { :greater_or_equal_than => 0, :message => " is an invalid number or below zero" }

形式:

<div class="input">
  <%= f.text_field :hourlyrate, :value => my_number_with_precision(f.object.hourlyrate) %>
</div>

的Gemfile

gem 'rails-i18n'

1 个答案:

答案 0 :(得分:0)

我提出了以下解决方案之一 - 语言特定代码:

def parse_i18n(value)
  if I18n.locale = 'de' 
    value.gsub(',', '.')
  else
    value
  end
end

def parse_i18n(value)
  value.gsub(I18n.t("number.currency.format.unit"),'').
        gsub(I18n.t("number.currency.format.delimiter"), '').
        gsub(I18n.t("number.currency.format.separator"), '.') 
end