在 yaml 文件中传递变量

kri*_*sna 5 yaml ruby-on-rails ruby-on-rails-3

我喜欢使用 i18n 和 yml。我想要我自己的 yaml 文件来做类似的事情。那是访问 yaml 文件中的变量。像这样的东西

name:
  address: "%{city} %{street}"
Run Code Online (Sandbox Code Playgroud)

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

在 i18n 我们可以做

en:
 message:
  welcome: "Hello %{username}"
Run Code Online (Sandbox Code Playgroud)

要调用它,我们可以使用 t("message.welcome", :username => 'admin')

我该如何实施?

shi*_*ara 4

打电话后就更换了。举例来说。

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

所以在方法中它可以是:

  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
Run Code Online (Sandbox Code Playgroud)

之后重构了一下,但想法就是这样。

原始方法在这里:https://github.com/svenfuchs/i18n/blob/master/lib/i18n.rb#L143管理很多我认为不:)