2011-04-07 96 views
4

我喜歡用i18n和yml。我想要我自己的yaml文件做類似的事情。這是訪問yaml文件中的變量。這樣在yaml文件中傳遞變量

name: 
    address: "%{city} %{street}" 

添加一些變量可以通過類似some_method('name.address', :city => 'my city', :street => 'my street')

在國際化,我們可以做

en: 
message: 
    welcome: "Hello %{username}" 

要調用這個我們可以使用t("message.welcome", :username => 'admin')

我如何能實現呢?

回答

4

它在通話後被替換。舉例來說。

Yaml.load_file('locale/en.yml')['en']['message']['welcome'].gsub('%{username}', username) 

所以方法也可以是:

def t(key, changes) 
    result = yaml_locale['en'] 
    key.split('.').each |k| 
     result = result[k] 
    end 
    changes.each_keys do |k| 
     result.gsub!("%{#{k}}%", changes[k]) 
    end 
    result 
    end 

重構了一點之後,但這個想法是這樣的。

最初的方法是在這裏:https://github.com/svenfuchs/i18n/blob/master/lib/i18n.rb#L143管理很多以爲我不:)

+0

致謝,它真的爲我工作。 – kriysna 2011-04-07 11:32:47