1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
include AuthenticatedSystem
# See ActionController::RequestForgeryProtection for details
# Uncomment the :secret if you're not using the cookie session store
protect_from_forgery # :secret => '5880ee74dae8cc2f2a3cc02e4976d601'
around_filter :set_locale
private
# Set the locale from the parameters, the session, or the navigator
# If none of these works, the Globalite default locale is set (en-*)
def set_locale
@current_path = request.env['PATH_INFO']
@request_method = request.env['REQUEST_METHOD']
if params[:user_locale]
logger.debug params[:user_locale]
Locale.code = params[:user_locale] #get_matching_ui_locale(params[:user_locale][:code]) #|| session[:locale] || get_valid_lang_from_accept_header || Globalite.default_language
session[:locale] = Locale.code
elsif session[:locale]
Locale.code = session[:locale]
else
Locale.code = get_valid_lang_from_accept_header.local_case
end
logger.debug "[globalite] Locale set to #{Locale.code}"
yield
Locale.reset!
end
def get_sorted_langs_from_accept_header
accept_langs = (request.env['HTTP_ACCEPT_LANGUAGE'] || "en-us,en;q=0.5").split(/,/) rescue nil
return nil unless accept_langs
wl = {}
accept_langs.each {|accept_lang|
if (accept_lang + ';q=1') =~ /^(.+?);q=([^;]+).*/
wl[($2.to_f rescue -1.0)]= $1
end
}
logger.debug "[globalite] client accepted locales: #{wl.sort{|a,b| b[0] <=> a[0] }.map{|a| a[1] }.to_sentence}"
wl.sort{|a,b| b[0] <=> a[0] }.map{|a| a[1] }
end
def get_valid_lang_from_accept_header
get_sorted_langs_from_accept_header.detect{|l| get_matching_ui_locale(l) }
end
def get_matching_ui_locale(locale)
lang = locale[0,2].downcase
if Globalite.ui_locales.values.include?(locale.local_case)
locale.local_case
end
Globalite.ui_locales.values.each do |value|
value.to_s =~ /#{lang}-*/ ? value : nil
end
end
end
class String
def local_case
if self[3,5]
"#{self[0,2]}-#{self[3,5].upcase}".to_sym
else
"#{self[0,2]}-*".to_sym
end
end
end |
Partager