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
=== added file 'app/components/ExpandableListItem.qml'
--- app/components/ExpandableListItem.qml 1970-01-01 00:00:00 +0000
+++ app/components/ExpandableListItem.qml 2015-04-05 22:31:23 +0000
@@ -0,0 +1,90 @@
1/*
2 * Copyright (C) 2015 Canonical Ltd
3 *
4 * This file is part of Ubuntu Weather App
5 *
6 * Ubuntu Weather App is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 3 as
8 * published by the Free Software Foundation.
9 *
10 * Ubuntu Weather App is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19import QtQuick 2.3
20import Ubuntu.Components 1.1
21import Ubuntu.Components.ListItems 1.0 as ListItem
22
23/*
24 Component which extends the SDK Expandable list item and provides a easy
25 to use component where the title, subtitle and listview can be displayed. It
26 matches the design specification provided for clock.
27*/
28
29ListItem.Expandable {
30 id: expandableListItem
31
32 property ListModel model
33 property Component delegate
34 property alias text: expandableHeader.text
35 property alias subText: expandableHeader.subText
36 property alias listViewHeight: expandableList.height
37
38 anchors {
39 left: parent.left
40 right: parent.right
41 margins: units.gu(-2)
42 }
43
44 collapseOnClick: true
45 expandedHeight: contentColumn.height + units.gu(1)
46
47 Column {
48 id: contentColumn
49
50 anchors {
51 left: parent.left
52 right: parent.right
53 }
54
55 Item {
56 width: parent.width
57 height: expandableListItem.collapsedHeight
58
59 ListItem.Subtitled {
60 id: expandableHeader
61 onClicked: expandableListItem.expanded = true
62
63 Icon {
64 id: arrow
65
66 width: units.gu(2)
67 height: width
68 anchors.right: parent.right
69 anchors.verticalCenter: parent.verticalCenter
70
71 name: "go-down"
72 color: "Grey"
73 rotation: expandableListItem.expanded ? 180 : 0
74
75 Behavior on rotation {
76 UbuntuNumberAnimation {}
77 }
78 }
79 }
80 }
81
82 ListView {
83 id: expandableList
84 width: parent.width
85 interactive: false
86 model: expandableListItem.model
87 delegate: expandableListItem.delegate
88 }
89 }
90}
091
=== modified file 'app/ui/settings/DataProviderPage.qml'
--- app/ui/settings/DataProviderPage.qml 2015-02-10 14:17:08 +0000
+++ app/ui/settings/DataProviderPage.qml 2015-04-05 22:31:23 +0000
@@ -19,34 +19,40 @@
19import QtQuick 2.319import QtQuick 2.3
20import Ubuntu.Components 1.120import Ubuntu.Components 1.1
21import Ubuntu.Components.ListItems 0.1 as ListItem21import Ubuntu.Components.ListItems 0.1 as ListItem
2222import "../../components"
2323
24Page {24Page {
25 title: i18n.tr("Data Provider")25 title: i18n.tr("Data Provider")
2626
27 Flickable {27 ListModel {
28 anchors {28 id: dataProviderModel
29 fill: parent29 ListElement { text: "openweathermap" }
30 }30 ListElement { text: "weatherchannel" }
31 height: parent.height31 }
32 contentHeight: unitsColumn.childrenRect.height32
3333 ExpandableListItem {
34 Column {34 id: dataProviderSetting
35 id: unitsColumn35
36 anchors {36 listViewHeight: dataProviderModel.count*units.gu(6) - units.gu(1)
37 fill: parent37 model: dataProviderModel
38 text: i18n.tr("Provider")
39 subText: settings.service
40
41 delegate: ListItem.Standard {
42 text: model.text
43 onClicked: {
44 settings.service = model.text
45 refreshData(false, true)
38 }46 }
3947
40 ListItem.ItemSelector {48 Icon {
41 expanded: true49 width: units.gu(2)
42 model: ["openweathermap", "weatherchannel"] // "geonames", "geoip"]50 height: width
43 selectedIndex: model.indexOf(settings.service)51 name: "ok"
44 text: i18n.tr("Provider")52 visible: settings.service === model.text
4553 anchors.right: parent.right
46 onDelegateClicked: {54 anchors.rightMargin: units.gu(2)
47 settings.service = model[index]55 anchors.verticalCenter: parent.verticalCenter
48 refreshData(false, true)
49 }
50 }56 }
51 }57 }
52 }58 }
5359
=== modified file 'app/ui/settings/RefreshIntervalPage.qml'
--- app/ui/settings/RefreshIntervalPage.qml 2015-03-07 16:47:19 +0000
+++ app/ui/settings/RefreshIntervalPage.qml 2015-04-05 22:31:23 +0000
@@ -19,37 +19,45 @@
19import QtQuick 2.319import QtQuick 2.3
20import Ubuntu.Components 1.120import Ubuntu.Components 1.1
21import Ubuntu.Components.ListItems 0.1 as ListItem21import Ubuntu.Components.ListItems 0.1 as ListItem
2222import "../../components"
2323
24Page {24Page {
25 title: i18n.tr("Refresh Interval")25 title: i18n.tr("Refresh Interval")
2626
27 Flickable {27 ListModel {
28 anchors {28 id: refreshModel
29 fill: parent29 Component.onCompleted: initialize()
30 function initialize() {
31 refreshModel.append({"interval": 600, "text": i18n.tr("%1 minute", "%1 minutes", 10).arg(10)})
32 refreshModel.append({"interval": 900, "text": i18n.tr("%1 minute", "%1 minutes", 15).arg(15)})
33 refreshModel.append({"interval": 1800, "text": i18n.tr("%1 minute", "%1 minutes", 30).arg(30)})
34 refreshModel.append({"interval": 3600, "text": i18n.tr("%1 minute", "%1 minutes", 60).arg(60)})
30 }35 }
31 height: parent.height36 }
32 contentHeight: unitsColumn.childrenRect.height37
3338 ExpandableListItem {
34 Column {39 id: dataProviderSetting
35 id: unitsColumn40
36 anchors {41 listViewHeight: refreshModel.count*units.gu(6)
37 fill: parent42 model: refreshModel
43 text: i18n.tr("Interval")
44 subText: i18n.tr("%1 minute", "%1 minutes", Math.floor(settings.refreshInterval / 60).toString()).arg(Math.floor(settings.refreshInterval / 60).toString())
45
46 delegate: ListItem.Standard {
47 text: model.text
48 onClicked: {
49 settings.refreshInterval = model.interval
50 refreshData(false, true)
38 }51 }
3952
40 ListItem.ItemSelector {53 Icon {
41 delegate: OptionSelectorDelegate {54 width: units.gu(2)
42 text: Math.floor(modelData / 60).toString() + " " + i18n.tr("minutes")55 height: width
43 }56 name: "ok"
44 expanded: true57 visible: settings.refreshInterval === model.interval
45 model: [600, 900, 1800, 3600]58 anchors.right: parent.right
46 selectedIndex: model.indexOf(settings.refreshInterval)59 anchors.rightMargin: units.gu(2)
47 text: i18n.tr("Interval")60 anchors.verticalCenter: parent.verticalCenter
48
49 onDelegateClicked: {
50 settings.refreshInterval = model[index]
51 refreshData(false, true)
52 }
53 }61 }
54 }62 }
55 }63 }
5664
=== modified file 'app/ui/settings/UnitsPage.qml'
--- app/ui/settings/UnitsPage.qml 2015-03-08 17:25:16 +0000
+++ app/ui/settings/UnitsPage.qml 2015-04-05 22:31:23 +0000
@@ -19,57 +19,151 @@
19import QtQuick 2.319import QtQuick 2.3
20import Ubuntu.Components 1.120import Ubuntu.Components 1.1
21import Ubuntu.Components.ListItems 0.1 as ListItem21import Ubuntu.Components.ListItems 0.1 as ListItem
2222import "../../components"
2323
24Page {24Page {
25 title: i18n.tr("Units")25 title: i18n.tr("Units")
2626
27 flickable: null
28
27 Flickable {29 Flickable {
28 anchors {30 anchors.fill: parent
29 fill: parent
30 }
31 height: parent.height31 height: parent.height
32 contentHeight: unitsColumn.childrenRect.height32 contentHeight: unitsColumn.childrenRect.height
3333
34 ListModel {
35 id: temperatureModel
36 Component.onCompleted: initialize()
37 function initialize() {
38 // TRANSLATORS: The strings are standard measurement units
39 // of temperature in Celcius and are shown in the settings page.
40 // Only the abbreviated form of Celcius should be used.
41 temperatureModel.append({"text": i18n.tr("°C"), "value": "°C"})
42
43 // TRANSLATORS: The strings are standard measurement units
44 // of temperature in Fahrenheit and are shown in the settings page.
45 // Only the abbreviated form of Fahrenheit should be used.
46 temperatureModel.append({"text": i18n.tr("°F"), "value": "°F"})
47 }
48 }
49
50 ListModel {
51 id: precipationModel
52 Component.onCompleted: initialize()
53 function initialize() {
54 // TRANSLATORS: The strings are standard measurement units
55 // of precipitation in millimeters and are shown in the settings page.
56 // Only the abbreviated form of millimeters should be used.
57 precipationModel.append({"text": i18n.tr("mm"), "value": "mm"})
58
59 // TRANSLATORS: The strings are standard measurement units
60 // of precipitation in inches and are shown in the settings page.
61 // Only the abbreviated form of inches should be used.
62 precipationModel.append({"text": i18n.tr("in"), "value": "in"})
63 }
64 }
65
66 ListModel {
67 id: windSpeedModel
68 Component.onCompleted: initialize()
69 function initialize() {
70 // TRANSLATORS: The strings are standard measurement units
71 // of wind speed in kilometers per hour and are shown in the settings page.
72 // Only the abbreviated form of kilometers per hour should be used.
73 windSpeedModel.append({"text": i18n.tr("kmh"), "value": "kmh"})
74
75 // TRANSLATORS: The strings are standard measurement units
76 // of wind speed in miles per hour and are shown in the settings page.
77 // Only the abbreviated form of miles per hour should be used.
78 windSpeedModel.append({"text": i18n.tr("mph"), "value": "mph"})
79 }
80 }
81
34 Column {82 Column {
35 id: unitsColumn83 id: unitsColumn
36 anchors {84 anchors.fill: parent
37 fill: parent85
38 }86 ExpandableListItem {
3987 id: temperatureSetting
40 ListItem.ItemSelector {88
41 expanded: true89 listViewHeight: temperatureModel.count*units.gu(6) - units.gu(0.5)
42 model: ["°C", "°F"]90 model: temperatureModel
43 selectedIndex: model.indexOf(settings.tempScale)
44 text: i18n.tr("Temperature")91 text: i18n.tr("Temperature")
4592 subText: settings.tempScale === "°C" ? i18n.tr("°C")
46 onDelegateClicked: {93 : i18n.tr("°F")
47 settings.tempScale = model[index]94
48 refreshData(true)95 delegate: ListItem.Standard {
96 text: model.text
97 onClicked: {
98 settings.tempScale = model.value
99 refreshData(true)
100 }
101
102 Icon {
103 width: units.gu(2)
104 height: width
105 name: "ok"
106 visible: settings.tempScale === model.value
107 anchors.right: parent.right
108 anchors.rightMargin: units.gu(2)
109 anchors.verticalCenter: parent.verticalCenter
110 }
49 }111 }
50 }112 }
51113
52 ListItem.ItemSelector {114 ExpandableListItem {
53 expanded: true115 id: precipationSetting
54 model: ["mm", "in"]116
55 selectedIndex: model.indexOf(settings.precipUnits)117 listViewHeight: precipationModel.count*units.gu(6) - units.gu(0.5)
118 model: precipationModel
56 text: i18n.tr("Precipitation")119 text: i18n.tr("Precipitation")
57120 subText: settings.precipUnits === "mm" ? i18n.tr("mm")
58 onDelegateClicked: {121 : i18n.tr("in")
59 settings.precipUnits = model[index]122
60 refreshData(true)123 delegate: ListItem.Standard {
124 text: model.text
125 onClicked: {
126 settings.precipUnits = model.value
127 refreshData(true)
128 }
129
130 Icon {
131 width: units.gu(2)
132 height: width
133 name: "ok"
134 visible: settings.precipUnits === model.value
135 anchors.right: parent.right
136 anchors.rightMargin: units.gu(2)
137 anchors.verticalCenter: parent.verticalCenter
138 }
61 }139 }
62 }140 }
63141
64 ListItem.ItemSelector {142 ExpandableListItem {
65 expanded: true143 id: windSetting
66 model: ["kmh", "mph"]144
145 listViewHeight: windSpeedModel.count*units.gu(6) - units.gu(0.5)
146 model: windSpeedModel
67 text: i18n.tr("Wind Speed")147 text: i18n.tr("Wind Speed")
68 selectedIndex: model.indexOf(settings.windUnits)148 subText: settings.windUnits === "kmh" ? i18n.tr("kmh")
69149 : i18n.tr("mph")
70 onDelegateClicked: {150
71 settings.windUnits = model[index]151 delegate: ListItem.Standard {
72 refreshData(true)152 text: model.text
153 onClicked: {
154 settings.windUnits = model.value
155 refreshData(true)
156 }
157
158 Icon {
159 width: units.gu(2)
160 height: width
161 name: "ok"
162 visible: settings.windUnits === model.value
163 anchors.right: parent.right
164 anchors.rightMargin: units.gu(2)
165 anchors.verticalCenter: parent.verticalCenter
166 }
73 }167 }
74 }168 }
75 }169 }
76170
=== modified file 'po/com.ubuntu.weather.pot'
--- po/com.ubuntu.weather.pot 2015-04-03 20:20:20 +0000
+++ po/com.ubuntu.weather.pot 2015-04-05 22:31:23 +0000
@@ -8,14 +8,15 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: ubuntu-weather-app\n"9"Project-Id-Version: ubuntu-weather-app\n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2015-04-03 21:18+0100\n"11"POT-Creation-Date: 2015-04-04 09:58+0200\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
15"Language: \n"15"Language: \n"
16"MIME-Version: 1.0\n"16"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=CHARSET\n"17"Content-Type: text/plain; charset=UTF-8\n"
18"Content-Transfer-Encoding: 8bit\n"18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
1920
20#: ../app/components/HomeTempInfo.qml:3821#: ../app/components/HomeTempInfo.qml:38
21msgid "Today"22msgid "Today"
@@ -89,27 +90,76 @@
89msgid "Refresh Interval"90msgid "Refresh Interval"
90msgstr ""91msgstr ""
9192
92#: ../app/ui/settings/DataProviderPage.qml:4493#: ../app/ui/settings/DataProviderPage.qml:38
93msgid "Provider"94msgid "Provider"
94msgstr ""95msgstr ""
9596
96#: ../app/ui/settings/RefreshIntervalPage.qml:4297#: ../app/ui/settings/RefreshIntervalPage.qml:31
97msgid "minutes"98#: ../app/ui/settings/RefreshIntervalPage.qml:32
98msgstr ""99#: ../app/ui/settings/RefreshIntervalPage.qml:33
100#: ../app/ui/settings/RefreshIntervalPage.qml:34
101#: ../app/ui/settings/RefreshIntervalPage.qml:44
102#, qt-format
103msgid "%1 minute"
104msgid_plural "%1 minutes"
105msgstr[0] ""
106msgstr[1] ""
99107
100#: ../app/ui/settings/RefreshIntervalPage.qml:47108#: ../app/ui/settings/RefreshIntervalPage.qml:43
101msgid "Interval"109msgid "Interval"
102msgstr ""110msgstr ""
103111
104#: ../app/ui/settings/UnitsPage.qml:44112#. TRANSLATORS: The strings are standard measurement units
113#. of temperature in Celcius and are shown in the settings page.
114#. Only the abbreviated form of Celcius should be used.
115#: ../app/ui/settings/UnitsPage.qml:41 ../app/ui/settings/UnitsPage.qml:92
116msgid "°C"
117msgstr ""
118
119#. TRANSLATORS: The strings are standard measurement units
120#. of temperature in Fahrenheit and are shown in the settings page.
121#. Only the abbreviated form of Fahrenheit should be used.
122#: ../app/ui/settings/UnitsPage.qml:46 ../app/ui/settings/UnitsPage.qml:93
123msgid "°F"
124msgstr ""
125
126#. TRANSLATORS: The strings are standard measurement units
127#. of precipitation in millimeters and are shown in the settings page.
128#. Only the abbreviated form of millimeters should be used.
129#: ../app/ui/settings/UnitsPage.qml:57 ../app/ui/settings/UnitsPage.qml:120
130msgid "mm"
131msgstr ""
132
133#. TRANSLATORS: The strings are standard measurement units
134#. of precipitation in inches and are shown in the settings page.
135#. Only the abbreviated form of inches should be used.
136#: ../app/ui/settings/UnitsPage.qml:62 ../app/ui/settings/UnitsPage.qml:121
137msgid "in"
138msgstr ""
139
140#. TRANSLATORS: The strings are standard measurement units
141#. of wind speed in kilometers per hour and are shown in the settings page.
142#. Only the abbreviated form of kilometers per hour should be used.
143#: ../app/ui/settings/UnitsPage.qml:73 ../app/ui/settings/UnitsPage.qml:148
144msgid "kmh"
145msgstr ""
146
147#. TRANSLATORS: The strings are standard measurement units
148#. of wind speed in miles per hour and are shown in the settings page.
149#. Only the abbreviated form of miles per hour should be used.
150#: ../app/ui/settings/UnitsPage.qml:78 ../app/ui/settings/UnitsPage.qml:149
151msgid "mph"
152msgstr ""
153
154#: ../app/ui/settings/UnitsPage.qml:91
105msgid "Temperature"155msgid "Temperature"
106msgstr ""156msgstr ""
107157
108#: ../app/ui/settings/UnitsPage.qml:56158#: ../app/ui/settings/UnitsPage.qml:119
109msgid "Precipitation"159msgid "Precipitation"
110msgstr ""160msgstr ""
111161
112#: ../app/ui/settings/UnitsPage.qml:67162#: ../app/ui/settings/UnitsPage.qml:147
113msgid "Wind Speed"163msgid "Wind Speed"
114msgstr ""164msgstr ""
115165

Subscribers

People subscribed via source and target branches