]> source.dussan.org Git - redmine.git/commitdiff
Display dates using user's locale if available (#2190).
authorEtienne Massip <etienne.massip@gmail.com>
Sat, 16 Jun 2012 21:45:47 +0000 (21:45 +0000)
committerEtienne Massip <etienne.massip@gmail.com>
Sat, 16 Jun 2012 21:45:47 +0000 (21:45 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9838 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/views/settings/_display.html.erb
lib/redmine/i18n.rb
test/unit/lib/redmine/i18n_test.rb

index 3299ff10bc7c0a5f3fd2f87611ae7246d6c28bf2..2eb0e2560d690e3992aeb45459f088f5ebd9be8d 100644 (file)
@@ -6,10 +6,10 @@
 <p><%= setting_select :default_language, lang_options_for_select(false) %></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>
 
-<p><%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, :blank => :label_language_based %></p>
-
-<p><%= setting_select :time_format, Setting::TIME_FORMATS.collect {|f| [Time.now.strftime(f), f]}, :blank => :label_language_based %></p>
+<p><%= setting_select :time_format, Setting::TIME_FORMATS.collect {|f| [::I18n.l(Time.now, :locale => locale, :format => f), f]}, :blank => :label_language_based %></p>
 
 <p><%= setting_select :user_format, @options[:user_format] %></p>
 
index a377d408cd0fa3f96a9c8b450dec4c7f89b8deac..fade9a9ae4336055b505280042d0990bbb9fc24e 100644 (file)
@@ -37,16 +37,21 @@ module Redmine
 
     def format_date(date)
       return nil unless date
-      Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format)
+      options = {}
+      options[:format] = Setting.date_format unless Setting.date_format.blank?
+      options[:locale] = User.current.language unless User.current.language.blank?
+      ::I18n.l(date.to_date, options)
     end
 
     def format_time(time, include_date = true)
       return nil unless time
+      options = {}
+      options[:format] = (Setting.time_format.blank? ? :time : Setting.time_format)
+      options[:locale] = User.current.language unless User.current.language.blank?
       time = time.to_time if time.is_a?(String)
       zone = User.current.time_zone
       local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
-      (include_date ? "#{format_date(local)} " : "") +
-        (Setting.time_format.blank? ? ::I18n.l(local, :format => :time) : local.strftime(Setting.time_format))
+      (include_date ? "#{format_date(local)} " : "") + ::I18n.l(local, options)
     end
 
     def day_name(day)
index 0b7ee20f07f4f17c2c82abe84b286b710fb5e62e..85d9a13122fc9210fce03d1805eb631a278848c8 100644 (file)
@@ -22,7 +22,7 @@ class Redmine::I18nTest < ActiveSupport::TestCase
   include ActionView::Helpers::NumberHelper
 
   def setup
-    @hook_module = Redmine::Hook
+    User.current.language = nil
   end
 
   def test_date_format_default
@@ -39,6 +39,16 @@ class Redmine::I18nTest < ActiveSupport::TestCase
     assert_equal today.strftime('%d %m %Y'), format_date(today)
   end
 
+  def test_date_format_default_with_user_locale
+    set_language_if_valid 'es'
+    today = now = Time.parse('2011-02-20 14:00:00')
+    Setting.date_format = '%d %B %Y'
+    User.current.language = 'fr'
+    assert_equal "20 f\u00E9vrier 2011", format_date(today)
+    User.current.language = nil
+    assert_equal '20 Febrero 2011', format_date(today)
+  end
+
   def test_date_and_time_for_each_language
     Setting.date_format = ''
     valid_languages.each do |lang|
@@ -99,6 +109,22 @@ class Redmine::I18nTest < ActiveSupport::TestCase
     end
   end
 
+  def test_time_format_default_with_user_locale
+    set_language_if_valid 'en'
+    User.current.language = 'fr'
+    now = Time.parse('2011-02-20 15:45:22')
+    with_settings :time_format => '' do
+      with_settings :date_format => '' do
+        assert_equal '20/02/2011 15:45', format_time(now)
+        assert_equal '15:45', format_time(now, false)
+      end
+      with_settings :date_format => '%Y-%m-%d' do
+        assert_equal '2011-02-20 15:45', format_time(now)
+        assert_equal '15:45', format_time(now, false)
+      end
+    end
+  end
+
   def test_time_format
     set_language_if_valid 'en'
     now = Time.now