在yaml文件中传递变量

5

我喜欢使用i18n和yml。我想要自己的yaml文件来完成类似的功能,即在yaml文件中访问变量。就像这样:

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

添加变量可以传递类似于some_method('name.address', :city => 'my city', :street => 'my street')的内容。

在国际化(i18n)中,我们可以进行以下操作:

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

要调用它,我们可以使用t("message.welcome", :username => 'admin') 我该如何实现它?
1个回答

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 处理了很多我不知道的东西 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接