Merge lp:~nikwen/ubuntu-calendar-app/fix-standalone-month-name-i18n into lp:ubuntu-calendar-app

Proposed by Niklas Wenzel
Status: Needs review
Proposed branch: lp:~nikwen/ubuntu-calendar-app/fix-standalone-month-name-i18n
Merge into: lp:ubuntu-calendar-app
Diff against target: 330 lines (+61/-67)
4 files modified
DayView.qml (+3/-5)
MonthView.qml (+3/-5)
WeekView.qml (+9/-10)
po/com.ubuntu.calendar.pot (+46/-47)
To merge this branch: bzr merge lp:~nikwen/ubuntu-calendar-app/fix-standalone-month-name-i18n
Reviewer Review Type Date Requested Status
Jenkins Bot continuous-integration Approve
Nekhelesh Ramananthan Needs Fixing
David Planella Needs Fixing
Kunal Parmar Pending
Review via email: mp+279509@code.launchpad.net

Commit message

Fix bad month translations for some languages, e.g. Polish

Description of the change

Fix bad month translations for some languages, e.g. Polish

See the related bug report for more information on why this change is necessary. ;)

To post a comment you must log in.
Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
736. By Niklas Wenzel

Remove id attribute that I used during testing

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Kunal Parmar (pkunal-parmar) wrote :

Thanks :), this changes seems fine to me, but need to test is once and then approve it

Revision history for this message
David Planella (dpm) wrote :

Why do you need to call qsTr()? IIRC, it should work with i18n.tr() only already.

qsTr(i18n.tr("%1 %2")).arg(Qt.locale().standaloneMonthName(currentMonth.getMonth(), Locale.LongFormat)).arg(currentMonth.getFullYear())

review: Needs Information
Revision history for this message
David Planella (dpm) wrote :

Sorry, to be more specific:

- Qt.locale() should choose the right locale for you already for the standaloneMonthName, without needing qsTr()
- Does currentMonth.getFullYear() not need to be localized as well?

review: Needs Information
Revision history for this message
Niklas Wenzel (nikwen) wrote :

Thank you, Kunal and David, for looking into this.

@David, to clear this up a bit:

qsTr() is responsible only for the format string here. i18n.tr() delivers the translated format string while qsTr() in combination with the arg() calls then goes ahead and replaces %1 and %2 with the arguments, i.e. the month and the year. That said, qsTr() does not do any translation job and is only needed for the format string story. I couldn't find anything in the i18n documentation to replace the qsTr() and arg() calls here. [1]
Regarding the year: Qt.locale() does not provide any way to localize the year. [2] Hence, I don't think we need to do anything, especially considering that we are talking about a number.

[1] https://developer.ubuntu.com/api/apps/qml/sdk-15.04.1/Ubuntu.Components.i18n/
[2] http://doc.qt.io/qt-5/qml-qtqml-locale.html

Revision history for this message
Niklas Wenzel (nikwen) wrote :

Any update on this? Kunal, have you given it a try yet?

Revision history for this message
David Planella (dpm) wrote :

I've just double-checked this again, and I can confirm that the qsTr() call is not required. i18n.tr() (gettext) already takes care of the format string, it is not necessary to process it again with qsTr().

This can easily be tested with a simple QML app that includes the following string:

i18n.tr("%1 %2").arg(Qt.locale().standaloneMonthName(10, Locale.LongFormat)).arg("2011")

review: Needs Fixing
737. By Niklas Wenzel

Remove qsTr() calls

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Niklas Wenzel (nikwen) wrote :

So I just learned something new. Thanks, David! :)

(By the way, would it be possible to add an example for that to https://developer.ubuntu.com/api/apps/qml/sdk-15.04.1/Ubuntu.Components.i18n/ ?)

Now I just have to sort out the merge conflicts.

738. By Niklas Wenzel

Merge trunk

Revision history for this message
Niklas Wenzel (nikwen) wrote :

Fixed the merge conflicts. Would you mind looking into it again, please? :)

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Niklas Wenzel (nikwen) wrote :

