2

特定の 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 docs で提供されているコードを JS で取得しようとしました。

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

しかし、うまくいきません。

理由はありますか?

4

3 に答える 3

1

キャッシュに関しては、@marcggがおそらく正しいと思います。

https://github.com/fnando/i18n-jsの使用を検討してください。翻訳自体を含めなくても、I18n.locale == 'foo'呼び出しはすべて JS で行われ、関数が実行されるたびに解釈されます。

于 2013-02-08T11:20:33.403 に答える
1

I had a similar problem and @tigrish solution helped me to solve it.

@SergioNekora, please try those steps:

  1. Install i18n-js (by adding gem 'i18n-js' to your Gemfile).
  2. Add to application.html.erb file (for haml file you should use some other syntax):

    <script type="text/javascript">
        I18n.locale = "<%= I18n.locale %>";
    </script>`
    
  3. Add to temp.js.erb/temp.js file //= require i18n

  4. Now, you can use I18n.locale variable inside temp.js.erb/temp.js file (without using ruby). For example:

    if (I18n.locale) == 'es' {
         someJScode;
    } else if (I18n.locale == 'en') {
         someJScode;
    }
    
于 2014-01-18T21:35:32.353 に答える
0

それはJavaScriptコードなので、キャッシュされる可能性があると思います。キャッシュをクリアして、言語が変更されるかどうかを確認してください。存在する場合は、このファイルのキャッシュを無効にするか、ロケールに依存するようにします。

于 2013-02-08T10:50:32.767 に答える