@@ -201,7 +201,7 class ApplicationController < ActionController::Base | |||
|
201 | 201 | if User.current.logged? |
|
202 | 202 | lang = find_language(User.current.language) |
|
203 | 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 | 205 | accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first |
|
206 | 206 | if !accept_lang.blank? |
|
207 | 207 | accept_lang = accept_lang.downcase |
@@ -79,7 +79,7 module SettingsHelper | |||
|
79 | 79 | |
|
80 | 80 | def setting_label(setting, options={}) |
|
81 | 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 | 83 | end |
|
84 | 84 | |
|
85 | 85 | # Renders a notification field for a Redmine::Notifiable option |
@@ -314,6 +314,18 class User < Principal | |||
|
314 | 314 | @time_zone ||= (self.pref.time_zone.blank? ? nil : ActiveSupport::TimeZone[self.pref.time_zone]) |
|
315 | 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 | 329 | def wants_comments_in_reverse_order? |
|
318 | 330 | self.pref[:comments_sorting] == 'desc' |
|
319 | 331 | end |
@@ -16,7 +16,10 | |||
|
16 | 16 | <p><%= f.text_field :firstname, :required => true %></p> |
|
17 | 17 | <p><%= f.text_field :lastname, :required => true %></p> |
|
18 | 18 | <p><%= f.text_field :mail, :required => true %></p> |
|
19 | ||
|
20 | <% unless @user.force_default_language? %> | |
|
19 | 21 | <p><%= f.select :language, lang_options_for_select %></p> |
|
22 | <% end %> | |
|
20 | 23 | |
|
21 | 24 | <% if Setting.openid? %> |
|
22 | 25 | <p><%= f.text_field :identity_url %></p> |
@@ -16,7 +16,9 | |||
|
16 | 16 | <p><%= f.text_field :firstname, :required => true %></p> |
|
17 | 17 | <p><%= f.text_field :lastname, :required => true %></p> |
|
18 | 18 | <p><%= f.text_field :mail, :required => true %></p> |
|
19 | <% unless @user.force_default_language? %> | |
|
19 | 20 | <p><%= f.select :language, lang_options_for_select %></p> |
|
21 | <% end %> | |
|
20 | 22 | <% if Setting.openid? %> |
|
21 | 23 | <p><%= f.text_field :identity_url %></p> |
|
22 | 24 | <% end %> |
@@ -5,6 +5,10 | |||
|
5 | 5 | |
|
6 | 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 | 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 | 13 | <% locale = User.current.language.blank? ? ::I18n.locale : User.current.language %> |
|
10 | 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 | 9 | <p><%= f.text_field :firstname, :required => true %></p> |
|
10 | 10 | <p><%= f.text_field :lastname, :required => true %></p> |
|
11 | 11 | <p><%= f.text_field :mail, :required => true %></p> |
|
12 | <% unless @user.force_default_language? %> | |
|
12 | 13 | <p><%= f.select :language, lang_options_for_select %></p> |
|
14 | <% end %> | |
|
13 | 15 | <% if Setting.openid? %> |
|
14 | 16 | <p><%= f.text_field :identity_url %></p> |
|
15 | 17 | <% end %> |
@@ -408,6 +408,8 en: | |||
|
408 | 408 | setting_jsonp_enabled: Enable JSONP support |
|
409 | 409 | setting_default_projects_tracker_ids: Default trackers for new projects |
|
410 | 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 | 414 | permission_add_project: Create project |
|
413 | 415 | permission_add_subprojects: Create subprojects |
@@ -405,6 +405,8 fr: | |||
|
405 | 405 | setting_jsonp_enabled: Activer le support JSONP |
|
406 | 406 | setting_default_projects_tracker_ids: Trackers par défaut pour les nouveaux projets |
|
407 | 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 | 411 | permission_add_project: Créer un projet |
|
410 | 412 | permission_add_subprojects: Créer des sous-projets |
@@ -69,6 +69,10 wiki_compression: | |||
|
69 | 69 | default: "" |
|
70 | 70 | default_language: |
|
71 | 71 | default: en |
|
72 | force_default_language_for_anonymous: | |
|
73 | default: 0 | |
|
74 | force_default_language_for_loggedin: | |
|
75 | default: 0 | |
|
72 | 76 | host_name: |
|
73 | 77 | default: localhost:3000 |
|
74 | 78 | protocol: |
@@ -502,7 +502,7 html>body .tabular p {overflow:hidden;} | |||
|
502 | 502 | text-align: left; |
|
503 | 503 | float: none; |
|
504 | 504 | display: block; |
|
505 | width: auto; | |
|
505 | width: auto !important; | |
|
506 | 506 | } |
|
507 | 507 | |
|
508 | 508 | .tabular label.inline{ |
@@ -82,6 +82,20 class MyControllerTest < ActionController::TestCase | |||
|
82 | 82 | assert_no_tag :input, :attributes => { :name => 'user[custom_field_values][4]'} |
|
83 | 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 | 99 | def test_update_account |
|
86 | 100 | post :account, |
|
87 | 101 | :user => { |
@@ -54,6 +54,35 class WelcomeControllerTest < ActionController::TestCase | |||
|
54 | 54 | assert_equal :fr, @controller.current_language |
|
55 | 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 | 86 | def test_robots |
|
58 | 87 | get :robots |
|
59 | 88 | assert_response :success |
General Comments 0
You need to be logged in to leave comments.
Login now