在[url=每天一劑rails良藥之adding support for localization[/url]裡我們講到了globalize外掛程式
今天來看另乙個提供本地化功能的外掛程式localization,localization的特性:
1,支援任何數量的languages和locales
2,定義singluar/plural翻譯的簡單方法
3,使用lambdas來提供基於ruby**的動態翻譯
4,定製應用程式的不同例項
安裝好該外掛程式後,自動就可以使用它了
我們在rails_root/lang/目錄下定義翻譯檔案,如lang/de_de.rb:
[code]
localization.define('de_de') do |l|
l.store '%d entries', ['ein eintrag', '%d eintr@#$ge']
l.store '(time)', lambda
end[/code]
[code]
localization.lang = 'de_de'
[/code]
在檢視裡使用_()方法來翻譯:
[code]
<%=_ '%d entries', 1 %> # singular variant is chosen
<%=_ '%d entries', 4 %> # plural variant is chosen
<%=_ '(time)', time.now %> # call the block with a parameter
[/code]
因為_()方法是對object類的擴充套件,所以我們可以在任何地方使用它(models/controllers/views/libs)
我們看看localization.rb裡的一段**:
[code]
module localization
# ...
def self._(string_to_localize, *args)
translated = @@l10s[@@lang][string_to_localize] || string_to_localize
return translated.call(*args).to_s if translated.is_a? proc
if translated.is_a? array
translated = if translated.size == 3
translated[args[0]==0 ? 0 : (args[0]>1 ? 2 : 1)]
else
translated[args[0]>1 ? 1 : 0]
endend
sprintf translated, *args
end# ...
endclass object
def _(*args); localization._(*args); end
end[/code]
7 28之每天一點思維
hamming distance sum codeforces 608b s 表示字串s的長度.如果字串 s 和 t長度相等,它們的漢明距離為 si 是s中第i 個字元,ti是t中第i個字元.舉例來說 0011 和 0110 的漢明距離等於 0 0 0 1 1 1 1 0 0 1 0 1 2.現在給...
每天一設計模式之原型模式
每天一設計模式之原型模式 原型模式 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件 原型模式結構圖 深複製樣例 xiefei package com.test public class xiefei public void setname string name public int...
每天乙個設計模式之Factory
這點是使用工廠模式的主要目的。當client需要乙個類的例項時,它並不需要自己去例項化那個類,而是交給工廠去例項化。這樣client就不需要知道這個類是怎麼例項化的了。這樣物件的使用者和物件本身就解耦合了。如何實現 需要注意的是,客戶端既不知道,也不關心被例項化的類是什麼,而只是得到了乙個抽象類。而...