【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2011-02-28
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2019-04-23
      相关资源
      最近更新 更多