Hello,
I’ve just put online my first website in ruby on rails but I’ve a
problem with the globalite plugin.
Locally the plugin works perfectly, with detection of the browser’s
language. My application is foreseen in French and Dutch but locally,
if the browser is f.e. in English, the application is automatically
opened in Dutch.
But online this specification doesn’t work anymore. For the browser not
in French or dutch, the application doesn’t work properly with a lot of
“localization_missing†errors.
Someone has any idea where the problem is?
To manage the languages available on the website, I’ve created a
controller “language†to define the 2 languages available.
In environment.rb, I’ve added this “Globalite.language = :nlâ€
Hereunder my application.rb
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
Hereunder where I defin the language in my controllers:
@homepages =
Homepage.find_all_by_language_id(Language.resolve(Locale.code.to_s[0,2]))
Thanks in advance for your help!