我正在尝试根据触发某些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 %>
显然它有效。但是,当我更改应用程序上的语言时,此代码的行为不会更改。它仍会触发先前语言环境的代码。
改变语言的次数无关紧要。它只会触发我用第一个窗口打开的语言环境的代码。
为什么?我做错了什么?
-------------------- UPDATE ------------
根据@tigrish的建议,我安装了i18n-js gem。
我将这个haml添加到我的application.html.haml
:javascript
I18n.defaultLocale = " I18n.default_locale ";
I18n.locale = " I18n.locale ";
并尝试使用gem docs中提供的代码获取JS中的语言环境。
var fo = I18n.currentLocale();
alert(fo);
然而,它不起作用。
知道为什么吗?
答案 0 :(得分:1)
我认为@marcgg在缓存方面可能是正确的。
您可以考虑使用https://github.com/fnando/i18n-js - 即使您本身不包含任何翻译,您的I18n.locale == 'foo'
调用都将在JS中并在每次函数运行时进行解释。
答案 1 :(得分:0)
我会说,因为它是javascript代码,它可能会被缓存。尝试清除缓存并检查语言是否发生变化。如果是,请停用此文件的缓存,或使其取决于区域设置。
答案 2 :(得分:0)
我遇到了类似的问题,而@tigrish解决方案帮助我解决了这个问题。
@SergioNekora,请尝试以下步骤:
gem 'i18n-js'
添加到您的Gemfile中)。添加到application.html.erb文件(对于haml文件,您应该使用其他一些语法):
<script type="text/javascript">
I18n.locale = "<%= I18n.locale %>";
</script>`
添加到temp.js.erb / temp.js文件//= require i18n
现在,您可以在temp.js.erb / temp.js文件中使用I18n.locale变量(不使用ruby)。例如:
if (I18n.locale) == 'es' {
someJScode;
} else if (I18n.locale == 'en') {
someJScode;
}