【问题标题】:I18n Rails list of supported locales (constants)I18n Rails 支持的语言环境列表(常量)
【发布时间】:2012-01-04 14:48:34
【问题描述】:
以下是我想做的,能够以常量访问 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")
但我想避免这种情况。由于这种方法的代码可读性较差。
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-3
internationalization
【解决方案1】:
您可以将第二个语句缩短为 if (I18n.locale == :en) 而不是转换为字符串,但是这仍然缺少使用 Rails 语言环境支持的意义。例如,使用这个 yml 文件:
en:
hello: "Hello world!"
fr:
hello: "Bonjour tout le monde !"
你应该能够在没有任何条件语句的情况下做到这一点:
puts I18n.translate(:hello)
它会给你适当的翻译。
如果您真的希望能够像第一个示例一样执行操作,那么您可以在 Symbol 类上覆盖 method_missing。如果你这样做了:
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