先來一點閒話:眾所周知,javaeye是國內開發者知名論壇,因為昨天下了個Typo(ROR開源的weblog引擎),想打造自己的一個blog,因為沒有看原始碼,大致跑了一下,首先想到的一個問題就是本地化(I10N),就到javaeye發了個帖子,無可厚非的發到了Ruby區,可是管理員通知我了,被評為新手貼,鬱悶的我,我的問題是太簡單了,是因為我比較懶,沒有時間去看原始碼具體實現,然後就挨javaeye老大的批鬥了。。。因為這件事,發了個牢騷貼,被設定為隱藏貼,搞的我論壇回帖功能被封了4天,鬱悶呀。。。javaeye這種制度,我知道是為了維護javaeye帖子的高質量,可是我看了其他的帖子,有很多都是研究Ruby語法,討論的沒有深度,還不如PR2ed上面說的透徹呢,這些帖子都不是新手貼,憑什麼就把我的帖子放到那個無人問津的地方?這一點欠公平,我就不服這一點,因為這牢騷貼要發到javaeye又被隱藏了,又該挨批,所以就發到51cto吧。。。當然javaeye的技術氛圍我還是很喜歡的,robbin老大對於我問過的及其菜的問題也能回覆,也許是javaeye某個有權重的人看我不順眼吧。。。姑且這麼認為了。。。。。。牢騷發完了,下面給出一個本地化解決方案,而且是pure Ruby實現的適合少量種類語言的本地化Rails外掛,和gettext比起來屬於輕量級。
這帖子下面這部分我也發在了javaeye。。。
這帖子下面這部分我也發在了javaeye。。。
現在記錄那個localization外掛的用法。
我用SVN在這個地址checkout出location外掛:
[url]http://dev.rubyonrails.org/svn/rails/plugins/localization/[/url]
我沒有指定check out路徑,就預設存放在了/root目錄下。
然後把localization外掛copy到工程的vendor/plugins目錄下。然後我們做的工作就是:
1。在lang目錄下定義個.rb檔案,類似de_DE.rb
Localization.define(`de_DE`) do |l|l.store "blah", "blub"
l.store "testing %d", ["Singular: %d", "Plural: %d"]
end
2。假設blash和testing %d就是你要替換的文字,再你程式裡這兩個文字出現的地方使用如下形式:
_(`blah`)
_(`testing %d`, 5)3。在.rhtml中,用如下形式:
<%=_ `testing %d`, 1 %>
4。在application.rb中設定Localization.lang = `de_DE`
(別忘了。。。Typo不是自動根據作業系統來本地化的,需要人工載入。。。鬱悶的一點)
5。在environment.rb中
config.plugins = [ `localization`
。。。]
6。別忘了include localization.rb
當然Typo用了好多外掛,為了一次性的匯入全部外掛,就用了sidebar_generator.rb,大家可以參考一下。
(才發現SuseLinux裡自帶的gedit支援Ruby語法,但是奇怪的是SuseLinux10裡沒有自帶Ruby)現在覺得很簡單的,難怪那些高手們懶的留口水。。。可是有投票的功夫也能打出如下這一行字了:
請參考localization外掛和讀Typo原始碼!參考資料:
[url]http://mir.aculo.us/2005/10/03/ruby-on-rails-i18n-revisited[/url]