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中添加这些国际化字符串。