ROR:本地化消息字符串变量替换

时间:2010-03-02 07:06:26

标签: ruby-on-rails ruby localization string internationalization

我正在尝试找出在我的ruby on rails应用程序中替换本地化消息字符串中的多个变量/占位符的最佳方法。当替换单个占位符时,我使用了令人满意的:

在en.yml中:     url_borked:“无法加载URL:$ url。” 在视图中:     t(:url_borked)[“$ url”] = request.url

但这不适合多个占位符。它看起来很丑陋,实际上并没有起作用:

在en.yml中:

url_borked: "The URL: $url is badly formatted, perhaps you meant: $url_clean"

在视图中:

(t(:url_borked)["$url"] = request.url)["url_clean") = @suggested_url

我已经尝试过使用String :: sub,但是因为它丑陋而对它不满意。例如:

(t(:url_borked).sub("$url", request.url).sub("url_clean", @suggested_url)

如果要替换一个占位符的多个实例,它也不起作用。 e.g:

bad_url: "$url cannot be loaded, please try $url another time"

我也考虑过printf函数,但这不适用于本地化,因为占位符的相对位置可能会根据翻译而改变。

是否有正确的方法来执行此消息占位符替换?

感谢。

2 个答案:

答案 0 :(得分:4)

为什么不:

t(:url_borked, :url=>request.url, :url_clean=>@suggested_url)

答案 1 :(得分:0)

好的,我有一个脑电波并且更仔细地查看了I18n :: translate函数,并在其中找到了“插值”功能。

e.g。

I18n.t :foo, :bar => 'baz' # => 'foo baz'

正是我所需要的。有趣的是,在我最终决定向人群寻求解决方案后,我会解决这个问题: - )

干杯。