我有一个多语言Rails 4.0.2 / Ruby 2.1.0应用程序。 Devise用于启用电子邮件/密码+ Facebook oAuth。 我页面上的翻译工作正常; 这更多是关于路由。
我遇到问题的功能流程:
before_action :authenticate_user!, only: :vote
目前最大的问题是Devise失去了当前的I18n.locale设置。 所以我不会去:locale / account / welcome我被重定向到account / welcome。 我试图用新的应用程序复制行为,果然, 我的问题突然出现了。
如何使用Devise将应用程序流保存在I18n.locale上下文中 它是auth / registration / redirects的默认流程吗?
class GalleryController < ApplicationController
include ApplicationHelper
skip_before_action :set_locale, only: :vote
before_action :authenticate_user!, only: :vote
def vote
…
end
end
来自ApplicationController
的before_action:
class ApplicationController < ActionController::Base
def set_locale
# trying to set language with params[:locale]
if MyApp.valid_locale?(params[:locale])
I18n.locale = cookies.permanent[:locale] = params[:locale]
else
store_location
redirect_to root_url unless :devise_controller?
end
end
end
答案 0 :(得分:1)
尝试将此方法添加到ApplicationController
def self.default_url_options
{ locale: I18n.locale }
end
答案 1 :(得分:0)
尝试在会话中保存当前区域设置
# ApplicationController
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || session[:locale] || I18n.default_locale
session[:locale] = I18n.locale
end
def default_url_options(options = {})
{ locale: I18n.locale }.merge options
end