修改refinerycms-18n

本文介绍了一个用于Ruby on Rails应用中的国际化路由过滤器实现细节。该过滤器能够根据URL中的语言标识来设置应用的语言环境,同时支持默认语言环境的配置。对于特定路径,如Netzke用户登录情况,会根据用户ID获取用户的首选语言设置。

i18n-filter.rb:

module RoutingFilter
  class RefineryLocales < Filter

    def around_recognize(path, env, &block)
      if ::Refinery::I18n.enabled?
        if path =~ %r{^/(#{::Refinery::I18n.locales.keys.join('|')})(/|$)}
          path.sub! %r(^/(([a-zA-Z\-_])*)(?=/|$)) do
            ::I18n.locale = $1
            ''
          end
          path.sub!(%r{^$}) { '/' }
        else
          if path =~ /netzke/
            netzke_user_id = env["action_dispatch.request.unsigned_session_cookie"]["netzke_user_id"]
            ::I18n.locale = User.find_by_id(netzke_user_id).locale unless netzke_user_id.nil?
          else
            ::I18n.locale = ::Refinery::I18n.default_frontend_locale
          end
        end
        Rails.logger.error ::I18n.locale
      end

      yield.tap do |params|
        params[:locale] = ::I18n.locale if ::Refinery::I18n.enabled?
        params
      end
    end

    def around_generate(params, &block)
      locale = params.delete(:locale) || ::I18n.locale

      yield.tap do |result|
        if ::Refinery::I18n.enabled? and
           locale != ::Refinery::I18n.default_frontend_locale and
           result !~ %r{^/(refinery|wymiframe)}
          result.sub!(%r(^(http.?://[^/]*)?(.*))) { "#{$1}/#{locale}#{$2}" }
        end

        result
      end
    end

  end
end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值