4

我一直都很樂意使用內置的rails i18n支持將字符串轉換爲不同的語言,這很好。最近,儘管我需要一些超出此寶石默認行爲的東西。使用rails-i18n進行反向翻譯

因爲缺少一個更好的單詞,我會稱之爲「inverse translation」。基本上這個想法是,我有一些語言的字符串,我想能夠調用另一個語言環境的方法,並獲取翻譯爲該語言環境的字符串如果映射存在於語言環境字符串中。

例如,假設我有config/locales/en.yml

en: 
    hello: Hello World! 

config/locales/ja.yml

ja: 
    hello: Konnichi wa! 

然後當我把這種方法l2l_translate( 「區域設置區域設置翻譯」),而在英語語言環境,以字符串和區域設置作爲參數,我找回日文翻譯:

I18n.locale = :en 
l2l_translate("Hello World!", :ja) #=> "Konnichi wa!" 

此外,這是更棘手的,我想能夠逆匹配內插字符串。所以說我有:

配置/區域設置/ en.yml

en: 
    minutes: "%d minutes" 

配置/區域設置/ ja.yml

ja: 
    minutes: "%d分" 

然後,我應該能夠從英語翻譯像日本這樣:

l2l_translate("5 minutes", :ja) #=> "5分" 

所以基本上這個字符串應該與一個正則表達式匹配到英文翻譯字符串,並且「5」被拉出並作爲參數「%d」發送給日文翻譯。

顯然這裏有潛在的問題,如果:1)沒有匹配,或2)有多個匹配。例如,可以通過提出例外來處理這些問題,或者通過在前一種情況下返回零並在後一種情況下返回一系列的翻譯來處理。無論如何,這些都是次要的問題。

我的基本問題是:有這樣的事嗎?如果沒有,有沒有人對如何開發它(如寶石)有任何建議?

我特別想到的應用程序是日語服務的API包裝器。我希望能夠指定可以匹配並翻譯成其他語言的日文模式。默認的i18n支持不會這樣做,我不知道任何其他的寶石。

任何意見或建議將不勝感激!另請參閱2010年的this discussion關於i18n-rails反向翻譯的主題。

回答

2

我們使用gettext,這是一個標準的unix i18n解決方案。對於Rails,您可以使用gettext_i18n_rails。有一點需要注意的是FastGettext支持gettext_i18n_rails,似乎沒有完整的gettext支持,並且一些高級功能(如多元化)沒有像預期的那樣工作。

+0

謝謝,這看起來像它可以工作。 –