2009-05-28 10 views
0

私はTONSのjavascriptを使用するWebアプリケーションを持っています。通常は、コード自体に埋め込まれたユーザーに表示される多くのテキスト定数があります。ローカライズ可能なjavascriptを実行するには?

これをローカライズ可能にするにはどうすればよいと思いますか?
私はコードからこれらの文字列を取り除いて、それらをいくつかの外部場所に定義される定数に置き換える必要があることを知っています。

サーバー側では、ASP.Netにはこれに対処するための非常にきれいな機能がいくつか用意されています。
Javascriptでこれを行うには最適な方法はありますか?

私が持っている最良のアイデアは、サイトのJSのすべての文字列定数を持つJSファイルを持っていることです(これは、各言語ごとに異なるコピーがあります)。そして、各ページに、これを含めます最初のスクリプト、他のスクリプトの前に。
これは最も集中した方法のように思えますが、帯域幅を最小限に抑えることもできます。

他の方法がありますか?

ありがとうございます!

+1

私は上記の正確な方法で本当に大きなサイトをローカライズしましたが、うまく機能します。簡単に更新することができます。キャッシュされたものはすべてキャッシュされます。もっと良いアプローチがあるかどうかを確認するだけです。 – ajm

+0

「多言語」が「ローカライズ」に置き換えられたことを私は理解していません。マーケティング担当者が文章の耐久性を最大限に引き出してシンクロニシティを最大限に引き出すために、代わりの言葉遣い機械を使用したように思えます。 – Kieveli

答えて

2

ここでは、あなたが言及したことの線に沿って(ASP.netで)しました。 1)javascriptファイルを2つ作成しました.1つは、サイトで必要なすべてのjavascript関数/ DOM操作を定義します。 2番目はMessages.jsと呼ばれ、ローカライズする必要のある文字列リテラルをすべて定義します。これはvar ALERT_MSG = "Alert message in english"のようなものです。

2)Messages.jsの異なるバージョンを作成しました。これは、サポートしているロケールごとに1つずつ、文字列をローカライズしました。ローカライズされたjsファイルは、messages.locale.js命名規則(例えばmessages.fr-FR.jsなど)を使用して名前が付けられました。

3) "ScriptManager"内にjsファイルが含まれており、Messages.jsファイルのResourceUICulturesが提供されています。これにより、ASPを使用していない場合、正しいローカライズされたファイルがhtml出力に埋め込まれます。ネットでは、いくつかの文化をスニッフィングし、適切なjsファイルを含めて、この基本的な機能を構築することができます)。

4)Voila!

1

gettext libraryがありますが、私はそれを使用していません。

1

あなたのアプローチは十分に良いと思います。

文字列がたくさんあり、ファイルの大量さが懸念される場合は、コードjavascriptとロケールjavascriptを連結してから、各言語の単一のjavascriptファイルを作成した後、 Minify

+0

興味深い。私は既にJSファイルの連結/縮小を行っていますので、これは理にかなっています。 –

2

あなたのアプローチは理にかなって...

あなたが出版にいくつかのCPUサイクルを無駄だろうが、あなたは、いくつかのラウンドトリップを保存します。詳細:

オブジェクト内の各言語の文字列があります。

localized = {"cat": "chat"、 "dog": "chien"};

局在[「CAT」]キー及び配列表記(というより一般的なオブジェクトのドット表記)の周り

引用ではJavaScriptとの衝突を回避するためであるが、予約語:コードに続い

+0

これの主な問題は、 "リソース"ファイルを与えた場合、このフォーマットでは、翻訳者に言い換えれば、文法エラーを引き起こす何かを得ることが保証されるということです。 var strCat = "chat";それほど優れているわけではありませんが、少なくともエラーの位置を特定する方が簡単で、翻訳者が理解しやすい構文です。 名前空間でどのようにラップしているのが好きですが、「両世界のベスト」で何かを見つけることができます。 –

+1

翻訳者はJSONを見る必要はありません。データファイルからJSONに変換することができます。 – Nosredna

+0

そうですね、私たちはそれをやったのです。翻訳されたすべてのメッセージは、名前空間のオブジェクトに格納されます。 labels = {errorMessage: "foo"、confirmMessage: "bar"} – ajm

0

ライブラリは、JavaScriptアプリケーションをローカライズするためにあります:https://github.com/wikimedia/jquery.i18n

文字列は、他のほとんど誰もが示唆するように、JSONファイルに保存されているが、それはいくつかのより多くの機能を持っている:

これは、パラメータの交換を行うことができ、性格(巧妙な彼/彼女の扱い)、数字(複数の形を持つ言語を含む巧妙な複数の扱い)、およびいくつかの言語が必要とするカスタム文法規則をサポートします。

唯一の要件はjQueryです。

関連する問題