diff --git a/po/fr.po b/po/fr.po index 238d6c9..678270b 100644 --- a/po/fr.po +++ b/po/fr.po @@ -243,6 +243,18 @@ msgstr "Chargement ..." msgid "Please wait" msgstr "Patientez s'il vous plaît" +#: extension.js:459 +msgid "SW" +msgstr "SO" + +#: extension.js:459 +msgid "W" +msgstr "O" + +#: extension.js:459 +msgid "NW" +msgstr "NO" + #: extension.js:467 msgid "Temperature:" msgstr "Température :" @@ -258,3 +270,68 @@ msgstr "Pression :" #: extension.js:473 msgid "Wind:" msgstr "Vent :" + + +#: weather-extension-configurator.py:113 +msgid "City" +msgstr "Ville" + +#: weather-extension-configurator.py:114 +msgid "Example : New York, USA" +msgstr "Exemple : Toulouse, France" + +#: weather-extension-configurator.py:115 +msgid "Temperature Unit" +msgstr "Unité de temperature" + +#: weather-extension-configurator.py:117 +msgid "Position in Panel" +msgstr "Position sur le panel" + +#: weather-extension-configurator.py:118 +msgid "left" +msgstr "gauche" + +#: weather-extension-configurator.py:118 +msgid "center" +msgstr "centre" + +#: weather-extension-configurator.py:118 +msgid "right" +msgstr "droite" + +#: weather-extension-configurator.py:119 +msgid "The position of this GNOME Shell extension in the panel. (Requires restart of GNOME Shell.)" +msgstr "La position de cette extension GNOME Shell sur le panel. (Requière le redémarrage de GNOME Shell.)" + +#: weather-extension-configurator.py:120 +msgid "Translate Weather Conditions" +msgstr "Traduction des conditions météo" + +#: weather-extension-configurator.py:121 +msgid "If enabled, the condition is translated based on the weather code.\nIf disabled, the condition string from Yahoo is taken.\nNote: Enabling the translation sometimes results in loss of accuracy, e.g., the condition string “PM Thunderstorms” cannot be expressed in terms of weather codes." +msgstr "Si activé, les conditions météo seront traduites à partir du code météo.\nSi désactivé, elles seront en langue originale.\nNote: Activer la traduction peut parfois réduire l'acuité, p. ex., le code météo \"Orage nocturne\" n'existe pas et il sera traduit par \"Orage\"." + +#: weather-extension-configurator.py:122 +msgid "Symbolic Icons" +msgstr "Icones symboliques" + +#: weather-extension-configurator.py:123 +msgid "Display symbolic icons instead of full-colored icons" +msgstr "Affiche des icones symboliques à la place des icones colorés" + +#: weather-extension-configurator.py:124 +msgid "Show Text in Panel" +msgstr "Afficher le texte dans le panel" + +#: weather-extension-configurator.py:125 +msgid "Display current temperature in panel. If disabled, only the current condition icon is shown. (Requires restart of GNOME Shell.)" +msgstr "Affiche la temperature actuel dans le panel. Si désactivé, seul l'icone de l'actuel condition météo est affiché. (Requière le redémarrage de GNOME Shell.)" + +#: weather-extension-configurator.py:126 +msgid "Include Condition" +msgstr "Inclure les conditions météo" + +#: weather-extension-configurator.py:127 +msgid "Whether to show the weather condition (e.g., “Windy”, “Clear”) in the panel." +msgstr "Affiche la condition météo actuel (p. ex., “Venteux”, “Beau”) dans le panel." diff --git a/src/extension.js b/src/extension.js index 1d2b58b..ebaf382 100644 --- a/src/extension.js +++ b/src/extension.js @@ -48,7 +48,6 @@ const PopupMenu = imports.ui.popupMenu; const WEATHER_SETTINGS_SCHEMA = 'org.gnome.shell.extensions.weather'; const WEATHER_UNIT_KEY = 'unit'; const WEATHER_CITY_KEY = 'city'; -const WEATHER_WOEID_KEY = 'woeid'; const WEATHER_TRANSLATE_CONDITION_KEY = 'translate-condition'; const WEATHER_USE_SYMBOLIC_ICONS_KEY = 'use-symbolic-icons'; const WEATHER_SHOW_TEXT_IN_PANEL_KEY = 'show-text-in-panel'; @@ -85,7 +84,6 @@ WeatherMenuButton.prototype = { this._settings = getSettings(WEATHER_SETTINGS_SCHEMA); this._units = this._settings.get_enum(WEATHER_UNIT_KEY); this._city = this._settings.get_string(WEATHER_CITY_KEY); - this._woeid = this._settings.get_string(WEATHER_WOEID_KEY); this._translate_condition = this._settings.get_boolean(WEATHER_TRANSLATE_CONDITION_KEY); this._icon_type = this._settings.get_boolean(WEATHER_USE_SYMBOLIC_ICONS_KEY) ? St.IconType.SYMBOLIC : St.IconType.FULLCOLOR; this._text_in_panel = this._settings.get_boolean(WEATHER_SHOW_TEXT_IN_PANEL_KEY); @@ -97,7 +95,6 @@ WeatherMenuButton.prototype = { let load_settings_and_refresh_weather = Lang.bind(this, function() { this._units = this._settings.get_enum(WEATHER_UNIT_KEY); this._city = this._settings.get_string(WEATHER_CITY_KEY); - this._woeid = this._settings.get_string(WEATHER_WOEID_KEY); this._translate_condition = this._settings.get_boolean(WEATHER_TRANSLATE_CONDITION_KEY); this._icon_type = this._settings.get_boolean(WEATHER_USE_SYMBOLIC_ICONS_KEY) ? St.IconType.SYMBOLIC : St.IconType.FULLCOLOR; this._comment_in_panel = this._settings.get_boolean(WEATHER_SHOW_COMMENT_IN_PANEL_KEY); @@ -105,7 +102,6 @@ WeatherMenuButton.prototype = { }); this._settings.connect('changed::' + WEATHER_UNIT_KEY, load_settings_and_refresh_weather); this._settings.connect('changed::' + WEATHER_CITY_KEY, load_settings_and_refresh_weather); - this._settings.connect('changed::' + WEATHER_WOEID_KEY, load_settings_and_refresh_weather); this._settings.connect('changed::' + WEATHER_TRANSLATE_CONDITION_KEY, load_settings_and_refresh_weather); this._settings.connect('changed::' + WEATHER_SHOW_COMMENT_IN_PANEL_KEY, load_settings_and_refresh_weather); this._settings.connect('changed::' + WEATHER_USE_SYMBOLIC_ICONS_KEY, Lang.bind(this, function() { @@ -221,7 +217,8 @@ WeatherMenuButton.prototype = { }, get_weather_url: function() { - return 'http://query.yahooapis.com/v1/public/yql?format=json&q=select location,wind,atmosphere,units,item.condition,item.forecast from weather.forecast where location="' + this._woeid + '" and u="' + this.unit_to_url() + '"'; + return encodeURI('http://query.yahooapis.com/v1/public/yql?format=json&q=select location,wind,atmosphere,units,item.condition,item.forecast from weather.forecast where location in (select id from xml where url="http://xoap.weather.com/search/search?where='+ encodeURI( this._city ) +'" and itemPath="search.loc") and u="' + this.unit_to_url() + '"'); + /* see http://jonathantrevor.net/?p=40 */ }, get_weather_icon: function(code) { @@ -472,9 +469,8 @@ WeatherMenuButton.prototype = { let message = Soup.Message.new('GET', url); session.queue_message(message, function(session, message) { - let jp = new Json.Parser(); - jp.load_from_data(message.response_body.data, -1); - fun.call(here, jp.get_root().get_object()); + let jp = JSON.parse(message.response_body.data); + fun.call(here, jp); }); }, @@ -482,50 +478,38 @@ WeatherMenuButton.prototype = { this.load_json_async(this.get_weather_url(), function(json) { try { - let weather = json.get_object_member('query').get_object_member('results').get_object_member('channel'); - let weather_c = weather.get_object_member('item').get_object_member('condition'); - let forecast = weather.get_object_member('item').get_array_member('forecast').get_elements(); - - /* TODO won't work with the new URL - // Fixes wrong woeid if necessary - try { - // Wrong woeid specified - if (weather.has_member('code') && weather.get_int_member('code') == 500) { - // Fetch correct woeid - this.load_json_async(this.get_weather_url().replace('p=', 'w='), function(weather) { - try { - // Take correct woeid, update gsettings - this._woeid = weather.get_object_member('location').get_string_member('location_id'); - this._settings.set_string(WEATHER_WOEID_KEY, this._woeid); - // Load weather with correct woeid - this.refreshWeather(false); - } catch(e) { - } - }); - return; + let weather = json.query.results.channel; + let many = 0; + if(typeof weather[0] != "undefined") + { + weather = weather[0]; + many = 1; } - } catch(e) { - global.log('A ' + e.name + ' has occured: ' + e.message); - } - */ - - let location = weather.get_object_member('location').get_string_member('city'); - if (this._city != null && this._city.length > 0) - location = this._city; + let weather_c = weather.item.condition; + let forecast = weather.item.forecast; + let location = this._city; + if (weather.location.city) + location = weather.location.city; + + if (many && weather.location.region) + location = location +", "+ weather.location.region; + else + if (many && weather.location.country) + location = location +", "+ weather.location.country; // Refresh current weather - let comment = weather_c.get_string_member('text'); + let comment = weather_c.text; if (this._translate_condition) - comment = this.get_weather_condition(weather_c.get_string_member('code')); + comment = this.get_weather_condition(weather_c.code); - let temperature = weather_c.get_string_member('temp'); - let humidity = weather.get_object_member('atmosphere').get_string_member('humidity') + ' %'; - let pressure = weather.get_object_member('atmosphere').get_string_member('pressure'); - let pressure_unit = weather.get_object_member('units').get_string_member('pressure'); - let wind_direction = this.get_compass_direction(weather.get_object_member('wind').get_string_member('direction')); - let wind = weather.get_object_member('wind').get_string_member('speed'); - let wind_unit = weather.get_object_member('units').get_string_member('speed'); - let iconname = this.get_weather_icon_safely(weather_c.get_string_member('code')); + let temperature = weather_c.temp; + let humidity = weather.atmosphere.humidity + ' %'; + let pressure = weather.atmosphere.pressure; + let pressure_unit = weather.units.pressure; + let wind_direction = this.get_compass_direction(weather.wind.direction); + let wind = weather.wind.speed; + let wind_unit = weather.units.speed; + let iconname = this.get_weather_icon_safely(weather_c.code); this._currentWeatherIcon.icon_name = this._weatherIcon.icon_name = iconname; @@ -545,17 +529,17 @@ WeatherMenuButton.prototype = { let date_string = [_('Today'), _('Tomorrow')]; for (let i = 0; i <= 1; i++) { let forecastUi = this._forecast[i]; - let forecastData = forecast[i].get_object(); + let forecastData = forecast[i]; - let code = forecastData.get_string_member('code'); - let t_low = forecastData.get_string_member('low'); - let t_high = forecastData.get_string_member('high'); + let code = forecastData.code; + let t_low = forecastData.low; + let t_high = forecastData.high; - let comment = forecastData.get_string_member('text'); + let comment = forecastData.text; if (this._translate_condition) comment = this.get_weather_condition(code); - forecastUi.Day.text = date_string[i] + ' (' + this.get_locale_day(forecastData.get_string_member('day')) + ')'; + forecastUi.Day.text = date_string[i] + ' (' + this.get_locale_day(forecastData.day) + ')'; forecastUi.Temperature.text = t_low + '\u2013' + t_high + ' ' + this.unit_to_unicode(); forecastUi.Summary.text = comment; forecastUi.Icon.icon_name = this.get_weather_icon_safely(code); diff --git a/src/org.gnome.shell.extensions.weather.gschema.xml.in b/src/org.gnome.shell.extensions.weather.gschema.xml.in index 8a7964e..2db81e2 100644 --- a/src/org.gnome.shell.extensions.weather.gschema.xml.in +++ b/src/org.gnome.shell.extensions.weather.gschema.xml.in @@ -14,11 +14,6 @@ <_summary>Units <_description>Choose the unit system for temperatures etc. Allowed values are 'celsius' or 'fahrenheit'. - - 'AUXX0010' - <_summary>Yahoo WOEID - <_description>Set the Yahoo location ID (aka. WOEID, Where On Earth Identifier), which is used to retrieve the corresponding weather+forecast information. - '' <_summary>City to be displayed @@ -30,7 +25,7 @@ <_description>Whether to translate the weather condition. If enabled, the condition is translated based on the weather code. If disabled, the condition string from Yahoo is taken. Note: Enabling the translation sometimes results in loss of accuracy, e.g., the condition string "PM Thunderstorms" cannot be expressed in terms of weather codes. - false + true <_summary>Whether to use symbolic icons <_description>Whether to use symbolic icons instead of full-colored icons. @@ -50,7 +45,7 @@ <_description>Set the position of this GNOME Shell extension in the panel to either 'center', 'left' or 'right' (requires restart). - 240 + 300 <_summary>Refresh interval in seconds <_description>The interval in seconds to refresh the weather information. diff --git a/weather-extension-configurator.py b/weather-extension-configurator.py index bcbf1cb..fe3af95 100755 --- a/weather-extension-configurator.py +++ b/weather-extension-configurator.py @@ -110,12 +110,10 @@ class WeatherConfigurator: self.elements = [] - self.add_text('woeid', 'WOEID', - "The Where On Earth ID determinees the location/city") + self.add_text('city', 'City', + "Example : New York, USA") self.add_radio('unit', 'Temperature Unit', [(0, 'celsius'), (1, 'fahrenheit')]) - self.add_text('city', 'Override Location Label', - "Sometimes your WOEID location isn’t quite right (it’s the next major city around). This label is used to override the location displayed.") self.add_radio('position-in-panel', 'Position in Panel', [(2, 'left'), (0, 'center'), (1, 'right')], "The position of this GNOME Shell extension in the panel. (Requires restart of GNOME Shell.)") @@ -125,7 +123,7 @@ class WeatherConfigurator: "Display symbolic icons instead of full-colored icons") (b_text, _) = self.add_check('show-text-in-panel', 'Show Text in Panel', "Display current temperature in panel. If disabled, only the current condition icon is shown. (Requires restart of GNOME Shell.)") - (b_cond, l_cond) = self.add_check('show-comment-in-panel', ' Include Condition', + (b_cond, l_cond) = self.add_check('show-comment-in-panel', 'Include Condition', "Whether to show the weather condition (e.g., “Windy”, “Clear”) in the panel.") # add dependency between text-in-panel and comment-in-panel