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' 

正是我所需要的。有趣的是,當我終於決定向人羣詢問解決方案時,我會解決它:-)

乾杯。