I18n Rails список поддерживаемых локалей (констант) - PullRequest
0 голосов
/ 04 января 2012

Итак, вот что я хотел бы сделать, чтобы иметь доступ к локали 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 голосов
/ 04 января 2012

Вы можете сократить свой второй оператор до 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...