Merge lp:~nik90/ubuntu-weather-app/improved-settings-page into lp:ubuntu-weather-app

Proposed by Nekhelesh Ramananthan
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
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.

To post a comment you must log in.
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
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.

0 - http://bazaar.launchpad.net/~nik90/ubuntu-weather-app/improved-settings-page/view/head:/app/ui/LocationPane.qml#L67

review: Needs Information
Revision history for this message
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://bazaar.launchpad.net/~nik90/ubuntu-weather-app/improved-settings-
> page/view/head:/app/ui/LocationPane.qml#L67

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

Revision history for this message
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.

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
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.

review: Needs Fixing
Revision history for this message
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?

Revision history for this message
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://stackoverflow.com/questions/9933088/should-units-of-measurement-be-localized, it does seems that SI unit standards should also be translatable.

That said, I could ask in the ubuntu translation mailing list about this to get their opinion.

Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

I have sent a mail to mailing list at https://lists.ubuntu.com/archives/ubuntu-translators/2015-March/006812.html, let's wait to hear their opinion.

Revision history for this message
Nekhelesh Ramananthan (nik90) wrote :

I got a reply at https://lists.ubuntu.com/archives/ubuntu-translators/2015-March/006813.html. kmh, mph, etc should indeed be translatable. I will add the necessary translation notes to make it more clear.

Revision history for this message
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].

[1] http://st.unicode.org/cldr-apps/v#/uk/Weather/

23. By Nekhelesh Ramananthan

Added translation notes

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
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 ;)

Revision history for this message
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.

review: Needs Fixing
24. By Nekhelesh Ramananthan

Added more translator messages

25. By Nekhelesh Ramananthan

merged lp:ubuntu-weather-app/reboot

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Victor Thompson (vthompson) wrote :

lgtm!

review: Approve
Revision history for this message
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".

review: Needs Fixing
26. By Nekhelesh Ramananthan

Corrected typo windspeemodel

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
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 :)

review: Approve
Revision history for this message
Victor Thompson (vthompson) wrote :

Agreed, let's try to get some consensus via a bug report.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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

Subscribers

People subscribed via source and target branches