如何使用i18n值将coffeescript中的字符串国际化?

时间:2014-11-03 08:08:36

标签: javascript ruby-on-rails coffeescript internationalization rails-i18n

我的问题很简单:我的一个coffeescripts中有一个字符串,我需要在我的Rails应用程序中使用i18n值进行国际化。这是我的代码:

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

有人有任何想法吗?

3 个答案:

答案 0 :(得分:7)

我通常使用这个宝石 - https://github.com/fnando/i18n-js。它的行为很像原生Rails I18n。配置gem之后(检查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 :(得分:3)

在我看来,更好的方式(并且不需要另一个宝石,记住 - 性能)是将包含国际化消息的对象作为全局范围的javascript变量。所以你要这样做(对于Ruby on Rails):

 1.在你的application.html.erb中,在标题之后添加标签(在引用任何其他javascript文件之前)

 2.在head

中的那些内联脚本标记中添加全局范围变量对象
generalMessages = {
    someMessage: '<%= t 'path.to.some_message_in_yml' %>',
    anotherMessage: '<%= t 'path.another_message' %>'
}

3。将变量(在javascript / coffeescript / typescript中)引用为:

foo = generalMessages.someMessage

瞧。

类似的方法(显然,不同的语法如何引用和打印国际化的消息)也适用于支持国际化的任何其他语言,并且无法直接在javascript中添加这些国际化字符串。

答案 2 :(得分:0)

如果你正在寻找基于javascript的i18n库。您可以查看i18next。这对我有好处。