【问题标题】:Rails 3/3.1 and I18n: Validation hits when switching between languagesRails 3/3.1 和 I18n:在语言之间切换时验证命中
【发布时间】:2012-01-17 12:51:25
【问题描述】:

数据库以英语语言和格式的值作为种子,例如 :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>

宝石文件

gem 'rails-i18n'

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2018-02-09
      • 2021-09-11
      相关资源
      最近更新 更多