Windows 8 Metro Weatherソースを掘り下げる

Windows 8(64bit + VS2011)をインストールし、新しいMetroインターフェイスを読んだ後、最初にしたかったのは、温度を華氏から摂氏に切り替えることでした。 これにより、ソースが掘り下げられ、アプリケーションがロシア化されました。



についての記事は何ですか:















どこにある



ビルドを見ていない、または注意を払っていない人の場合、アプリケーションフォルダーへのフルパスは次のとおりです。C:\ Program Files \ Applications \ microsoft.weather_1.0.0.26_neutral_neutral_8wekyb3d8bbwe



アプリケーションフォルダーを表示するには、エクスプローラーでプログラムファイルを開き、[表示]タブの[非表示のアイテム]チェックボックスをオンにする必要があります。 このようにアプリケーションフォルダーにアクセスすることはできません。そのためには、アクセス許可を追加する必要があります。そのためには、このフォルダーのプロパティの[セキュリティ]タブに移動します。

アプリケーションはJavaScriptで記述されており、一連の.css、.html、.jsファイル形式、.priリソースファイル、.p7x署名証明書、および背景用の一連の画像とビデオファイルで構成されています。



華氏を摂氏に切り替える



華氏を摂氏に切り替えるには、ソースを取得する必要がありました。 まだそこにたどり着けていない人は、Win + Cをクリックして[設定]を選択し、右のポップアップパネルで[天気]の設定をクリックして、通常の摂氏を選択します。



Visual Studio 2011でのアプリケーションの起動



これを行うには、VSで空のjavascriptプロジェクトを作成する必要がありました。 次に、プロジェクト構造を見て、default.htmlという名前をdefaultHost.htmlに変更し、ファイルの内容を転送しました。 次に、写真、ビデオ、スタイルシート、jsスクリプトをプロジェクトに追加し、AppxManifest.xmlの内容をpackage.appxmanifestにコピーする必要がありました。 インストールされたアプリケーションの「タイル」がMetroから消えないように、パッケージ名をMicrosoft.Weatherからこのファイルの別の名前に変更するだけです。

VS2010では、プロジェクトプロパティのメニューからテキストリソースを追加できますが、ここではプロジェクトに新しいリソースファイル(.resjson)を追加するだけで十分です。 追加した後、ファイルを開くと、テキストリソースの使用に関するコメント付きの説明が表示されます。 それがすべてのようです。 デバッグまたはリリースでアプリケーションを実行し、ブレークポイントを設定して、その動作を学習できます。



ボタンを追加してクリックをサブスクライブする



defaultHost.htmlを見て、コードをいじって、イベントハンドラーと画像を使用して独自のボタンを追加することにしました。

ボタンをアプリバーに配置しました。このため、[都市を削除]ボタンのコードをコピーして、次に貼り付けました。 起こったことは次のとおりです。

< button id = "ruCulture" class = "win-command" > <br/>

< span class = "win-spritestates win-commandicon win-large ruicon" ></ span > <br/>

< span id = "cultureText" class = "win-label" data - win - res = "textContent: ruCulture" > ru - RU </ span > <br/>

</ button >






次に、クリックハンドラーを追加する必要があります。このため、defaultNew.jsで、クリックハンドラーを[市の削除]に追加し、コード行を挿入します。

id ( "ruCulture" ) . addEventListener ( "click" , switchCulture ) ;





id関数はdocument.getElementByIdのラッパーであり、currentCityControl.jsにあります。 switchCultureは、ローカライズ言語を切り替える私の機能です。これについては、記事の後半で説明します。



部分的および完全なロシア化



partialはどういう意味ですか? これは、天気サーバーへの要求でロケールをru-RUに変更し、それに応じてロシア語でサーバーから天気予報を受信することを意味します。 アプリケーションは独自の言語のままです。 また、ロシア語のテキストリソースを追加することで、完全なロシア語化が可能になります。



タスクを設定して、ロケールをru-RUからfr-FRに切り替えてこの設定を保存するためのボタンを作成し、アプリケーションを再起動した後、保存されたロケールの言語で天気データを取得します。



data.jsファイルに行があります



var culture = R. getString ( "/webservice/culture" ) ;





RはdefaultHost.jsからR = new Windows.ApplicationModel.Resources.ResourceLoader();



リソースファイルの現在のロケールがカルチャ変数に入力されます。 私はgetCulture()関数を書いていますが、この行を次のように変更します:

var culture = getCulture ( ) ;







次に、defaultHost.jsに移動してカルチャを追加します。



WinJS. Namespace . define ( "Weather.Settings" , { <br/>

hourly : ApplicationData. current . localSettings . values [ "hourlydaily" ] == "h" , <br/>

celsius : ApplicationData. current . localSettings . values [ "temp" ] == "c" , <br/>

setForecastHourly : setForecastHourly , <br/>

setForecastDaily : setForecastDaily , <br/>

setUnitCelsius : setUnitCelsius , <br/>

setUnitFahrenheit : setUnitFahrenheit , <br/>

// <br/>

culture : ApplicationData. current . localSettings . values [ "culture" ] <br/>

} ) ; <br/>

<br/>

// <br/>

Weather. Settings . culture = getCulture ( ) ;








defaultHost.jsの最後に関数を挿入します



function getCulture ( ) { <br/>

if ( ! Weather. Settings . culture ) <br/>

{ <br/>

// ru-RU <br/>

var idc = Windows. Storage . ApplicationData . current . localSettings . values [ "culture" ] ; <br/>

if ( idc ) { <br/>

setCulture ( idc ) ; <br/>

} else { <br/>

setCulture ( "ru-RU" ) ; <br/>

} <br/>

} <br/>

return Weather. Settings . culture ; <br/>

} <br/>

function setCulture ( culture1 ) { <br/>

if ( Weather !== undefined ) { <br/>

Weather. Settings . culture = culture1 ; <br/>

Windows. Storage . ApplicationData . current . localSettings . values [ "culture" ] = culture1 ; <br/>

} else { <br/>

var idc = Windows. Storage . ApplicationData . current . localSettings . values [ "culture" ] ; <br/>

if ( idc ) { <br/>

Weather. Settings . culture = idc ; <br/>

} else { <br/>

Weather. Settings . culture = "ru-RU" ; <br/>

} <br/>

} <br/>

}








defaultHost.htmlでのデバッグの利便性のために、デバッグ情報を出力するためのdivが追加され、defaultHost.jsの関数deb()に追加されました。 この関数は、スクリプト内のどこからでも呼び出して、任意の情報を出力できます。



function deb ( stok ) { <br/>

var deb = document. getElementById ( "debugText" ) ; <br/>

if ( deb ) { <br/>

deb. innerText = stok ; <br/>

} <br/>

}








設定を維持しながらロケールの切り替えを行うことは残ります

ボタンは既に追加されているので、そのアイコンを描画します。 Weather_Commands_PNG_STRIP_40x.pngファイルには、すべてのボタンアイコンが含まれています。 ファイルを開いて画像のサイズを小さくし、ボタンのさまざまな状態のボタンを描画します。

ボタンアイコンを表示するには、defaultHost.cssにスタイル設定を追加します



<br/>

button .ruicon <br/>

{ <br/>

background-position : 0px -280px ; <br/>

} <br/>

<br/>

button :active .ruicon <br/>

{ <br/>

background-position : -80px -280px ; <br/>

} <br/>

<br/>

button :disabled .ruicon <br/>

{ <br/>

background-position : -120px -280px ; <br/>

}








ボタンがあり、その上にアイコンがあり、サブスクライブされたボタンをクリックすると、機能を追加するために残ります:

function switchCulture ( e ) { <br/>

if ( getCulture ( ) == "ru-RU" ) { <br/>

setCulture ( "fr-FR" ) ; <br/>

} else { <br/>

setCulture ( "ru-RU" ) ; <br/>

} <br/>

var culture = id ( "cultureText" ) ; <br/>

if ( Weather. Settings . culture ) { <br/>

culture. innerText = Weather. Settings . culture ; <br/>

} <br/>

// TO-DO: <br/>

// <br/>

// - - <br/>

mainData. refresh ( true ) . then ( function ( ) { } ) ; <br/>

updateAllTiles ( ) ; <br/>

}








リリースでアプリケーションを起動し、ボタンを押すと、ロシア語のロケールが設定されます。 アプリケーションを停止し、再度実行すると、アプリケーションは天気を母国語で読み込みます。 weather.service.msn.comによるロード



リソースを介したアプリケーションの完全なロシア化



予測はすでにロシア語で行われており、プログラムのインターフェースを翻訳するために残っています。

Metroアプリケーションはローカル言語設定を決定し、これに応じてテキストリソースをロードします。 resources.resjsonファイルを使用して文字列フォルダーをプロジェクトに追加し、同じファイルを使用してru-RUフォルダーを追加します。 ファイルの内容:



{ <br/>

"Add" : "" , <br/>

"Pin" : "" , <br/>

"CurrentCitySearch" : " " , <br/>

"Tomorrow" : "" , <br/>

"Unpin" : "" , <br/>

"CurrentCityFound" : " " , <br/>

"Weather" : "" , <br/>

"Description" : "" , <br/>

"GatheringInfo" : " " , <br/>

"PinCity" : "PinCity" , <br/>

"RemoveCity" : "" , <br/>

"CurrentCity" : " " , <br/>

"AddCity" : " " , <br/>

"SummaryView" : " " , <br/>

"Hourly" : " " , <br/>

"EnterCity" : " " , <br/>

"AddCityError" : " " , <br/>

"MaxCities" : " " , <br/>

"Preferences" : "" , "Temperature" : "" , <br/>

"Celsius" : "" , <br/>

"Fahrenheit" : "" , <br/>

"ruCulture" : "" , <br/>

"debugText" : "" , <br/>

"LastUpdated" : " <span id='lastUpdated'></span>." , <br/>

"Wind" : "" , <br/>

"UVIndex" : " " , <br/>

"Today" : "" , <br/>

"SplashScreenImage" : "" , <br/>

"Search" : "" , <br/>

"ResultsFor" : " " , <br/>

"PercChanceOfRain" : "<span data-win-bind='innerText:precip'></span> " , <br/>

"Low" : "" , <br/>

"Humidity" : "" , <br/>

"High" : "" , <br/>

"FeelsLike" : " " , <br/>

"CurrentCondition" : "" , <br/>

"ChanceOfRain" : " " , <br/>

"NetworkConnection" : " . ." , <br/>

"CannotRetrieveData" : " " <br/>

}








アプリケーションを起動すると、天気が天気に変わります!



All Articles