在我的rails应用程序中,我使用应用程序控制器中的I18n.locale
以及从设备控制器继承的任何控制器(Confirmations,Password和Sessions控制器)基于子域设置before_filter
)。
def set_locale
unless Rails.env.test?
sd = request.subdomain.to_s[-2..-1]
I18n.locale = I18n.available_locales.map(&:to_s).include?(sd) ? sd : I18n.default_locale
end
end
我还包括相应的设计语言文件,并且我的所有设计消息都以正确的语言显示,除非会话超时。在这些情况下,消息随机显示,有时以正确的语言显示,有时不显示。我相信它不是在查看当前的子域来设置语言,而是在上次向服务器发出请求时使用了设置的语言环境。
我认为这可能与Devise FailureApp有关,所以在lib / custom_failure.rb中继承了Devise FailureApp我也在那里设置了语言环境但是仍然没有用。
我目前正在使用黑客,我将devise.failure.timeout
消息设置为空字符串,如果我在闪存通知中检测到空字符串,则设置flash[:alert] = t('devise.failure.timedout)
。 Timedout是一个自定义设计消息,在我入侵之前设置为devise.failure.timeout
应该是什么。
这是Devise的问题,还是我需要设置语言环境时缺少Devise控制器,我们将非常感谢任何帮助。