我的问题很简单:我的一个coffeescripts中有一个字符串,我需要在我的Rails应用程序中使用i18n值进行国际化。这是我的代码:
$ ->
$("#order_accepted_terms").on 'invalid', ->
this.setCustomValidity('Die AGB müssen akzeptiert werden.')
有人有任何想法吗?
答案 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。这对我有好处。