2008/01/20

讓Ruby on Rails顯示中文日期

參考幾處文章、互相雜湊測試終於成了!

Localization for Ruby's Time#strftime
http://poocs.net/2005/10/4/localization-for-rubys-time-strftime
(該文內有好幾處相關連結)
知道大概要去改
Date::ABBR_DAYNAMES
Date::DAYNAMES
Date::ABBR_MONTHNAMES
Date::MONTHNAMES
這些值成中文才會顯示出來,但依該文的範例總試不出。

解決的關鍵是看到了好像:
http://b.hatena.ne.jp/entry/2556154
所提供的連結,但找不到該網頁,但從google的cache找到了,
現在又找不大到,但類似是:
http://www.notice.co.jp/2007/11/23-202508
中的範例。
另找到法文的範例:
http://thecaribbeanweblog.com/index.php/2007/03/14/129-rails-dates-en-francais
最後把日文改中文,就是以下的字樣:

Date::ABBR_DAYNAMES.replace %w(日 一 二 三 四 五 六)
Date::DAYNAMES.replace %w(星期日 星期一 星期二 星期三 星期四 星期五 星期六)
Date::ABBR_MONTHNAMES.replace %w(1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月)
Date::MONTHNAMES.replace %w(一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月)

然後把這些貼到config/environment.rb
最上面,重啟動lighttpd,會出現錯誤,
最上面再補加 require 'date'再啟動就成了。
但發現query month為1時出現是二月
query month 12時反而空,
把月的array補上 nil,
所以貼上以下字樣到 config/environment.rb 就OK了!
--------------------
require 'date'
Date::ABBR_DAYNAMES.replace %w(日 一 二 三 四 五 六)
Date::DAYNAMES.replace %w(星期日 星期一 星期二 星期三 星期四 星期五 星期六)
Date::ABBR_MONTHNAMES.replace %w(nil 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月)
Date::MONTHNAMES.replace %w(nil 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月)
---------------------
測試一下結果:
>> Calendar.find(5).date.to_s
=> "2008-01-05"
>> Calendar.find(5).date.strftime('%A')
=> "星期六"
>> Calendar.find(5).date.strftime('%a')
=> "六"
>> Calendar.find(5).date.strftime('%B')
=> "一月"
>> Calendar.find(5).date.strftime('%b')
=> "1月"

至於為什麼要讓日期出現中文呢?
是為了要使calendar_helper以中文出現:
http://wiki.rubyonrails.org/rails/pages/DynamicCalendarHelper
依其範例加一些參數,尤其:abbrev以6..8的值才會出現星期的第三個字。

calendar({:year => @year, :month => @month, :first_day_of_week => 1,
:previous_month_text => '<<', :next_month_text => '>>', :abbrev => (6..8)}) do |d|
cell_text = "#{d.mday}
"

Labels: , , , , , ,