我在ActiveAdmin中使用Rails 4。 这是我的应用程序控制器,用于检测用户的区域设置:
def set_locale
I18n.locale = params[:locale] ||
extract_locale_from_accept_language_header ||
I18n.default_locale
end
# adds current locale to each url
def default_url_options(options={})
{ locale: I18n.locale }
end
def extract_locale_from_accept_language_header
locale = request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
locale if ['uk', 'en', 'ru'].include? locale.to_s
end
这适用于用户界面,但它也会更改ActiveAdmin转换。
如何为ActiveAdmin保留英语区域设置?
我想像I18n.locale = :en if ActiveAdmin
这样的东西应该是用户。
答案 0 :(得分:0)
是的,这就是想法。
例如,如果您为AdminUsers和Users使用具有单独模型的设计,则可以执行类似
的操作if current_admin_user
I18n.locale = :en #or better: default_locale
else
#Your logic
end
如果admin和user都是同一个模型,并带有一个区分它们的标志,那么在模型中添加一个is_admin方法,返回true false,并带有你想要的任何标志并去:
if current_user.is_admin?
I18n.locale = :en #or better: default_locale
else
#Your logic
end
另一种方式,也许更简单,就是使用ActiveAdmin控制器命名空间的事实,这样你就可以在ApplicationController中做一些事情:
if self.kind_of? ActiveAdmin::BaseController
I18n.locale = :en
else
#Your logic
end
干杯。