Merge lp:~dpm/ubuntu-rssreader-app/enable-translations into lp:~ubuntu-shorts-dev/ubuntu-rssreader-app/trunk

Proposed by David Planella on 2013-09-26
Status: Merged
Approved by: Roman Shchekin on 2013-09-27
Approved revision: 79
Merged at revision: 72
Proposed branch: lp:~dpm/ubuntu-rssreader-app/enable-translations
Merge into: lp:~ubuntu-shorts-dev/ubuntu-rssreader-app/trunk
Diff against target: 781 lines (+487/-66)
18 files modified
.bzrignore (+2/-1)
README.translations (+36/-0)
dateutils.js (+6/-0)
debian/changelog (+7/-0)
debian/control (+9/-9)
debian/rssreader-app.install (+9/-9)
debian/rules (+9/-0)
feeds/AppendFeedPage.qml (+2/-2)
feeds/ChooseTopicPage.qml (+1/-1)
feeds/CreateTopicPage.qml (+1/-1)
feeds/ManageFeedsPage.qml (+1/-1)
listview/ArticleListPage.qml (+1/-1)
po/po.pro (+44/-33)
po/rssreader-app.pot (+336/-0)
rssreader-app (+1/-1)
rssreader-app.desktop (+3/-3)
rssreader-app.qmlproject (+16/-1)
tests/autopilot/ubuntu_rssreader_app/tests/__init__.py (+3/-3)
To merge this branch: bzr merge lp:~dpm/ubuntu-rssreader-app/enable-translations
Reviewer Review Type Date Requested Status
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve on 2013-09-27
Ubuntu Shorts Developers 2013-09-26 Pending
Review via email: mp+187690@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

NOTE: if you do a review, feel free to approve/disapprove in the comments, but do not top-approve yet, as this needs to be coordinated with the package name change in the seeds.

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

To post a comment you must log in.
review: Approve (continuous-integration)
Joey Chan (qqworini) wrote :

Oh no... Roman, didn't u read the "Description of the Change" ? David said "do not top-approve" because of some reasons

David Planella (dpm) wrote :

Yes, please read the comments on the next occasion.

We'll sort it out, it's all good, but we need to do some extra coordination to get this landed, as it changes the package name.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2013-08-20 15:17:56 +0000
3+++ .bzrignore 2013-09-26 09:05:34 +0000
4@@ -5,4 +5,5 @@
5 debian/*.debhelper.log
6 debian/*.substvars
7 RE:\.?[^.]+
8-./ubuntu-rssreader-app.qmlproject
9+.build
10+po/Makefile
11
12=== added file 'README.translations'
13--- README.translations 1970-01-01 00:00:00 +0000
14+++ README.translations 2013-09-26 09:05:34 +0000
15@@ -0,0 +1,36 @@
16+# Updating translations
17+
18+Translations for the Shorts app happen in [Launchpad Translations][] and
19+are automatically committed daily on the trunk branch in the po/ folder.
20+
21+They are then built and installed as part of the package build, so that
22+developers don't really need to worry about them.
23+
24+However, there is one task that needs to be taken care of: exposing new
25+translatable messages to translators. So whenever you add new translatable
26+messages in the code, make sure to follow these steps:
27+
28+ 1. Change directory to the po/ folder: `cd po`
29+ 2. Update the translations template: `qmake && make pot`
30+ 3. Commit the generated .pot file: `bzr commit -m"Updated translation template"`
31+ 4. Push the branch and send a merge proposal as usual
32+
33+And that's it, once the branch lands Launchpad should take care of all the rest!
34+
35+# Behind the scenes
36+
37+Behind the scenes, whenever the po/*.pot file (also known as translations template)
38+is committed to trunk Launchpad reads it and updates the translatable strings
39+exposed in the web UI. This will enable translators to work on the new strings.
40+The translations template contains all translatable strings that have been
41+extracted from the source code files.
42+
43+Launchpad will then store translations in its database and will commit them daily
44+in the form of textual po/*.po files to trunk. The PO files are also usually
45+referred to as the translations files. You'll find a translation file for each
46+language the app has got at least a translated message available for.
47+
48+Translations for core apps follow the standard [gettext format].
49+
50+ [Launchpad Translations]: https://translations.launchpad.net/ubuntu-rssreader-app
51+ [gettext format]: https://www.gnu.org/software/gettext/
52
53=== modified file 'dateutils.js'
54--- dateutils.js 2013-09-04 15:34:28 +0000
55+++ dateutils.js 2013-09-26 09:05:34 +0000
56@@ -34,6 +34,8 @@
57 function formatRelativeTime(i18n, date) {
58 // fallback if none of the other formatters matched
59 function defaultFallbackFormat(then) {
60+ // TRANSLATORS: this is a time formatting string,
61+ // see http://qt-project.org/doc/qt-5.0/qtqml/qml-qtquick2-date.html#details for valid expressions
62 return Qt.formatDateTime(then, i18n.tr("MMMM d"))
63 }
64
65@@ -50,6 +52,8 @@
66 }
67 this.format = function (now, then, diff) {
68 return i18n.tr("Yesterday at %1").arg(
69+ /* TRANSLATORS: this is a time formatting string,
70+ see http://qt-project.org/doc/qt-5.0/qtqml/qml-qtquick2-date.html#details for valid expressions */
71 Qt.formatDateTime(then, i18n.tr("h:mm AP")))
72 }
73 }
74@@ -60,6 +64,8 @@
75 return diff < 7 * DAY_LIMIT
76 }
77 this.format = function (now, then, diff) {
78+ // TRANSLATORS: this is a time formatting string,
79+ // see http://qt-project.org/doc/qt-5.0/qtqml/qml-qtquick2-date.html#details for valid expressions
80 return Qt.formatDateTime(then, i18n.tr("ddd, h:mm AP"));
81 }
82 }
83
84=== modified file 'debian/changelog'
85--- debian/changelog 2013-02-12 16:27:23 +0000
86+++ debian/changelog 2013-09-26 09:05:34 +0000
87@@ -1,3 +1,10 @@
88+ubuntu-rssreader-app (0.2) saucy; urgency=low
89+
90+ * Added translations support, dropped ubuntu- prefix from desktop file
91+ and installation path
92+
93+ -- David Planella <david.planella@ubuntu.com> Thu, 26 Sep 2013 09:29:27 +0200
94+
95 ubuntu-rssreader-app (0.1) raring; urgency=low
96
97 * Initial release
98
99=== modified file 'debian/control'
100--- debian/control 2013-08-15 15:54:31 +0000
101+++ debian/control 2013-09-26 09:05:34 +0000
102@@ -1,30 +1,30 @@
103 Source: ubuntu-rssreader-app
104 Priority: extra
105 Maintainer: Ubuntu App Cats <ubuntu-touch-coreapps@lists.launchpad.net>
106-Build-Depends: debhelper (>= 9),
107+Build-Depends: debhelper (>= 9)
108 Standards-Version: 3.9.4
109 Section: misc
110 Homepage: https://launchpad.net/ubuntu-rssreader-app
111 Vcs-Bzr: https://code.launchpad.net/~ubuntu-rssreader-dev/ubuntu-rssreader-app/trunk
112
113-Package: ubuntu-rssreader-app
114-Section: misc
115+Package: rssreader-app
116 Architecture: all
117-Depends: ${misc:Depends},
118+Depends: libqt5webkit5-qmlwebkitplugin,
119 qmlscene,
120+ qtdeclarative5-localstorage-plugin,
121+ qtdeclarative5-qtquick2-plugin,
122 qtdeclarative5-ubuntu-ui-toolkit-plugin | qt-components-ubuntu,
123- qtdeclarative5-qtquick2-plugin,
124 qtdeclarative5-xmllistmodel-plugin,
125- libqt5webkit5-qmlwebkitplugin,
126- qtdeclarative5-localstorage-plugin,
127+ ${misc:Depends}
128 Description: RSS Reader application
129 Core RSS Reader application
130
131-Package: ubuntu-rssreader-app-autopilot
132+Package: rssreader-app-autopilot
133 Architecture: all
134 Depends: libautopilot-qt,
135 libqt5test5,
136+ rssreader-app (= ${source:Version}),
137 ubuntu-ui-toolkit-autopilot,
138- ubuntu-rssreader-app (= ${source:Version})
139+ ${misc:Depends}
140 Description: Autopilot tests for RSS reader Application
141 This package contains the autopilot tests for the RSS reader
142
143=== renamed file 'debian/ubuntu-rssreader-app-autopilot.install' => 'debian/rssreader-app-autopilot.install'
144=== renamed file 'debian/ubuntu-rssreader-app.install' => 'debian/rssreader-app.install'
145--- debian/ubuntu-rssreader-app.install 2013-08-10 09:29:03 +0000
146+++ debian/rssreader-app.install 2013-09-26 09:05:34 +0000
147@@ -1,9 +1,9 @@
148-ubuntu-rssreader-app usr/bin/
149-ubuntu-rssreader-app.desktop usr/share/applications/
150-*.qml usr/share/ubuntu-rssreader-app/
151-*.png usr/share/ubuntu-rssreader-app/
152-*.js usr/share/ubuntu-rssreader-app/
153-feeds usr/share/ubuntu-rssreader-app/
154-listview usr/share/ubuntu-rssreader-app/
155-article_items usr/share/ubuntu-rssreader-app/
156-icons_tmp usr/share/ubuntu-rssreader-app/
157\ No newline at end of file
158+*.js usr/share/rssreader-app/
159+*.png usr/share/rssreader-app/
160+*.qml usr/share/rssreader-app/
161+article_items usr/share/rssreader-app/
162+feeds usr/share/rssreader-app/
163+icons_tmp usr/share/rssreader-app/
164+listview usr/share/rssreader-app/
165+rssreader-app usr/bin/
166+rssreader-app.desktop usr/share/applications/
167
168=== modified file 'debian/rules'
169--- debian/rules 2013-04-11 21:21:44 +0000
170+++ debian/rules 2013-09-26 09:05:34 +0000
171@@ -9,3 +9,12 @@
172
173 override_dh_install:
174 dh_install --fail-missing
175+ appname=rssreader-app; \
176+ for pofile in $(shell find ./po -name "*.po"); do \
177+ pofilename="$${pofile##*/}"; \
178+ langcode="$${pofilename%.*}"; \
179+ localedir="debian/$$appname/usr/share/locale/$$langcode/LC_MESSAGES"; \
180+ mkdir -p $$localedir; \
181+ mofile="$$localedir/$$appname.mo"; \
182+ msgfmt -o $$mofile $$pofile; \
183+ done
184
185=== modified file 'feeds/AppendFeedPage.qml'
186--- feeds/AppendFeedPage.qml 2013-09-21 09:27:59 +0000
187+++ feeds/AppendFeedPage.qml 2013-09-26 09:05:34 +0000
188@@ -106,7 +106,7 @@
189 // No need to show dialog in case of abort.
190 if (result.responseStatus !== 0) {
191 PopupUtils.open(errorDialogComponent, appendFeedPage,
192- {"text" : i18n.tr("Failed to perform search feeds by keywords"),
193+ {"text" : i18n.tr("Failed to perform a feed search by keyword"),
194 "title" : i18n.tr("Search failed")})
195 console.log(JSON.stringify(result))
196 }
197@@ -133,7 +133,7 @@
198 // No need to show dialog in case of abort.
199 if (result.responseStatus !== 0) {
200 PopupUtils.open(errorDialogComponent, appendFeedPage,
201- {"text" : i18n.tr("Failed to perform search feed by url"),
202+ {"text" : i18n.tr("Failed to perform a feed search by URL"),
203 "title" : i18n.tr("Search failed")})
204 console.log(JSON.stringify(result))
205 }
206
207=== modified file 'feeds/ChooseTopicPage.qml'
208--- feeds/ChooseTopicPage.qml 2013-09-11 15:18:51 +0000
209+++ feeds/ChooseTopicPage.qml 2013-09-26 09:05:34 +0000
210@@ -120,7 +120,7 @@
211
212 if (dbResult.error) {
213 PopupUtils.open(errorDialogComponent, chooseTopicPage,
214- {"text" : i18n.tr("Topic with such name already exists"),
215+ {"text" : i18n.tr("A topic with this name already exists"),
216 "title" : i18n.tr("Warning")})
217 return
218 }
219
220=== modified file 'feeds/CreateTopicPage.qml'
221--- feeds/CreateTopicPage.qml 2013-08-19 19:38:53 +0000
222+++ feeds/CreateTopicPage.qml 2013-09-26 09:05:34 +0000
223@@ -57,7 +57,7 @@
224 var dbResult = DB.addTag(topicName)
225 if (dbResult.error) {
226 PopupUtils.open(errorDialogComponent, createTopicPage,
227- {"text" : i18n.tr("Topic with such name already exists"),
228+ {"text" : i18n.tr("A topic with this name already exists"),
229 "title" : i18n.tr("Warning")})
230 return
231 } else {
232
233=== modified file 'feeds/ManageFeedsPage.qml'
234--- feeds/ManageFeedsPage.qml 2013-08-29 12:04:41 +0000
235+++ feeds/ManageFeedsPage.qml 2013-09-26 09:05:34 +0000
236@@ -344,7 +344,7 @@
237 id: tfFeedUrl
238 anchors.horizontalCenter: parent.horizontalCenter
239 width: parent.width
240- placeholderText: isForEdit? i18n.tr("Enter new name here...") : i18n.tr("Enter url here...")
241+ placeholderText: isForEdit? i18n.tr("Type a new name here...") : i18n.tr("Type a URL here...")
242 }
243
244 Item {
245
246=== modified file 'listview/ArticleListPage.qml'
247--- listview/ArticleListPage.qml 2013-08-06 20:45:50 +0000
248+++ listview/ArticleListPage.qml 2013-09-26 09:05:34 +0000
249@@ -90,7 +90,7 @@
250 Label {
251 id: lblEmptyBase
252
253- text: i18n.tr("There are no articles in selected feed")
254+ text: i18n.tr("There are no articles in the selected feed")
255 anchors.centerIn: parent
256 visible: articleListModel.count == 0
257 fontSize: "large"
258
259=== modified file 'po/po.pro'
260--- po/po.pro 2013-02-12 16:18:48 +0000
261+++ po/po.pro 2013-09-26 09:05:34 +0000
262@@ -1,48 +1,59 @@
263+## This .pro file is used to create a Makefile with the necessary rules
264+## to create an initial translations template and to update it whenever
265+## there are new translatable strings in the project that are ready to be
266+## exposed to translators
267+##
268+## See the ../README.translations file for more information
269+
270 TEMPLATE = subdirs
271
272 PROJECTNAME = $$system(basename ../*.qmlproject)
273 PROJECTNAME = $$replace(PROJECTNAME,.qmlproject,)
274
275-SOURCECODE = ../*.qml
276+DESKTOPFILE = ../$${PROJECTNAME}.desktop
277+
278+SOURCECODE = ../*.qml \
279+ ../*.js \
280+ ../article_items/*.qml \
281+ ../feeds/*.qml \
282+ ../listview/*.qml
283+
284+BUILDDIR = ../.build
285+DESKTOPFILETEMP = $${BUILDDIR}/$${PROJECTNAME}.desktop.js
286
287 message("")
288 message(" Project Name: $$PROJECTNAME ")
289 message(" Source Code: $$SOURCECODE ")
290 message("")
291-message(" run 'make pot' to generate the pot file from source code. ")
292-message(" run 'make translate' to create a new translation (po) based on pot. ")
293-message(" run 'make mo' to generate the mo files from po files. ")
294-message(" run 'qmake; make install' to install the mo files. ")
295+message(" Run 'make pot' to generate the pot file from source code. ")
296 message("")
297
298-## generate pot file 'make pot'
299+## Generate pot file 'make pot'
300 potfile.target = pot
301-potfile.commands = xgettext -o $${PROJECTNAME}.pot --package-name $${PROJECTNAME} --qt --c++ --add-comments=TRANSLATORS --keyword=tr $${SOURCECODE}
302+potfile.commands = xgettext \
303+ -o $${PROJECTNAME}.pot \
304+ --copyright=\"Canonical Ltd. \" \
305+ --package-name $${PROJECTNAME} \
306+ --qt --c++ --add-comments=TRANSLATORS \
307+ --keyword=tr --keyword=tr:1,2 \
308+ $${SOURCECODE} $${DESKTOPFILETEMP}
309+potfile.depends = desktopfile
310 QMAKE_EXTRA_TARGETS += potfile
311
312-## poedit target for new translations 'make translate'
313-poedit.target = translate
314-poedit.commands = cp messages.pot new_language.po; poedit new_language.po
315-QMAKE_EXTRA_TARGETS += poedit
316-
317-## generate mo files 'make mo'
318-mofiles.target = mo
319-mofiles.commands = msgfmt *.po
320-QMAKE_EXTRA_TARGETS += mofiles
321-
322-## Installation steps for mo files. 'make install'
323-MO_FILES = $$system(ls *.mo)
324-
325-install_mo_commands =
326-for(mo_file, MO_FILES) {
327- mo_name = $$replace(mo_file,.mo,)
328- mo_targetpath = $(INSTALL_ROOT)/usr/share/locale/$${mo_name}/LC_MESSAGES
329- mo_target = $${mo_targetpath}/$${PROJECTNAME}.mo
330- !isEmpty(install_mo_commands): install_mo_commands += &&
331- install_mo_commands += test -d $$mo_targetpath || mkdir -p $$mo_targetpath
332- install_mo_commands += && cp $$mo_file $$mo_target
333-}
334-
335-install.commands = $$install_mo_commands
336-QMAKE_EXTRA_TARGETS += install
337-
338+## Do not use this rule directly. It's a dependency rule to
339+## generate an intermediate .js file to extract translatable
340+## strings from the .desktop file
341+desktopfile.target = desktopfile
342+desktopfile.commands = awk \'BEGIN { FS=\"=\" }; /Name/ {print \"var s = i18n.tr(\42\" \$$2 \"\42);\"}\' $${DESKTOPFILE} > $${DESKTOPFILETEMP}
343+desktopfile.depends = makebuilddir
344+QMAKE_EXTRA_TARGETS += desktopfile
345+
346+## Dependency rule to create the temporary build dir
347+makebuilddir.target = makebuilddir
348+makebuilddir.commands = mkdir -p $${BUILDDIR}
349+QMAKE_EXTRA_TARGETS += makebuilddir
350+
351+## Rule to clean the products of the build
352+clean.target = clean
353+clean.commands = rm -Rf $${BUILDDIR}
354+QMAKE_EXTRA_TARGETS += clean
355
356=== added file 'po/rssreader-app.pot'
357--- po/rssreader-app.pot 1970-01-01 00:00:00 +0000
358+++ po/rssreader-app.pot 2013-09-26 09:05:34 +0000
359@@ -0,0 +1,336 @@
360+# SOME DESCRIPTIVE TITLE.
361+# Copyright (C) YEAR Canonical Ltd.
362+# This file is distributed under the same license as the PACKAGE package.
363+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
364+#
365+#, fuzzy
366+msgid ""
367+msgstr ""
368+"Project-Id-Version: rssreader-app\n"
369+"Report-Msgid-Bugs-To: \n"
370+"POT-Creation-Date: 2013-09-26 09:12+0200\n"
371+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
372+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
373+"Language-Team: LANGUAGE <LL@li.org>\n"
374+"Language: \n"
375+"MIME-Version: 1.0\n"
376+"Content-Type: text/plain; charset=CHARSET\n"
377+"Content-Transfer-Encoding: 8bit\n"
378+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
379+
380+#: ../RssFeedPage.qml:50
381+msgid "Save"
382+msgstr ""
383+
384+#: ../RssFeedPage.qml:50
385+msgid "Unsave"
386+msgstr ""
387+
388+#: ../RssFeedPage.qml:73 ../listview/FeedListPage.qml:170
389+msgid "Open site"
390+msgstr ""
391+
392+#: ../rssreader-app.qml:115
393+msgid "Refresh"
394+msgstr ""
395+
396+#: ../rssreader-app.qml:129
397+msgid "Grid View"
398+msgstr ""
399+
400+#: ../rssreader-app.qml:129
401+msgid "List view"
402+msgstr ""
403+
404+#: ../rssreader-app.qml:142
405+msgid "Add reads"
406+msgstr ""
407+
408+#: ../rssreader-app.qml:153
409+msgid "Edit topics"
410+msgstr ""
411+
412+#: ../rssreader-app.qml:185 ../.build/rssreader-app.desktop.js:1
413+msgid "Shorts"
414+msgstr ""
415+
416+#: ../rssreader-app.qml:210
417+msgid "Saved"
418+msgstr ""
419+
420+#: ../rssreader-app.qml:244 ../feeds/AppendFeedPage.qml:14
421+#: ../feeds/ManageFeedsPage.qml:335
422+msgid "Add feeds"
423+msgstr ""
424+
425+#: ../rssreader-app.qml:301
426+msgid "Checking for new articles"
427+msgstr ""
428+
429+#: ../rssreader-app.qml:308 ../feeds/AppendFeedPage.qml:32
430+#: ../feeds/CreateTopicPage.qml:29 ../feeds/TopicManagement.qml:66
431+msgid "Cancel"
432+msgstr ""
433+
434+#: ../rssreader-app.qml:338
435+msgid "+ Add feeds"
436+msgstr ""
437+
438+#: ../rssreader-app.qml:357
439+msgid "Add online accounts"
440+msgstr ""
441+
442+#: ../rssreader-app.qml:364
443+msgid "Import subscriptions"
444+msgstr ""
445+
446+#: ../rssreader-app.qml:380
447+msgid "Ok"
448+msgstr ""
449+
450+#. TRANSLATORS: this is a time formatting string,
451+#. see http://qt-project.org/doc/qt-5.0/qtqml/qml-qtquick2-date.html#details for valid expressions
452+#: ../dateutils.js:39
453+msgid "MMMM d"
454+msgstr ""
455+
456+#: ../dateutils.js:54
457+#, qt-format
458+msgid "Yesterday at %1"
459+msgstr ""
460+
461+#. TRANSLATORS: this is a time formatting string,
462+#. see http://qt-project.org/doc/qt-5.0/qtqml/qml-qtquick2-date.html#details for valid expressions
463+#: ../dateutils.js:57
464+msgid "h:mm AP"
465+msgstr ""
466+
467+#. TRANSLATORS: this is a time formatting string,
468+#. see http://qt-project.org/doc/qt-5.0/qtqml/qml-qtquick2-date.html#details for valid expressions
469+#: ../dateutils.js:69
470+msgid "ddd, h:mm AP"
471+msgstr ""
472+
473+#: ../dateutils.js:76
474+msgid "A few seconds ago..."
475+msgstr ""
476+
477+#: ../dateutils.js:79
478+#, qt-format
479+msgid "%1 minute ago"
480+msgid_plural "%1 minutes ago"
481+msgstr[0] ""
482+msgstr[1] ""
483+
484+#: ../dateutils.js:83
485+#, qt-format
486+msgid "%1 hour ago"
487+msgid_plural "%1 hours ago"
488+msgstr[0] ""
489+msgstr[1] ""
490+
491+#: ../dateutils.js:89
492+#, qt-format
493+msgid "%1 day ago"
494+msgid_plural "%1 days ago"
495+msgstr[0] ""
496+msgstr[1] ""
497+
498+#: ../feeds/AppendFeedPage.qml:58
499+msgid "Next"
500+msgstr ""
501+
502+#: ../feeds/AppendFeedPage.qml:109
503+msgid "Failed to perform a feed search by keyword"
504+msgstr ""
505+
506+#: ../feeds/AppendFeedPage.qml:110 ../feeds/AppendFeedPage.qml:137
507+msgid "Search failed"
508+msgstr ""
509+
510+#: ../feeds/AppendFeedPage.qml:136
511+msgid "Failed to perform a feed search by URL"
512+msgstr ""
513+
514+#: ../feeds/AppendFeedPage.qml:173
515+msgid "Type a keyword or URL"
516+msgstr ""
517+
518+#: ../feeds/AppendFeedPage.qml:200
519+msgid "Search results"
520+msgstr ""
521+
522+#: ../feeds/AppendFeedPage.qml:242 ../feeds/CreateTopicPage.qml:157
523+msgid "No feeds"
524+msgstr ""
525+
526+#: ../feeds/ChooseTopicPage.qml:13
527+msgid "Choose topic"
528+msgstr ""
529+
530+#: ../feeds/ChooseTopicPage.qml:29
531+msgid "Previous"
532+msgstr ""
533+
534+#: ../feeds/ChooseTopicPage.qml:96
535+msgid "Add your new feeds to a topic"
536+msgstr ""
537+
538+#: ../feeds/ChooseTopicPage.qml:107
539+msgid " + New topic"
540+msgstr ""
541+
542+#: ../feeds/ChooseTopicPage.qml:123 ../feeds/CreateTopicPage.qml:60
543+msgid "A topic with this name already exists"
544+msgstr ""
545+
546+#: ../feeds/ChooseTopicPage.qml:124 ../feeds/ChooseTopicPage.qml:137
547+#: ../feeds/CreateTopicPage.qml:61
548+msgid "Warning"
549+msgstr ""
550+
551+#: ../feeds/ChooseTopicPage.qml:136
552+msgid "Topic name can't contain only whitespaces"
553+msgstr ""
554+
555+#: ../feeds/CreateTopicPage.qml:12
556+msgid "Create new topic"
557+msgstr ""
558+
559+#: ../feeds/CreateTopicPage.qml:43
560+msgid "Add topic"
561+msgstr ""
562+
563+#: ../feeds/CreateTopicPage.qml:108
564+msgid "Type topic name"
565+msgstr ""
566+
567+#: ../feeds/CreateTopicPage.qml:120
568+msgid "Select feeds (optional)"
569+msgstr ""
570+
571+#: ../feeds/EditFeed.qml:12
572+msgid "Edit Feed"
573+msgstr ""
574+
575+#: ../feeds/EditFeed.qml:31
576+msgid "Delete"
577+msgstr ""
578+
579+#: ../feeds/EditFeed.qml:46
580+msgid "Apply"
581+msgstr ""
582+
583+#: ../feeds/EditFeed.qml:120
584+msgid "Title: "
585+msgstr ""
586+
587+#: ../feeds/EditFeed.qml:141
588+msgid "URL: "
589+msgstr ""
590+
591+#: ../feeds/EditFeed.qml:156
592+msgid "Topic: "
593+msgstr ""
594+
595+#: ../feeds/ManageFeedsPage.qml:13
596+msgid "Feeds"
597+msgstr ""
598+
599+#: ../feeds/ManageFeedsPage.qml:62 ../feeds/ManageFeedsPage.qml:172
600+#: ../listview/FeedListPage.qml:49
601+msgid "No topic"
602+msgstr ""
603+
604+#: ../feeds/ManageFeedsPage.qml:103 ../feeds/ManageTopicsPage.qml:12
605+msgid "Topics"
606+msgstr ""
607+
608+#: ../feeds/ManageFeedsPage.qml:132
609+msgid "Move to..."
610+msgstr ""
611+
612+#: ../feeds/ManageFeedsPage.qml:146
613+msgid "Deselect"
614+msgstr ""
615+
616+#: ../feeds/ManageFeedsPage.qml:242
617+msgid "Append feed"
618+msgstr ""
619+
620+#: ../feeds/ManageFeedsPage.qml:296
621+msgid "Use toolbar to append feeds"
622+msgstr ""
623+
624+#: ../feeds/ManageFeedsPage.qml:335
625+msgid "Edit feed"
626+msgstr ""
627+
628+#: ../feeds/ManageFeedsPage.qml:347
629+msgid "Type a new name here..."
630+msgstr ""
631+
632+#: ../feeds/ManageFeedsPage.qml:347
633+msgid "Type a URL here..."
634+msgstr ""
635+
636+#: ../feeds/ManageFeedsPage.qml:360
637+msgid "Show in inbox"
638+msgstr ""
639+
640+#: ../feeds/ManageFeedsPage.qml:389 ../feeds/ManageTopicsPage.qml:114
641+#: ../listview/FeedListPage.qml:155
642+msgid "Edit"
643+msgstr ""
644+
645+#: ../feeds/ManageFeedsPage.qml:404 ../listview/FeedListPage.qml:179
646+msgid "Remove"
647+msgstr ""
648+
649+#: ../feeds/ManageTopicsPage.qml:122
650+msgid "Delete with feeds"
651+msgstr ""
652+
653+#: ../feeds/ManageTopicsPage.qml:139
654+msgid "Use toolbar to append topics"
655+msgstr ""
656+
657+#: ../feeds/TopicManagement.qml:13
658+msgid "Management"
659+msgstr ""
660+
661+#: ../feeds/TopicManagement.qml:48
662+msgid "Add Feed"
663+msgstr ""
664+
665+#: ../feeds/TopicManagement.qml:79
666+msgid "Confirm"
667+msgstr ""
668+
669+#: ../feeds/TopicManagement.qml:112
670+msgid "Add a Topic"
671+msgstr ""
672+
673+#: ../listview/ArticleListPage.qml:93
674+msgid "There are no articles in the selected feed"
675+msgstr ""
676+
677+#: ../listview/FeedListPage.qml:73
678+msgid "All articles"
679+msgstr ""
680+
681+#: ../listview/FeedListPage.qml:74
682+msgid "View news from all channels"
683+msgstr ""
684+
685+#: ../listview/FeedListPage.qml:140
686+msgid "Update"
687+msgstr ""
688+
689+#: ../listview/FeedListPage.qml:205
690+msgid "There are no RSS feeds to show"
691+msgstr ""
692+
693+#: ../listview/ListModePage.qml:220
694+msgid "There are no articles to show"
695+msgstr ""
696
697=== renamed file 'ubuntu-rssreader-app' => 'rssreader-app'
698--- ubuntu-rssreader-app 2013-04-11 21:21:44 +0000
699+++ rssreader-app 2013-09-26 09:05:34 +0000
700@@ -1,2 +1,2 @@
701 #!/bin/bash
702-qmlscene /usr/share/ubuntu-rssreader-app/ubuntu-rssreader-app.qml
703+qmlscene /usr/share/rssreader-app/rssreader-app.qml
704
705=== renamed file 'ubuntu-rssreader-app.desktop' => 'rssreader-app.desktop'
706--- ubuntu-rssreader-app.desktop 2013-08-29 11:38:46 +0000
707+++ rssreader-app.desktop 2013-09-26 09:05:34 +0000
708@@ -1,10 +1,10 @@
709 [Desktop Entry]
710-Encoding=UTF-8
711 Version=1.0
712 Type=Application
713 Terminal=false
714-Exec=qmlscene /usr/share/ubuntu-rssreader-app/ubuntu-rssreader-app.qml
715-Icon=/usr/share/ubuntu-rssreader-app/rssreader64.png
716+Exec=qmlscene /usr/share/rssreader-app/rssreader-app.qml
717+Icon=/usr/share/rssreader-app/rssreader64.png
718 Name=Shorts
719+Keywords=shorts;rss;reader
720 X-Ubuntu-Touch=true
721 X-Ubuntu-StageHint=SideStage
722
723=== renamed file 'ubuntu-rssreader-app.qml' => 'rssreader-app.qml'
724=== renamed file 'rssreader.qmlproject' => 'rssreader-app.qmlproject'
725--- rssreader.qmlproject 2013-07-24 21:19:03 +0000
726+++ rssreader-app.qmlproject 2013-09-26 09:05:34 +0000
727@@ -3,7 +3,7 @@
728 import QmlProject 1.1
729
730 Project {
731- mainFile: "ubuntu-rssreader-app.qml"
732+ mainFile: "rssreader-app.qml"
733
734 /* Include .qml, .js, and image files from current directory and subdirectories */
735 QmlFiles {
736@@ -15,6 +15,21 @@
737 ImageFiles {
738 directory: [".", "./icons_tmp"]
739 }
740+ /* Shows the desktop file in the project view */
741+ Files {
742+ filter: "*.desktop"
743+ }
744+ /* Shows the README files in the project view */
745+ Files {
746+ filter: "README*"
747+ }
748+ /* Shows the translation files and the .pro file used to generate the .pot template */
749+ Files {
750+ filter: "*.po*"
751+ }
752+ Files {
753+ filter: "*.pro"
754+ }
755 /* List of plugin directories passed to QML runtime */
756 importPaths: [ "." ,"/usr/lib/x86_64-linux-gnu/qt5/qml", "/usr/lib/i386-linux-gnu/qt5/qml/" ]
757 }
758
759=== modified file 'tests/autopilot/ubuntu_rssreader_app/tests/__init__.py'
760--- tests/autopilot/ubuntu_rssreader_app/tests/__init__.py 2013-09-06 01:46:41 +0000
761+++ tests/autopilot/ubuntu_rssreader_app/tests/__init__.py 2013-09-26 09:05:34 +0000
762@@ -43,7 +43,7 @@
763 else:
764 scenarios = [('with touch', dict(input_device_class=Touch))]
765
766- local_location = "../../ubuntu-rssreader-app.qml"
767+ local_location = "../../rssreader-app.qml"
768 sqlite_dir = os.path.expanduser(
769 "~/.local/share/Qt Project/QtQmlViewer/QML/OfflineStorage/Databases")
770 backup_dir = sqlite_dir + ".backup"
771@@ -75,9 +75,9 @@
772 def launch_test_installed(self):
773 self.app = self.launch_test_application(
774 "qmlscene",
775- "/usr/share/ubuntu-rssreader-app/ubuntu-rssreader-app.qml",
776+ "/usr/share/rssreader-app/rssreader-app.qml",
777 "--desktop_file_hint=/usr/share/applications/"
778- "ubuntu-rssreader-app.desktop",
779+ "rssreader-app.desktop",
780 app_type='qt',
781 emulator_base=toolkit_emulators.UbuntuUIToolkitEmulatorBase)
782

Subscribers

People subscribed via source and target branches