1

我想根據觸發某些JS代碼的語言來製作IF語句。在.js.erb中處理I18n

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建議我iinstalled i18n- js寶石。

我加入這個HAML我application.html.haml

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

並試圖將語言環境中JS創業板文檔提供的代碼。

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

但是,它不起作用。

任何想法爲什麼?

回答

0

我想說,因爲它的JavaScript代碼可能會被緩存。嘗試清除緩存並檢查語言是否更改。如果有,請取消激活此文件的緩存或使其取決於語言環境。

+0

你可能是正確的。但是,這可能適用於我。但其他用戶可能無法清除緩存以使其工作。因此,我猜想一個更好的系統。你如何說'讓它取決於區域'?謝謝 –

+0

@SergioNekora當包含文件時,您可以將本地參數添加到文件中(就像rails爲了在部署新版本資源時使緩存過期一樣)。 – marcgg

+0

我可以嗎?我真的不知道該怎麼做。 –

1

我認爲@marcgg在緩存方面可能是正確的。

您可能會考慮使用https://github.com/fnando/i18n-js - 即使您本身不包含任何翻譯,您的I18n.locale == 'foo'調用將全部使用JS並在每次函數運行時都進行解釋。

+0

好吧,我要試一試! –

+0

我照你的建議做了。它看起來很容易實現。但是,它並不適合我。任何想法我做錯了什麼? –

+0

:javascript I18n.defaultLocale =「#{I18n.default_locale}」; I18n.locale =「#{I18n.locale}」; – tigrish

0

我有類似的問題,@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; 
    }