Commit e87330cc1151db9ca91df792c492e661bc2c43be
1 parent
669c063d
Exists in
master
and in
29 other branches
ActionItem181: do not set unsupported locales
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1545 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
29 additions
and
0 deletions
Show diff stats
app/controllers/application.rb
@@ -79,6 +79,19 @@ class ApplicationController < ActionController::Base | @@ -79,6 +79,19 @@ class ApplicationController < ActionController::Base | ||
79 | end | 79 | end |
80 | 80 | ||
81 | def set_system_locale | 81 | def set_system_locale |
82 | + # don't allow unsupported locales | ||
83 | + available_locales = Noosfero.locales.keys | ||
84 | + if !available_locales.include?(GetText.locale.to_s) | ||
85 | + # guess similar locales by using same language | ||
86 | + similar = available_locales.find { |loc| GetText.locale.to_s.split('_').first == loc.split('_').first } | ||
87 | + if similar | ||
88 | + set_locale similar | ||
89 | + else | ||
90 | + set_locale(Noosfero.default_locale || 'en') | ||
91 | + end | ||
92 | + end | ||
93 | + | ||
94 | + # actually set the system locale | ||
82 | lang = GetText.locale.to_s | 95 | lang = GetText.locale.to_s |
83 | system_locale = | 96 | system_locale = |
84 | if (lang == 'en') || lang.blank? | 97 | if (lang == 'en') || lang.blank? |
test/integration/locale_setting_test.rb
@@ -23,7 +23,23 @@ class LocaleSettingTest < ActionController::IntegrationTest | @@ -23,7 +23,23 @@ class LocaleSettingTest < ActionController::IntegrationTest | ||
23 | # user now wants en | 23 | # user now wants en |
24 | get '/', { }, { 'HTTP_ACCEPT_LANGUAGE' => 'en' } | 24 | get '/', { }, { 'HTTP_ACCEPT_LANGUAGE' => 'en' } |
25 | assert_locale 'en' | 25 | assert_locale 'en' |
26 | + end | ||
27 | + | ||
28 | + should 'not use unsupported browser-informed locale and use C instead' do | ||
29 | + get '/', { }, { 'HTTP_ACCEPT_LANGUAGE' => 'xx-yy, pt-br, en' } | ||
30 | + assert_locale 'en' | ||
31 | + end | ||
26 | 32 | ||
33 | + should 'fallback to similar languages' do | ||
34 | + # FIXME this assumes pt_PT is unsupported. If a pt_PT translation is added | ||
35 | + # this test will break. | ||
36 | + get '/', { }, { 'HTTP_ACCEPT_LANGUAGE' => 'pt-pt, en' } | ||
37 | + assert_locale 'pt_BR' | ||
38 | + end | ||
39 | + | ||
40 | + should 'accept language without country code and pick a suitable language' do | ||
41 | + get '/', { }, { 'HTTP_ACCEPT_LANGUAGE' => 'pt, en'} | ||
42 | + assert_locale 'pt_BR' | ||
27 | end | 43 | end |
28 | 44 | ||
29 | should 'be able to force locale' do | 45 | should 'be able to force locale' do |