1

我想在本地化的消息字符串中替换多个变量/占位符的最佳方式在我的Ruby on Rails应用程序中。替换单个占位符时,我使用了满意的方式:ROR:本地化消息字符串变量替换

en.yml: url_borked:“无法加载URL:$ url。” In: 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 

我一直在使用字符串::子试过,但我不满意,因为它丑陋。例如:

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

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

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

我也曾考虑printf函数,但这并不本地化的占位符的相对位置可以根据翻译转变工作。

有没有正确的方法来做这个消息占位符替换?

谢谢。

回答

4

为什么不:

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

+0

谢谢AlexT,你是绝对正确的,我觉得有点愚蠢,因为忽略了明显的。你只是打我回答我自己的问题,所以你得到大剔! 干杯。 – 2010-03-02 07:20:53

0

好吧,我有一个脑电波,更仔细地看了一下I18n :: translate函数,发现了其中的“内插”功能。

例如

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

正是我所需要的。有趣的是,当我终于决定向人群询问解决方案时,我会解决它:-)

干杯。