0

我正在使用omniauth-facebook带有 rails 3.2 的 gem 并设计 2.0。

我有一个网站,有 2 种语言,英语和西班牙语。

http://localhost:3000/en http://localhost:3000/es

gem 适用于英语用户,因为在omniauth_callbacks_controller.rb中重定向转到http://localhost:3000/en

这是我的 facebook 的omniauth_callbacks_controller.rb

def facebook
    @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
    if @user.persisted?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
      sign_in_and_redirect @user, :event => :authentication
    else
      session["devise.facebook_data"] = request.env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end

然后问题是西班牙用户。如果他们使用http://localhost:3000/es回调中的重定向转到http://localhost:3000/en

我希望从回调重定向到使用该用户的特定语言。

我该怎么做?

谢谢!

4

2 回答 2

4

我有类似的问题,并没有找到更改回调 url 的方法,但我可以在回调发生时在方法中设置语言环境。

原始网址(具有原始正确的语言环境)存储在request.env['omniauth.origin']

因此,在facebook方法中从原始 url 中选择语言环境,它与域部分后面的两个字母类似。

我在方法的开头添加了facebook

I18n.locale = exctract_locale_from_url(request.env['omniauth.origin']) if request.env['omniauth.origin']

exctract_locale_from_url是一个可怕的正则表达式:)

def exctract_locale_from_url(url)
  url[/^([^\/]*\/\/)?[^\/]+\/(\w{2})(\/.*)?/,2]
end
于 2012-05-19T02:06:35.570 回答
0

我认为您必须将您的omniauth 配置提取到yaml 文件并将“#{i18n.locale}”插入到回调链接的末尾。

于 2012-04-19T17:00:11.240 回答