Rails I18n locales'字符串中的操作

时间:2010-12-23 10:16:14

标签: ruby-on-rails ruby internationalization

我正在尝试将操作放在语言环境中以适应不同的语言。例如,英语中有10亿是1,000,000,000,而西班牙语中有10亿是1,000,000,000,000,所以我希望能够有以下内容:

en:
  billion: "You have %{money} billions"
es:
  billion: "Tienes %{money/1000.0} billones"

为了能够写:

I18n.t :billion, :money => whatever

适合任何语言。

但是,我似乎无法将操作放在locales的字符串中。

我应该如何做到这一点?也许我的方法是“错误的”哲学“说话?

全部谢谢!

3 个答案:

答案 0 :(得分:2)

根据调查,这是解决方案。很抱歉进行了多次修改。

I18n.interpolate("%{money} billion", :money => Proc.new{|x| x[:vals] / 1000}, :vals => 12121)

因此,您可以更改要使用的翻译文件:vals in:en和:money in:es。

en:
  billion: "You have %{money} billions"
es:
  billion: "Tienes %{money_proc} billones"

I18n.t :billion, {:money => 12121, :money_proc => Proc.new{|x| x[:money]/1000.0}}

答案 1 :(得分:1)

你能否在翻译中将'亿人'改为'mil millones'?

答案 2 :(得分:0)

I18n(判断力很好)不允许Ruby插值,YAML文件会很乱。 Rails助手number_to_human似乎支持你想要的东西。

[edit]单位是用冻结的哈希(ActionView :: Helpers :: DECIMAL_UNITS)修复的,所以除非你之前做过一些调整,否则number_to_human没用。