過去数日間、MVCで記述されたWebアプリケーションのローカリゼーションを実装しています。私が指摘できるLozalizationの「問題」を解決する3つの主要なタスクがあります。
- ストレージ:アプリケーションで使用する複数の言語の文字列のキーと値のペアを格納します
- サーバーサイドアクセス:サーバーサイドスクリプトの特定のキー(ビュー、コントローラー、Webフォームなど)に従って値にアクセスします。
- クライアント側のアクセス:クライアント側のスクリプト(Javaスクリプトなど)の特定のキーに従って値にアクセスします
- 文化の切り替えメカニズムを作成します。
私が探求した各タスクを達成するためのいくつかの方法があり、私はそれらの間で選択するのに苦労しています。私が興味を持っている2つの質問があります:
- ローカリゼーションのベストプラクティスを知りたいのですが?あなたの視点から。一方の方法ともう一方の方法の長所と短所を書いてください。
- あなたが提案できる他の方法や機能強化はありますか?
1.ストレージ
リソースファイル:
- ローカライズされた文字列のキーと値のペアをリソースファイルに保存します
- myString.resx、myStrings.he-IL.resexなど、カルチャごとに同じキーを使用してリソースファイルを作成します。
XMLファイル:
各キーの親ノードと各カルチャ固有の値の子ノードを含む構造化XMLファイルを作成します。
<string key="myAppName"> <heIL>some Hebrew value</heIL> <enUS>some English value</enUS> </string>
2.サーバー側アクセス
- 両方のストレージオプションを使用すると、サーバー側からアクセスするのはかなり簡単です。
- その場合、値へのアクセスを容易にするために自動生成されるクラスがあるため、リソースファイルの使用が少し簡単になります。したがって、リソースを静的プロパティを持つ通常のクラスとして使用して、キーに従って各文字列値にアクセスします。
- XMLファイルを使用する場合は、Access Layerコードを自分で書き留める必要がありますが、これは必ずしも悪いことではありません。そうすることで、より詳細な制御が可能になるためです(必要な場合のみ)。
3.クライアント側のアクセス
ここが面白く、時には複雑になるところです。ここで私がここで検討した2つのオプションがあり、どのように進めるかがわかりません。
サーバー側で生成されたスクリプト:
- View \ Web-Formで、
<script>
タグ内にサーバースクリプトレンダリングブロックを追加します この時点から、動的にキーの配列、またはJavaスクリプトの静的変数を作成し、それらの中に必要な文字列を配置します。これはRazorエンジンを使用した例です。
<script type="text/javascript"> k_CultureInfo = "@CultureInfo.CurrentCulture.Name"; K_ApplicationName = "@MyStrings.SomeStringKey"; .... </script>
カスタムHTTPハンドラー:
私はここのブログの位置でアイデアを見つけました:ASP.NETのJavaScriptファイルのテキストをここでローカライズします
- 最適なのは、「。js.axd」リクエストを処理するHTTPハンドラーを作成してサーバーに送信することです。
- 「ScriptTranslatorHandler」はjavascripファイルを読み取り、JavaスクリプトのTranslate(SomeStringKey)などの事前定義されたトークンのインスタンスを、上記のいずれかのメソッドで使用される正しい文字列に置き換えます。