I18n Rails支持的语言环境列表(常量)

时间:2012-01-04 14:48:35

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

以下是我想做的事情,能够将I18n语言环境作为常量访问。例如:

if (I18n.locale == I18n.locales.en)
puts "You are using viewing page in english"
end

有没有办法访问这些常量(I18n.locales.en只是澄清的例子)?我总是可以写

if (I18n.locale.to_s == "en")

但我想避免这种情况。由于该方法的代码可读性较差。

1 个答案:

答案 0 :(得分:0)

您可以将第二个语句缩短为if (I18n.locale == :en)而不是转换为字符串,但是仍然没有使用Rails'语言环境支持。例如,使用此yml文件:

en:
  hello: "Hello world!"
fr:
  hello: "Bonjour tout le monde !"

你应该能够在没有任何条件陈述的情况下做到这一点:

puts I18n.translate(:hello)

它会给你适当的翻译。

如果您真的希望能够像第一个示例那样做,那么您可以覆盖method_missing类上的Symbol。如果你这样做了:

class Symbol
  def method_missing(method_name, *arguments)
    if method_name.to_s[-1,1] == "?"
      self.to_s == method_name.to_s[0..-2]
    else
      super
    end
  end
end

然后你可以这样做:

if I18n.locale.en?
  puts "english"
end