Looking at the Jenkins logs, I don't think the test failures are related to the changes here. (Please correct me if I'm wrong, though!) Any idea what was happening?

Revision history for this message
Niklas Wenzel (nikwen) wrote :

No ideas?

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

@nikwen, Hi there, we're looking to release calendar v0.5 with OTA-10. I would like to get this bug fix into trunk before that. Can we work on getting this done?

I have two questions,

1. why at all do we need i18n.tr() calls? Can we just do "%1 %2".arg().arg() which then substitutes the month and year accordingly? Or is this for RTL language support where the order may need to be changed?

2. calendar app trunk has gone through a huge code change. Please merge trunk and push again pls.

review: Needs Fixing
Revision history for this message
Niklas Wenzel (nikwen) wrote :

Hey Nekhelesh,

I'm sorry for being a bit late.

The reason why I put the i18n.tr() calls in there is because there might be languages in which it is "2016 April" instead of "April 2016". I'm not sure about whether there are any such languages, but if we are already fixing translation issues, I'd prefer to make it as flexible as possible. Furthermore, in my opinion the i18n.tr() calls don't hurt anyone if no such languages exist.

I'll merge trunk now. :)

739. By Niklas Wenzel

Merge trunk

740. By Niklas Wenzel

Also fix bug in a new place where it has been introduced

741. By Niklas Wenzel

Readd newlines where accidently removed

742. By Niklas Wenzel

Empty commit to make LP rebuild the diff

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Niklas Wenzel (nikwen) wrote :

Finished merging. Thank you for your patience, Nekhelesh! :)

Revision history for this message
David Planella (dpm) wrote :

Thanks Niklas, and good work everyone!

On Wed, Apr 6, 2016 at 10:38 PM, Niklas Wenzel <email address hidden>
wrote:

> Finished merging. Thank you for your patience, Nekhelesh! :)
> --
>
> https://code.launchpad.net/~nikwen/ubuntu-calendar-app/fix-standalone-month-name-i18n/+merge/279509
> You are reviewing the proposed merge of
> lp:~nikwen/ubuntu-calendar-app/fix-standalone-month-name-i18n into
> lp:ubuntu-calendar-app.
>

Revision history for this message
Niklas Wenzel (nikwen) wrote :

Nekhelesh, would you mind having a look at this again? :)

Unmerged revisions

742. By Niklas Wenzel

Empty commit to make LP rebuild the diff

741. By Niklas Wenzel

Readd newlines where accidently removed

740. By Niklas Wenzel

Also fix bug in a new place where it has been introduced

739. By Niklas Wenzel

Merge trunk

738. By Niklas Wenzel

Merge trunk

737. By Niklas Wenzel

Remove qsTr() calls

736. By Niklas Wenzel

Remove id attribute that I used during testing

735. By Niklas Wenzel

