@@ -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