我正在尝试找出在我的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函数,但这不适用于本地化,因为占位符的相对位置可能会根据翻译而改变。
是否有正确的方法来执行此消息占位符替换?
感谢。
答案 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'
正是我所需要的。有趣的是,在我最终决定向人群寻求解决方案后,我会解决这个问题: - )
干杯。