使用设计和轨道时,基于每个用户设置区域设置3

时间:2010-11-27 14:41:13

标签: ruby-on-rails ruby-on-rails-3 devise

我刚刚通过我的一个应用程序将身份验证从authlogic转换为设计。总的来说,这一直非常简单,但有一个问题我找不到一个简单的解决办法。

在应用程序中,用户可以选择他们的区域设置。然后,无论何时登录,他们都会以他们选择的语言查看应用程序。以前,我只需在UserSessions控制器的create方法中设置区域设置即可。

使用Devise,所有控制器都会自动设置,这很棒。我知道我可以创建一个扩展DeviseController的自定义控制器,并按照我的理解这样做,但这意味着我还需要创建所有视图以便与它一起使用,这似乎有点过头了只需要运行一行额外的代码。

是否有更简单的方法来指定要在成功的设计认证上运行的代码?

2 个答案:

答案 0 :(得分:2)

我找到了我正在寻找的解决方案here

由于我只想在用户登录时设置区域设置,我只需要将以下方法添加到我的ApplicationController

def after_sign_in_path_for(resource_or_scope)

  if resource_or_scope.is_a?(User) && resource_or_scope.locale !=  I18n.locale
    I18n.locale = resource_or_scope.locale
  end

  super
end

答案 1 :(得分:0)

你执行了rails generate devise:views吗?这将为您输出Devise视图文件,然后您应该能够将它们移动到与新的扩展Devise控制器名称匹配的位置。

Devise可识别语言环境,这意味着您的视图应自动为您加载语言翻译。

您需要做的就是在rails应用程序的根“locales”文件夹中为您希望支持的每种语言翻译提供“devise。[:locale] .yml”文件。

Devise wiki提供了大量的语言环境翻译,可以为您节省一些工作:

https://github.com/plataformatec/devise/wiki/I18n