多言語Opera Uniteアプリケーションの作成(パート1)

残念ながら、OperaはまだW3C標準で提案されいる方法によるウィジェットのローカライズをサポートしていませんが、サポートしている場合でも、サーバー側、そして明らかにサーバー言語のみに影響します。 したがって、ブラウザーサーバーとクライアントブラウザーの言語が一般的に異なる場合は、すべてを自分で行います。

サーバー側からクライアントに送信された情報の言語を受信する

サーバー上のクライアント言語を決定する方法は? -HTTP Accept-Languageヘッダー 。 それに到達する方法? -getRequestHeaderメソッドまたはWebServerRequest型のオブジェクトのheadersプロパティを使用。 そして、RFCに記載されているアルゴリズムを使用して処理しますか? -はい。 これを行うために、WebServerRequestとサポートされているローカリゼーションのリストを受け入れ、クライアントが優先するローカリゼーションを生成する関数を作成しました。
 関数getLanguageNameForRequest(リクエスト、SelectedArray){
	 var HeaderCollection = Request.getRequestHeader( "Accept-Language");
	 var AcceptString = "";
	 if(HeaderCollection!= null)if(HeaderCollection.length> = 1){
		 // HeaderCollectionはDOMStringListであり、結合メソッドがないため、ポルノ
		 for(var i = 0、AcceptString = HeaderCollection.item(0); i <HeaderCollection.length-1;){
			 i ++;
			 AcceptString + = "、" + HeaderCollection.item(i);
		 }
	 }
	 var AcceptArray = AcceptString.replace( ""、 "")。split( "、");
	 // RFC2616、#14.4 Accept-Languageを参照
	 //http://tools.ietf.org/html/rfc2616#section-14.4
	 var Lang = SelectedArray [0]、Qu = -Infinity;
	 for(AcceptArrayの変数i){
		 var l、q、lq;
		 lq = AcceptArray [i] .split( ";");
		 l = lq [0]; q = 1;
		 {
			 if(lq [1] .substring(0,2)=== "q ="){
				 q = parseFloat(lq [1] .substring(2));
			 }
		 } catch(err){
			 qは1です。
		 }
		 if(SelectedArray.indexOf(l)> = 0){
			 if(q> Qu){
				ラング= l;
				 Qu = q;
			 }
		 }
	 }
	
	ラングを返します。
 }
呼び出し例
たとえば、クライアントがAccept-Languageヘッダーで「ru、ru-RU; q = 0.9、en; q = 0.8、de; q = 0.7」という行を送信し、サーバーで「ru」および「en」という言語がサポートされている場合、getLanguageNameForRequest 「ru」を返します。
  window.onload = function(){opera.io.webserver.addEventListener( '_ index'、function(RequestEvent){
	 RequestEvent.connection.response.writeLine( "クライアント言語:" + getLanguageNameForRequest(RequestEvent.connection.request、["ru"、 "en"]));
	 RequestEvent.connection.response.close();
 }、false);} 
代わりにUserAgentを使用しないのはなぜですか? ページではなく、ブラウザインターフェースの言語を伝えるためです。

サーバー側からサーバーに出力される情報の言語を受け取る

Opera Uniteテクノロジーの特徴は、サーバースクリプトが、クライアントブラウザーを介してHTMLを受信するユーザーだけでなく、さまざまなAPIを介してサーバーブラウザーに直接座っているユーザーとも対話することです。たとえば、 widget.showNotificationを介したメッセージの送信です 。 幸いなことに、通常のページと同じDOMがサーバーコードで使用できます。つまり、window.navigator.languageが機能し、ブラウザーサーバーインターフェイスの言語が表示されます。 前のケースと同様の関数では、使用可能な言語から言語を選択する関数をラップします。
関数getLanguageNameForServer(SelectedArray){
	 var l = window.navigator.language
	 return(SelectedArray.indexOf(l)> = 0)?l:SelectedArray [0];
 }

 widget.showNotification( "サーバー言語:" + getLanguageNameForServer(["en"、 "ru"、 "de"])); 

アプリケーション全体をローカライズするためのインフラストラクチャの作成

Opera Uniteの最も重要な利点の1つは、アプリケーションのサーバー部分とクライアント部分の両方で同じJavaScriptコードを使用できることです。ローカライズ用のAPIを作成するときにこのプロパティを失いたくない、つまり、返される行の言語は場所によって暗黙的に決定される必要がありますそれらを尋ねるコードを実行します。 これを書いたら、これは記事の2番目の部分になります。



All Articles