Merge lp:~nik90/ubuntu-weather-app/improved-settings-page into lp:ubuntu-weather-app
- improved-settings-page
- Merge into reboot
Status: | Merged |
---|---|
Approved by: | Victor Thompson |
Approved revision: | 26 |
Merged at revision: | 30 |
Proposed branch: | lp:~nik90/ubuntu-weather-app/improved-settings-page |
Merge into: | lp:ubuntu-weather-app |
Diff against target: |
529 lines (+336/-88) 5 files modified
app/components/ExpandableListItem.qml (+90/-0) app/ui/settings/DataProviderPage.qml (+28/-22) app/ui/settings/RefreshIntervalPage.qml (+32/-24) app/ui/settings/UnitsPage.qml (+126/-32) po/com.ubuntu.weather.pot (+60/-10) |
To merge this branch: | bzr merge lp:~nik90/ubuntu-weather-app/improved-settings-page |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Victor Thompson | Approve | ||
Andrew Hayzen | Approve | ||
Ubuntu Phone Apps Jenkins Bot | continuous-integration | Approve | |
Review via email: mp+253619@code.launchpad.net |
Commit message
Converted the settings page list items to the design followed by the clock app. In the process, the settings options are now properly translatable.
Description of the change
This MP converts the settings page list items to the design followed by the clock app. In the process, the settings options are now properly translatable.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
Andrew Hayzen (ahayzen) wrote : | # |
I think you need to ensure all the comparisons to some of the settings are made translatable as well eg [0], also ensure that none of the settings are directly used in api calls otherwise these could break if the stored value itself is translated.
Nekhelesh Ramananthan (nik90) wrote : | # |
> I think you need to ensure all the comparisons to some of the settings are
> made translatable as well eg [0], also ensure that none of the settings are
> directly used in api calls otherwise these could break if the stored value
> itself is translated.
>
> 0 - http://
> page/view/
Nice catch! This issue would only affect the unit settings page as the other settings page like the dataprovider page requires no translation and the refresh interval page uses value instead of text to do the comparison.
Let me think about how I can fix the units settings page.
- 22. By Nekhelesh Ramananthan
-
Fixed issue pointed out by ahayzen
Nekhelesh Ramananthan (nik90) wrote : | # |
I fixed the issue. The units setting page models now have a text and value property. The text property which is displayed is translated and shown to the user while the corresponding value property is the raw value. The value property will be assigned to the settings keys used throughout the app and should work regardless of the language used.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:22
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Victor Thompson (vthompson) wrote : | # |
I have a few comments.
1) I do not think "°C" and "°F" are translatable, as they both actually have dedicated unicode characters. I think the representation of each is universal, but I'm not 100% sure.
2) I really think we need notes to translators for each unit abbreviation. It would be very difficult to ascertain what the intent is without a note.
Victor Thompson (vthompson) wrote : | # |
It might even be the case that standard unit abbreviations should not be translated. KPH seems to be an SI standard, perhaps the others are standardized as well?
Nekhelesh Ramananthan (nik90) wrote : | # |
I do not know much translations in general, but I have noticed that every time I presume that a certain abbreviation or word is the same in all languages, I am almost always wrong ;-). Looking at http://
That said, I could ask in the ubuntu translation mailing list about this to get their opinion.
Nekhelesh Ramananthan (nik90) wrote : | # |
I have sent a mail to mailing list at https:/
Nekhelesh Ramananthan (nik90) wrote : | # |
I got a reply at https:/
Victor Thompson (vthompson) wrote : | # |
Awesome! Thanks, Nekhelesh! Could you double check for "°C" and "°F"? It seems pretty consistent from what I've seen on the referenced website [1].
- 23. By Nekhelesh Ramananthan
-
Added translation notes
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:23
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Nekhelesh Ramananthan (nik90) wrote : | # |
I checked that website for my language "Tamil" and found that "°C" and "°F" were also translated to {0}°செ. and {0}°ஃபா. respectively ;)
Victor Thompson (vthompson) wrote : | # |
Thanks, Nekhelesh! Could you make sure that the translation notes get listed for each option (both "in" and "mm")? You'll need to list the note for each line, rather than once for the pair. Also, since each note is related to a specific abbreviation, it might be nice to give the unabbreviated form of the unit:
// TRANSLATORS: The strings are standard measurement units
// of precipitation in inches and are shown in the settings page. Only
// the abbreviated form of inches should be used.
- 24. By Nekhelesh Ramananthan
-
Added more translator messages
- 25. By Nekhelesh Ramananthan
-
merged lp:ubuntu-weather-app/reboot
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:25
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Victor Thompson (vthompson) wrote : | # |
Actually, I just noticed a typo: "windSpeeModel" should be windSpeedModel
Additionally, and maybe this should be filed as a separate bug/issue to be tackled later because we would probably want Design input, but I think the Units ListModels should list "Celsius (°C)", "Inches (in)", etc. Also, I really think we need to have the Data Provider options be "Open Weather Map" and "The Weather Channel".
- 26. By Nekhelesh Ramananthan
-
Corrected typo windspeemodel
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:26
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Andrew Hayzen (ahayzen) wrote : | # |
Looks good from a functional point of view, however I agree with Victor that "Celsius (°C)" etc may read nicer that "°C" but this can be done in a future mp :)
Victor Thompson (vthompson) wrote : | # |
Agreed, let's try to get some consensus via a bug report.
Preview Diff
1 | === added file 'app/components/ExpandableListItem.qml' |
2 | --- app/components/ExpandableListItem.qml 1970-01-01 00:00:00 +0000 |
3 | +++ app/components/ExpandableListItem.qml 2015-04-05 22:31:23 +0000 |
4 | @@ -0,0 +1,90 @@ |
5 | +/* |
6 | + * Copyright (C) 2015 Canonical Ltd |
7 | + * |
8 | + * This file is part of Ubuntu Weather App |
9 | + * |
10 | + * Ubuntu Weather App is free software: you can redistribute it and/or modify |
11 | + * it under the terms of the GNU General Public License version 3 as |
12 | + * published by the Free Software Foundation. |
13 | + * |
14 | + * Ubuntu Weather App is distributed in the hope that it will be useful, |
15 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17 | + * GNU General Public License for more details. |
18 | + * |
19 | + * You should have received a copy of the GNU General Public License |
20 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
21 | + */ |
22 | + |
23 | +import QtQuick 2.3 |
24 | +import Ubuntu.Components 1.1 |
25 | +import Ubuntu.Components.ListItems 1.0 as ListItem |
26 | + |
27 | +/* |
28 | + Component which extends the SDK Expandable list item and provides a easy |
29 | + to use component where the title, subtitle and listview can be displayed. It |
30 | + matches the design specification provided for clock. |
31 | +*/ |
32 | + |
33 | +ListItem.Expandable { |
34 | + id: expandableListItem |
35 | + |
36 | + property ListModel model |
37 | + property Component delegate |
38 | + property alias text: expandableHeader.text |
39 | + property alias subText: expandableHeader.subText |
40 | + property alias listViewHeight: expandableList.height |
41 | + |
42 | + anchors { |
43 | + left: parent.left |
44 | + right: parent.right |
45 | + margins: units.gu(-2) |
46 | + } |
47 | + |
48 | + collapseOnClick: true |
49 | + expandedHeight: contentColumn.height + units.gu(1) |
50 | + |
51 | + Column { |
52 | + id: contentColumn |
53 | + |
54 | + anchors { |
55 | + left: parent.left |
56 | + right: parent.right |
57 | + } |
58 | + |
59 | + Item { |
60 | + width: parent.width |
61 | + height: expandableListItem.collapsedHeight |
62 | + |
63 | + ListItem.Subtitled { |
64 | + id: expandableHeader |
65 | + onClicked: expandableListItem.expanded = true |
66 | + |
67 | + Icon { |
68 | + id: arrow |
69 | + |
70 | + width: units.gu(2) |
71 | + height: width |
72 | + anchors.right: parent.right |
73 | + anchors.verticalCenter: parent.verticalCenter |
74 | + |
75 | + name: "go-down" |
76 | + color: "Grey" |
77 | + rotation: expandableListItem.expanded ? 180 : 0 |
78 | + |
79 | + Behavior on rotation { |
80 | + UbuntuNumberAnimation {} |
81 | + } |
82 | + } |
83 | + } |
84 | + } |
85 | + |
86 | + ListView { |
87 | + id: expandableList |
88 | + width: parent.width |
89 | + interactive: false |
90 | + model: expandableListItem.model |
91 | + delegate: expandableListItem.delegate |
92 | + } |
93 | + } |
94 | +} |
95 | |
96 | === modified file 'app/ui/settings/DataProviderPage.qml' |
97 | --- app/ui/settings/DataProviderPage.qml 2015-02-10 14:17:08 +0000 |
98 | +++ app/ui/settings/DataProviderPage.qml 2015-04-05 22:31:23 +0000 |
99 | @@ -19,34 +19,40 @@ |
100 | import QtQuick 2.3 |
101 | import Ubuntu.Components 1.1 |
102 | import Ubuntu.Components.ListItems 0.1 as ListItem |
103 | - |
104 | +import "../../components" |
105 | |
106 | Page { |
107 | title: i18n.tr("Data Provider") |
108 | |
109 | - Flickable { |
110 | - anchors { |
111 | - fill: parent |
112 | - } |
113 | - height: parent.height |
114 | - contentHeight: unitsColumn.childrenRect.height |
115 | - |
116 | - Column { |
117 | - id: unitsColumn |
118 | - anchors { |
119 | - fill: parent |
120 | + ListModel { |
121 | + id: dataProviderModel |
122 | + ListElement { text: "openweathermap" } |
123 | + ListElement { text: "weatherchannel" } |
124 | + } |
125 | + |
126 | + ExpandableListItem { |
127 | + id: dataProviderSetting |
128 | + |
129 | + listViewHeight: dataProviderModel.count*units.gu(6) - units.gu(1) |
130 | + model: dataProviderModel |
131 | + text: i18n.tr("Provider") |
132 | + subText: settings.service |
133 | + |
134 | + delegate: ListItem.Standard { |
135 | + text: model.text |
136 | + onClicked: { |
137 | + settings.service = model.text |
138 | + refreshData(false, true) |
139 | } |
140 | |
141 | - ListItem.ItemSelector { |
142 | - expanded: true |
143 | - model: ["openweathermap", "weatherchannel"] // "geonames", "geoip"] |
144 | - selectedIndex: model.indexOf(settings.service) |
145 | - text: i18n.tr("Provider") |
146 | - |
147 | - onDelegateClicked: { |
148 | - settings.service = model[index] |
149 | - refreshData(false, true) |
150 | - } |
151 | + Icon { |
152 | + width: units.gu(2) |
153 | + height: width |
154 | + name: "ok" |
155 | + visible: settings.service === model.text |
156 | + anchors.right: parent.right |
157 | + anchors.rightMargin: units.gu(2) |
158 | + anchors.verticalCenter: parent.verticalCenter |
159 | } |
160 | } |
161 | } |
162 | |
163 | === modified file 'app/ui/settings/RefreshIntervalPage.qml' |
164 | --- app/ui/settings/RefreshIntervalPage.qml 2015-03-07 16:47:19 +0000 |
165 | +++ app/ui/settings/RefreshIntervalPage.qml 2015-04-05 22:31:23 +0000 |
166 | @@ -19,37 +19,45 @@ |
167 | import QtQuick 2.3 |
168 | import Ubuntu.Components 1.1 |
169 | import Ubuntu.Components.ListItems 0.1 as ListItem |
170 | - |
171 | +import "../../components" |
172 | |
173 | Page { |
174 | title: i18n.tr("Refresh Interval") |
175 | |
176 | - Flickable { |
177 | - anchors { |
178 | - fill: parent |
179 | + ListModel { |
180 | + id: refreshModel |
181 | + Component.onCompleted: initialize() |
182 | + function initialize() { |
183 | + refreshModel.append({"interval": 600, "text": i18n.tr("%1 minute", "%1 minutes", 10).arg(10)}) |
184 | + refreshModel.append({"interval": 900, "text": i18n.tr("%1 minute", "%1 minutes", 15).arg(15)}) |
185 | + refreshModel.append({"interval": 1800, "text": i18n.tr("%1 minute", "%1 minutes", 30).arg(30)}) |
186 | + refreshModel.append({"interval": 3600, "text": i18n.tr("%1 minute", "%1 minutes", 60).arg(60)}) |
187 | } |
188 | - height: parent.height |
189 | - contentHeight: unitsColumn.childrenRect.height |
190 | - |
191 | - Column { |
192 | - id: unitsColumn |
193 | - anchors { |
194 | - fill: parent |
195 | + } |
196 | + |
197 | + ExpandableListItem { |
198 | + id: dataProviderSetting |
199 | + |
200 | + listViewHeight: refreshModel.count*units.gu(6) |
201 | + model: refreshModel |
202 | + text: i18n.tr("Interval") |
203 | + subText: i18n.tr("%1 minute", "%1 minutes", Math.floor(settings.refreshInterval / 60).toString()).arg(Math.floor(settings.refreshInterval / 60).toString()) |
204 | + |
205 | + delegate: ListItem.Standard { |
206 | + text: model.text |
207 | + onClicked: { |
208 | + settings.refreshInterval = model.interval |
209 | + refreshData(false, true) |
210 | } |
211 | |
212 | - ListItem.ItemSelector { |
213 | - delegate: OptionSelectorDelegate { |
214 | - text: Math.floor(modelData / 60).toString() + " " + i18n.tr("minutes") |
215 | - } |
216 | - expanded: true |
217 | - model: [600, 900, 1800, 3600] |
218 | - selectedIndex: model.indexOf(settings.refreshInterval) |
219 | - text: i18n.tr("Interval") |
220 | - |
221 | - onDelegateClicked: { |
222 | - settings.refreshInterval = model[index] |
223 | - refreshData(false, true) |
224 | - } |
225 | + Icon { |
226 | + width: units.gu(2) |
227 | + height: width |
228 | + name: "ok" |
229 | + visible: settings.refreshInterval === model.interval |
230 | + anchors.right: parent.right |
231 | + anchors.rightMargin: units.gu(2) |
232 | + anchors.verticalCenter: parent.verticalCenter |
233 | } |
234 | } |
235 | } |
236 | |
237 | === modified file 'app/ui/settings/UnitsPage.qml' |
238 | --- app/ui/settings/UnitsPage.qml 2015-03-08 17:25:16 +0000 |
239 | +++ app/ui/settings/UnitsPage.qml 2015-04-05 22:31:23 +0000 |
240 | @@ -19,57 +19,151 @@ |
241 | import QtQuick 2.3 |
242 | import Ubuntu.Components 1.1 |
243 | import Ubuntu.Components.ListItems 0.1 as ListItem |
244 | - |
245 | +import "../../components" |
246 | |
247 | Page { |
248 | title: i18n.tr("Units") |
249 | |
250 | + flickable: null |
251 | + |
252 | Flickable { |
253 | - anchors { |
254 | - fill: parent |
255 | - } |
256 | + anchors.fill: parent |
257 | height: parent.height |
258 | contentHeight: unitsColumn.childrenRect.height |
259 | |
260 | + ListModel { |
261 | + id: temperatureModel |
262 | + Component.onCompleted: initialize() |
263 | + function initialize() { |
264 | + // TRANSLATORS: The strings are standard measurement units |
265 | + // of temperature in Celcius and are shown in the settings page. |
266 | + // Only the abbreviated form of Celcius should be used. |
267 | + temperatureModel.append({"text": i18n.tr("°C"), "value": "°C"}) |
268 | + |
269 | + // TRANSLATORS: The strings are standard measurement units |
270 | + // of temperature in Fahrenheit and are shown in the settings page. |
271 | + // Only the abbreviated form of Fahrenheit should be used. |
272 | + temperatureModel.append({"text": i18n.tr("°F"), "value": "°F"}) |
273 | + } |
274 | + } |
275 | + |
276 | + ListModel { |
277 | + id: precipationModel |
278 | + Component.onCompleted: initialize() |
279 | + function initialize() { |
280 | + // TRANSLATORS: The strings are standard measurement units |
281 | + // of precipitation in millimeters and are shown in the settings page. |
282 | + // Only the abbreviated form of millimeters should be used. |
283 | + precipationModel.append({"text": i18n.tr("mm"), "value": "mm"}) |
284 | + |
285 | + // TRANSLATORS: The strings are standard measurement units |
286 | + // of precipitation in inches and are shown in the settings page. |
287 | + // Only the abbreviated form of inches should be used. |
288 | + precipationModel.append({"text": i18n.tr("in"), "value": "in"}) |
289 | + } |
290 | + } |
291 | + |
292 | + ListModel { |
293 | + id: windSpeedModel |
294 | + Component.onCompleted: initialize() |
295 | + function initialize() { |
296 | + // TRANSLATORS: The strings are standard measurement units |
297 | + // of wind speed in kilometers per hour and are shown in the settings page. |
298 | + // Only the abbreviated form of kilometers per hour should be used. |
299 | + windSpeedModel.append({"text": i18n.tr("kmh"), "value": "kmh"}) |
300 | + |
301 | + // TRANSLATORS: The strings are standard measurement units |
302 | + // of wind speed in miles per hour and are shown in the settings page. |
303 | + // Only the abbreviated form of miles per hour should be used. |
304 | + windSpeedModel.append({"text": i18n.tr("mph"), "value": "mph"}) |
305 | + } |
306 | + } |
307 | + |
308 | Column { |
309 | id: unitsColumn |
310 | - anchors { |
311 | - fill: parent |
312 | - } |
313 | - |
314 | - ListItem.ItemSelector { |
315 | - expanded: true |
316 | - model: ["°C", "°F"] |
317 | - selectedIndex: model.indexOf(settings.tempScale) |
318 | + anchors.fill: parent |
319 | + |
320 | + ExpandableListItem { |
321 | + id: temperatureSetting |
322 | + |
323 | + listViewHeight: temperatureModel.count*units.gu(6) - units.gu(0.5) |
324 | + model: temperatureModel |
325 | text: i18n.tr("Temperature") |
326 | - |
327 | - onDelegateClicked: { |
328 | - settings.tempScale = model[index] |
329 | - refreshData(true) |
330 | + subText: settings.tempScale === "°C" ? i18n.tr("°C") |
331 | + : i18n.tr("°F") |
332 | + |
333 | + delegate: ListItem.Standard { |
334 | + text: model.text |
335 | + onClicked: { |
336 | + settings.tempScale = model.value |
337 | + refreshData(true) |
338 | + } |
339 | + |
340 | + Icon { |
341 | + width: units.gu(2) |
342 | + height: width |
343 | + name: "ok" |
344 | + visible: settings.tempScale === model.value |
345 | + anchors.right: parent.right |
346 | + anchors.rightMargin: units.gu(2) |
347 | + anchors.verticalCenter: parent.verticalCenter |
348 | + } |
349 | } |
350 | } |
351 | |
352 | - ListItem.ItemSelector { |
353 | - expanded: true |
354 | - model: ["mm", "in"] |
355 | - selectedIndex: model.indexOf(settings.precipUnits) |
356 | + ExpandableListItem { |
357 | + id: precipationSetting |
358 | + |
359 | + listViewHeight: precipationModel.count*units.gu(6) - units.gu(0.5) |
360 | + model: precipationModel |
361 | text: i18n.tr("Precipitation") |
362 | - |
363 | - onDelegateClicked: { |
364 | - settings.precipUnits = model[index] |
365 | - refreshData(true) |
366 | + subText: settings.precipUnits === "mm" ? i18n.tr("mm") |
367 | + : i18n.tr("in") |
368 | + |
369 | + delegate: ListItem.Standard { |
370 | + text: model.text |
371 | + onClicked: { |
372 | + settings.precipUnits = model.value |
373 | + refreshData(true) |
374 | + } |
375 | + |
376 | + Icon { |
377 | + width: units.gu(2) |
378 | + height: width |
379 | + name: "ok" |
380 | + visible: settings.precipUnits === model.value |
381 | + anchors.right: parent.right |
382 | + anchors.rightMargin: units.gu(2) |
383 | + anchors.verticalCenter: parent.verticalCenter |
384 | + } |
385 | } |
386 | } |
387 | |
388 | - ListItem.ItemSelector { |
389 | - expanded: true |
390 | - model: ["kmh", "mph"] |
391 | + ExpandableListItem { |
392 | + id: windSetting |
393 | + |
394 | + listViewHeight: windSpeedModel.count*units.gu(6) - units.gu(0.5) |
395 | + model: windSpeedModel |
396 | text: i18n.tr("Wind Speed") |
397 | - selectedIndex: model.indexOf(settings.windUnits) |
398 | - |
399 | - onDelegateClicked: { |
400 | - settings.windUnits = model[index] |
401 | - refreshData(true) |
402 | + subText: settings.windUnits === "kmh" ? i18n.tr("kmh") |
403 | + : i18n.tr("mph") |
404 | + |
405 | + delegate: ListItem.Standard { |
406 | + text: model.text |
407 | + onClicked: { |
408 | + settings.windUnits = model.value |
409 | + refreshData(true) |
410 | + } |
411 | + |
412 | + Icon { |
413 | + width: units.gu(2) |
414 | + height: width |
415 | + name: "ok" |
416 | + visible: settings.windUnits === model.value |
417 | + anchors.right: parent.right |
418 | + anchors.rightMargin: units.gu(2) |
419 | + anchors.verticalCenter: parent.verticalCenter |
420 | + } |
421 | } |
422 | } |
423 | } |
424 | |
425 | === modified file 'po/com.ubuntu.weather.pot' |
426 | --- po/com.ubuntu.weather.pot 2015-04-03 20:20:20 +0000 |
427 | +++ po/com.ubuntu.weather.pot 2015-04-05 22:31:23 +0000 |
428 | @@ -8,14 +8,15 @@ |
429 | msgstr "" |
430 | "Project-Id-Version: ubuntu-weather-app\n" |
431 | "Report-Msgid-Bugs-To: \n" |
432 | -"POT-Creation-Date: 2015-04-03 21:18+0100\n" |
433 | +"POT-Creation-Date: 2015-04-04 09:58+0200\n" |
434 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
435 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
436 | "Language-Team: LANGUAGE <LL@li.org>\n" |
437 | "Language: \n" |
438 | "MIME-Version: 1.0\n" |
439 | -"Content-Type: text/plain; charset=CHARSET\n" |
440 | +"Content-Type: text/plain; charset=UTF-8\n" |
441 | "Content-Transfer-Encoding: 8bit\n" |
442 | +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" |
443 | |
444 | #: ../app/components/HomeTempInfo.qml:38 |
445 | msgid "Today" |
446 | @@ -89,27 +90,76 @@ |
447 | msgid "Refresh Interval" |
448 | msgstr "" |
449 | |
450 | -#: ../app/ui/settings/DataProviderPage.qml:44 |
451 | +#: ../app/ui/settings/DataProviderPage.qml:38 |
452 | msgid "Provider" |
453 | msgstr "" |
454 | |
455 | -#: ../app/ui/settings/RefreshIntervalPage.qml:42 |
456 | -msgid "minutes" |
457 | -msgstr "" |
458 | +#: ../app/ui/settings/RefreshIntervalPage.qml:31 |
459 | +#: ../app/ui/settings/RefreshIntervalPage.qml:32 |
460 | +#: ../app/ui/settings/RefreshIntervalPage.qml:33 |
461 | +#: ../app/ui/settings/RefreshIntervalPage.qml:34 |
462 | +#: ../app/ui/settings/RefreshIntervalPage.qml:44 |
463 | +#, qt-format |
464 | +msgid "%1 minute" |
465 | +msgid_plural "%1 minutes" |
466 | +msgstr[0] "" |
467 | +msgstr[1] "" |
468 | |
469 | -#: ../app/ui/settings/RefreshIntervalPage.qml:47 |
470 | +#: ../app/ui/settings/RefreshIntervalPage.qml:43 |
471 | msgid "Interval" |
472 | msgstr "" |
473 | |
474 | -#: ../app/ui/settings/UnitsPage.qml:44 |
475 | +#. TRANSLATORS: The strings are standard measurement units |
476 | +#. of temperature in Celcius and are shown in the settings page. |
477 | +#. Only the abbreviated form of Celcius should be used. |
478 | +#: ../app/ui/settings/UnitsPage.qml:41 ../app/ui/settings/UnitsPage.qml:92 |
479 | +msgid "°C" |
480 | +msgstr "" |
481 | + |
482 | +#. TRANSLATORS: The strings are standard measurement units |
483 | +#. of temperature in Fahrenheit and are shown in the settings page. |
484 | +#. Only the abbreviated form of Fahrenheit should be used. |
485 | +#: ../app/ui/settings/UnitsPage.qml:46 ../app/ui/settings/UnitsPage.qml:93 |
486 | +msgid "°F" |
487 | +msgstr "" |
488 | + |
489 | +#. TRANSLATORS: The strings are standard measurement units |
490 | +#. of precipitation in millimeters and are shown in the settings page. |
491 | +#. Only the abbreviated form of millimeters should be used. |
492 | +#: ../app/ui/settings/UnitsPage.qml:57 ../app/ui/settings/UnitsPage.qml:120 |
493 | +msgid "mm" |
494 | +msgstr "" |
495 | + |
496 | +#. TRANSLATORS: The strings are standard measurement units |
497 | +#. of precipitation in inches and are shown in the settings page. |
498 | +#. Only the abbreviated form of inches should be used. |
499 | +#: ../app/ui/settings/UnitsPage.qml:62 ../app/ui/settings/UnitsPage.qml:121 |
500 | +msgid "in" |
501 | +msgstr "" |
502 | + |
503 | +#. TRANSLATORS: The strings are standard measurement units |
504 | +#. of wind speed in kilometers per hour and are shown in the settings page. |
505 | +#. Only the abbreviated form of kilometers per hour should be used. |
506 | +#: ../app/ui/settings/UnitsPage.qml:73 ../app/ui/settings/UnitsPage.qml:148 |
507 | +msgid "kmh" |
508 | +msgstr "" |
509 | + |
510 | +#. TRANSLATORS: The strings are standard measurement units |
511 | +#. of wind speed in miles per hour and are shown in the settings page. |
512 | +#. Only the abbreviated form of miles per hour should be used. |
513 | +#: ../app/ui/settings/UnitsPage.qml:78 ../app/ui/settings/UnitsPage.qml:149 |
514 | +msgid "mph" |
515 | +msgstr "" |
516 | + |
517 | +#: ../app/ui/settings/UnitsPage.qml:91 |
518 | msgid "Temperature" |
519 | msgstr "" |
520 | |
521 | -#: ../app/ui/settings/UnitsPage.qml:56 |
522 | +#: ../app/ui/settings/UnitsPage.qml:119 |
523 | msgid "Precipitation" |
524 | msgstr "" |
525 | |
526 | -#: ../app/ui/settings/UnitsPage.qml:67 |
527 | +#: ../app/ui/settings/UnitsPage.qml:147 |
528 | msgid "Wind Speed" |
529 | msgstr "" |
530 |
PASSED: Continuous integration, rev:21 91.189. 93.70:8080/ job/ubuntu- weather- app-reboot- ci/54/ 91.189. 93.70:8080/ job/ubuntu- weather- app-reboot- utopic- amd64-ci/ 24 91.189. 93.70:8080/ job/ubuntu- weather- app-reboot- vivid-amd64- ci/54
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild: 91.189. 93.70:8080/ job/ubuntu- weather- app-reboot- ci/54/rebuild
http://