Sha256: 419f16db1cf7c60a6b3e6299404cd9cb52d3c4b5367a1f9fd1d1741aa41168ba

Contents?: true

Size: 1.29 KB

Versions: 28

Compression:

Stored size: 1.29 KB

Contents

module Locomotive
  module API
    module Middlewares

      class LocaleMiddleware

        def initialize(app)
          @app = app
        end

        # Rules (order is important):
        #
        # 1. check for the X-Locomotive-Locale header
        # 2. check for the locale request param
        # 3. check for the site default locale
        # 4. if none, take the default locomotive locale
        #
        def call(env)
          locale = find_locale(env)
          setup_i18n_fallback(env['locomotive.site'])
          ::Mongoid::Fields::I18n.with_locale(locale) do
            @app.call(env)
          end
        end

        private

        def find_locale(env)
          env['HTTP_X_LOCOMOTIVE_LOCALE'].presence ||
          params(env)[:locale].presence ||
          params(env)['locale'].presence ||
          env['locomotive.site'].try(:default_locale).presence ||
          Locomotive.config.site_locales.first
        end

        def setup_i18n_fallback(site)
          ::Mongoid::Fields::I18n.clear_fallbacks
          (site.try(:locales) || []).each do |locale|
            ::Mongoid::Fields::I18n.fallbacks_for(locale, site.locale_fallbacks(locale))
          end
        end

        def params(env)
          @params ||= Rack::Request.new(env).params
        end

      end

    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
locomotivecms-4.2.0.alpha2 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.2.0.alpha1 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.1.1 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.1.0 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.1.0.rc1 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.3 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.2 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.1 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.0 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.0.rc0 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.0.alpha3 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-3.4.1 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.0.alpha2 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-4.0.0.alpha1 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-3.4.0 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-3.3.0 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-3.3.0.rc3 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-3.3.0.rc2 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-3.1.2 app/api/locomotive/api/middlewares/locale_middleware.rb
locomotivecms-3.2.1 app/api/locomotive/api/middlewares/locale_middleware.rb