Ruby on Rails + Devise + I18n:如何设置语言环境?

时间:2012-07-04 16:50:33

标签: ruby-on-rails ruby internationalization devise

我在ApplicationController中使用before_filter为我的应用程序设置语言环境:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :set_locale

  def set_locale
    I18n.locale = request.compatible_language_from ["uk", "ru", "de", "en"]
  end
end

适用于由我编写的控制器。但所有设计的消息仍然是英文。

config.i18n.default_locale = "uk"中设置config/application.rb(或其他)是有效的,所以我想问题是设计的控制器不使用我的before_filter(可能,它根本不会继承ApplicationController (?))。

如何解决此问题?如何设计使用我的语言环境?

4 个答案:

答案 0 :(得分:3)

看看Devise Wiki https://github.com/plataformatec/devise/wiki/I18n 他们有很多YML文件样本。

如果你还想写自己的,请尝试在你的I18n文件中使用这样的东西

en:
  devise:
    sessions:
      signed_in: 'Signed in successfully.'

有关GitHub的更多信息https://github.com/plataformatec/devise#i18n

答案 1 :(得分:0)

您需要使用filename=parameters.txt while IFS=: read -r first second; do if [ “$first” == “sheet_name” ]; then echo ‘matched’ else echo “not matched“ fi done < $filename (或prepend_before_action,但它是prepend_before_filter的别名,很快就会被弃用)所以您应该使用以下内容:

prepend_before_action

注意,这可能会破坏视图中的class ApplicationController < ActionController::Base protect_from_forgery prepend_before_action :set_locale private def set_locale I18n.locale = request.compatible_language_from [:uk, :ru, :de, :en] end end ,因此您可能需要在其他I18n.locale中进行设置。

答案 2 :(得分:0)

我有这个问题,我的法语设计语言环境正在为每个人加载,问题是我的设计语言环境最初是在他们自己的文件中构建的 - __set()。我将它们移到devise.en.yml文件中,一切都已修复。

希望这有助于将来的某个人!

答案 3 :(得分:0)

您可以通过以下方式在config/application.rbconfig/initializers/locale.rb中设置默认语言环境:

# Set default locale to something other than :en
I18n.default_locale = :fa

根据Rails Guides

的建议

然后,您应该添加相关的yml翻译文件,例如:fa.yml。文件应位于存在默认locales文件的en目录中。您还可以设置要加载的自定义目录。