2

我的問題很簡單:我在我的一個咖啡文本中有一個字符串,我需要在我的Rails應用程序中使用i18n值進行國際化。這是我的代碼:如何國際化coffeescript字符串與國際化的價值?

$ -> 
     $("#order_accepted_terms").on 'invalid', -> 
     this.setCustomValidity('Die AGB müssen akzeptiert werden.') 

任何人有任何想法?

回答

7

我通常使用這個寶石 - https://github.com/fnando/i18n-js。它的行爲很像本機Rails I18n。配置寶石(檢查在GitHub上的自述)在您添加到您的佈局結尾(例如在Haml的)

= javascript_tag do 
    I18n.defaultLocale = "#{I18n.default_locale}" 
    I18n.locale = "#{I18n.locale}" 

設置默認的和當前的語言環境,然後你可以在JavaScript(和CoffeeScript的)使用的I18n如下所示(自述文件中的一些示例):

I18n.t("some.scoped.translation") 
I18n.l("time.formats.short", "2009-09-18 23:12:43") 

還支持將參數傳遞給翻譯。考慮到你有一個翻譯

en: 
    users: 
    greet: "Hello %{name}!" 

你可以做到這一點

I18n.t("users.greet", {name: 'Nick'}) 

,你會得到結果

Hello Nick! 

你會發現上面的鏈接下面的更多的例子。

+1

謝謝,作品像一個魅力 – NickEckhart 2014-11-04 10:37:25

0

如果您正在尋找基於JavaScript的i18n庫。你可以檢查i18next了。這對我很好。

2

在我看來,更好的方法(以及不需要另一個gem,記住 - 性能)的方法是將包含國際化消息的對象包含爲全局範圍的javascript變量。所以,你會去做這種方式(對於Ruby on Rails的):在你的application.html.erb添加標籤標題後立即(任何其他JavaScript文件中引用之前)

2.添加全局

1。那些內嵌腳本標籤內範圍可變對象在頭

generalMessages = { 
    someMessage: '<%= t 'path.to.some_message_in_yml' %>', 
    anotherMessage: '<%= t 'path.another_message' %>' 
} 

3.參考變量(在JavaScript/CoffeeScript的/打字稿)爲:

foo = generalMessages.someMessage 

瞧。

一個類似的方法(只是不同的語法如何引用和打印國際化的消息,顯然)也適用於任何其他支持國際化的語言,並且無法直接在javascript中添加這些國際化字符串。