Fix bad month translations for some languages, e.g. Polish

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'DayView.qml'
--- DayView.qml 2016-03-17 01:51:25 +0000
+++ DayView.qml 2016-04-06 20:33:43 +0000
@@ -116,11 +116,9 @@
116 currentDate.getDate())116 currentDate.getDate())
117 return ("%1 %2").arg(lunarDate .IMonthCn).arg(lunarDate.gzYear)117 return ("%1 %2").arg(lunarDate .IMonthCn).arg(lunarDate.gzYear)
118 } else {118 } else {
119 // TRANSLATORS: this is a time formatting string,119 // TRANSLATORS: This string is used in the headers of the month, week and day views.
120 // see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.120 // %1 is going to be replaced by the month name, %2 by the year.
121 // It's used in the header of the month and week views121 return i18n.tr("%1 %2").arg(Qt.locale().standaloneMonthName(currentDate.getMonth(), Locale.LongFormat)).arg(currentDate.getFullYear())
122 var monthName = currentDate.toLocaleString(Qt.locale(),i18n.tr("MMMM yyyy"))
123 return monthName[0].toUpperCase() + monthName.substr(1, monthName.length - 1)
124 }122 }
125 }123 }
126 }124 }
127125
=== modified file 'MonthView.qml'
--- MonthView.qml 2016-03-17 01:51:25 +0000
+++ MonthView.qml 2016-04-06 20:33:43 +0000
@@ -72,11 +72,9 @@
72 var lunarDate = Lunar.calendar.solar2lunar(year, month + 1, day)72 var lunarDate = Lunar.calendar.solar2lunar(year, month + 1, day)
73 return i18n.tr("%1 %2").arg(lunarDate .IMonthCn).arg(lunarDate.gzYear)73 return i18n.tr("%1 %2").arg(lunarDate .IMonthCn).arg(lunarDate.gzYear)
74 } else {74 } else {
75 // TRANSLATORS: this is a time formatting string,75 // TRANSLATORS: This string is used in the headers of the month, week and day views.
76 // see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.76 // %1 is going to be replaced by the month name, %2 by the year.
77 // It's used in the header of the month and week views77 return i18n.tr("%1 %2").arg(Qt.locale().standaloneMonthName(currentDate.getMonth(), Locale.LongFormat)).arg(currentDate.getFullYear())
78 var monthName = currentDate.toLocaleString(Qt.locale(),i18n.tr("MMMM yyyy"))
79 return monthName[0].toUpperCase() + monthName.substr(1, monthName.length - 1)
80 }78 }
81 }79 }
82 flickable: null80 flickable: null
8381
=== modified file 'WeekView.qml'
--- WeekView.qml 2016-03-17 01:51:25 +0000
+++ WeekView.qml 2016-04-06 20:33:43 +0000
@@ -130,19 +130,18 @@
130 currentDate.getDate())130 currentDate.getDate())
131 return i18n.tr("%1 %2").arg(lunarDate .IMonthCn).arg(lunarDate.gzYear)131 return i18n.tr("%1 %2").arg(lunarDate .IMonthCn).arg(lunarDate.gzYear)
132 } else {132 } else {
133 // TRANSLATORS: this is a time formatting string,
134 // see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.
135 // It's used in the header of the month and week views
136 var currentLastDayOfWeek = currentFirstDayOfWeek.addDays(7)133 var currentLastDayOfWeek = currentFirstDayOfWeek.addDays(7)
137 if (currentLastDayOfWeek.getMonth() !== currentFirstDayOfWeek.getMonth()) {134 if (currentLastDayOfWeek.getMonth() !== currentFirstDayOfWeek.getMonth()) {
138 var firstMonthName = currentFirstDayOfWeek.toLocaleString(Qt.locale(),i18n.tr("MMM"))135 // TRANSLATORS: This string is used in the header of the week view when the current week contains days from two different months.
139 var lastMonthName = currentLastDayOfWeek.toLocaleString(Qt.locale(),i18n.tr("MMM"))136 // %1 is going to be replaced by the first month's name, %2 by the second month's name and %3 by the year.
140 return (firstMonthName[0].toUpperCase() + firstMonthName.substr(1, 2) + "/" +137 return i18n.tr("%1/%2 %3")
141 lastMonthName[0].toUpperCase() + lastMonthName.substr(1, 2) + " " +138 .arg(Qt.locale().standaloneMonthName(currentFirstDayOfWeek.getMonth(), Locale.ShortFormat))
142 currentLastDayOfWeek.getFullYear())139 .arg(Qt.locale().standaloneMonthName(currentLastDayOfWeek.getMonth(), Locale.ShortFormat))
140 .arg(currentDate.getFullYear())
143 } else {141 } else {
144 var monthName = currentDate.toLocaleString(Qt.locale(),i18n.tr("MMMM yyyy"))142 // TRANSLATORS: This string is used in the headers of the month, week and day views.
145 return monthName[0].toUpperCase() + monthName.substr(1, monthName.length - 1)143 // %1 is going to be replaced by the month name, %2 by the year.
144 return i18n.tr("%1 %2").arg(Qt.locale().standaloneMonthName(currentDate.getMonth(), Locale.LongFormat)).arg(currentDate.getFullYear())
146 }145 }
147 }146 }
148 }147 }
149148
=== modified file 'po/com.ubuntu.calendar.pot'
--- po/com.ubuntu.calendar.pot 2016-03-23 03:59:15 +0000
+++ po/com.ubuntu.calendar.pot 2016-04-06 20:33:43 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: \n"9"Project-Id-Version: \n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2016-03-23 00:58-0300\n"11"POT-Creation-Date: 2016-04-06 22:28+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"
@@ -18,7 +18,7 @@
18"Content-Transfer-Encoding: 8bit\n"18"Content-Transfer-Encoding: 8bit\n"
19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"19"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
2020
21#: ../AgendaView.qml:50 ../calendar.qml:344 ../calendar.qml:57621#: ../AgendaView.qml:50 ../calendar.qml:348 ../calendar.qml:580
22msgid "Agenda"22msgid "Agenda"
23msgstr ""23msgstr ""
2424
@@ -104,7 +104,7 @@
104msgstr ""104msgstr ""
105105
106#: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:60106#: ../ColorPickerDialog.qml:55 ../DeleteConfirmationDialog.qml:60
107#: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:341107#: ../EditEventConfirmationDialog.qml:53 ../NewEvent.qml:328
108msgid "Cancel"108msgid "Cancel"
109msgstr ""109msgstr ""
110110
@@ -120,11 +120,12 @@
120msgid "Today"120msgid "Today"
121msgstr ""121msgstr ""
122122
123#. TRANSLATORS: this is a time formatting string,123#. TRANSLATORS: This string is used in the headers of the month, week and day views.
124#. see http://qt-project.org/doc/qt-5/qml-qtqml-date.html#details for valid expressions.124#. %1 is going to be replaced by the month name, %2 by the year.
125#. It's used in the header of the month and week views125#: ../DayView.qml:120 ../MonthView.qml:73 ../MonthView.qml:77
126#: ../DayView.qml:122 ../MonthView.qml:78 ../WeekView.qml:144126#: ../WeekView.qml:130 ../WeekView.qml:143
127msgid "MMMM yyyy"127#, qt-format
128msgid "%1 %2"
128msgstr ""129msgstr ""
129130
130#: ../DeleteConfirmationDialog.qml:31131#: ../DeleteConfirmationDialog.qml:31
@@ -154,11 +155,11 @@
154msgid "Delete this"155msgid "Delete this"
155msgstr ""156msgstr ""
156157
157#: ../DeleteConfirmationDialog.qml:51 ../NewEvent.qml:348158#: ../DeleteConfirmationDialog.qml:51 ../NewEvent.qml:335
158msgid "Delete"159msgid "Delete"
159msgstr ""160msgstr ""
160161
161#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:336162#: ../EditEventConfirmationDialog.qml:29 ../NewEvent.qml:323
162msgid "Edit Event"163msgid "Edit Event"
163msgstr ""164msgstr ""
164165
@@ -182,12 +183,12 @@
182183
183#. TRANSLATORS: the first argument (%1) refers to a start time for an event,184#. TRANSLATORS: the first argument (%1) refers to a start time for an event,
184#. while the second one (%2) refers to the end time185#. while the second one (%2) refers to the end time
185#: ../EventBubble.qml:100186#: ../EventBubble.qml:134
186#, qt-format187#, qt-format
187msgid "%1 - %2"188msgid "%1 - %2"
188msgstr ""189msgstr ""
189190
190#: ../EventDetails.qml:37 ../NewEvent.qml:484191#: ../EventDetails.qml:37 ../NewEvent.qml:493
191msgid "Event Details"192msgid "Event Details"
192msgstr ""193msgstr ""
193194
@@ -195,32 +196,32 @@
195msgid "Edit"196msgid "Edit"
196msgstr ""197msgstr ""
197198
198#: ../EventDetails.qml:164 ../TimeLineHeader.qml:66199#: ../EventDetails.qml:167 ../TimeLineHeader.qml:66
199msgid "All Day"200msgid "All Day"
200msgstr ""201msgstr ""
201202
202#: ../EventDetails.qml:336 ../NewEvent.qml:549203#: ../EventDetails.qml:339 ../NewEvent.qml:559
203#: com.ubuntu.calendar_calendar.desktop.in.in.h:1204#: com.ubuntu.calendar_calendar.desktop.in.in.h:1
204msgid "Calendar"205msgid "Calendar"
205msgstr ""206msgstr ""
206207
207#: ../EventDetails.qml:369208#: ../EventDetails.qml:372
208msgid "Not Attending"209msgid "Not Attending"
209msgstr ""210msgstr ""
210211
211#: ../EventDetails.qml:373212#: ../EventDetails.qml:376
212msgid "Attending"213msgid "Attending"
213msgstr ""214msgstr ""
214215
215#: ../EventDetails.qml:377216#: ../EventDetails.qml:380
216msgid "No Reply"217msgid "No Reply"
217msgstr ""218msgstr ""
218219
219#: ../EventDetails.qml:400 ../NewEvent.qml:515220#: ../EventDetails.qml:403 ../NewEvent.qml:525
220msgid "Description"221msgid "Description"
221msgstr ""222msgstr ""
222223
223#: ../EventDetails.qml:418 ../EventReminder.qml:36 ../NewEvent.qml:711224#: ../EventDetails.qml:421 ../NewEvent.qml:718 ../NewEvent.qml:757
224msgid "Reminder"225msgid "Reminder"
225msgstr ""226msgstr ""
226227
@@ -228,7 +229,7 @@
228#. and it is shown as the header of the page to choose repetition229#. and it is shown as the header of the page to choose repetition
229#. and as the header of the list item that shows the repetition230#. and as the header of the list item that shows the repetition
230#. summary in the page that displays the event details231#. summary in the page that displays the event details
231#: ../EventRepetition.qml:40 ../EventRepetition.qml:153232#: ../EventRepetition.qml:40 ../EventRepetition.qml:152
232msgid "Repeat"233msgid "Repeat"
233msgstr ""234msgstr ""
234235
@@ -236,18 +237,18 @@
236msgid "Repeats On:"237msgid "Repeats On:"
237msgstr ""238msgstr ""
238239
239#: ../EventRepetition.qml:217240#: ../EventRepetition.qml:218
240msgid "Recurring event ends"241msgid "Recurring event ends"
241msgstr ""242msgstr ""
242243
243#. TRANSLATORS: this refers to how often a recurrent event repeats244#. TRANSLATORS: this refers to how often a recurrent event repeats
244#. and it is shown as the header of the option selector to choose245#. and it is shown as the header of the option selector to choose
245#. its repetition246#. its repetition
246#: ../EventRepetition.qml:240 ../NewEvent.qml:685247#: ../EventRepetition.qml:242 ../NewEvent.qml:694
247msgid "Repeats"248msgid "Repeats"
248msgstr ""249msgstr ""
249250
250#: ../EventRepetition.qml:265251#: ../EventRepetition.qml:268
251msgid "Date"252msgid "Date"
252msgstr ""253msgstr ""
253254
@@ -288,60 +289,55 @@
288289
289#. TRANSLATORS: This is shown in the month view as "Wk" as a title290#. TRANSLATORS: This is shown in the month view as "Wk" as a title
290#. to indicate the week numbers. It should be a max of up to 3 characters.291#. to indicate the week numbers. It should be a max of up to 3 characters.
291#: ../MonthComponent.qml:317292#: ../MonthComponent.qml:316
292msgid "Wk"293msgid "Wk"
293msgstr ""294msgstr ""
294295
295#: ../MonthView.qml:73 ../WeekView.qml:131296#: ../NewEvent.qml:182
296#, qt-format
297msgid "%1 %2"
298msgstr ""
299
300#: ../NewEvent.qml:179
301msgid "End time can't be before start time"297msgid "End time can't be before start time"
302msgstr ""298msgstr ""
303299
304#: ../NewEvent.qml:336 ../NewEventBottomEdge.qml:53300#: ../NewEvent.qml:323 ../NewEventBottomEdge.qml:53
305msgid "New Event"301msgid "New Event"
306msgstr ""302msgstr ""
307303
308#: ../NewEvent.qml:365304#: ../NewEvent.qml:352
309msgid "Save"305msgid "Save"
310msgstr ""306msgstr ""
311307
312#: ../NewEvent.qml:376308#: ../NewEvent.qml:363
313msgid "Error"309msgid "Error"
314msgstr ""310msgstr ""
315311
316#: ../NewEvent.qml:378312#: ../NewEvent.qml:365
317msgid "OK"313msgid "OK"
318msgstr ""314msgstr ""
319315
320#: ../NewEvent.qml:438316#: ../NewEvent.qml:427
321msgid "From"317msgid "From"
322msgstr ""318msgstr ""
323319
324#: ../NewEvent.qml:451320#: ../NewEvent.qml:443
325msgid "To"321msgid "To"
326msgstr ""322msgstr ""
327323
328#: ../NewEvent.qml:468324#: ../NewEvent.qml:470
329msgid "All day event"325msgid "All day event"
330msgstr ""326msgstr ""
331327
332#: ../NewEvent.qml:497328#: ../NewEvent.qml:507
333msgid "Event Name"329msgid "Event Name"
334msgstr ""330msgstr ""
335331
336#: ../NewEvent.qml:534332#: ../NewEvent.qml:544
337msgid "Location"333msgid "Location"
338msgstr ""334msgstr ""
339335
340#: ../NewEvent.qml:589336#: ../NewEvent.qml:600
341msgid "Guests"337msgid "Guests"
342msgstr ""338msgstr ""
343339
344#: ../NewEvent.qml:598340#: ../NewEvent.qml:610
345msgid "Add Guest"341msgid "Add Guest"
346msgstr ""342msgstr ""
347343
@@ -450,8 +446,11 @@
450msgid "W%1"446msgid "W%1"
451msgstr ""447msgstr ""
452448
453#: ../WeekView.qml:138 ../WeekView.qml:139449#. TRANSLATORS: This string is used in the header of the week view when the current week contains days from two different months.
454msgid "MMM"450#. %1 is going to be replaced by the first month's name, %2 by the second month's name and %3 by the year.
451#: ../WeekView.qml:136
452#, qt-format
453msgid "%1/%2 %3"
455msgstr ""454msgstr ""
456455
457#: ../YearView.qml:79456#: ../YearView.qml:79
@@ -466,19 +465,19 @@
466"about them"465"about them"
467msgstr ""466msgstr ""
468467
469#: ../calendar.qml:312 ../calendar.qml:492468#: ../calendar.qml:316 ../calendar.qml:496
470msgid "Year"469msgid "Year"
471msgstr ""470msgstr ""
472471
473#: ../calendar.qml:320 ../calendar.qml:513472#: ../calendar.qml:324 ../calendar.qml:517
474msgid "Month"473msgid "Month"
475msgstr ""474msgstr ""
476475
477#: ../calendar.qml:328 ../calendar.qml:534476#: ../calendar.qml:332 ../calendar.qml:538
478msgid "Week"477msgid "Week"
479msgstr ""478msgstr ""
480479
481#: ../calendar.qml:336 ../calendar.qml:555480#: ../calendar.qml:340 ../calendar.qml:559
482msgid "Day"481msgid "Day"
483msgstr ""482msgstr ""
484483

Subscribers

People subscribed via source and target branches

to status/vote changes: