【问题标题】:Dealing with I18n within .js.erb在 .js.erb 中处理 I18n
【发布时间】:2013-02-08 10:45:48
【问题描述】:

我正在尝试根据触发某些 JS 代码的语言来制作一个 IF 语句。

temp.js.erb

<% if I18n.locale.to_s == 'es' %>
    someJScode;
<% elsif I18n.locale.to_s == 'en' %>
    someJScode;
<% elsif I18n.locale.to_s == 'eu' %>
    someJScode;
<% elsif I18n.locale.to_s == 'fr' %>
    someJScode;
<% end %>

显然它有效。但是,当我更改应用程序的语言时,此代码的行为不会改变。它仍然会触发先前语言环境的代码。

无论我更改多少次语言。它只会触发我打开第一个窗口时使用的语言环境的代码。

这是为什么呢?我做错了什么?

--------更新------------

按照@tigrish 的建议,我安装了 i18n-js gem。

我将此haml添加到我的application.html.haml

:javascript
      I18n.defaultLocale = " I18n.default_locale ";
      I18n.locale = " I18n.locale ";

并尝试通过 gem 文档中提供的代码在 JS 中获取语言环境。

var fo = I18n.currentLocale();
alert(fo);

但是,它不起作用。

知道为什么吗?

【问题讨论】:

    标签: javascript ruby-on-rails internationalization ruby-on-rails-3.2


    【解决方案1】:

    我认为@marcgg 在缓存方面可能是正确的。

    您可以考虑使用https://github.com/fnando/i18n-js - 即使您本身不包含任何翻译,您的I18n.locale == 'foo' 调用也将全部在JS 中并在每次函数运行时进行解释。

    【讨论】:

    • 好的,我去试试!
    • 我按照你的建议做了。它看起来很容易实现。但是,它对我没有用。知道我做错了什么吗?
    • :javascript I18n.defaultLocale = "#{I18n.default_locale}"; I18n.locale = "#{I18n.locale}";
    • 谢谢。但是我在控制台中收到此错误。 TypeError: I18n.currentLocale is not a function我尝试重新安装gem,但没有成功。
    【解决方案2】:

    我遇到了类似的问题,@tigrish 解决方案帮助我解决了它。

    @SergioNekora,请尝试以下步骤:

    1. 安装i18n-js(通过将gem 'i18n-js' 添加到您的Gemfile)。
    2. 添加到 application.html.erb 文件(对于 haml 文件,您应该使用其他语法):

      <script type="text/javascript">
          I18n.locale = "<%= I18n.locale %>";
      </script>`
      
    3. 添加到 temp.js.erb/temp.js 文件//= require i18n

    4. 现在,您可以在 temp.js.erb/temp.js 文件中使用 I18n.locale 变量(不使用 ruby​​)。例如:

      if (I18n.locale) == 'es' {
           someJScode;
      } else if (I18n.locale == 'en') {
           someJScode;
      }
      

    【讨论】:

      【解决方案3】:

      我想说,因为它是 javascript 代码,所以它可能会被缓存。尝试清除缓存并检查语言是否更改。如果是,请停用此文件的缓存或使其依赖于语言环境。

      【讨论】:

      • 你可能是对的。但是,这可能对我有用。但是其他用户可能不会清除缓存以使其正常工作。因此,我想一个更好的系统。你怎么会说'让它取决于语言环境'?谢谢
      • @SergioNekora 包含文件时,您可以将本地 a 参数添加到文件中(就像 rails 使用 sha 来使缓存在部署新版本资产时过期)
      • 可以吗?我真的不知道该怎么做。
      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 2012-05-27
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      相关资源
      最近更新 更多