每天一劑Rails良藥之localization

2021-08-29 08:23:52 字數 1491 閱讀 5914

在[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就不需要知道這個類是怎麼例項化的了。這樣物件的使用者和物件本身就解耦合了。如何實現 需要注意的是,客戶端既不知道,也不關心被例項化的類是什麼,而只是得到了乙個抽象類。而...