##// END OF EJS Templates
Adds settings for disabling browser language detection and language preference (#2691)....
Jean-Philippe Lang -
r12416:e391be40866f
parent child
Show More
@@ -201,7 +201,7 class ApplicationController < ActionController::Base
201 if User.current.logged?
201 if User.current.logged?
202 lang = find_language(User.current.language)
202 lang = find_language(User.current.language)
203 end
203 end
204 if lang.nil? && request.env['HTTP_ACCEPT_LANGUAGE']
204 if lang.nil? && !Setting.force_default_language_for_anonymous? && request.env['HTTP_ACCEPT_LANGUAGE']
205 accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first
205 accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first
206 if !accept_lang.blank?
206 if !accept_lang.blank?
207 accept_lang = accept_lang.downcase
207 accept_lang = accept_lang.downcase
@@ -79,7 +79,7 module SettingsHelper
79
79
80 def setting_label(setting, options={})
80 def setting_label(setting, options={})
81 label = options.delete(:label)
81 label = options.delete(:label)
82 label != false ? label_tag("settings_#{setting}", l(label || "setting_#{setting}")).html_safe : ''
82 label != false ? label_tag("settings_#{setting}", l(label || "setting_#{setting}"), options[:label_options]).html_safe : ''
83 end
83 end
84
84
85 # Renders a notification field for a Redmine::Notifiable option
85 # Renders a notification field for a Redmine::Notifiable option
@@ -314,6 +314,18 class User < Principal
314 @time_zone ||= (self.pref.time_zone.blank? ? nil : ActiveSupport::TimeZone[self.pref.time_zone])
314 @time_zone ||= (self.pref.time_zone.blank? ? nil : ActiveSupport::TimeZone[self.pref.time_zone])
315 end
315 end
316
316
317 def force_default_language?
318 Setting.force_default_language_for_loggedin?
319 end
320
321 def language
322 if force_default_language?
323 Setting.default_language
324 else
325 super
326 end
327 end
328
317 def wants_comments_in_reverse_order?
329 def wants_comments_in_reverse_order?
318 self.pref[:comments_sorting] == 'desc'
330 self.pref[:comments_sorting] == 'desc'
319 end
331 end
@@ -16,7 +16,10
16 <p><%= f.text_field :firstname, :required => true %></p>
16 <p><%= f.text_field :firstname, :required => true %></p>
17 <p><%= f.text_field :lastname, :required => true %></p>
17 <p><%= f.text_field :lastname, :required => true %></p>
18 <p><%= f.text_field :mail, :required => true %></p>
18 <p><%= f.text_field :mail, :required => true %></p>
19
20 <% unless @user.force_default_language? %>
19 <p><%= f.select :language, lang_options_for_select %></p>
21 <p><%= f.select :language, lang_options_for_select %></p>
22 <% end %>
20
23
21 <% if Setting.openid? %>
24 <% if Setting.openid? %>
22 <p><%= f.text_field :identity_url %></p>
25 <p><%= f.text_field :identity_url %></p>
@@ -16,7 +16,9
16 <p><%= f.text_field :firstname, :required => true %></p>
16 <p><%= f.text_field :firstname, :required => true %></p>
17 <p><%= f.text_field :lastname, :required => true %></p>
17 <p><%= f.text_field :lastname, :required => true %></p>
18 <p><%= f.text_field :mail, :required => true %></p>
18 <p><%= f.text_field :mail, :required => true %></p>
19 <% unless @user.force_default_language? %>
19 <p><%= f.select :language, lang_options_for_select %></p>
20 <p><%= f.select :language, lang_options_for_select %></p>
21 <% end %>
20 <% if Setting.openid? %>
22 <% if Setting.openid? %>
21 <p><%= f.text_field :identity_url %></p>
23 <p><%= f.text_field :identity_url %></p>
22 <% end %>
24 <% end %>
@@ -5,6 +5,10
5
5
6 <p><%= setting_select :default_language, lang_options_for_select(false) %></p>
6 <p><%= setting_select :default_language, lang_options_for_select(false) %></p>
7
7
8 <p><%= setting_check_box :force_default_language_for_anonymous %></p>
9
10 <p><%= setting_check_box :force_default_language_for_loggedin %></p>
11
8 <p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(6),'6'], [day_name(7),'7']], :blank => :label_language_based %></p>
12 <p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(6),'6'], [day_name(7),'7']], :blank => :label_language_based %></p>
9 <% locale = User.current.language.blank? ? ::I18n.locale : User.current.language %>
13 <% locale = User.current.language.blank? ? ::I18n.locale : User.current.language %>
10 <p><%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [::I18n.l(Date.today, :locale => locale, :format => f), f]}, :blank => :label_language_based %></p>
14 <p><%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [::I18n.l(Date.today, :locale => locale, :format => f), f]}, :blank => :label_language_based %></p>
@@ -9,7 +9,9
9 <p><%= f.text_field :firstname, :required => true %></p>
9 <p><%= f.text_field :firstname, :required => true %></p>
10 <p><%= f.text_field :lastname, :required => true %></p>
10 <p><%= f.text_field :lastname, :required => true %></p>
11 <p><%= f.text_field :mail, :required => true %></p>
11 <p><%= f.text_field :mail, :required => true %></p>
12 <% unless @user.force_default_language? %>
12 <p><%= f.select :language, lang_options_for_select %></p>
13 <p><%= f.select :language, lang_options_for_select %></p>
14 <% end %>
13 <% if Setting.openid? %>
15 <% if Setting.openid? %>
14 <p><%= f.text_field :identity_url %></p>
16 <p><%= f.text_field :identity_url %></p>
15 <% end %>
17 <% end %>
@@ -408,6 +408,8 en:
408 setting_jsonp_enabled: Enable JSONP support
408 setting_jsonp_enabled: Enable JSONP support
409 setting_default_projects_tracker_ids: Default trackers for new projects
409 setting_default_projects_tracker_ids: Default trackers for new projects
410 setting_mail_handler_excluded_filenames: Exclude attachments by name
410 setting_mail_handler_excluded_filenames: Exclude attachments by name
411 setting_force_default_language_for_anonymous: Force default language for anonymous users
412 setting_force_default_language_for_loggedin: Force default language for logged-in users
411
413
412 permission_add_project: Create project
414 permission_add_project: Create project
413 permission_add_subprojects: Create subprojects
415 permission_add_subprojects: Create subprojects
@@ -405,6 +405,8 fr:
405 setting_jsonp_enabled: Activer le support JSONP
405 setting_jsonp_enabled: Activer le support JSONP
406 setting_default_projects_tracker_ids: Trackers par dΓ©faut pour les nouveaux projets
406 setting_default_projects_tracker_ids: Trackers par dΓ©faut pour les nouveaux projets
407 setting_mail_handler_excluded_filenames: Exclure les fichiers attachΓ©s par leur nom
407 setting_mail_handler_excluded_filenames: Exclure les fichiers attachΓ©s par leur nom
408 setting_force_default_language_for_anonymous: Forcer la langue par dΓ©fault pour les utilisateurs anonymes
409 setting_force_default_language_for_loggedin: Forcer la langue par dΓ©fault pour les utilisateurs identifiΓ©s
408
410
409 permission_add_project: CrΓ©er un projet
411 permission_add_project: CrΓ©er un projet
410 permission_add_subprojects: CrΓ©er des sous-projets
412 permission_add_subprojects: CrΓ©er des sous-projets
@@ -69,6 +69,10 wiki_compression:
69 default: ""
69 default: ""
70 default_language:
70 default_language:
71 default: en
71 default: en
72 force_default_language_for_anonymous:
73 default: 0
74 force_default_language_for_loggedin:
75 default: 0
72 host_name:
76 host_name:
73 default: localhost:3000
77 default: localhost:3000
74 protocol:
78 protocol:
@@ -502,7 +502,7 html>body .tabular p {overflow:hidden;}
502 text-align: left;
502 text-align: left;
503 float: none;
503 float: none;
504 display: block;
504 display: block;
505 width: auto;
505 width: auto !important;
506 }
506 }
507
507
508 .tabular label.inline{
508 .tabular label.inline{
@@ -82,6 +82,20 class MyControllerTest < ActionController::TestCase
82 assert_no_tag :input, :attributes => { :name => 'user[custom_field_values][4]'}
82 assert_no_tag :input, :attributes => { :name => 'user[custom_field_values][4]'}
83 end
83 end
84
84
85 def test_my_account_should_show_language_select
86 get :account
87 assert_response :success
88 assert_select 'select[name=?]', 'user[language]'
89 end
90
91 def test_my_account_should_not_show_language_select_with_force_default_language_for_loggedin
92 with_settings :force_default_language_for_loggedin => '1' do
93 get :account
94 assert_response :success
95 assert_select 'select[name=?]', 'user[language]', 0
96 end
97 end
98
85 def test_update_account
99 def test_update_account
86 post :account,
100 post :account,
87 :user => {
101 :user => {
@@ -54,6 +54,35 class WelcomeControllerTest < ActionController::TestCase
54 assert_equal :fr, @controller.current_language
54 assert_equal :fr, @controller.current_language
55 end
55 end
56
56
57 def test_browser_language_should_be_ignored_with_force_default_language_for_anonymous
58 Setting.default_language = 'en'
59 @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
60 with_settings :force_default_language_for_anonymous => '1' do
61 get :index
62 assert_equal :en, @controller.current_language
63 end
64 end
65
66 def test_user_language_should_be_used
67 Setting.default_language = 'fi'
68 user = User.find(2).update_attribute :language, 'it'
69 @request.session[:user_id] = 2
70 @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
71 get :index
72 assert_equal :it, @controller.current_language
73 end
74
75 def test_user_language_should_be_ignored_if_force_default_language_for_loggedin
76 Setting.default_language = 'fi'
77 user = User.find(2).update_attribute :language, 'it'
78 @request.session[:user_id] = 2
79 @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
80 with_settings :force_default_language_for_loggedin => '1' do
81 get :index
82 assert_equal :fi, @controller.current_language
83 end
84 end
85
57 def test_robots
86 def test_robots
58 get :robots
87 get :robots
59 assert_response :success
88 assert_response :success
General Comments 0
You need to be logged in to leave comments. Login now