2009-07-06 15 views
13

JavaScriptコードをビューから切り離したい。
は、私には、JavaScriptによって生成されたシンプルな画像ボタンのローカライズを実現するための要件を得た:JavaScriptファイルでローカリゼーションを処理する方法は?

<img src="..." onclick="..." title="Close" /> 

それのタイトルをローカライズするための最良の技術は何ですか?

PS:Ayendeによってa solutionが見つかりました。これは正しい方向です。

編集:
Controller.Resource('foo')拡張メソッドを提供するローカリゼーションヘルパークラスを取得しました。

指定したコントローラのすべてのJavaScriptリソース(App_LocalResourcesの "ClientSideResources"サブフォルダから)をその名前で返すようにしたいと考えています(ヘルパー)。次にBaseControllerに電話し、ViewDataに追加してLayoutに表示します。

これはいい考えですか?

答えて

9

EDIT

は(ハッシュ)JavaScriptのオブジェクトに必要なローカライズされたリソースを書き込み、その後、あなたの動的に作成されたオブジェクトのルックアップのためにそれを使用することを検討してください。私はこれが翻訳のためにサーバーに戻るよりも良いと思う。これは、ビューデータを介して追加するのと似ていますが、もう少し柔軟性があります。 FWIWでは、コントローラの一部ではなく、ビューの一部であるローカリゼーションリソースを考えることができます。ビューで

<script type="text/javascript" 
     src='<%= Url.Content("~/Resources/Load?translate=Close,Open" %>'></script> 

どのような出力が何かでしょう:引数なし

var local = {}; 
local.Close = "Close"; 
local.Open = "Open"; 

それは、出力全体の翻訳ハッシュをでしょう。引数を使用すると、ビューごとにカスタマイズすることができます。実は、私は限りJavaScriptコードを容器にローカライズされているように私のビューのうち、私のJavaScriptコードを維持する程度すぎfussedないよ

$(function(){ 
    $('#button').click(function() { 
     $("<img src=... title='" + local.Close + "' />") 
      .appendTo("#someDiv") 
      .click(function() { ... }); 
    }); 
}); 

その後、のようなあなたのJavaScriptファイルでそれを使用します。通常は、マスターページをタイトル、ヘッダー、メイン、およびスクリプトの4つのコンテンツ領域に設定します。タイトル、ヘッダー、メインはあなたが期待する場所に移動し、スクリプト領域は本文の下部に移動します。

JavaScriptのインクルード(viewusercontrolsを含む)をすべてスクリプトコンテナに入れました。ビュー固有のJavaScriptコードはインクルードの後に​​付いています。私は、必要に応じてリファクタリングしてコードをスクリプトに戻しました。私は、コントローラのメソッドを使用してスクリプトの照合を行うことを考えました。つまり、1つのリクエストを使用して複数のスクリプトをインクルードしていますが、まだそれを知りませんでした。

これは、読みやすくするためにJavaScriptコードを分けておく利点がありますが、必要に応じてモデルやビューデータをJavaScriptコードに簡単に挿入することもできます。JavaScriptが利用できない場合、あなたは、要素の任意のテキストを初期化するためにJavaScriptコードを使用している場合、あなたのサイトが恐ろしく低下します、

//keep all of your localised vars somewhere 
var title = '{title_from_server}'; 
document.getElementById('someImage').title = title; 

は覚えておいてください:

+0

を「私はJavascriptをビューから分離することにしたいです。」 == "javascriptをあなたのマークから分離しておくことも良い習慣です。" <=そしてそれはなぜ<%= foo %>がうまくいかないのかという問題です。 –

+0

Btw、なぜonclickハンドラをJS onloadに添付するのが望ましいですか? –

+0

質問の「JSによって生成された」部分が欠落しました。この場合、私は、ビューにローカライズされたデータを書き、JavaScriptをローカルオブジェクトからロードすることを検討します。再書込みします。 – tvanfosson

1

あなたはそれが分離維持を主張する場合は、あなたのような何かを行うことができます。 ASP.NET Ajaxは内蔵のローカライゼーション・メカニズムがある

+0

くそー... JavaScriptのサポートの不足についてもう一度忘れてしまった。 :( –

関連する問題