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

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

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

config/application.rb中设置config.i18n.default_locale = "uk"(或其他)有效,因此我猜测问题是devise的控制器不使用我的before_filter(可能它根本没有继承ApplicationController?)。

如何解决这个问题?如何使devise使用我的语言环境?


1
Devise使用您的应用程序ApplicationController。这可以通过parent_controller设置进行配置。 - phoet
@Hauleth 是的,我做了。如果我在application.rb中使用config.i18n.default_locale将非英语区域设置为默认值,则它们可以正常工作。 - frp
4个回答

4

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中设置它。

0

我曾经遇到这样一个问题,我的法语设备本地化文件对于所有人都在加载,问题是我的设备本地化文件最初是建立在它们自己的文件中 - devise.en.yml。我将它们移动到en.yml文件中,问题得到了解决。

希望这能帮助未来的某个人!


0
你可以通过以下方式在 config/application.rbconfig/initializers/locale.rb 中设置默认的语言环境:
# Set default locale to something other than :en
I18n.default_locale = :fa

Rails指南所建议的那样

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接