不要更改ActiveAdmin区域设置

时间:2014-07-08 13:14:38

标签: ruby-on-rails ruby internationalization activeadmin

我在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这样的东西应该是用户。

1 个答案:

答案 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

干杯。