Merge lp:~dpm/music-app/enable-translations into lp:music-app/trusty

Proposed by David Planella
Status: Merged
Approved by: Victor Thompson
Approved revision: 145
Merged at revision: 223
Proposed branch: lp:~dpm/music-app/enable-translations
Merge into: lp:music-app/trusty
Diff against target: 758 lines (+545/-14)
14 files modified
.bzrignore (+2/-0)
MusicAlbums.qml (+1/-1)
MusicArtists.qml (+4/-3)
MusicPlaylists.qml (+9/-2)
MusicStart.qml (+1/-1)
README.translations (+36/-0)
debian/changelog (+7/-1)
debian/compat (+1/-1)
debian/control (+20/-4)
debian/rules (+12/-0)
music-app.desktop (+0/-1)
music-app.qmlproject (+15/-0)
po/music-app.pot (+379/-0)
po/po.pro (+58/-0)
To merge this branch: bzr merge lp:~dpm/music-app/enable-translations
Reviewer Review Type Date Requested Status
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Daniel Holm Approve
Review via email: mp+187691@code.launchpad.net

Commit message

Enable the translations infrastructure: expose translations in Launchpad and build/ship them in the Debian package.

Description of the change

Enable the translations infrastructure: expose translations in Launchpad and build/ship them in the Debian package.

To post a comment you must log in.
Revision history for this message
Victor Thompson (vthompson) wrote :

Looks great. Feel free to update the 'appVersion' property in music-app.qml since we'll certainly have time before Jenkins wakes up. (I think we're wearing him out--he's due a vacation in October)

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

On Thu, Sep 26, 2013 at 1:58 PM, Victor Thompson
<email address hidden>wrote:

> Looks great. Feel free to update the 'appVersion' property in
> music-app.qml since we'll certainly have time before Jenkins wakes up. (I
> think we're wearing him out--he's due a vacation in October)
>

Done, thanks for the hint. Yeah, it seems Jenkins has gone for a nap, we'll
get fginther to wake him up and make sure he can serve also past October :)

> --
> https://code.launchpad.net/~dpm/music-app/enable-translations/+merge/187691
> You are the owner of lp:~dpm/music-app/enable-translations.
>

Revision history for this message
Daniel Holm (danielholm) wrote :

It's time to get this started as well, so thanks for that, David :)

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

David, are these failing because of Autopilot? Did Nicholas or someone turn on Autopilot verification for commits? Tests will be broken until he has a solution to fake out grilo--he was optimistic today...

Also is this branch still needed after who/what pushed commit #132 to this project? Can we do anything for you?

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

Hi Victor,

I meant to talk to Nick yesterday to see what's going on with the tests. Not sure exactly why these were failing, as the only changes in the code were comments. I did update the packaging, though, but those changes were minimal and I tested them to work locally before pushing.

I'll check with him on Monday, as these changes have got no urgency for now.

To give you some context on where the r132 commit comes from: generally, the way translations work in Launchpad is that a music-app.pot file is committed to the code and then LP scans that and exposes the translatable messages from there in the Translations web UI [1]. This is the automated way and it's how the music app is set up.

However, there is a way to do a one-time manual upload of the music-app.pot file and get the translations exposed in the web UI as well. That's what I did: as there is little time available, I opened translations so that translators could do their work without having to wait for this MP to land.

As per the commit on r132, it came from Launchpad: I set up the project so that whenever there are new translations done on the web UI, they will be automatically committed to trunk once a day. I did some translations for Catalan to test the setup after I enabled translations in LP, so that's why you see the po/ca.po being automatically committed by Launchpad.

This branch essentially adds the .pot file to the code, so that it can be imported into Launchpad, and adds support for the Debian package to build the textual po/*.po files we'll get from Launchpad into the binary *.mo message catalogues that are used by gettext and the SDK to load translations at runtime.

So yes, the branch still needs to land in trunk. The README.translations file I included in the MP should also provide more info. For anything else that's not clear, please feel free to ask!

[1] https://translations.launchpad.net/music-app

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
David Planella (dpm) wrote :

This one needs merging with trunk after all the other landings that have
been happening. I'll take care of that.

On Wed, Oct 2, 2013 at 6:25 PM, Ubuntu Phone Apps Jenkins Bot <
<email address hidden>> wrote:

> Review: Needs Fixing continuous-integration
>
> FAILED: Autolanding.
> More details in the following jenkins job:
> http://91.189.93.70:8080/job/music-app-autolanding/173/
> Executed test runs:
> FAILURE:
> http://91.189.93.70:8080/job/music-app-precise-amd64-autolanding/172/console
> FAILURE:
> http://91.189.93.70:8080/job/music-app-quantal-amd64-autolanding/172/console
> FAILURE:
> http://91.189.93.70:8080/job/music-app-raring-amd64-autolanding/172/console
> FAILURE:
> http://91.189.93.70:8080/job/music-app-saucy-amd64-autolanding/172/console
>
> --
> https://code.launchpad.net/~dpm/music-app/enable-translations/+merge/187691
> You are the owner of lp:~dpm/music-app/enable-translations.
>

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
139. By David Planella

Merge from trunk

140. By David Planella

Merge from trunk again

141. By David Planella

Updated translation template

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
142. By David Planella

Some i18n improvements on plurals

143. By David Planella

Fixed duplicate messages typos

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
144. By David Planella

Merged from trunk

145. By David Planella

Updated translation template

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

I've rebased to trunk again and updated the translation template. Would someone help with a review and top-approval if appropriate? Thanks!

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2013-05-14 12:20:03 +0000
3+++ .bzrignore 2013-10-18 07:11:59 +0000
4@@ -1,2 +1,4 @@
5 *.qmlproject.user
6
7+.build
8+po/Makefile
9
10=== modified file 'MusicAlbums.qml'
11--- MusicAlbums.qml 2013-10-17 01:19:31 +0000
12+++ MusicAlbums.qml 2013-10-18 07:11:59 +0000
13@@ -225,7 +225,7 @@
14 anchors.right: parent.right
15 anchors.rightMargin: units.gu(1.5)
16 elide: Text.ElideRight
17- text: mainpage.year + " | " + albumTracksModel.model.count + i18n.tr(" songs")
18+ text: i18n.tr("%1 | %2 song", "%1 | %2 songs", albumTracksModel.model.count).arg(mainpage.year, albumTracksModel.model.count)
19 }
20 }
21
22
23=== modified file 'MusicArtists.qml'
24--- MusicArtists.qml 2013-10-15 23:39:22 +0000
25+++ MusicArtists.qml 2013-10-18 07:11:59 +0000
26@@ -144,7 +144,8 @@
27 anchors.right: parent.right
28 anchors.rightMargin: units.gu(1.5)
29 elide: Text.ElideRight
30- text: Library.getArtistCovers(artist).length + i18n.tr(" albums") // model for number of albums?
31+ // model for number of albums?
32+ text: i18n.tr("%1 album", "%1 albums", Library.getArtistCovers(artist).length).arg(Library.getArtistCovers(artist).length)
33 }
34
35 Label {
36@@ -159,7 +160,7 @@
37 anchors.right: parent.right
38 anchors.rightMargin: units.gu(1.5)
39 elide: Text.ElideRight
40- text: Library.getArtistTracks(artist).length + i18n.tr(" songs") //fix
41+ text: i18n.tr("%1 song", "%1 songs", Library.getArtistTracks(artist).length).arg(Library.getArtistTracks(artist).length)
42 }
43 onFocusChanged: {
44 }
45@@ -235,7 +236,7 @@
46 anchors.right: parent.right
47 anchors.rightMargin: units.gu(1.5)
48 elide: Text.ElideRight
49- text: artistTracksModel.model.count + i18n.tr(" songs")
50+ text: i18n.tr("%1 song", "%1 songs", artistTracksModel.model.count).arg(artistTracksModel.model.count)
51 }
52 Label {
53 id: albumArtist
54
55=== modified file 'MusicPlaylists.qml'
56--- MusicPlaylists.qml 2013-10-15 23:39:22 +0000
57+++ MusicPlaylists.qml 2013-10-18 07:11:59 +0000
58@@ -50,6 +50,7 @@
59 id: removePlaylistDialog
60 Dialog {
61 id: dialogueRemovePlaylist
62+ // TRANSLATORS: this is a title of a dialog with a prompt to delete a playlist
63 title: i18n.tr("Are you sure?")
64 text: i18n.tr("This will delete your playlist.")
65
66@@ -79,6 +80,7 @@
67 id: editPlaylistDialog
68 Dialog {
69 id: dialogueEditPlaylist
70+ // TRANSLATORS: this is a title of a dialog with a prompt to rename a playlist
71 title: i18n.tr("Change name")
72 text: i18n.tr("Enter the new name of the playlist.")
73 TextField {
74@@ -139,6 +141,8 @@
75 // page for the playlists
76 Page {
77 id: listspage
78+ // TRANSLATORS: this is the name of the playlists page shown in the tab header.
79+ // Remember to keep the translation short to fit the screen width
80 title: i18n.tr("Playlists")
81
82 onVisibleChanged: {
83@@ -237,7 +241,7 @@
84 elide: Text.ElideRight
85 fontSize: "x-small"
86 height: units.gu(1)
87- text: playlist.count + i18n.tr(" songs")
88+ text: i18n.tr("%1 song", "%1 songs", playlist.count).arg(playlist.count)
89 }
90 // playlist name
91 Label {
92@@ -344,6 +348,7 @@
93 anchors.leftMargin: units.gu(0.5)
94 color: styleMusic.common.white
95 fontSize: "small"
96+ // TRANSLATORS: this refers to editing a playlist
97 text: i18n.tr("Edit")
98 }
99 MouseArea {
100@@ -385,6 +390,7 @@
101 anchors.leftMargin: units.gu(0.5)
102 color: styleMusic.common.white
103 fontSize: "small"
104+ // TRANSLATORS: this refers to deleting a playlist
105 text: i18n.tr("Delete")
106 }
107 MouseArea {
108@@ -428,6 +434,7 @@
109 anchors.leftMargin: units.gu(0.5)
110 color: styleMusic.common.white
111 fontSize: "small"
112+ // TRANSLATORS: this refers to sharing a playlist
113 text: i18n.tr("Share")
114 }
115 MouseArea {
116@@ -564,7 +571,7 @@
117
118 Label {
119 id: playlistInfoCount
120- text: playlistlist.count + i18n.tr(" songs")
121+ text: i18n.tr("%1 song", "%1 songs", playlist.count).arg(playlist.count)
122 color: styleMusic.common.white
123 fontSize: "medium"
124 anchors.left: parent.left
125
126=== modified file 'MusicStart.qml'
127--- MusicStart.qml 2013-10-17 00:55:46 +0000
128+++ MusicStart.qml 2013-10-18 07:11:59 +0000
129@@ -232,7 +232,7 @@
130 anchors.rightMargin: units.gu(1)
131 color: styleMusic.nowPlaying.labelSecondaryColor
132 elide: Text.ElideRight
133- text: model.total + i18n.tr(" songs")
134+ text: i18n.tr("%1 song", "%1 songs", model.total).arg(model.total)
135 fontSize: "x-small"
136 }
137 }
138
139=== added file 'README.translations'
140--- README.translations 1970-01-01 00:00:00 +0000
141+++ README.translations 2013-10-18 07:11:59 +0000
142@@ -0,0 +1,36 @@
143+# Updating translations
144+
145+Translations for the Music app happen in [Launchpad Translations][] and
146+are automatically committed daily on the trunk branch in the po/ folder.
147+
148+They are then built and installed as part of the package build, so that
149+developers don't really need to worry about them.
150+
151+However, there is one task that needs to be taken care of: exposing new
152+translatable messages to translators. So whenever you add new translatable
153+messages in the code, make sure to follow these steps:
154+
155+ 1. Change directory to the po/ folder: `cd po`
156+ 2. Update the translations template: `qmake && make pot`
157+ 3. Commit the generated .pot file: `bzr commit -m"Updated translation template"`
158+ 4. Push the branch and send a merge proposal as usual
159+
160+And that's it, once the branch lands Launchpad should take care of all the rest!
161+
162+# Behind the scenes
163+
164+Behind the scenes, whenever the po/*.pot file (also known as translations template)
165+is committed to trunk Launchpad reads it and updates the translatable strings
166+exposed in the web UI. This will enable translators to work on the new strings.
167+The translations template contains all translatable strings that have been
168+extracted from the source code files.
169+
170+Launchpad will then store translations in its database and will commit them daily
171+in the form of textual po/*.po files to trunk. The PO files are also usually
172+referred to as the translations files. You'll find a translation file for each
173+language the app has got at least a translated message available for.
174+
175+Translations for core apps follow the standard [gettext format].
176+
177+ [Launchpad Translations]: https://translations.launchpad.net/music-app
178+ [gettext format]: https://www.gnu.org/software/gettext/
179
180=== modified file 'debian/changelog'
181--- debian/changelog 2013-10-11 04:22:29 +0000
182+++ debian/changelog 2013-10-18 07:11:59 +0000
183@@ -10,6 +10,12 @@
184
185 -- Daniel Holm <d.holmen@gmail.com> Thur, 10 Oct 2013 00:39:50 +0200
186
187+music-app (0.8) saucy; urgency=low
188+
189+ * Added support for building and shipping translations
190+
191+ -- David Planella <david.planella@ubuntu.com> Thu, 26 Sep 2013 09:52:47 +0200
192+
193 music-app (0.7) raring; urgency=low
194
195 * Now uses mediascanner.
196@@ -24,7 +30,7 @@
197 * Fixed issue with toolbar not showing up in Playlists tab.
198 * Clean up and smaller fixes.
199
200- -- Daniel Holm <d.holmen@gmail.com> Tat, 21 Sep 2013 14:41:50 +0200
201+ -- Daniel Holm <d.holmen@gmail.com> Sat, 21 Sep 2013 14:41:50 +0200
202
203 music-app (0.6) raring; urgency=low
204
205
206=== modified file 'debian/compat'
207--- debian/compat 2013-05-24 00:33:36 +0000
208+++ debian/compat 2013-10-18 07:11:59 +0000
209@@ -1,1 +1,1 @@
210-8
211+9
212
213=== modified file 'debian/control'
214--- debian/control 2013-10-16 22:14:53 +0000
215+++ debian/control 2013-10-18 07:11:59 +0000
216@@ -1,20 +1,36 @@
217 Source: music-app
218 Section: misc
219 Priority: extra
220-Maintainer: Michael <mhall119@ubuntu.com>
221-Build-Depends: debhelper (>= 8.0.0)
222+Maintainer: Ubuntu App Cats <ubuntu-touch-coreapps@lists.launchpad.net>
223+Build-Depends: debhelper (>= 9),
224+ qtdeclarative5-dev-tools,
225+ qt5-default,
226+ qtdeclarative5-qtquick2-plugin,
227 Standards-Version: 3.9.4
228 Homepage: https://launchpad.net/music-app
229+Vcs-Bzr: https://code.launchpad.net/~music-app-dev/music-app/trunk
230
231 Package: music-app
232 Architecture: all
233-Depends: ${misc:Depends},grilo-plugins-0.2-mediascanner,qtdeclarative5-qtgrilo0.1,qtdeclarative5-qtpowerd0.1 (>= 0.2~),qtdeclarative5-localstorage-plugin,qtdeclarative5-particles-plugin,qtdeclarative5-qtmultimedia-plugin,qtdeclarative5-qtquick2-plugin,qtdeclarative5-ubuntu-ui-toolkit-plugin|qt-components-ubuntu,qtdeclarative5-window-plugin,qtdeclarative5-xmllistmodel-plugin,${shlibs:Depends},qmlscene
234+Depends: ${misc:Depends},
235+ grilo-plugins-0.2-mediascanner,
236+ qtdeclarative5-qtgrilo0.1,
237+ qtdeclarative5-qtpowerd0.1 (>= 0.2~),
238+ qtdeclarative5-localstorage-plugin,
239+ qtdeclarative5-particles-plugin,
240+ qtdeclarative5-qtmultimedia-plugin,
241+ qtdeclarative5-qtquick2-plugin,
242+ qtdeclarative5-ubuntu-ui-toolkit-plugin,
243+ qtdeclarative5-window-plugin,
244+ qtdeclarative5-xmllistmodel-plugin,
245+ qmlscene
246 Description: Music player for Ubuntu Touch
247 Touch enabled music player for Ubuntu
248
249 Package: music-app-autopilot
250 Architecture: all
251-Depends: libautopilot-qt,
252+Depends: ${misc:Depends},
253+ libautopilot-qt,
254 libqt5test5,
255 python-mock,
256 music-app (= ${source:Version}),
257
258=== modified file 'debian/rules'
259--- debian/rules 2013-10-14 14:24:55 +0000
260+++ debian/rules 2013-10-18 07:11:59 +0000
261@@ -11,3 +11,15 @@
262
263 %:
264 dh $@
265+
266+override_dh_install:
267+ dh_install --fail-missing
268+ appname=music-app; \
269+ for pofile in $(shell find ./po -name "*.po"); do \
270+ pofilename="$${pofile##*/}"; \
271+ langcode="$${pofilename%.*}"; \
272+ localedir="debian/$$appname/usr/share/locale/$$langcode/LC_MESSAGES"; \
273+ mkdir -p $$localedir; \
274+ mofile="$$localedir/$$appname.mo"; \
275+ msgfmt -o $$mofile $$pofile; \
276+ done
277
278=== modified file 'music-app.desktop'
279--- music-app.desktop 2013-10-11 15:03:54 +0000
280+++ music-app.desktop 2013-10-18 07:11:59 +0000
281@@ -9,4 +9,3 @@
282 StartupNotify=true
283 X-Ubuntu-Single-Instance=true
284 X-Ubuntu-Touch=true
285-Name[sv_SE]=Musik
286
287=== modified file 'music-app.qmlproject'
288--- music-app.qmlproject 2013-06-08 00:56:58 +0000
289+++ music-app.qmlproject 2013-10-18 07:11:59 +0000
290@@ -15,6 +15,21 @@
291 ImageFiles {
292 directory: "."
293 }
294+ /* Shows the desktop file in the project view */
295+ Files {
296+ filter: "*.desktop"
297+ }
298+ /* Shows the README files in the project view */
299+ Files {
300+ filter: "README*"
301+ }
302+ /* Shows the translation files and the .pro file used to generate the .pot template */
303+ Files {
304+ filter: "*.po*"
305+ }
306+ Files {
307+ filter: "*.pro"
308+ }
309 /* List of plugin directories passed to QML runtime */
310 // importPaths: [ "../exampleplugin" ]
311 }
312
313=== added file 'po/music-app.pot'
314--- po/music-app.pot 1970-01-01 00:00:00 +0000
315+++ po/music-app.pot 2013-10-18 07:11:59 +0000
316@@ -0,0 +1,379 @@
317+# SOME DESCRIPTIVE TITLE.
318+# Copyright (C) YEAR Canonical Ltd.
319+# This file is distributed under the same license as the PACKAGE package.
320+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
321+#
322+#, fuzzy
323+msgid ""
324+msgstr ""
325+"Project-Id-Version: music-app\n"
326+"Report-Msgid-Bugs-To: \n"
327+"POT-Creation-Date: 2013-10-18 09:09+0200\n"
328+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
329+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
330+"Language-Team: LANGUAGE <LL@li.org>\n"
331+"Language: \n"
332+"MIME-Version: 1.0\n"
333+"Content-Type: text/plain; charset=CHARSET\n"
334+"Content-Transfer-Encoding: 8bit\n"
335+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
336+
337+#: ../LoginLastFM.qml:41 ../MusicSettings.qml:145 ../MusicSettings.qml:153
338+msgid "Last.fm"
339+msgstr ""
340+
341+#: ../LoginLastFM.qml:47
342+msgid "Login to be able to scrobble."
343+msgstr ""
344+
345+#: ../LoginLastFM.qml:55
346+msgid "Username"
347+msgstr ""
348+
349+#: ../LoginLastFM.qml:65
350+msgid "Password"
351+msgstr ""
352+
353+#: ../LoginLastFM.qml:87
354+msgid "Login"
355+msgstr ""
356+
357+#: ../LoginLastFM.qml:94
358+msgid "Trying to login..."
359+msgstr ""
360+
361+#: ../LoginLastFM.qml:108
362+msgid "Login Successful"
363+msgstr ""
364+
365+#: ../LoginLastFM.qml:114
366+msgid "Login Failed"
367+msgstr ""
368+
369+#: ../LoginLastFM.qml:120
370+msgid "You forgot to set your username and/or password"
371+msgstr ""
372+
373+#: ../MusicAlbums.qml:33 ../music-app.qml:919
374+msgid "Albums"
375+msgstr ""
376+
377+#: ../MusicAlbums.qml:228
378+#, qt-format
379+msgid "%1 | %2 song"
380+msgid_plural "%1 | %2 songs"
381+msgstr[0] ""
382+msgstr[1] ""
383+
384+#: ../MusicAlbums.qml:368 ../MusicArtists.qml:429 ../MusicNowPlaying.qml:643
385+#: ../MusicTracks.qml:279 ../music-app.qml:804
386+msgid "Add to playlist"
387+msgstr ""
388+
389+#: ../MusicAlbums.qml:386 ../MusicArtists.qml:447 ../MusicNowPlaying.qml:660
390+#: ../MusicTracks.qml:297 ../MusicaddtoPlaylist.qml:38 ../music-app.qml:815
391+msgid "Select playlist"
392+msgstr ""
393+
394+#: ../MusicAlbums.qml:414 ../MusicArtists.qml:475 ../MusicNowPlaying.qml:33
395+#: ../MusicTracks.qml:325
396+msgid "Queue"
397+msgstr ""
398+
399+#: ../MusicArtists.qml:39 ../music-app.qml:906
400+msgid "Artists"
401+msgstr ""
402+
403+#: ../MusicArtists.qml:148
404+#, qt-format
405+msgid "%1 album"
406+msgid_plural "%1 albums"
407+msgstr[0] ""
408+msgstr[1] ""
409+
410+#: ../MusicArtists.qml:163 ../MusicArtists.qml:239 ../MusicPlaylists.qml:244
411+#: ../MusicPlaylists.qml:574 ../MusicStart.qml:235
412+#, qt-format
413+msgid "%1 song"
414+msgid_plural "%1 songs"
415+msgstr[0] ""
416+msgstr[1] ""
417+
418+#: ../MusicArtists.qml:190
419+msgid "Tracks"
420+msgstr ""
421+
422+#. TRANSLATORS: this refers to sharing a playlist
423+#: ../MusicNowPlaying.qml:688 ../MusicPlaylists.qml:438
424+#: ../MusicPlaylists.qml:719 ../MusicTracks.qml:363
425+msgid "Share"
426+msgstr ""
427+
428+#. TRANSLATORS: this is a title of a dialog with a prompt to delete a playlist
429+#: ../MusicPlaylists.qml:54
430+msgid "Are you sure?"
431+msgstr ""
432+
433+#: ../MusicPlaylists.qml:55
434+msgid "This will delete your playlist."
435+msgstr ""
436+
437+#: ../MusicPlaylists.qml:58
438+msgid "Remove"
439+msgstr ""
440+
441+#: ../MusicPlaylists.qml:71 ../MusicPlaylists.qml:114 ../music-app.qml:866
442+msgid "Cancel"
443+msgstr ""
444+
445+#. TRANSLATORS: this is a title of a dialog with a prompt to rename a playlist
446+#: ../MusicPlaylists.qml:84
447+msgid "Change name"
448+msgstr ""
449+
450+#: ../MusicPlaylists.qml:85
451+msgid "Enter the new name of the playlist."
452+msgstr ""
453+
454+#: ../MusicPlaylists.qml:96
455+msgid "Change"
456+msgstr ""
457+
458+#: ../MusicPlaylists.qml:109
459+msgid "You didn't type in a name."
460+msgstr ""
461+
462+#. TRANSLATORS: this is the name of the playlists page shown in the tab header.
463+#. Remember to keep the translation short to fit the screen width
464+#: ../MusicPlaylists.qml:146 ../music-app.qml:946
465+msgid "Playlists"
466+msgstr ""
467+
468+#. TRANSLATORS: this refers to editing a playlist
469+#: ../MusicPlaylists.qml:352 ../MusicPlaylists.qml:643
470+msgid "Edit"
471+msgstr ""
472+
473+#. TRANSLATORS: this refers to deleting a playlist
474+#: ../MusicPlaylists.qml:394 ../MusicPlaylists.qml:680
475+msgid "Delete"
476+msgstr ""
477+
478+#: ../MusicPlaylists.qml:480
479+msgid "Playlist"
480+msgstr ""
481+
482+#: ../MusicSettings.qml:30 ../music-app.qml:103
483+msgid "Settings"
484+msgstr ""
485+
486+#: ../MusicSettings.qml:81
487+msgid "Equaliser"
488+msgstr ""
489+
490+#: ../MusicSettings.qml:82
491+msgid "Default"
492+msgstr ""
493+
494+#: ../MusicSettings.qml:83
495+msgid "Accoustic"
496+msgstr ""
497+
498+#: ../MusicSettings.qml:84
499+msgid "Classical"
500+msgstr ""
501+
502+#: ../MusicSettings.qml:85
503+msgid "Electronic"
504+msgstr ""
505+
506+#: ../MusicSettings.qml:86
507+msgid "Flat"
508+msgstr ""
509+
510+#: ../MusicSettings.qml:87
511+msgid "Hip Hop"
512+msgstr ""
513+
514+#: ../MusicSettings.qml:88
515+msgid "Jazz"
516+msgstr ""
517+
518+#: ../MusicSettings.qml:89
519+msgid "Metal"
520+msgstr ""
521+
522+#: ../MusicSettings.qml:90
523+msgid "Pop"
524+msgstr ""
525+
526+#: ../MusicSettings.qml:91
527+msgid "Rock"
528+msgstr ""
529+
530+#: ../MusicSettings.qml:92
531+msgid "Custom"
532+msgstr ""
533+
534+#: ../MusicSettings.qml:112
535+msgid ""
536+"Snap to current song \n"
537+"when opening toolbar"
538+msgstr ""
539+
540+#: ../MusicSettings.qml:132
541+msgid "Accounts"
542+msgstr ""
543+
544+#: ../MusicSettings.qml:146
545+msgid "Login to scrobble and import playlists"
546+msgstr ""
547+
548+#: ../MusicSettings.qml:169
549+msgid "Music Streaming"
550+msgstr ""
551+
552+#: ../MusicSettings.qml:179
553+msgid "Ubuntu One"
554+msgstr ""
555+
556+#: ../MusicSettings.qml:180
557+msgid "Sign in to stream your cloud music"
558+msgstr ""
559+
560+#: ../MusicSettings.qml:196
561+msgid "Stream only on Wi-Fi"
562+msgstr ""
563+
564+#: ../MusicSettings.qml:230
565+msgid "Clean everything!"
566+msgstr ""
567+
568+#: ../MusicStart.qml:32 ../MusicTracks.qml:40 ../music-app.qml:209
569+#: ../music-app.qml:893 ../.build/music-app.desktop.js:1
570+msgid "Music"
571+msgstr ""
572+
573+#: ../MusicStart.qml:43
574+msgid "Recent"
575+msgstr ""
576+
577+#: ../MusicStart.qml:157
578+msgid "Genres"
579+msgstr ""
580+
581+#: ../MusicToolbar.qml:284
582+msgid "No songs queued"
583+msgstr ""
584+
585+#: ../MusicToolbar.qml:294
586+msgid "Tap on a song to start playing"
587+msgstr ""
588+
589+#: ../MusicaddtoPlaylist.qml:160
590+msgid "New playlist"
591+msgstr ""
592+
593+#: ../music-app.qml:65
594+msgid "Next"
595+msgstr ""
596+
597+#: ../music-app.qml:66
598+msgid "Next Track"
599+msgstr ""
600+
601+#: ../music-app.qml:72
602+msgid "Pause"
603+msgstr ""
604+
605+#: ../music-app.qml:72
606+msgid "Play"
607+msgstr ""
608+
609+#: ../music-app.qml:74
610+msgid "Pause Playback"
611+msgstr ""
612+
613+#: ../music-app.qml:74
614+msgid "Continue or start playback"
615+msgstr ""
616+
617+#: ../music-app.qml:85
618+msgid "Previous"
619+msgstr ""
620+
621+#: ../music-app.qml:86
622+msgid "Previous Track"
623+msgstr ""
624+
625+#: ../music-app.qml:91
626+msgid "Stop"
627+msgstr ""
628+
629+#: ../music-app.qml:92
630+msgid "Stop Playback"
631+msgstr ""
632+
633+#: ../music-app.qml:97
634+msgid "Back"
635+msgstr ""
636+
637+#: ../music-app.qml:98
638+msgid "Go back to last page"
639+msgstr ""
640+
641+#: ../music-app.qml:104
642+msgid "Music Settings"
643+msgstr ""
644+
645+#: ../music-app.qml:112
646+msgid "Quit"
647+msgstr ""
648+
649+#: ../music-app.qml:113
650+msgid "Close application"
651+msgstr ""
652+
653+#: ../music-app.qml:252
654+msgid "Debug: "
655+msgstr ""
656+
657+#: ../music-app.qml:790
658+msgid "Add to queue"
659+msgstr ""
660+
661+#: ../music-app.qml:828
662+msgid "New Playlist"
663+msgstr ""
664+
665+#: ../music-app.qml:829
666+msgid "Name your playlist."
667+msgstr ""
668+
669+#: ../music-app.qml:832
670+msgid "Name"
671+msgstr ""
672+
673+#: ../music-app.qml:840
674+msgid "Create"
675+msgstr ""
676+
677+#: ../music-app.qml:855
678+msgid "Error: "
679+msgstr ""
680+
681+#: ../music-app.qml:860
682+msgid "Error: You didn't type a name."
683+msgstr ""
684+
685+#: ../music-app.qml:932
686+msgid "Songs"
687+msgstr ""
688+
689+#: ../common/LoadingSpinnerComponent.qml:43
690+msgid "Loading..."
691+msgstr ""
692+
693+#: ../common/SwipeDelete.qml:60 ../common/SwipeDelete.qml:81
694+msgid "Clear"
695+msgstr ""
696
697=== added file 'po/po.pro'
698--- po/po.pro 1970-01-01 00:00:00 +0000
699+++ po/po.pro 2013-10-18 07:11:59 +0000
700@@ -0,0 +1,58 @@
701+## This .pro file is used to create a Makefile with the necessary rules
702+## to create an initial translations template and to update it whenever
703+## there are new translatable strings in the project that are ready to be
704+## exposed to translators
705+##
706+## See the ../README.translations file for more information
707+
708+TEMPLATE = subdirs
709+
710+PROJECTNAME = $$system(basename ../*.qmlproject)
711+PROJECTNAME = $$replace(PROJECTNAME,.qmlproject,)
712+
713+DESKTOPFILE = ../$${PROJECTNAME}.desktop
714+
715+SOURCECODE = ../*.qml \
716+ ../*.js \
717+ ../common/*.qml
718+
719+BUILDDIR = ../.build
720+DESKTOPFILETEMP = $${BUILDDIR}/$${PROJECTNAME}.desktop.js
721+
722+message("")
723+message(" Project Name: $$PROJECTNAME ")
724+message(" Source Code: $$SOURCECODE ")
725+message("")
726+message(" Run 'make pot' to generate the pot file from source code. ")
727+message("")
728+
729+## Generate pot file 'make pot'
730+potfile.target = pot
731+potfile.commands = xgettext \
732+ -o $${PROJECTNAME}.pot \
733+ --copyright=\"Canonical Ltd. \" \
734+ --package-name $${PROJECTNAME} \
735+ --qt --c++ --add-comments=TRANSLATORS \
736+ --keyword=tr --keyword=tr:1,2 \
737+ $${SOURCECODE} $${DESKTOPFILETEMP}
738+potfile.depends = desktopfile
739+QMAKE_EXTRA_TARGETS += potfile
740+
741+## Do not use this rule directly. It's a dependency rule to
742+## generate an intermediate .js file to extract translatable
743+## strings from the .desktop file
744+desktopfile.target = desktopfile
745+desktopfile.commands = awk \'BEGIN { FS=\"=\" }; /Name/ {print \"var s = i18n.tr(\42\" \$$2 \"\42);\"}\' $${DESKTOPFILE} > $${DESKTOPFILETEMP}
746+desktopfile.depends = makebuilddir
747+QMAKE_EXTRA_TARGETS += desktopfile
748+
749+## Dependency rule to create the temporary build dir
750+makebuilddir.target = makebuilddir
751+makebuilddir.commands = mkdir -p $${BUILDDIR}
752+QMAKE_EXTRA_TARGETS += makebuilddir
753+
754+## Rule to clean the products of the build
755+clean.target = clean
756+clean.commands = rm -Rf $${BUILDDIR}
757+QMAKE_EXTRA_TARGETS += clean
758+

Subscribers

People subscribed via source and target branches

to status/vote changes: