Копаене в източниците на Windows 8 Metro Weather

След като инсталирах Windows 8 (64bit + VS2011) и се запознах с новия интерфейс на Metro, първото нещо, което исках да направя, беше да превключа температурата от градуси по Фаренхайт на градуси по Целзий. Това подтикна да копаем в изходния код и след това да русифицираме приложението.

източниците

За тези, които не са гледали изграждането или не са обърнали внимание, пълният път до папката на приложението е: C:\Program Files\Applications\microsoft.weather_1.0.0.26_neutral_neutral_8wekyb3d8bbwe

Превключване от Фаренхайт към Целзий

За да превключа Фаренхайт в Целзий, трябваше да вляза в изходния код. За тези, които не са имали време да се изкачат там, просто натиснете Win + C, изберете Настройки и в панела, който се появява вдясно, натиснете Предпочитания за времето и изберете обичайния Целзий.

Стартиране на приложението във Visual Studio 2011

Добавете бутон и се абонирайте за кликвания

span class = "win-spritestates win-commandicon win-large ruicon" > обхват >

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

>( "ruCulture" ) ​​​​. addEventListener ("щракване", switchCulture);

Функцията id е обвивка за document.getElementById и може да бъде намерена в currentCityControl.js. switchCulture е моята функция, която ще превключва езика за локализация, повече за това по-късно в статията.

Частична и пълна русификация

Какво означава частично? Това означава просто да промените локала на ru-RU в заявка към метеорологичния сървър и съответно да получите метеорологичен доклад на български език от сървъра. Приложението остава на своя език. А с добавянето на текстови ресурси на български, получаваме пълна русификация.

Поставих си задачата да направя бутон за превключване на локала от ru-RU на fr-FR и да запазя тази настройка, така че след рестартиранеприложението взе данни за времето на езика на запазения локал.

Във файла data.js има ред

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

където R от defaultHost.js R = нов Windows.ApplicationModel.Resources.ResourceLoader();

Културната променлива е зададена на текущия локал от файла с ресурси. Пиша функцията getCulture() и променям този ред на:

След това отивам на defaultHost.js и добавям култура:

WinJS. Пространство от имена. define("Време.Настройки" ,

на час: ApplicationData. текущ. Локални настройки . стойности [ "hourlydaily" ] == "h" ,

Целзий: Данни на приложението. текущ. Локални настройки . стойности [ "temp" ] == "c",

// добавете тук

култура: ApplicationData. текущ. Локални настройки . ценности ["култура"]

// След незабавно поставяне на локала

метеорологично време. настройки. култура = getCulture();

В края на defaultHost.js вмъквам моите функции

ако ( ! време. настройки . култура )

// ако вече има запазена настройка, заредете в противен случай ru-RU

var >= Windows. съхранение. ApplicationData. текущ. Локални настройки . ценности ["култура"] ;

обратно време. настройки. култура;

функция setCulture (culture1)

ако ( Времето !== недефинирано )

метеорологично време. настройки. култура = култура1;

Windows. съхранение. ApplicationData. текущ. Локални настройки . стойности["култура"] = култура1;

var >= Windows. съхранение. ApplicationData. текущ. Локални настройки . ценности ["култура"] ;

метеорологично време. настройки. култура = >;

метеорологично време. настройки. култура = "ru-RU" ;

За удобство при отстраняване на грешки добавих div за показване на информация за отстраняване на грешки в defaultHost.html и функцията deb() в defaultHost.js. Тази функция може да бъде извикана от всекиместа на скрипта и да показват всякаква информация.

var deb = документ. getElementById("debugText");

деб. вътрешен текст = наличност;

Остава да превключите локала, като запазите настройката Бутонът вече е добавен, ще му нарисувам икона. Файлът Weather_Commands_PNG_STRIP_40x.png съхранява всички икони на бутони. Отварям файла и увеличавам размера на изображението надолу, рисувам бутони за различни състояния на моя бутон. За да се покаже иконата на бутона, добавям настройка за стил към defaultHost.css

фонова позиция: 0px -280px;

бутон :активен .ruicon

позиция на фона: -80px -280px;

бутон :деактивиран .ruicon

позиция на фона: -120px -280px;

Има бутон, има иконка на него, при щракване върху бутона за абониране, остава да добавите функция:

if ( getCulture ( ) == "ru-RU" )

var culture = >( "cultureText" );

ако (Време. Настройки. култура)

култура. innerText = Времето. настройки. култура;

// незабавно презареждане на прогнозата за времето на новия език

// опит в челото - не работи - не разбрах

mainData. обновяване (вярно) . тогава ( функция ( ) < >) ;

Пускам приложението в Release, натискам бутона, задава се български локал. Спирам приложението, стартирам го отново и приложението зарежда времето на родния ми език. Зарежда между другото от weather.service.msn.com

Пълна русификация на приложението чрез ресурси

Прогнозата вече е на български, остава да се преведе интерфейса на програмата. Приложението Metro открива настройките на местния език и съответно зарежда текстови ресурси. Добавям папката strings към проекта, файла resources.resjson и папката ru-RU със същия файл в нея. Съдържание на файла:

"CurrentCitySearch" : "Търсене в моя град" ,

"CurrentCityFound" : "Моят град е намерен" ,

"GatheringInfo" : "Зареждане на последния доклад за времето" ,

"CurrentCity" : "Моят град" ,

"AddCity" : "Добавяне на град" ,

"SummaryView": "По дни",

"Hourly" : "На час" ,

"EnterCity" : "Влезте в град" ,

"AddCityError" : "Грешка при добавяне на град" ,

"MaxCities" : "Макс градове" ,

"Предпочитания" : "Настройки" , "Температура" : "Температура" ,

"UVIndex" : "UV индекс" ,

"ResultsFor" : "Данни за" ,

"PercChanceOfRain" : "вероятност за дъжд" ,

"FeelsLike" : "Чувства се като" ,

"ChanceOfRain" : "Възможност за дъжд" ,

"NetworkConnection" : "Не може да се получи прогноза. Проверете интернет." ,

"CannotRetrieveData" : "Не могат да се извлекат данни"

Пускам приложението и Weather се превръща в Weather!

Hardcore conf в C++. Каним само професионалисти.