Rails本地化控制面板模块,使用一种语言和另外两种语言

时间:2013-12-23 19:49:57

标签: ruby-on-rails

我有一个网站,控制面板只有一种语言,网站有两种语言 我在命名空间admin中有控制面板。我在应用程序控制器中使用下面的代码来设置基于用户浏览器头的本地lang

    class ApplicationController < ActionController::Base

        #to set local
         before_filter :set_locale

       private
           def extract_locale_from_accept_language_header
             request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
            end

          def set_locale
            I18n.locale = extract_locale_from_accept_language_header || I18n.default_locale
            Rails.application.routes.default_url_options[:locale]= I18n.locale
          end



         end 

此代码设置所有网站语言,任何方式只用一种语言设置控制面板

2 个答案:

答案 0 :(得分:1)

以下是一些如何解决它的想法(不确定哪一个是最好的):

  • 为控制面板和其余部分使用不同的区域设置文件,并将其他语言控制面板文件链接到默认区域设置文件(通常为英文)。
  • 在控制面板控制器中覆盖方法set_locale并在此处返回en(或您想要的任何默认语言环境)。

有关详细信息,请参阅Rails Internationalization Guide

答案 1 :(得分:1)

这不是最干净的方式,我知道,但这就是我绕过它的方式:

def set_locale
    if Rails.env.test? then
        I18n.locale = 'en'
        cookies[:location] = 'en'
    else
        logger.debug "* Accept-Language: #{request.env['HTTP_ACCEPT_LANGUAGE']}"
        I18n.locale = extract_locale_from_accept_language_header
        logger.debug "* Locale set to '#{I18n.locale}'"
    end
end

你总是可以在你的规范助手中修补它,如下所示:

ApplicationController.class_eval do
    def set_locale
        I18n.locale = 'en'
    end
end

这样你就可以保持你的ApplicationController干净了