WeatherDesktop
What is WeatherDesktop?
WeatherDesktop is a simple little utility for Mac OS X I wrote on a whim that adjusts your desktop wallpaper based on the current time and weather conditions where you're located. It is also capable of outputting weather data to the terminal or, with the aid of another program such as GeekTool, to your desktop wallpaper as well.
Quite a while back I took my old desktop background (an image of the Detinets in the city of Veliky Novgorod, Russia) and played around with it a bit in Photoshop, attempting to modify it to show the same scene at different times of day and in different weather conditions. I wrote up a number of short shell scripts to automate the wallpaper switching, but this eventually became very inconvenient if I wanted to make any changes (change my location, the language, the times when I should see night images or day images over the course of the year, etc.). I eventually decided to rewrite everything more efficiently and customizably in Objective-C, creating a little utility that could be easily controlled through the command line.
What's It Written In?
Most of the code is in Objective-C, with a little bit of embedded AppleScript to make the process of actually switching the background a bit easier. There is also an XML file containing various settings that will need to be customized before you can use this code.
Installation Instructions
Down below is a link to an Xcode Project as well as the actual source code. This will need to be compiled and moved to some location in your $PATH variable.
The XML file by default should be located at ~/Library/Scripts/weatherdesktop.xml, and the images you want to use for your wallpapers should go in ~/Library/Scripts/weatherdesktop_images/wallpapers. You can also put icons into ~/Library/Scripts/weatherdesktop_images/wallpapers/icons, which will automatically be moved into /tmp/weather.png to allow GeekTool to display weather icons graphically. These can freely be moved anywhere else; you just have to update the source code to reflect its new location and recompile.
The XML file also needs to be customized a bit before using it. If your current location isn't present in the <locations> tag, you'll have to add it along with a link to weather.yahooapis.com. The formatting should be clear enough by looking at the other links. You'll also need to go into the <images> tag and identify which images you want to use for which type of weather/time of day.
For usage information, just type weatherdesktop --help into the terminal.
This code was written with the intent of working together with GeekTool for displaying time and weather information on your desktop. A simple setup, for instance, might include three display fields, one running weatherdesktop --weather to display current conditions and update the background, one with weatherdesktop --month to display the current localized month, and another with weatherdesktop --day to display the current localized day of the week. Without GeekTool you can still run weatherdesktop --weather from the terminal or as a cron job, however.
Version History
- v0.1 - first released version
Source
WeatherDesktop is available as an Xcode Project. The code is also printed in full below.
- weatherdesktop_v0_1.zip (66KB compressed, 459KB uncompressed)
- weatherdesktop_v0_1.tar.gz (41KB compressed, 459KB uncompressed)
main.m
/*
+-----------------------------------------------------------------------------------------------+
| WeatherDesktop, Copyright ©2011 Martin Posthumus |
| |
| This file is part of WeatherDesktop, a free and open-source utility for Mac OS X. |
| You may redistribute and/or modify WeatherDesktop under the terms of the GNU General Public |
| License (GPL) as published by the Free Software Foundation, either version 3 of the license |
| or any later version. For the full text of the GPL3 license, please see |
| < http://www.gnu.org/licenses/ >. |
| |
| WeatherDesktop is distributed in the hope that it or some part of it will be useful, but |
| comes with no warranty, as per the GPL3 license. |
+-----------------------------------------------------------------------------------------------+
*/
#import <Foundation/Foundation.h>
#import "PrefDoc.h"
#import "WeatherDoc.h"
void usage()
{
printf("Usage: weatherdesktop [--day | --month | --weather]\n [--setCity CITY]\n [--setLanguage LANG]\n");
}
int main (int argc, const char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// Grab CL arguments
NSArray *args = [[NSProcessInfo processInfo] arguments];
if ([args count] == 1) {
usage();
return 1;
}
// Load XML File
NSString *xmlLocation = [NSString stringWithFormat: @"%@%@", NSHomeDirectory(), @"/Library/Scripts/weatherdesktop.xml"];
NSData *datasource = [NSData dataWithContentsOfFile: xmlLocation];
if (!datasource) {
return 2;
}
PrefDoc *doc = [[PrefDoc alloc] initWithData: datasource];
// Decide what to do based on arguments
if ([[args objectAtIndex: 1] isEqualToString: @"--day"]) {
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat: @"e"];
NSString *dayOfWeek = [dateFormatter stringFromDate: [NSDate date]];
NSString *res = [doc getTranslationForDay: dayOfWeek];
printf("%s\n", [res UTF8String]);
} else if ([[args objectAtIndex: 1] isEqualToString: @"--month"]) {
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat: @"M"];
NSString *month = [dateFormatter stringFromDate: [NSDate date]];
NSString *res = [doc getTranslationForMonth: month];
printf("%s\n", [res UTF8String]);
} else if ([[args objectAtIndex: 1] isEqualToString: @"--weather"]) {
NSData *weatherfeed = [NSData dataWithContentsOfURL: [NSURL URLWithString: [doc locationDataSource]]];
if (!weatherfeed) {
printf("No Data\n");
return 0;
}
WeatherDoc *weatherdoc = [[WeatherDoc alloc] initWithData: weatherfeed];
NSString *res = [NSString stringWithFormat: @"%@, %@°C (%@°F)", [doc getTranslationForWeather: [weatherdoc conditions]], [weatherdoc ctemp], [weatherdoc ftemp]];
printf("%s\n", [res UTF8String]);
[weatherdoc updateWallpaperWithConditions: doc];
} else if ([[args objectAtIndex: 1] isEqualToString: @"--setCity"]) {
[doc setCityTo: [args objectAtIndex: 2]];
[doc writeOut];
} else if ([[args objectAtIndex: 1] isEqualToString: @"--setLanguage"]) {
[doc setLangTo: [args objectAtIndex: 2]];
[doc writeOut];
} else {
usage();
return 1;
}
[pool drain];
return 0;
}
PrefDoc.h
/*
+-----------------------------------------------------------------------------------------------+
| WeatherDesktop, Copyright ©2011 Martin Posthumus |
| |
| This file is part of WeatherDesktop, a free and open-source utility for Mac OS X. |
| You may redistribute and/or modify WeatherDesktop under the terms of the GNU General Public |
| License (GPL) as published by the Free Software Foundation, either version 3 of the license |
| or any later version. For the full text of the GPL3 license, please see |
| < http://www.gnu.org/licenses/ >. |
| |
| WeatherDesktop is distributed in the hope that it or some part of it will be useful, but |
| comes with no warranty, as per the GPL3 license. |
+-----------------------------------------------------------------------------------------------+
*/
#import <Foundation/Foundation.h>
@interface PrefDoc : NSObject {
NSXMLDocument *doc;
NSString *locationDataSource;
NSString *language;
}
@property (copy, nonatomic) NSXMLDocument *doc;
@property (copy, nonatomic) NSString *locationDataSource, *language;
-(PrefDoc *) initWithData: (NSData *) datasource;
-(NSString *) getTranslationForDay: (NSString *) source;
-(NSString *) getTranslationForMonth: (NSString *) source;
-(NSString *) getTranslationForWeather: (NSString *) source;
-(void) setCityTo: (NSString *) source;
-(void) setLangTo: (NSString *) source;
-(void) writeOut;
@end
PrefDoc.m
/*
+-----------------------------------------------------------------------------------------------+
| WeatherDesktop, Copyright ©2011 Martin Posthumus |
| |
| This file is part of WeatherDesktop, a free and open-source utility for Mac OS X. |
| You may redistribute and/or modify WeatherDesktop under the terms of the GNU General Public |
| License (GPL) as published by the Free Software Foundation, either version 3 of the license |
| or any later version. For the full text of the GPL3 license, please see |
| < http://www.gnu.org/licenses/ >. |
| |
| WeatherDesktop is distributed in the hope that it or some part of it will be useful, but |
| comes with no warranty, as per the GPL3 license. |
+-----------------------------------------------------------------------------------------------+
*/
#import "PrefDoc.h"
@implementation PrefDoc
@synthesize doc, locationDataSource, language;
-(PrefDoc *) initWithData: (NSData *) datasource
{
self = [super init];
if (self) {
doc = [[NSXMLDocument alloc] initWithData: datasource options: NSXMLDocumentTidyXML error: NULL];
}
language = [[[[[doc nodesForXPath: @"//translations/current" error: NULL] objectAtIndex: 0] attributes] objectAtIndex: 0] stringValue];
NSString *curloc = [[[[[doc nodesForXPath: @"//locations/current" error: NULL] objectAtIndex: 0] attributes] objectAtIndex: 0] stringValue];
NSArray *locdata = [doc nodesForXPath: [NSString stringWithFormat: @"//location[@name=\"%@\"]/*", curloc] error: NULL];
locationDataSource = [[locdata objectAtIndex: 0] stringValue];
return self;
}
-(NSString *) getTranslationForDay: (NSString *) source
{
return [[[doc nodesForXPath: [NSString stringWithFormat: @"//language[@id=\"%@\"]/day_strings/string[%@]", language, source] error: NULL] objectAtIndex: 0] stringValue];
}
-(NSString *) getTranslationForMonth: (NSString *) source
{
return [[[doc nodesForXPath: [NSString stringWithFormat: @"//language[@id=\"%@\"]/month_strings/string[%@]", language, source] error: NULL] objectAtIndex: 0] stringValue];
}
-(NSString *) getTranslationForWeather: (NSString *) source
{
return [[[doc nodesForXPath: [NSString stringWithFormat: @"//language[@id=\"%@\"]/weather_strings/string[@name=\"%@\"]", language, source] error: NULL] objectAtIndex: 0] stringValue];
}
-(void) setCityTo: (NSString *) source
{
NSString *newSource = [[NSString alloc] initWithString: source];
NSArray *locationArray = [[[doc nodesForXPath: @"//locations/current" error: NULL] objectAtIndex: 0] attributes];
[[locationArray objectAtIndex: 0] setStringValue: newSource];
}
-(void) setLangTo: (NSString *) source
{
NSString *newSource = [[NSString alloc] initWithString: source];
NSArray *langArray = [[[doc nodesForXPath: @"//translations/current" error: NULL] objectAtIndex: 0] attributes];
[[langArray objectAtIndex: 0] setStringValue: newSource];
}
-(void) writeOut
{
NSString *buffer = [doc XMLStringWithOptions: NSXMLNodePrettyPrint];
NSString *xmlLocation = [NSString stringWithFormat: @"%@%@", NSHomeDirectory(), @"/Library/Scripts/weatherdesktop.xml"];
[buffer writeToFile: xmlLocation atomically: YES encoding: NSUnicodeStringEncoding error: NULL];
}
@end
WeatherDoc.h
/*
+-----------------------------------------------------------------------------------------------+
| WeatherDesktop, Copyright ©2011 Martin Posthumus |
| |
| This file is part of WeatherDesktop, a free and open-source utility for Mac OS X. |
| You may redistribute and/or modify WeatherDesktop under the terms of the GNU General Public |
| License (GPL) as published by the Free Software Foundation, either version 3 of the license |
| or any later version. For the full text of the GPL3 license, please see |
| < http://www.gnu.org/licenses/ >. |
| |
| WeatherDesktop is distributed in the hope that it or some part of it will be useful, but |
| comes with no warranty, as per the GPL3 license. |
+-----------------------------------------------------------------------------------------------+
*/
#import <Foundation/Foundation.h>
@class PrefDoc;
@interface WeatherDoc : NSObject {
NSXMLDocument *doc;
NSString *conditions;
NSString *ctemp;
NSString *ftemp;
NSDate *sunrise;
NSDate *sunset;
}
@property (copy, nonatomic) NSXMLDocument *doc;
@property (copy, nonatomic) NSString *conditions, *ctemp, *ftemp;
@property (copy, nonatomic) NSDate *sunrise, *sunset;
-(WeatherDoc *) initWithData: (NSData *) datasource;
-(void) updateWallpaperWithConditions: (PrefDoc *) prefs;
@end
WeatherDoc.m
/*
+-----------------------------------------------------------------------------------------------+
| WeatherDesktop, Copyright ©2011 Martin Posthumus |
| |
| This file is part of WeatherDesktop, a free and open-source utility for Mac OS X. |
| You may redistribute and/or modify WeatherDesktop under the terms of the GNU General Public |
| License (GPL) as published by the Free Software Foundation, either version 3 of the license |
| or any later version. For the full text of the GPL3 license, please see |
| < http://www.gnu.org/licenses/ >. |
| |
| WeatherDesktop is distributed in the hope that it or some part of it will be useful, but |
| comes with no warranty, as per the GPL3 license. |
+-----------------------------------------------------------------------------------------------+
*/
#import "WeatherDoc.h"
@implementation WeatherDoc
@synthesize doc, conditions, ctemp, ftemp, sunrise, sunset;
-(WeatherDoc *) initWithData: (NSData *) datasource
{
self = [super init];
if (self) {
doc = [[NSXMLDocument alloc] initWithData: datasource options: NSXMLDocumentTidyXML error: NULL];
}
NSArray *weather = [[[doc nodesForXPath: [NSString stringWithFormat: @"//yweather:condition"] error: NULL] objectAtIndex: 0] attributes];
conditions = [[weather objectAtIndex: 0] stringValue];
ctemp = [[weather objectAtIndex: 2] stringValue];
ftemp = [NSString stringWithFormat: @"%i", (int) ([ctemp doubleValue] * 1.8 + 32)];
NSArray *astronomical = [[[doc nodesForXPath: [NSString stringWithFormat: @"//yweather:astronomy"] error: NULL] objectAtIndex: 0] attributes];
sunrise = [NSDate dateWithNaturalLanguageString: [[astronomical objectAtIndex: 0] stringValue]];
sunset = [NSDate dateWithNaturalLanguageString: [[astronomical objectAtIndex: 1] stringValue]];
return self;
}
-(void) updateWallpaperWithConditions: (PrefDoc *) prefs;
{
NSDate *curTime = [NSDate date];
NSString *iconImg, *wallpaperImg;
if ([curTime compare: sunrise] == NSOrderedDescending && [curTime compare: sunset] == NSOrderedAscending) {
NSArray *imgArray = [[prefs doc] nodesForXPath: [NSString stringWithFormat: @"//daytime/image[@for=\"%@\"]/*", conditions] error: NULL];
iconImg = [[imgArray objectAtIndex: 0] stringValue];
wallpaperImg = [[imgArray objectAtIndex: 1] stringValue];
} else if (([curTime timeIntervalSinceDate: sunrise] > -3600 && [curTime timeIntervalSinceDate: sunrise] < 0) || ([curTime timeIntervalSinceDate: sunset] < 3600 && [curTime timeIntervalSinceDate: sunset] > 0)) {
NSArray *imgArray = [[prefs doc] nodesForXPath: [NSString stringWithFormat: @"//twilight/image[@for=\"%@\"]/*", conditions] error: NULL];
iconImg = [[imgArray objectAtIndex: 0] stringValue];
wallpaperImg = [[imgArray objectAtIndex: 1] stringValue];
} else {
NSArray *imgArray = [[prefs doc] nodesForXPath: [NSString stringWithFormat: @"//nighttime/image[@for=\"%@\"]/*", conditions] error: NULL];
iconImg = [[imgArray objectAtIndex: 0] stringValue];
wallpaperImg = [[imgArray objectAtIndex: 1] stringValue];
}
NSString *imageLocation = [NSString stringWithFormat: @"%@%@", NSHomeDirectory(), @"/Library/Scripts/weatherdesktop_images"];
NSString *appScript = [NSString stringWithFormat: @"tell application \"Finder\"\nset desktop picture to POSIX file \"%@/wallpapers/%@\"\nend tell\n", imageLocation, wallpaperImg];
[[[NSAppleScript alloc] initWithSource: appScript] executeAndReturnError: NULL];
NSFileManager *fm = [NSFileManager defaultManager];
[fm removeItemAtPath: @"/tmp/weather.png" error: NULL];
[fm copyItemAtPath: [NSString stringWithFormat: @"%@/icons/%@", imageLocation, iconImg] toPath: @"/tmp/weather.png" error: NULL];
}
@end
weatherdesktop.xml
<!-- Weather Desktop Location and Localization Data -->
<weatherdesktop>
<locations>
<current id="Chicago"></current>
<location name="Chicago">
<datasource>http://weather.yahooapis.com/forecastrss?p=USIL0228&u=c</datasource>
</location>
<location name="Los Angeles">
<datasource>http://weather.yahooapis.com/forecastrss?p=USCA0638&u=c</datasource>
</location>
<location name="New York">
<datasource>http://weather.yahooapis.com/forecastrss?p=USNY0996&u=c</datasource>
</location>
<location name="Washington">
<datasource>http://weather.yahooapis.com/forecastrss?p=USDC0001&u=c</datasource>
</location>
</locations>
<translations>
<current id="English"></current>
<language id="Belarusian">
<weather_strings>
<string name="Cloudy">[MISSING STRING]</string>
<string name="Fair">[MISSING STRING]</string>
<string name="Mostly Cloudy">[MISSING STRING]</string>
<string name="Partly Cloudy">[MISSING STRING]</string>
<string name="Snow">[MISSING STRING]</string>
<string name="Heavy Snow">[MISSING STRING]</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">[MISSING STRING]</string>
<string name="Light Drizzle">[MISSING STRING]</string>
<string name="Freezing Rain">[MISSING STRING]</string>
<string name="Fog">[MISSING STRING]</string>
<string name="Haze">[MISSING STRING]</string>
<string name="Rain with Thunder">[MISSING STRING]</string>
<string name="Windy">[MISSING STRING]</string>
</weather_strings>
<month_strings>
<string name="January">студзеня</string>
<string name="February">лютага</string>
<string name="March">сакавіка</string>
<string name="April">красавіка</string>
<string name="May">траўня</string>
<string name="June">чэрвеня</string>
<string name="July">ліпеня</string>
<string name="August">жніўня</string>
<string name="September">верасьня</string>
<string name="October">кастрычніка</string>
<string name="November">лістапада</string>
<string name="December">сьнежня</string>
</month_strings>
<day_strings>
<string name="Sunday">нядзеля</string>
<string name="Monday">панядзелак</string>
<string name="Tuesday">аўторак</string>
<string name="Wednesday">серада</string>
<string name="Thursday">чацьвер</string>
<string name="Friday">пятніца</string>
<string name="Saturday">субота</string>
</day_strings>
</language>
<language id="English">
<weather_strings>
<string name="Cloudy">Cloudy</string>
<string name="Fair">Fair</string>
<string name="Mostly Cloudy">Mostly Cloudy</string>
<string name="Partly Cloudy">Partly Cloudy</string>
<string name="Snow">Snow</string>
<string name="Heavy Snow">Heavy Snow</string>
<string name="Blowing Snow">Blowing Snow</string>
<string name="Light Snow">Light Snow</string>
<string name="Rain">Rain</string>
<string name="Light Drizzle">Light Drizzle</string>
<string name="Freezing Rain">Freezing Rain</string>
<string name="Fog">Fog</string>
<string name="Haze">Haze</string>
<string name="Rain with Thunder">Rain with Thunder</string>
<string name="Windy">Windy</string>
</weather_strings>
<month_strings>
<string name="January">january</string>
<string name="February">february</string>
<string name="March">march</string>
<string name="April">april</string>
<string name="May">may</string>
<string name="June">june</string>
<string name="July">july</string>
<string name="August">august</string>
<string name="September">september</string>
<string name="October">october</string>
<string name="November">november</string>
<string name="December">december</string>
</month_strings>
<day_strings>
<string name="Sunday">sunday</string>
<string name="Monday">monday</string>
<string name="Tuesday">tuesday</string>
<string name="Wednesday">wednesday</string>
<string name="Thursday">thursday</string>
<string name="Friday">friday</string>
<string name="Saturday">saturday</string>
</day_strings>
</language>
<language id="French">
<weather_strings>
<string name="Cloudy">Couvert</string>
<string name="Fair">Soleil</string>
<string name="Mostly Cloudy">Nuageux</string>
<string name="Partly Cloudy">Peu Nuageux</string>
<string name="Snow">Neige</string>
<string name="Heavy Snow">Tempête de Neige</string>
<string name="Blowing Snow">Poudrerie</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">Pluie</string>
<string name="Light Drizzle">Pluies Éparses</string>
<string name="Freezing Rain">Pluie verglaçante</string>
<string name="Fog">Brouillard</string>
<string name="Haze">Brume Sèche</string>
<string name="Rain with Thunder">Orages</string>
<string name="Windy">Vent</string>
</weather_strings>
<month_strings>
<string name="January">janvier</string>
<string name="February">février</string>
<string name="March">mars</string>
<string name="April">avril</string>
<string name="May">mai</string>
<string name="June">juin</string>
<string name="July">juillet</string>
<string name="August">août</string>
<string name="September">septembre</string>
<string name="October">octobre</string>
<string name="November">novembre</string>
<string name="December">décembre</string>
</month_strings>
<day_strings>
<string name="Sunday">dimanche</string>
<string name="Monday">lundi</string>
<string name="Tuesday">mardi</string>
<string name="Wednesday">mercredi</string>
<string name="Thursday">jeudi</string>
<string name="Friday">vendredi</string>
<string name="Saturday">samedi</string>
</day_strings>
</language>
<language id="Georgian">
<weather_strings>
<string name="Cloudy">მოღრუბლულობა</string>
<string name="Fair">მზიანი</string>
<string name="Mostly Cloudy">[MISSING STRING]</string>
<string name="Partly Cloudy">[MISSING STRING]</string>
<string name="Snow">თოვლი</string>
<string name="Heavy Snow">დიდი თოვლი</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">მცირე თოვლი</string>
<string name="Rain">წვიმა</string>
<string name="Light Drizzle">მცირე წვიმა</string>
<string name="Freezing Rain">[MISSING STRING]</string>
<string name="Fog">ნისლი</string>
<string name="Haze">თხელი ნისლი</string>
<string name="Rain with Thunder">[MISSING STRING]</string>
<string name="Windy">ქარიანი</string>
</weather_strings>
<month_strings>
<string name="January">იანვარი</string>
<string name="February">თებერვალი</string>
<string name="March">მარტი</string>
<string name="April">აპრილი</string>
<string name="May">მაისი</string>
<string name="June">ივნისი</string>
<string name="July">ივლისი</string>
<string name="August">აგვისტო</string>
<string name="September">სექტემბერი</string>
<string name="October">ოქტომბერი</string>
<string name="November">ნოემბერი</string>
<string name="December">დეკემბერი</string>
</month_strings>
<day_strings>
<string name="Sunday">კვირა</string>
<string name="Monday">ორშაბათი</string>
<string name="Tuesday">სამშაბათი</string>
<string name="Wednesday">ოთხშაბათი</string>
<string name="Thursday">ხუთშაბათი</string>
<string name="Friday">პარასკევი</string>
<string name="Saturday">შაბათი</string>
</day_strings>
</language>
<language id="Greek">
<weather_strings>
<string name="Cloudy">Συννεφιά</string>
<string name="Fair">Καθαρά</string>
<string name="Mostly Cloudy">[MISSING STRING]</string>
<string name="Partly Cloudy">[MISSING STRING]</string>
<string name="Snow">Χιόνι</string>
<string name="Heavy Snow">Χιονοθύελλα</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">Βροχή</string>
<string name="Light Drizzle">[MISSING STRING]</string>
<string name="Freezing Rain">[MISSING STRING]</string>
<string name="Fog">Ομίχλη</string>
<string name="Haze">Αχλή</string>
<string name="Rain with Thunder">[MISSING STRING]</string>
<string name="Windy">[MISSING STRING]</string>
</weather_strings>
<month_strings>
<string name="January">Ιανουαρίου</string>
<string name="February">Φεβρουαρίου</string>
<string name="March">Μαρτίου</string>
<string name="April">Απριλίου</string>
<string name="May">Μαΐου</string>
<string name="June">Ιουνίου</string>
<string name="July">Ιουλίου</string>
<string name="August">Αυγούστου</string>
<string name="September">Σεπτεμβρίου</string>
<string name="October">Οκτωβρίου</string>
<string name="November">Νοεμβρίου</string>
<string name="December">Δεκεμβρίου</string>
</month_strings>
<day_strings>
<string name="Sunday">Κυριακή</string>
<string name="Monday">Δευτέρα</string>
<string name="Tuesday">Τρίτη</string>
<string name="Wednesday">Τετάρτη</string>
<string name="Thursday">Πέμπτη</string>
<string name="Friday">Παρασκευή</string>
<string name="Saturday">Σάββατο</string>
</day_strings>
</language>
<language id="Latvian">
<weather_strings>
<string name="Cloudy">[MISSING STRING]</string>
<string name="Fair">[MISSING STRING]</string>
<string name="Mostly Cloudy">[MISSING STRING]</string>
<string name="Partly Cloudy">[MISSING STRING]</string>
<string name="Snow">[MISSING STRING]</string>
<string name="Heavy Snow">[MISSING STRING]</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">[MISSING STRING]</string>
<string name="Light Drizzle">[MISSING STRING]</string>
<string name="Freezing Rain">[MISSING STRING]</string>
<string name="Fog">[MISSING STRING]</string>
<string name="Haze">[MISSING STRING]</string>
<string name="Rain with Thunder">[MISSING STRING]</string>
<string name="Windy">[MISSING STRING]</string>
</weather_strings>
<month_strings>
<string name="January">janvāris</string>
<string name="February">februāris</string>
<string name="March">marts</string>
<string name="April">aprīlis</string>
<string name="May">maijs</string>
<string name="June">jūnijs</string>
<string name="July">jūlijs</string>
<string name="August">augusts</string>
<string name="September">septembris</string>
<string name="October">oktobris</string>
<string name="November">novembris</string>
<string name="December">decembris</string>
</month_strings>
<day_strings>
<string name="Sunday">svētdiena</string>
<string name="Monday">pirmdiena</string>
<string name="Tuesday">otrdiena</string>
<string name="Wednesday">trešdiena</string>
<string name="Thursday">ceturtdiena</string>
<string name="Friday">piektdiena</string>
<string name="Saturday">sestdiena</string>
</day_strings>
</language>
<language id="Romanian">
<weather_strings>
<string name="Cloudy">Înnorat</string>
<string name="Fair">Senin</string>
<string name="Mostly Cloudy">Noros</string>
<string name="Partly Cloudy">Înnorat Parţial</string>
<string name="Snow">Zăpadă</string>
<string name="Heavy Snow">Viscol</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">Ploaie</string>
<string name="Light Drizzle">Ploaie Moderată</string>
<string name="Freezing Rain">Ploaie Îngheţată</string>
<string name="Fog">Ceaţă</string>
<string name="Haze">Ceaţă Fină</string>
<string name="Rain with Thunder">Furtună</string>
<string name="Windy">Vântos</string>
</weather_strings>
<month_strings>
<string name="January">ianuarie</string>
<string name="February">februarie</string>
<string name="March">martie</string>
<string name="April">aprilie</string>
<string name="May">mai</string>
<string name="June">iunie</string>
<string name="July">iulie</string>
<string name="August">august</string>
<string name="September">septembrie</string>
<string name="October">octombrie</string>
<string name="November">noiembrie</string>
<string name="December">decembrie</string>
</month_strings>
<day_strings>
<string name="Sunday">duminică</string>
<string name="Monday">luni</string>
<string name="Tuesday">marţi</string>
<string name="Wednesday">miercuri</string>
<string name="Thursday">joi</string>
<string name="Friday">vineri</string>
<string name="Saturday">sâmbătǎ</string>
</day_strings>
</language>
<language id="Russian">
<weather_strings>
<string name="Cloudy">Облачность</string>
<string name="Fair">Ясно</string>
<string name="Mostly Cloudy">Переменная Облачность</string>
<string name="Partly Cloudy">Переменная Облачность</string>
<string name="Snow">Снег</string>
<string name="Heavy Snow">Метель</string>
<string name="Blowing Snow">Позёмка</string>
<string name="Light Snow">Небольшой Снег</string>
<string name="Rain">Дождь</string>
<string name="Light Drizzle">Морось</string>
<string name="Freezing Rain">Гололёд</string>
<string name="Fog">Туман</string>
<string name="Haze">Дымка</string>
<string name="Rain with Thunder">Дождь и Гроза</string>
<string name="Windy">Ветер</string>
</weather_strings>
<month_strings>
<string name="January">январь</string>
<string name="February">февраль</string>
<string name="March">март</string>
<string name="April">апрель</string>
<string name="May">май</string>
<string name="June">июнь</string>
<string name="July">июль</string>
<string name="August">август</string>
<string name="September">сентябрь</string>
<string name="October">октябрь</string>
<string name="November">ноябрь</string>
<string name="December">декабрь</string>
</month_strings>
<day_strings>
<string name="Sunday">воскресенье</string>
<string name="Monday">понедельник</string>
<string name="Tuesday">вторник</string>
<string name="Wednesday">среда</string>
<string name="Thursday">четверг</string>
<string name="Friday">пятница</string>
<string name="Saturday">суббота</string>
</day_strings>
</language>
<language id="Spanish">
<weather_strings>
<string name="Cloudy">Cubierto</string>
<string name="Fair">Despejado</string>
<string name="Mostly Cloudy">Nuboso</string>
<string name="Partly Cloudy">Poco Nuboso</string>
<string name="Snow">Nieve</string>
<string name="Heavy Snow">[MISSING STRING]</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">Lluvia</string>
<string name="Light Drizzle">Llovizna</string>
<string name="Freezing Rain">Lluvia congelada</string>
<string name="Fog">Niebla</string>
<string name="Haze">Neblina</string>
<string name="Rain with Thunder">Tormenta</string>
<string name="Windy">Viento</string>
</weather_strings>
<month_strings>
<string name="January">enero</string>
<string name="February">febrero</string>
<string name="March">marzo</string>
<string name="April">abril</string>
<string name="May">mayo</string>
<string name="June">junio</string>
<string name="July">julio</string>
<string name="August">agosto</string>
<string name="September">septiembre</string>
<string name="October">octubre</string>
<string name="November">noviembre</string>
<string name="December">diciembre</string>
</month_strings>
<day_strings>
<string name="Monday">lunes</string>
<string name="Tuesday">martes</string>
<string name="Wednesday">miércoles</string>
<string name="Thursday">jueves</string>
<string name="Friday">viernes</string>
<string name="Saturday">sábado</string>
<string name="sunday">domingo</string>
</day_strings>
</language>
<language id="Ukrainian">
<weather_strings>
<string name="Cloudy">[MISSING STRING]</string>
<string name="Fair">[MISSING STRING]</string>
<string name="Mostly Cloudy">[MISSING STRING]</string>
<string name="Partly Cloudy">[MISSING STRING]</string>
<string name="Snow">[MISSING STRING]</string>
<string name="Heavy Snow">[MISSING STRING]</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">[MISSING STRING]</string>
<string name="Light Drizzle">[MISSING STRING]</string>
<string name="Freezing Rain">[MISSING STRING]</string>
<string name="Fog">[MISSING STRING]</string>
<string name="Haze">[MISSING STRING]</string>
<string name="Rain with Thunder">[MISSING STRING]</string>
<string name="Windy">[MISSING STRING]</string>
</weather_strings>
<month_strings>
<string name="January">січня</string>
<string name="February">лютого</string>
<string name="March">березня</string>
<string name="April">квітня</string>
<string name="May">травня</string>
<string name="June">червня</string>
<string name="July">липня</string>
<string name="August">серпня</string>
<string name="September">вересня</string>
<string name="October">жовтня</string>
<string name="November">листопада</string>
<string name="December">грудня</string>
</month_strings>
<day_strings>
<string name="Sunday">неділя</string>
<string name="Monday">понеділок</string>
<string name="Tuesday">вівторок</string>
<string name="Wednesday">середа</string>
<string name="Thursday">четвер</string>
<string name="Friday">п'ятниця</string>
<string name="Saturday">субота</string>
</day_strings>
</language>
<language id="Welsh">
<weather_strings>
<string name="Cloudy">[MISSING STRING]</string>
<string name="Fair">Braf</string>
<string name="Mostly Cloudy">[MISSING STRING]</string>
<string name="Partly Cloudy">[MISSING STRING]</string>
<string name="Snow">Eira</string>
<string name="Heavy Snow">[MISSING STRING]</string>
<string name="Blowing Snow">[MISSING STRING]</string>
<string name="Light Snow">[MISSING STRING]</string>
<string name="Rain">Glaw</string>
<string name="Light Drizzle">Glaw Mân</string>
<string name="Freezing Rain">[MISSING STRING]</string>
<string name="Fog">[MISSING STRING]</string>
<string name="Haze">[MISSING STRING]</string>
<string name="Rain with Thunder">[MISSING STRING]</string>
<string name="Windy">[MISSING STRING]</string>
</weather_strings>
<month_strings>
<string name="January">ionawr</string>
<string name="February">chwefror</string>
<string name="March">mawrth</string>
<string name="April">ebrill</string>
<string name="May">mai</string>
<string name="June">mehefin</string>
<string name="July">gorffennaf</string>
<string name="August">awst</string>
<string name="September">medi</string>
<string name="October">hydref</string>
<string name="November">tachwedd</string>
<string name="December">rhagfyr</string>
</month_strings>
<day_strings>
<string name="Sunday">dydd sul</string>
<string name="Monday">dydd llun</string>
<string name="Tuesday">dydd mawrth</string>
<string name="Wednesday">dydd mercher</string>
<string name="Thursday">dydd iau</string>
<string name="Friday">dydd gwener</string>
<string name="Saturday">dydd sadwm</string>
</day_strings>
</language>
</translations>
<images>
<daytime>
<image for="Cloudy">
<icon>cloudy.png</icon>
<background>background_cloudy_day.jpg</background>
</image>
<image for="Fair">
<icon>fair.png</icon>
<background>background_fair_day.jpg</background>
</image>
<image for="Mostly Cloudy">
<icon>mostlycloudy.png</icon>
<background>background_mostlycloudy_day.jpg</background>
</image>
<image for="Partly Cloudy">
<icon>partlycloudy.png</icon>
<background>background_partlycloudy_day.jpg</background>
</image>
<image for="Snow">
<icon>snow.png</icon>
<background>background_snow_day.jpg</background>
</image>
<image for="Heavy Snow">
<icon>heavysnow.png</icon>
<background>background_heavysnow_day.jpg</background>
</image>
<image for="Blowing Snow">
<icon>blowingsnow.png</icon>
<background>background_blowingsnow_day.jpg</background>
</image>
<image for="Light Snow">
<icon>lightsnow.png</icon>
<background>background_lightsnow_day.jpg</background>
</image>
<image for="Rain">
<icon>rain.png</icon>
<background>background_rain_day.jpg</background>
</image>
<image for="Light Drizzle">
<icon>lightdrizzle.png</icon>
<background>background_lightdrizzle_day.jpg</background>
</image>
<image for="Freezing Rain">
<icon>freezingrain.png</icon>
<background>background_freezingrain_day.jpg</background>
</image>
<image for="Fog">
<icon>fog.png</icon>
<background>background_fog_day.jpg</background>
</image>
<image for="Haze">
<icon>haze.png</icon>
<background>background_haze_day.jpg</background>
</image>
<image for="Rain with Thunder">
<icon>thunderstorms.png</icon>
<background>background_thunderstorms_day.jpg</background>
</image>
<image for="Windy">
<icon>windy.png</icon>
<background>background_windy_day.jpg</background>
</image>
</daytime>
<twilight>
<image for="Cloudy">
<icon>cloudy.png</icon>
<background>background_cloudy_twilight.jpg</background>
</image>
<image for="Fair">
<icon>fair.png</icon>
<background>background_fair_twilight.jpg</background>
</image>
<image for="Mostly Cloudy">
<icon>mostlycloudy.png</icon>
<background>background_mostlycloudy_twilight.jpg</background>
</image>
<image for="Partly Cloudy">
<icon>partlycloudy.png</icon>
<background>background_partlycloudy_twilight.jpg</background>
</image>
<image for="Snow">
<icon>snow.png</icon>
<background>background_snow_twilight.jpg</background>
</image>
<image for="Heavy Snow">
<icon>heavysnow.png</icon>
<background>background_heavysnow_twilight.jpg</background>
</image>
<image for="Blowing Snow">
<icon>blowingsnow.png</icon>
<background>background_blowingsnow_twilight.jpg</background>
</image>
<image for="Light Snow">
<icon>lightsnow.png</icon>
<background>background_lightsnow_twilight.jpg</background>
</image>
<image for="Rain">
<icon>rain.png</icon>
<background>background_rain_twilight.jpg</background>
</image>
<image for="Light Drizzle">
<icon>lightdrizzle.png</icon>
<background>background_lightdrizzle_twilight.jpg</background>
</image>
<image for="Freezing Rain">
<icon>freezingrain.png</icon>
<background>background_freezingrain_twilight.jpg</background>
</image>
<image for="Fog">
<icon>fog.png</icon>
<background>background_fog_twilight.jpg</background>
</image>
<image for="Haze">
<icon>haze.png</icon>
<background>background_haze_twilight.jpg</background>
</image>
<image for="Rain with Thunder">
<icon>thunderstorms.png</icon>
<background>background_thunderstorms_twilight.jpg</background>
</image>
<image for="Windy">
<icon>windy.png</icon>
<background>background_windy_twilight.jpg</background>
</image>
</twilight>
<nighttime>
<image for="Cloudy">
<icon>cloudy.png</icon>
<background>background_cloudy_night.jpg</background>
</image>
<image for="Fair">
<icon>fair.png</icon>
<background>background_fair_night.jpg</background>
</image>
<image for="Mostly Cloudy">
<icon>mostlycloudy.png</icon>
<background>background_mostlycloudy_night.jpg</background>
</image>
<image for="Partly Cloudy">
<icon>partlycloudy.png</icon>
<background>background_partlycloudy_night.jpg</background>
</image>
<image for="Snow">
<icon>snow.png</icon>
<background>background_snow_night.jpg</background>
</image>
<image for="Heavy Snow">
<icon>heavysnow.png</icon>
<background>background_heavysnow_night.jpg</background>
</image>
<image for="Blowing Snow">
<icon>blowingsnow.png</icon>
<background>background_blowingsnow_night.jpg</background>
</image>
<image for="Light Snow">
<icon>lightsnow.png</icon>
<background>background_lightsnow_night.jpg</background>
</image>
<image for="Rain">
<icon>rain.png</icon>
<background>background_rain_night.jpg</background>
</image>
<image for="Light Drizzle">
<icon>lightdrizzle.png</icon>
<background>background_lightdrizzle_night.jpg</background>
</image>
<image for="Freezing Rain">
<icon>freezingrain.png</icon>
<background>background_freezingrain_night.jpg</background>
</image>
<image for="Fog">
<icon>fog.png</icon>
<background>background_fog_night.jpg</background>
</image>
<image for="Haze">
<icon>haze.png</icon>
<background>background_haze_night.jpg</background>
</image>
<image for="Rain with Thunder">
<icon>thunderstorms.png</icon>
<background>background_thunderstorms_night.jpg</background>
</image>
<image for="Windy">
<icon>windy.png</icon>
<background>background_windy_night.jpg</background>
</image>
</nighttime>
</images>
</weatherdesktop>
Return to Veche.Net Home.