以下是我想做的事情,能够将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")
但我想避免这种情况。由于该方法的代码可读性较差。
答案 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