8

我在 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

4 回答 4

4

看看 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

于 2013-04-09T19:49:33.900 回答
0

您需要使用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您的视图,因此您可能需要将其设置为额外的before_action.

于 2016-08-11T13:10:05.817 回答
0

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

希望这对将来的人有所帮助!

于 2017-01-09T00:48:55.633 回答
0

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

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

正如Rails 指南所建议的那样

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

于 2020-11-02T05:34:11.520 回答