2011-10-30 3 views
1

Djangoアプリケーションをローカライズする場合、makemessagesコマンドはTXT、HTML、PYファイルをすべて解析してPOファイルを生成しますが、JSファイルをローカライズするときはdjangojsコマンドを実行する必要があります。私はDjangoのソースを掘り下げて、なぜこれが異なるのかを理解していません。誰かが説明できますか?JavaScriptファイルをDjangoで別々にローカライズする必要があるのはなぜですか?

私はプロダクション環境ではApacheを使用してアプリケーションファイルを提供していますが、Nginxなどの単純なプロキシは静的ファイルを提供するために使用されているため、アプリケーションサーバーの負荷が大幅に軽減されます。テンプレートをレンダリングするとき、Djangoは要求されたロケールをチェックし、適切なローカリゼーションファイルをロードしてテンプレートを提供しますが、JSは静的メディアとして扱われますが、Djangoによって解析されることはありません。これでしょうか?

(ジャンゴとIとローカリゼーションの世界へにおけるその私の最初の進出は疑問がいっぱい詰まってる、私はこの記事を見つけて、それゆえに見えることはできません答え誰の多く。)

おかげ

答えて

1

扱いが異なる理由は、docsです。 JavaScriptに翻訳を追加する

は、いくつかの問題を提起:

  • JavaScriptコードがgettextの実装にアクセスすることはできません。
  • JavaScriptコードは.poまたは.moファイルにアクセスできません。サーバーによって配信される必要があります。
  • JavaScriptの翻訳カタログはできるだけ小さくする必要があります。

本質的に、内部のPython変換はサーバー上で行われます。しかし、JSには、サーバーが提供する別のファイルがあります。このファイルには、ユーザーの言語に必要なすべての翻訳が含まれています。翻訳はユーザーの側で行われます。あなたが見ることができるように、それは全く異なる戦略です。 DjangoはJSファイルのための同様のインターフェースを、まったく別の方法で扱っても、それを追加するのに役立ちます。

私はそれがこのように動作します推測:テンプレートをレンダリングするとき、Djangoは、要求されたロケール をチェックし、適切なローカライズファイルをロードし、 は、テンプレートを提供していませんが、JSは、一方の静的 メディアとして提供されていますDjangoによって解析されます。これでしょうか?

テンプレートの処理については、最初の部分で説明します。上記のようにJSを処理します。

Django JSの翻訳メカニズムは、は静的なファイルとしてJSの翻訳を扱わないことに注意してください。 Djangoビューを使用して毎回JSファイルを生成します(javascript_catalogは最初の行にリンクされているドキュメントに記載されています)。 これは私が遭遇した問題の一つです。このようなファイルは、すべての要求で生成する必要はありません。これらのJS翻訳を静的ファイルとしてパックし、適切にキャッシュできるようにするプロジェクトがいくつかあります(django-mediageneratorなど)。

+0

素晴らしいと有益な返答いただきありがとうございます。あなたが言及した3つのポイントについて、私はドキュメントでそれらについて読んだが、テンプレートと同様にJSをローカライズすることがなぜ問題になるのかについては説明しなかった。私はちょっと奇妙だと思うので、私はそう思う。なぜなら、ジャンゴのメディア生成器は便利だからだ。例:JSファイルに 'alert( 'Hello');という単純な行があり、これが' http:// www.example.com/en/static/example.js'から提供されていれば、 'http:// www.example.com/de/static/example.js'のドイツ語版です。あなたはこれをキャッシュすることさえできます。私は十分に冗長になったことを願っています。 –

+1

はい、それは私がdjango-mediageneratorを好きな理由です;)あなたは、それらを束ねる、圧縮する、静的なファイルに本当に先進的なことをすることができます。それらに気づかせてください...大きな特徴の1つは、あなたはブラウザ側でキャッシュを重く使用します。静的ファイルを変更すると、mediageneratorは_cache busting_を実行し、ブラウザのキャッシュを無効にします。 –

関連する問題