我刚刚通过我的一个应用程序将身份验证从authlogic转换为设计。总的来说,这一直非常简单,但有一个问题我找不到一个简单的解决办法。
在应用程序中,用户可以选择他们的区域设置。然后,无论何时登录,他们都会以他们选择的语言查看应用程序。以前,我只需在UserSessions控制器的create方法中设置区域设置即可。
使用Devise,所有控制器都会自动设置,这很棒。我知道我可以创建一个扩展DeviseController的自定义控制器,并按照我的理解这样做,但这意味着我还需要创建所有视图以便与它一起使用,这似乎有点过头了只需要运行一行额外的代码。
是否有更简单的方法来指定要在成功的设计认证上运行的代码?
答案 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提供了大量的语言环境翻译,可以为您节省一些工作: