]> source.dussan.org Git - redmine.git/commitdiff
Adds settings for disabling browser language detection and language preference (...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 24 Jan 2014 10:28:12 +0000 (10:28 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 24 Jan 2014 10:28:12 +0000 (10:28 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@12691 e93f8b46-1217-0410-a6f0-8f06a7374b81

13 files changed:
app/controllers/application_controller.rb
app/helpers/settings_helper.rb
app/models/user.rb
app/views/account/register.html.erb
app/views/my/account.html.erb
app/views/settings/_display.html.erb
app/views/users/_form.html.erb
config/locales/en.yml
config/locales/fr.yml
config/settings.yml
public/stylesheets/application.css
test/functional/my_controller_test.rb
test/functional/welcome_controller_test.rb

index 228be479ee914373b8dd7dfe15a81c4db5faff66..152dc3f181fd4ca5bf976e93e17243afef9fcb17 100644 (file)
@@ -201,7 +201,7 @@ class ApplicationController < ActionController::Base
     if User.current.logged?
       lang = find_language(User.current.language)
     end
-    if lang.nil? && request.env['HTTP_ACCEPT_LANGUAGE']
+    if lang.nil? && !Setting.force_default_language_for_anonymous? && request.env['HTTP_ACCEPT_LANGUAGE']
       accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first
       if !accept_lang.blank?
         accept_lang = accept_lang.downcase
index a01e29a3a52820ff855ab450eebc1dd633a79cdd..8dcc1ecb6089d91c4f2df5173dea4d3746245aca 100644 (file)
@@ -79,7 +79,7 @@ module SettingsHelper
 
   def setting_label(setting, options={})
     label = options.delete(:label)
-    label != false ? label_tag("settings_#{setting}", l(label || "setting_#{setting}")).html_safe : ''
+    label != false ? label_tag("settings_#{setting}", l(label || "setting_#{setting}"), options[:label_options]).html_safe : ''
   end
 
   # Renders a notification field for a Redmine::Notifiable option
index d04369277ca813533f70d6a7b104143869ad4a0b..7aac0123566acc7e84d55e6cb4ba1db58685dfad 100644 (file)
@@ -314,6 +314,18 @@ class User < Principal
     @time_zone ||= (self.pref.time_zone.blank? ? nil : ActiveSupport::TimeZone[self.pref.time_zone])
   end
 
+  def force_default_language?
+    Setting.force_default_language_for_loggedin?
+  end
+
+  def language
+    if force_default_language?
+      Setting.default_language
+    else
+      super
+    end
+  end
+
   def wants_comments_in_reverse_order?
     self.pref[:comments_sorting] == 'desc'
   end
index e8e8098fe96240319d94cc9d17f80e373943c200..f655514a326001203b836246bb6f9d6f11648e8e 100644 (file)
 <p><%= f.text_field :firstname, :required => true %></p>
 <p><%= f.text_field :lastname, :required => true %></p>
 <p><%= f.text_field :mail, :required => true %></p>
+
+<% unless @user.force_default_language? %>
 <p><%= f.select :language, lang_options_for_select %></p>
+<% end %>
 
 <% if Setting.openid? %>
   <p><%= f.text_field :identity_url  %></p>
index 8ec3a8dc96d6f6e2d179463d9f3bb76f5d6a681a..0ce223b0a7963617f78478f81cd5883aa071e2f5 100644 (file)
@@ -16,7 +16,9 @@
   <p><%= f.text_field :firstname, :required => true %></p>
   <p><%= f.text_field :lastname, :required => true %></p>
   <p><%= f.text_field :mail, :required => true %></p>
+  <% unless @user.force_default_language? %>
   <p><%= f.select :language, lang_options_for_select %></p>
+  <% end %>
   <% if Setting.openid? %>
   <p><%= f.text_field :identity_url  %></p>
   <% end %>
index 1ae5a351a6080239e6d415bfdc4ce7a1ec455826..ab1ce9b9b46ebc650827d5c073a9bcd40a512a2c 100644 (file)
@@ -5,6 +5,10 @@
 
 <p><%= setting_select :default_language, lang_options_for_select(false) %></p>
 
+<p><%= setting_check_box :force_default_language_for_anonymous %></p>
+
+<p><%= setting_check_box :force_default_language_for_loggedin %></p>
+
 <p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(6),'6'], [day_name(7),'7']], :blank => :label_language_based %></p>
 <% locale = User.current.language.blank? ? ::I18n.locale : User.current.language %>
 <p><%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [::I18n.l(Date.today, :locale => locale, :format => f), f]}, :blank => :label_language_based %></p>
index e900958270b6cd6062c16e88be65ca96d4097e86..413e3550badc39c1f98f50d15c20bf0b548b459c 100644 (file)
@@ -9,7 +9,9 @@
   <p><%= f.text_field :firstname, :required => true %></p>
   <p><%= f.text_field :lastname, :required => true %></p>
   <p><%= f.text_field :mail, :required => true %></p>
+  <% unless @user.force_default_language? %>
   <p><%= f.select :language, lang_options_for_select %></p>
+  <% end %>
   <% if Setting.openid? %>
   <p><%= f.text_field :identity_url  %></p>
   <% end %>
index f9b459577eecca47064980f48901c74cfcb237a2..c9256ae404e2d43bbfe844576badd69152914433 100644 (file)
@@ -408,6 +408,8 @@ en:
   setting_jsonp_enabled: Enable JSONP support
   setting_default_projects_tracker_ids: Default trackers for new projects
   setting_mail_handler_excluded_filenames: Exclude attachments by name
+  setting_force_default_language_for_anonymous: Force default language for anonymous users
+  setting_force_default_language_for_loggedin: Force default language for logged-in users
 
   permission_add_project: Create project
   permission_add_subprojects: Create subprojects
index 29bb0842821ee73755cc923bcc1ae0247a79f80c..2eff8fcd3c46ec13c2520034a4d4b7a3b9c62f6f 100644 (file)
@@ -405,6 +405,8 @@ fr:
   setting_jsonp_enabled: Activer le support JSONP
   setting_default_projects_tracker_ids: Trackers par défaut pour les nouveaux projets
   setting_mail_handler_excluded_filenames: Exclure les fichiers attachés par leur nom
+  setting_force_default_language_for_anonymous: Forcer la langue par défault pour les utilisateurs anonymes
+  setting_force_default_language_for_loggedin: Forcer la langue par défault pour les utilisateurs identifiés
 
   permission_add_project: Créer un projet
   permission_add_subprojects: Créer des sous-projets
index 66c67bd0130a45d5efcee8b11ba9e7f9f51fc97a..832f685014f713654d736153c6af2b8d7ad67c4b 100644 (file)
@@ -69,6 +69,10 @@ wiki_compression:
   default: ""
 default_language:
   default: en
+force_default_language_for_anonymous:
+  default: 0
+force_default_language_for_loggedin:
+  default: 0
 host_name:
   default: localhost:3000
 protocol:
index ba59b282855e97e5904b5eac1bd8028cca4a09cb..6ebb91d3c46a606d3f1b6918054222354de42beb 100644 (file)
@@ -502,7 +502,7 @@ html>body .tabular p {overflow:hidden;}
   text-align: left;
   float: none;
   display: block;
-  width: auto;
+  width: auto !important;
 }
 
 .tabular label.inline{
index 7e96770519d1c5e2975bf4e3345b22448f931075..aaa4e8c0d08e012f67973216b1ae158a6649e146 100644 (file)
@@ -82,6 +82,20 @@ class MyControllerTest < ActionController::TestCase
     assert_no_tag :input, :attributes => { :name => 'user[custom_field_values][4]'}
   end
 
+  def test_my_account_should_show_language_select
+    get :account
+    assert_response :success
+    assert_select 'select[name=?]', 'user[language]'
+  end
+
+  def test_my_account_should_not_show_language_select_with_force_default_language_for_loggedin
+    with_settings :force_default_language_for_loggedin => '1' do
+      get :account
+      assert_response :success
+      assert_select 'select[name=?]', 'user[language]', 0
+    end
+  end
+
   def test_update_account
     post :account,
       :user => {
index aafc361591e8843c1ca17820cd5adcecf02e9359..6a91078447ece2df13e3c6f506761ccbfd188fa6 100644 (file)
@@ -54,6 +54,35 @@ class WelcomeControllerTest < ActionController::TestCase
     assert_equal :fr, @controller.current_language
   end
 
+  def test_browser_language_should_be_ignored_with_force_default_language_for_anonymous
+    Setting.default_language = 'en'
+    @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
+    with_settings :force_default_language_for_anonymous => '1' do
+      get :index
+      assert_equal :en, @controller.current_language
+    end
+  end
+
+  def test_user_language_should_be_used
+    Setting.default_language = 'fi'
+    user = User.find(2).update_attribute :language, 'it'
+    @request.session[:user_id] = 2
+    @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
+    get :index
+    assert_equal :it, @controller.current_language
+  end
+
+  def test_user_language_should_be_ignored_if_force_default_language_for_loggedin
+    Setting.default_language = 'fi'
+    user = User.find(2).update_attribute :language, 'it'
+    @request.session[:user_id] = 2
+    @request.env['HTTP_ACCEPT_LANGUAGE'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
+    with_settings :force_default_language_for_loggedin => '1' do
+      get :index
+      assert_equal :fi, @controller.current_language
+    end
+  end
+
   def test_robots
     get :robots
     assert_response :success