Sha256: c024b7d546352a1fedf0af5b625804196a05b608bb6c08385ff61e5a1b8eda25
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
require "i18n" module Rack class UserLocale def initialize(app) @app = app end def call(env) @env = env @request = Rack::Request.new(@env) set_locale if @request.post? || @request.put? || @request.delete? @app.call(env) else status, headers, body = @app.call(@env) response = Rack::Response.new(body, status, headers) response.set_cookie("user-locale", { :value => I18n.locale, :path => "/", :domain => @request.host}) if get_cookie_locale != I18n.locale.to_s response.finish end end private def set_locale I18n.locale = @env["rack.locale"] = locale.to_sym end def locale get_cookie_locale || get_browser_locale || get_default_locale end def get_cookie_locale @request.cookies["user-locale"] end def get_browser_locale accept_langs = @env["HTTP_ACCEPT_LANGUAGE"] return if accept_langs.nil? languages_and_qvalues = accept_langs.split(",").map { |l| l += ";q=1.0" unless l =~ /;q=\d+(?:\.\d+)?$/ l.split(";q=") } lang = languages_and_qvalues.sort_by { |(locale, qvalue)| qvalue.to_f }.last.first lang == "*" ? nil : lang end def get_default_locale I18n.default_locale end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rack-user-locale-0.0.0 | lib/rack-user-locale.rb |