Merge lp://staging/~danilo/launchpad/complex-forms into lp://staging/launchpad
- complex-forms
- Merge into devel
Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Merged at revision: | not available | ||||||||
Proposed branch: | lp://staging/~danilo/launchpad/complex-forms | ||||||||
Merge into: | lp://staging/launchpad | ||||||||
Diff against target: | None lines | ||||||||
To merge this branch: | bzr merge lp://staging/~danilo/launchpad/complex-forms | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jeroen T. Vermeulen (community) | Approve | ||
Review via email: mp+11047@code.staging.launchpad.net |
Commit message
Description of the change
Данило Шеган (danilo) wrote : | # |
Jeroen T. Vermeulen (jtv) wrote : | # |
Hi Danilo,
Sheer poetry. My main gripe—because I just _had_ to find one!—is that
you didn't turn the icons into sprites. Any chance of getting that in?
Also, in productseries-
links to branches the painful way, complete with icons. I was probably
guilty of that myself in the case of the export branch. Can't we use
fmt:link for these?
All this will break some pagetests, but I heard it will make our hair
glow with natural beauty and make our cars use less gasoline.
As for the whitespace cleanup: are you out to prove that emacs is good
for this? Not that I'd mind if you were. :-)
Jeroen
Данило Шеган (danilo) wrote : | # |
У сре, 02. 09 2009. у 13:08 +0000, Jeroen T. Vermeulen пише:
> Sheer poetry. My main gripe—because I just _had_ to find one!—is that
> you didn't turn the icons into sprites. Any chance of getting that
> in?
Sure, done that now.
> Also, in productseries-
> composes links to branches the painful way, complete with icons. I
> was probably guilty of that myself in the case of the export branch.
> Can't we use fmt:link for these?
Yeah, I did this, but that one of yours caused me the most trouble: you
set an ID on it, and then used that in a pagetest. When using fmt:link,
you can't do that, and there's no getLink() on anything other than the
browser. Doing browser.
helped so I resorted to using browser.
worked, but it was an exercise in its own right.
> All this will break some pagetests, but I heard it will make our hair
> glow with natural beauty and make our cars use less gasoline.
If our cars use less gasoline, what are we going to do with what we are
left on Earth? It's not like we can eat it so we should better spend it
all.
> As for the whitespace cleanup: are you out to prove that emacs is good
> for this? Not that I'd mind if you were. :-)
Nah, I wasn't actually expecting you to review this :)
Preview Diff
1 | === removed directory 'lib/canonical/launchpad/pagetests/distroseries' |
2 | === modified file 'lib/canonical/launchpad/pagetitles.py' |
3 | --- lib/canonical/launchpad/pagetitles.py 2009-09-01 11:09:53 +0000 |
4 | +++ lib/canonical/launchpad/pagetitles.py 2009-09-01 11:38:24 +0000 |
5 | @@ -943,9 +943,6 @@ |
6 | |
7 | productseries_translations_settings = 'Settings for translations' |
8 | |
9 | -productseries_translations_bzr_import = ( |
10 | - 'Request translations import from Bazaar branch') |
11 | - |
12 | project_add = 'Register a project group with Launchpad' |
13 | |
14 | project_index = ContextTitle('%s in Launchpad') |
15 | |
16 | === modified file 'lib/lp/translations/browser/productseries.py' |
17 | --- lib/lp/translations/browser/productseries.py 2009-08-31 14:29:30 +0000 |
18 | +++ lib/lp/translations/browser/productseries.py 2009-09-01 11:38:24 +0000 |
19 | @@ -435,6 +435,17 @@ |
20 | schema = IProductSeries |
21 | field_names = [] |
22 | |
23 | + label = "Request one-time import of translations" |
24 | + |
25 | + @property |
26 | + def next_url(self): |
27 | + return canonical_url(self.context) |
28 | + |
29 | + @property |
30 | + def page_title(self): |
31 | + return "One-time import of %s %s translations from bazaar" % ( |
32 | + self.context.product.displayname, self.context.displayname) |
33 | + |
34 | def __init__(self, context, request): |
35 | super(ProductSeriesTranslationsBzrImportView, self).__init__( |
36 | context, request) |
37 | |
38 | === modified file 'lib/lp/translations/browser/translationimportqueue.py' |
39 | --- lib/lp/translations/browser/translationimportqueue.py 2009-08-31 22:18:05 +0000 |
40 | +++ lib/lp/translations/browser/translationimportqueue.py 2009-09-01 19:36:28 +0000 |
41 | @@ -111,10 +111,36 @@ |
42 | return field_values |
43 | |
44 | @property |
45 | + def cancel_url(self): |
46 | + """See `LaunchpadFormView`.""" |
47 | + referrer = self.referrer_url |
48 | + if referrer is None: |
49 | + translationimportqueue_set = getUtility(ITranslationImportQueue) |
50 | + return canonical_url(translationimportqueue_set) |
51 | + else: |
52 | + return referrer |
53 | + |
54 | + @property |
55 | + def referrer_url(self): |
56 | + referrer = self.request.getHeader('referer') |
57 | + if referrer != canonical_url(self.context): |
58 | + return referrer |
59 | + else: |
60 | + return None |
61 | + |
62 | + @property |
63 | def next_url(self): |
64 | - """Return the URL of the main import queue at 'rosetta/imports'.""" |
65 | - translationimportqueue_set = getUtility(ITranslationImportQueue) |
66 | - return canonical_url(translationimportqueue_set) |
67 | + """See `LaunchpadFormView`.""" |
68 | + # The referer header we want is only available before the view's |
69 | + # form submits to itself. This field is a hidden input in the form. |
70 | + referrer = self.request.form.get('next_url') |
71 | + |
72 | + if (referrer is not None |
73 | + and referrer.startswith(self.request.getApplicationURL())): |
74 | + return referrer |
75 | + else: |
76 | + translationimportqueue_set = getUtility(ITranslationImportQueue) |
77 | + return canonical_url(translationimportqueue_set) |
78 | |
79 | def initialize(self): |
80 | """Remove some fields based on the entry handled.""" |
81 | |
82 | === renamed file 'lib/canonical/launchpad/pagetests/distroseries/xx-distroseries-language-packs.txt' => 'lib/lp/translations/stories/distroseries/xx-distroseries-language-packs.txt' |
83 | --- lib/canonical/launchpad/pagetests/distroseries/xx-distroseries-language-packs.txt 2009-04-24 09:15:26 +0000 |
84 | +++ lib/lp/translations/stories/distroseries/xx-distroseries-language-packs.txt 2009-09-01 21:12:37 +0000 |
85 | @@ -54,7 +54,7 @@ |
86 | >>> print extract_text(find_tag_by_id(browser.contents, "language_packs")) |
87 | Language packs for Ubuntu 5.04 |
88 | ... |
89 | - Current language packs |
90 | + Active language packs |
91 | Base pack: 2007-09-10 19:16:01 UTC |
92 | A complete set of translations for the OS. |
93 | Delta pack: |
94 | @@ -63,9 +63,9 @@ |
95 | Language pack being tested |
96 | No pack is being tested right now. |
97 | Currently unused language packs |
98 | - Delta language pack: 2007-09-10 19:15:19 UTC . |
99 | - Delta language pack: 2007-09-10 19:15:01 UTC . |
100 | - Full language pack: 2007-09-10 19:14:26 UTC . |
101 | + Delta language pack: 2007-09-10 19:15:19 UTC |
102 | + Delta language pack: 2007-09-10 19:15:01 UTC |
103 | + Full language pack: 2007-09-10 19:14:26 UTC |
104 | |
105 | There is also an option to set/unset whether next language pack generation is |
106 | a full export: |
107 | |
108 | === added directory 'lib/lp/translations/stories/importqueue' |
109 | === renamed file 'lib/lp/translations/stories/standalone/empty.tar.bz2' => 'lib/lp/translations/stories/importqueue/empty.tar.bz2' |
110 | === renamed file 'lib/lp/translations/stories/standalone/truncated.tar.bz2' => 'lib/lp/translations/stories/importqueue/truncated.tar.bz2' |
111 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-edit-autofilling.tar.gz' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.tar.gz' |
112 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-edit-autofilling.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.txt' |
113 | --- lib/lp/translations/stories/standalone/xx-translation-import-queue-edit-autofilling.txt 2009-08-30 20:27:52 +0000 |
114 | +++ lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.txt 2009-09-01 21:03:51 +0000 |
115 | @@ -7,7 +7,7 @@ |
116 | >>> import os.path |
117 | >>> test_file_name = os.path.join( |
118 | ... os.path.dirname(lp.translations.__file__), |
119 | - ... 'stories/standalone/xx-translation-import-queue-edit-autofilling.tar.gz') |
120 | + ... 'stories/importqueue/xx-translation-import-queue-edit-autofilling.tar.gz') |
121 | >>> tarball = open(test_file_name) |
122 | |
123 | >>> browser = setupBrowser(auth='Basic carlos@canonical.com:test') |
124 | |
125 | === added file 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt' |
126 | --- lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt 1970-01-01 00:00:00 +0000 |
127 | +++ lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt 2009-09-01 20:06:37 +0000 |
128 | @@ -0,0 +1,43 @@ |
129 | +TranslationImportQueueEntry page |
130 | +================================ |
131 | + |
132 | +Submission and cancellation links |
133 | +--------------------------------- |
134 | + |
135 | +If we load an import queue entry directly from the global import queue and |
136 | +approve it, we end up back on the global translations import queue. |
137 | + |
138 | +XXX DaniloSegan 2009-09-01: due to Zope bug #98437 we can't test that |
139 | +this works properly when no "referer" header is sent. |
140 | + |
141 | + >>> admin_browser.open('http://translations.launchpad.dev/+imports') |
142 | + >>> admin_browser.getLink(url='imports/1').click() |
143 | + >>> print admin_browser.getLink('Cancel').url |
144 | + http://translations.launchpad.dev/+imports |
145 | + >>> admin_browser.getControl('Approve').click() |
146 | + >>> print admin_browser.url |
147 | + http://translations.launchpad.dev/+imports |
148 | + |
149 | +Going to the same entry from the Evolution import queue, and then approving |
150 | +it, brings us back to the Evolution import queue. |
151 | + |
152 | + >>> admin_browser.open( |
153 | + ... 'http://translations.launchpad.dev/evolution/+imports') |
154 | + >>> admin_browser.getLink(url='imports/1').click() |
155 | + >>> print admin_browser.getLink('Cancel').url |
156 | + http://translations.launchpad.dev/evolution/+imports |
157 | + >>> admin_browser.getControl('Approve').click() |
158 | + >>> print admin_browser.url |
159 | + http://translations.launchpad.dev/evolution/+imports |
160 | + |
161 | +Similarly, if we go to an import queue entry through the user's import |
162 | +queue, after approving the entry we are back looking at user's import queue. |
163 | + |
164 | + >>> admin_browser.open( |
165 | + ... 'http://translations.launchpad.dev/~name16/+imports') |
166 | + >>> admin_browser.getLink(url='imports/1').click() |
167 | + >>> print admin_browser.getLink('Cancel').url |
168 | + http://translations.launchpad.dev/~name16/+imports |
169 | + >>> admin_browser.getControl('Approve').click() |
170 | + >>> print admin_browser.url |
171 | + http://translations.launchpad.dev/~name16/+imports |
172 | |
173 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-filtering.tar.gz' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.tar.gz' |
174 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-filtering.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.txt' |
175 | --- lib/lp/translations/stories/standalone/xx-translation-import-queue-filtering.txt 2009-08-30 20:27:52 +0000 |
176 | +++ lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.txt 2009-09-01 21:03:51 +0000 |
177 | @@ -10,7 +10,7 @@ |
178 | >>> import os.path |
179 | >>> test_file_name = os.path.join( |
180 | ... os.path.dirname(lp.translations.__file__), |
181 | - ... 'stories/standalone/xx-translation-import-queue-filtering.tar.gz') |
182 | + ... 'stories/importqueue/xx-translation-import-queue-filtering.tar.gz') |
183 | >>> tarball = open(test_file_name) |
184 | |
185 | Our star for this session is Carlos, who has full access rights to the |
186 | |
187 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue-targets.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-targets.txt' |
188 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.tar' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.tar' |
189 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.tar.bz2' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.tar.bz2' |
190 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.tar.gz' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.tar.gz' |
191 | === renamed file 'lib/lp/translations/stories/standalone/xx-translation-import-queue.txt' => 'lib/lp/translations/stories/importqueue/xx-translation-import-queue.txt' |
192 | --- lib/lp/translations/stories/standalone/xx-translation-import-queue.txt 2009-08-30 20:27:52 +0000 |
193 | +++ lib/lp/translations/stories/importqueue/xx-translation-import-queue.txt 2009-09-01 21:03:51 +0000 |
194 | @@ -18,7 +18,7 @@ |
195 | >>> import os.path |
196 | >>> test_file_name = os.path.join( |
197 | ... os.path.dirname(lp.translations.__file__), |
198 | - ... 'stories/standalone/xx-translation-import-queue.tar.gz') |
199 | + ... 'stories/importqueue/xx-translation-import-queue.tar.gz') |
200 | >>> tarball = open(test_file_name, "rb") |
201 | >>> upload = ff_owner_browser.getControl('File') |
202 | >>> upload |
203 | @@ -166,6 +166,12 @@ |
204 | |
205 | Open the edit form for the fourth entry. |
206 | |
207 | +XXX DaniloSegan 2009-09-01: it seems we are hitting Zope testbrowser |
208 | +bug, so we need to reopen the page we are currently at to set 'referer' |
209 | +header properly. This seems similar to #98437 but the fix proposed |
210 | +there doesn't help. |
211 | + |
212 | + >>> browser.open('http://translations.launchpad.dev/+imports') |
213 | >>> browser.getLink(url='imports/4').click() |
214 | |
215 | And provide information for this IPOFile to be newly created. |
216 | @@ -193,7 +199,7 @@ |
217 | po/es.po in |
218 | Mozilla Firefox 1.0 series |
219 | Approved |
220 | - ... |
221 | + ... |
222 | Spanish (es) translation of pkgconf-mozilla in Mozilla Firefox 1.0 |
223 | ... |
224 | |
225 | @@ -335,7 +341,7 @@ |
226 | |
227 | >>> test_file_name = os.path.join( |
228 | ... os.path.dirname(lp.translations.__file__), |
229 | - ... 'stories/standalone/xx-translation-import-queue.tar.bz2') |
230 | + ... 'stories/importqueue/xx-translation-import-queue.tar.bz2') |
231 | >>> tarball = open(test_file_name) |
232 | |
233 | >>> evo_owner_browser.getControl('File').add_file( |
234 | @@ -368,7 +374,7 @@ |
235 | |
236 | >>> test_file_name = os.path.join( |
237 | ... os.path.dirname(lp.translations.__file__), |
238 | - ... 'stories/standalone/xx-translation-import-queue.tar') |
239 | + ... 'stories/importqueue/xx-translation-import-queue.tar') |
240 | >>> tarball = open(test_file_name) |
241 | |
242 | >>> evo_owner_browser.getControl('File').add_file( |
243 | @@ -389,7 +395,7 @@ |
244 | |
245 | >>> test_file_name = os.path.join( |
246 | ... os.path.dirname(lp.translations.__file__), |
247 | - ... 'stories/standalone/empty.tar.bz2') |
248 | + ... 'stories/importqueue/empty.tar.bz2') |
249 | >>> tarball = open(test_file_name) |
250 | |
251 | >>> evo_owner_browser.getControl('File').add_file( |
252 | @@ -409,7 +415,7 @@ |
253 | |
254 | >>> test_file_name = os.path.join( |
255 | ... os.path.dirname(lp.translations.__file__), |
256 | - ... 'stories/standalone/truncated.tar.bz2') |
257 | + ... 'stories/importqueue/truncated.tar.bz2') |
258 | >>> tarball = open(test_file_name) |
259 | |
260 | >>> evo_owner_browser.getControl('File').add_file( |
261 | |
262 | === modified file 'lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt' |
263 | --- lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt 2009-07-10 12:49:30 +0000 |
264 | +++ lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt 2009-09-01 19:36:28 +0000 |
265 | @@ -57,7 +57,7 @@ |
266 | <input type="submit"...value="Request one-time import"... |
267 | >>> browser.getControl('Request one-time import').click() |
268 | >>> print browser.url |
269 | - http://translations.l...d.dev/evolution/trunk/+request-bzr-import |
270 | + http://translations.launchpad.dev/evolution/trunk |
271 | >>> print "\n".join(get_feedback_messages(browser.contents)) |
272 | The import has been requested. |
273 | |
274 | |
275 | === modified file 'lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt' |
276 | --- lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt 2009-08-30 20:27:52 +0000 |
277 | +++ lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt 2009-09-01 19:36:28 +0000 |
278 | @@ -49,6 +49,6 @@ |
279 | >>> browser.getControl('Translation domain').value = 'firefox' |
280 | >>> browser.getControl('Approve').click() |
281 | >>> print browser.url |
282 | - http://translations.launchpad.dev/+imports |
283 | + http://translations.launchpad.dev/firefox/trunk/+imports |
284 | >>> browser.getControl(name='field.status_3').value |
285 | ['APPROVED'] |
286 | |
287 | === modified file 'lib/lp/translations/templates/distroseries-language-packs.pt' |
288 | --- lib/lp/translations/templates/distroseries-language-packs.pt 2009-07-17 17:59:07 +0000 |
289 | +++ lib/lp/translations/templates/distroseries-language-packs.pt 2009-09-01 20:59:00 +0000 |
290 | @@ -3,10 +3,7 @@ |
291 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
292 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
293 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
294 | - xml:lang="en" |
295 | - lang="en" |
296 | - dir="ltr" |
297 | - metal:use-macro="view/macro:page/onecolumn" |
298 | + metal:use-macro="view/macro:page/main_only" |
299 | i18n:domain="launchpad" > |
300 | <body> |
301 | <div metal:fill-slot="head_epilogue"> |
302 | @@ -19,91 +16,116 @@ |
303 | |
304 | <div metal:fill-slot="main"> |
305 | <div id="language_packs"> |
306 | - <h1> |
307 | - Language packs for |
308 | - <tal:title replace="view/displayname">Ubuntu 5.04</tal:title> |
309 | - </h1> |
310 | - |
311 | - <p id="description"> |
312 | - A language pack is an export of all translation files used at run time |
313 | - by the applications in |
314 | - <tal:distribution replace="view/displayname" />. |
315 | - These language packs are the last ones generated or in use by |
316 | - <tal:distribution replace="view/displayname" /> |
317 | - </p> |
318 | - |
319 | - <h2>Current language packs</h2> |
320 | - <dl> |
321 | - <dt> |
322 | - <img tal:condition="context/language_pack_base" |
323 | - alt="download icon" src="/@@/download" /> |
324 | - Base pack: |
325 | - <a tal:condition="context/language_pack_base" |
326 | - tal:attributes="href context/language_pack_base/file/http_url"> |
327 | - <tal:export-date |
328 | - replace="context/language_pack_base/date_exported/fmt:datetime" /> |
329 | - </a> |
330 | - <tal:not-export-date condition="not: context/language_pack_base"> |
331 | - none yet |
332 | - </tal:not-export-date> |
333 | - <br />A complete set of translations for the OS. |
334 | - </dt> |
335 | - <dt> |
336 | - <img tal:condition="context/language_pack_delta" |
337 | - alt="download icon" src="/@@/download" /> |
338 | - Delta pack: |
339 | - <a tal:condition="context/language_pack_delta" |
340 | - tal:attributes="href context/language_pack_delta/file/http_url"> |
341 | - <tal:export-date |
342 | - replace="context/language_pack_delta/date_exported/fmt:datetime" /> |
343 | - </a> |
344 | - <tal:not-export-date condition="not: context/language_pack_delta"> |
345 | - none yet |
346 | - </tal:not-export-date> |
347 | - <br />Translation updates, applied on top of the base pack. |
348 | - </dt> |
349 | - </dl> |
350 | - |
351 | - <h2>Language pack being tested</h2> |
352 | - <dl tal:condition="context/language_pack_proposed"> |
353 | - <dt> |
354 | - <img alt="download icon" src="/@@/download" /> |
355 | - <tal:type content="context/language_pack_proposed/type/name" /> |
356 | - language pack: |
357 | - <a tal:attributes=" |
358 | - href context/language_pack_proposed/file/http_url"> |
359 | - <tal:export-date |
360 | - condition="context/language_pack_proposed" |
361 | - replace="context/language_pack_proposed/date_exported/fmt:datetime" |
362 | - /> |
363 | - </a> |
364 | - <br />This one is being tested to become the new |
365 | - <tal:type content="context/language_pack_proposed/type/name" /> |
366 | - language pack. |
367 | - </dt> |
368 | - </dl> |
369 | - <p tal:condition="not:context/language_pack_proposed"> |
370 | - No pack is being tested right now. |
371 | - </p> |
372 | - |
373 | - <tal:has-unused condition="view/unused_language_packs"> |
374 | - <h2>Currently unused language packs</h2> |
375 | - <dl> |
376 | - <dt tal:repeat="lang_pack view/unused_language_packs"> |
377 | - <img alt="download icon" src="/@@/download" /> |
378 | - <tal:type content="lang_pack/type/title" /> language pack: |
379 | - <a tal:attributes="href lang_pack/file/http_url"> |
380 | - <tal:date-exported |
381 | - content="lang_pack/date_exported/fmt:datetime" /> |
382 | - </a>. |
383 | - </dt> |
384 | - </dl> |
385 | - </tal:has-unused> |
386 | - </div> |
387 | - <div tal:condition="view/is_admin"> |
388 | - <h2 class="adminlabel" |
389 | - tal:content="view/adminlabel">Language pack settings</h2> |
390 | - <div metal:use-macro="context/@@launchpad_form/form"> </div> |
391 | + <h1> |
392 | + Language packs for |
393 | + <tal:title replace="view/displayname">Ubuntu 5.04</tal:title> |
394 | + </h1> |
395 | + |
396 | + <div class="top-portlet"> |
397 | + <p id="description"> |
398 | + A language pack is an export of all translation files used at run time |
399 | + by the applications in |
400 | + <tal:distribution replace="view/displayname" />. |
401 | + These language packs are the last ones generated or in use by |
402 | + <tal:distribution replace="view/displayname" /> |
403 | + </p> |
404 | + |
405 | + <p tal:condition="context/distribution/language_pack_admin"> |
406 | + Language packs are administered by |
407 | + <tal:admin replace=" |
408 | + structure context/distribution/language_pack_admin/fmt:link"> |
409 | + Peter Langomat |
410 | + </tal:admin><a |
411 | + tal:condition="context/distribution/required:launchpad.Edit" |
412 | + tal:attributes="href string:${context/distribution/fmt:url}/+select-language-pack-admin" |
413 | + title="Change language pack administrator"><img |
414 | + class="edit sprite"/></a>. |
415 | + </p> |
416 | + </div> |
417 | + <div class="yui-g"> |
418 | + <div class="yui-u first portlet"> |
419 | + <h2>Active language packs</h2> |
420 | + <dl> |
421 | + <dt> |
422 | + Base pack: |
423 | + <a tal:condition="context/language_pack_base" |
424 | + tal:attributes="href context/language_pack_base/file/http_url"> |
425 | + <tal:export-date |
426 | + replace="context/language_pack_base/date_exported/fmt:datetime" /> |
427 | + <img tal:condition="context/language_pack_base" |
428 | + alt="download icon" src="/@@/download" /> |
429 | + </a> |
430 | + <tal:not-export-date condition="not: context/language_pack_base"> |
431 | + none yet |
432 | + </tal:not-export-date> |
433 | + </dt> |
434 | + <dd>A complete set of translations for the OS.</dd> |
435 | + <dt> |
436 | + Delta pack: |
437 | + <a tal:condition="context/language_pack_delta" |
438 | + tal:attributes="href context/language_pack_delta/file/http_url"> |
439 | + <tal:export-date |
440 | + replace="context/language_pack_delta/date_exported/fmt:datetime" /> |
441 | + <img tal:condition="context/language_pack_delta" |
442 | + alt="download icon" src="/@@/download" /> |
443 | + </a> |
444 | + <tal:not-export-date condition="not: context/language_pack_delta"> |
445 | + none yet |
446 | + </tal:not-export-date> |
447 | + </dt> |
448 | + <dd>Translation updates, applied on top of the base pack.</dd> |
449 | + </dl> |
450 | + </div> |
451 | + <div class="yui-u"> |
452 | + <div class="portlet"> |
453 | + <h2>Language pack being tested</h2> |
454 | + <dl tal:condition="context/language_pack_proposed"> |
455 | + <dt> |
456 | + <tal:type content="context/language_pack_proposed/type/name" /> |
457 | + language pack: |
458 | + <a tal:attributes=" |
459 | + href context/language_pack_proposed/file/http_url"> |
460 | + <tal:export-date |
461 | + condition="context/language_pack_proposed" |
462 | + replace="context/language_pack_proposed/date_exported/fmt:datetime" |
463 | + /> |
464 | + <img alt="download icon" src="/@@/download" /> |
465 | + </a> |
466 | + </dt> |
467 | + <dd>This one is being tested to become the new |
468 | + <tal:type content="context/language_pack_proposed/type/name" /> |
469 | + language pack. |
470 | + </dd> |
471 | + </dl> |
472 | + <p tal:condition="not:context/language_pack_proposed"> |
473 | + No pack is being tested right now. |
474 | + </p> |
475 | + </div> |
476 | + </div> |
477 | + </div> |
478 | + |
479 | + <div class="yui-g"> |
480 | + <div class="yui-u first portlet" tal:condition="view/is_admin"> |
481 | + <h2 class="adminlabel" |
482 | + tal:content="view/adminlabel">Language pack settings</h2> |
483 | + <div metal:use-macro="context/@@launchpad_form/form"> </div> |
484 | + </div> |
485 | + <div class="yui-u" tal:condition="view/unused_language_packs"> |
486 | + <div class="portlet"> |
487 | + <h2>Currently unused language packs</h2> |
488 | + <ul> |
489 | + <li tal:repeat="lang_pack view/unused_language_packs"> |
490 | + <tal:type content="lang_pack/type/title" /> language pack: |
491 | + <a tal:attributes="href lang_pack/file/http_url"> |
492 | + <tal:date-exported |
493 | + content="lang_pack/date_exported/fmt:datetime" /> |
494 | + <img alt="download icon" src="/@@/download" /> |
495 | + </a> |
496 | + </li> |
497 | + </ul> |
498 | + </div> |
499 | + </div> |
500 | + </div> |
501 | </div> |
502 | |
503 | </div> |
504 | |
505 | === modified file 'lib/lp/translations/templates/productseries-translations-bzr-import.pt' |
506 | --- lib/lp/translations/templates/productseries-translations-bzr-import.pt 2009-07-17 17:59:07 +0000 |
507 | +++ lib/lp/translations/templates/productseries-translations-bzr-import.pt 2009-09-01 19:36:28 +0000 |
508 | @@ -3,10 +3,7 @@ |
509 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
510 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
511 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
512 | - xml:lang="en" |
513 | - lang="en" |
514 | - dir="ltr" |
515 | - metal:use-macro="view/macro:page/onecolumn" |
516 | + metal:use-macro="view/macro:page/main_only" |
517 | i18n:domain="launchpad" |
518 | > |
519 | <body> |
520 | @@ -21,57 +18,69 @@ |
521 | |
522 | <div metal:fill-slot="main"> |
523 | |
524 | - <h1>Request one-time import of translations</h1> |
525 | - |
526 | - <p |
527 | - class="not-translated-in-launchpad" |
528 | - tal:condition="not: context/product/official_rosetta"> |
529 | - <strong> |
530 | - This project is not configured to use Launchpad for translations. |
531 | - </strong> |
532 | - <tal:admin_or_owner condition="context/product/required:launchpad.Edit"> |
533 | - You can change this in the |
534 | - <a tal:attributes="href view/product_edit_url"> |
535 | - project settings</a>. (<a href="/+help/getting-started-for-your-project.html" target="help">Getting started with translating your project in Launchpad</a>) |
536 | - </tal:admin_or_owner> |
537 | - </p> |
538 | - |
539 | - <tal:rosetta condition="context/product/official_rosetta"> |
540 | - <p> |
541 | - You can ask Launchpad for a one-time import of all the translation files |
542 | - (templates and translations) that it finds in |
543 | - <strong><tal:series replace="structure view/series_title"> |
544 | - Evolution Series:trunk</tal:series>'s</strong> official Bazaar branch. |
545 | - (<a href="https://help.launchpad.net/Translations/ImportPolicy">Read the |
546 | - translations import policy</a>) |
547 | - </p> |
548 | - <p tal:condition="not:view/has_imports_enabled" id="settings-display"> |
549 | - <img src="/@@/info" class="inline-icon" /> |
550 | - To enable continuous imports please change the settings |
551 | - <a tal:attributes="href view/translations_settings_url">here</a>. |
552 | - </p> |
553 | - <p tal:condition="view/context/branch" |
554 | - tal:define="branch view/context/branch" |
555 | - id="branch-display"> |
556 | - The official Bazaar branch is: |
557 | - <img src="/@@/branch" class="inline-icon" /> |
558 | - <a tal:attributes="href branch/fmt:url; title branch/bzr_identity" |
559 | - tal:content="branch/displayname"> |
560 | - branchname |
561 | - </a> |
562 | - <a tal:attributes="href view/link_branch_url; |
563 | - title string:Change official branch" |
564 | - ><img src="/@@/edit" class="inline-icon" /></a> |
565 | - </p> |
566 | - <p tal:condition="not:view/context/branch" |
567 | - id="no-branch-display"> |
568 | - This series does not have an official Bazaar branch. |
569 | - <a tal:attributes="href view/link_branch_url"> |
570 | - Please set it first.</a></p> |
571 | - <tal:form tal:condition="view/context/branch"> |
572 | - <div metal:use-macro="context/@@launchpad_form/form"></div> |
573 | + <tal:form tal:condition="context/branch"> |
574 | + <div metal:use-macro="context/@@launchpad_form/form"> |
575 | + <div metal:fill-slot="extra_info"> |
576 | + <p class="not-translated-in-launchpad" |
577 | + tal:condition="not: context/product/official_rosetta"> |
578 | + <strong> |
579 | + This project is not configured to use Launchpad for |
580 | + translations. |
581 | + </strong> |
582 | + <tal:admin_or_owner condition=" |
583 | + context/product/required:launchpad.Edit"> |
584 | + You can change this in the |
585 | + <a tal:attributes="href view/product_edit_url"> |
586 | + project settings</a>. |
587 | + (<a href="/+help/getting-started-for-your-project.html" |
588 | + target="help">Getting started with translating your project |
589 | + in Launchpad</a>) |
590 | + </tal:admin_or_owner> |
591 | + </p> |
592 | + |
593 | + <tal:rosetta condition="context/product/official_rosetta"> |
594 | + <p> |
595 | + You can ask Launchpad for a one-time import of all the |
596 | + translation files (templates and translations) that it finds in |
597 | + <strong><tal:series replace="structure view/series_title"> |
598 | + Evolution Series:trunk</tal:series>'s</strong> |
599 | + official Bazaar branch. |
600 | + (<a href="https://help.launchpad.net/Translations/ImportPolicy" |
601 | + >Read the translations import policy</a>) |
602 | + </p> |
603 | + <p tal:condition="not:view/has_imports_enabled" |
604 | + id="settings-display"> |
605 | + <img src="/@@/info" class="inline-icon" /> |
606 | + To enable continuous imports please change the settings |
607 | + <a tal:attributes="href view/translations_settings_url">here</a>. |
608 | + </p> |
609 | + </tal:rosetta> |
610 | + <p tal:define="branch context/branch" |
611 | + id="branch-display"> |
612 | + The official Bazaar branch is: |
613 | + <img src="/@@/branch" class="inline-icon" /> |
614 | + <a tal:attributes="href branch/fmt:url; title branch/bzr_identity" |
615 | + tal:content="branch/displayname"> |
616 | + branchname |
617 | + </a> |
618 | + <a tal:attributes="href view/link_branch_url; |
619 | + title string:Change official branch" |
620 | + ><img src="/@@/edit" class="inline-icon" /></a> |
621 | + </p> |
622 | + </div> |
623 | + </div> |
624 | </tal:form> |
625 | - </tal:rosetta> |
626 | + <tal:no-branch condition="not:context/branch"> |
627 | + <h1 tal:content="view/label" /> |
628 | + <div class="main-portlet"> |
629 | + <p tal:condition="not:view/context/branch" |
630 | + id="no-branch-display"> |
631 | + This series does not have an official Bazaar branch. |
632 | + <a tal:attributes="href view/link_branch_url"> |
633 | + Please set it first.</a> |
634 | + </p> |
635 | + </div> |
636 | + </tal:no-branch> |
637 | </div> |
638 | |
639 | </body> |
640 | |
641 | === modified file 'lib/lp/translations/templates/productseries-translations-settings.pt' |
642 | --- lib/lp/translations/templates/productseries-translations-settings.pt 2009-07-19 04:41:14 +0000 |
643 | +++ lib/lp/translations/templates/productseries-translations-settings.pt 2009-09-01 12:00:37 +0000 |
644 | @@ -3,10 +3,7 @@ |
645 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
646 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
647 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
648 | - xml:lang="en" |
649 | - lang="en" |
650 | - dir="ltr" |
651 | - metal:use-macro="view/macro:page/onecolumn" |
652 | + metal:use-macro="view/macro:page/main_only" |
653 | i18n:domain="launchpad" |
654 | > |
655 | <body> |
656 | @@ -21,99 +18,113 @@ |
657 | |
658 | <div metal:fill-slot="main"> |
659 | |
660 | - <h1>Translations settings</h1> |
661 | - |
662 | - <p |
663 | - class="not-translated-in-launchpad" |
664 | - tal:condition="not: context/product/official_rosetta"> |
665 | - <strong> |
666 | - This project is not configured to use Launchpad for translations. |
667 | - </strong> |
668 | - <tal:admin_or_owner condition="context/product/required:launchpad.Edit"> |
669 | - You can change this in the |
670 | - <a tal:attributes="href view/product_edit_url"> |
671 | - project settings</a>. |
672 | - </tal:admin_or_owner> |
673 | - </p> |
674 | - |
675 | - <tal:rosetta condition="context/product/official_rosetta"> |
676 | - <h2>Import translations from branch</h2> |
677 | - <p> |
678 | - You can ask Launchpad to continuously import any translation |
679 | - files (templates and translations) that it finds in |
680 | - <strong><tal:series replace="structure view/series_title"> |
681 | - Evolution Series:trunk</tal:series>'s</strong> official Bazaar branch. |
682 | - After the initial import, Launchpad will continue to scan your Bazaar |
683 | - branch for updates to template and translation files. |
684 | - </p> |
685 | - <p id="bzr-request-display"> |
686 | - <img src="/@@/info" class="inline-icon" /> |
687 | - If you only need a one-time import, please request it |
688 | - <a tal:attributes="href view/request_bzr_import_url">here</a>. |
689 | - </p> |
690 | - <p tal:condition="view/context/branch" |
691 | - tal:define="branch view/context/branch" |
692 | - id="branch-display"> |
693 | - The official Bazaar branch is: |
694 | - <img src="/@@/branch" class="inline-icon" /> |
695 | - <a tal:attributes="href branch/fmt:url; title branch/bzr_identity" |
696 | - tal:content="branch/displayname"> |
697 | - branchname |
698 | - </a> |
699 | - <a tal:attributes="href view/link_branch_url; |
700 | - title string:Change official branch" |
701 | - ><img src="/@@/edit" class="inline-icon" /></a> |
702 | - </p> |
703 | - <p tal:condition="not:view/context/branch" |
704 | - id="no-branch-display"> |
705 | - This series does not have an official Bazaar branch. |
706 | - <a tal:attributes="href view/link_branch_url">Set it now!</a> |
707 | - </p> |
708 | - <div metal:use-macro="context/@@launchpad_form/form"></div> |
709 | - |
710 | - <h2>Export translations to branch</h2> |
711 | - <p> |
712 | - Launchpad can commit daily snapshots of the translations for this |
713 | - release series to a code branch. |
714 | - </p> |
715 | - <p> |
716 | - Use this to make it easy to download the latest translations using |
717 | - Bazaar, or to make sure the latest Launchpad translations are always |
718 | - included with the files you distribute. |
719 | - </p> |
720 | - <p> |
721 | - <strong>Warning:</strong> This may replace translation files that are |
722 | - already in the branch you choose. You should consider creating a |
723 | - separate branch where Launchpad can commit translations. |
724 | - </p> |
725 | - |
726 | - <p id="translations-branch"> |
727 | - <tal:no-translations-branch condition="not: context/translations_branch"> |
728 | - Currently not exporting translations to a branch. |
729 | - <a href="+link-translations-branch"> |
730 | - Choose a target branch. |
731 | - <img src="/@@/edit" class="inline-icon" alt="edit" /> |
732 | - </a> |
733 | - </tal:no-translations-branch> |
734 | - <tal:translations-branch condition="context/translations_branch"> |
735 | - Exporting translations to branch: |
736 | - <img src="/@@/branch" class="inline-icon" /> |
737 | - <a |
738 | - id="translations-branch-link" |
739 | - tal:attributes="href context/translations_branch/fmt:url; |
740 | - title string:Change translations export branch" |
741 | - tal:content="context/translations_branch/displayname" |
742 | - >branch name</a> |
743 | - <a |
744 | - id="translations-branch-edit-link" |
745 | - tal:attributes="href string:+link-translations-branch; |
746 | - title string:Set translations export branch" |
747 | - ><img src="/@@/edit" class="inline-icon" alt="edit" /></a> |
748 | - |
749 | - </tal:translations-branch> |
750 | - </p> |
751 | - |
752 | - </tal:rosetta> |
753 | + <div class="top-portlet"> |
754 | + <h1>Translations settings</h1> |
755 | + <p |
756 | + class="not-translated-in-launchpad" |
757 | + tal:condition="not: context/product/official_rosetta"> |
758 | + <strong> |
759 | + This project is not configured to use Launchpad for translations. |
760 | + </strong> |
761 | + <tal:admin_or_owner condition="context/product/required:launchpad.Edit"> |
762 | + You can change this in the |
763 | + <a tal:attributes="href view/product_edit_url"> |
764 | + project settings</a>. |
765 | + </tal:admin_or_owner> |
766 | + </p> |
767 | + </div> |
768 | + |
769 | + <div class="yui-g"> |
770 | + <div class="yui-u first portlet"> |
771 | + <div metal:use-macro="context/@@launchpad_form/form" class="portlet"> |
772 | + <div metal:fill-slot="extra_info"> |
773 | + |
774 | + <tal:rosetta condition="context/product/official_rosetta"> |
775 | + <h2>Import translations from branch</h2> |
776 | + <p> |
777 | + You can ask Launchpad to continuously import any translation |
778 | + files (templates and translations) that it finds in |
779 | + <strong><tal:series replace="structure view/series_title"> |
780 | + Evolution Series:trunk</tal:series>'s</strong> official Bazaar branch. |
781 | + After the initial import, Launchpad will continue to scan your Bazaar |
782 | + branch for updates to template and translation files. |
783 | + </p> |
784 | + <p id="bzr-request-display"> |
785 | + <img src="/@@/info" class="inline-icon" /> |
786 | + If you only need a one-time import, please request it |
787 | + <a tal:attributes="href view/request_bzr_import_url">here</a>. |
788 | + </p> |
789 | + <p tal:condition="view/context/branch" |
790 | + tal:define="branch view/context/branch" |
791 | + id="branch-display"> |
792 | + The official Bazaar branch is: |
793 | + <img src="/@@/branch" class="inline-icon" /> |
794 | + <a tal:attributes="href branch/fmt:url; title branch/bzr_identity" |
795 | + tal:content="branch/displayname"> |
796 | + branchname |
797 | + </a> |
798 | + <a tal:attributes="href view/link_branch_url; |
799 | + title string:Change official branch" |
800 | + ><img src="/@@/edit" class="inline-icon" /></a> |
801 | + </p> |
802 | + <p tal:condition="not:view/context/branch" |
803 | + id="no-branch-display"> |
804 | + This series does not have an official Bazaar branch. |
805 | + <a tal:attributes="href view/link_branch_url">Set it now!</a> |
806 | + </p> |
807 | + </tal:rosetta> |
808 | + </div> |
809 | + </div> |
810 | + </div> |
811 | + <div class="yui-u"> |
812 | + <div class="portlet"> |
813 | + |
814 | + <h2>Export translations to branch</h2> |
815 | + <p> |
816 | + Launchpad can commit daily snapshots of the translations for this |
817 | + release series to a code branch. |
818 | + </p> |
819 | + <p> |
820 | + Use this to make it easy to download the latest translations using |
821 | + Bazaar, or to make sure the latest Launchpad translations are always |
822 | + included with the files you distribute. |
823 | + </p> |
824 | + <p> |
825 | + <strong>Warning:</strong> This may replace translation files that are |
826 | + already in the branch you choose. You should consider creating a |
827 | + separate branch where Launchpad can commit translations. |
828 | + </p> |
829 | + |
830 | + <p id="translations-branch"> |
831 | + <tal:no-translations-branch condition="not: context/translations_branch"> |
832 | + Currently not exporting translations to a branch. |
833 | + <a href="+link-translations-branch"> |
834 | + Choose a target branch. |
835 | + <img src="/@@/edit" class="inline-icon" alt="edit" /> |
836 | + </a> |
837 | + </tal:no-translations-branch> |
838 | + <tal:translations-branch condition="context/translations_branch"> |
839 | + Exporting translations to branch: |
840 | + <img src="/@@/branch" class="inline-icon" /> |
841 | + <a |
842 | + id="translations-branch-link" |
843 | + tal:attributes="href context/translations_branch/fmt:url; |
844 | + title string:Change translations export branch" |
845 | + tal:content="context/translations_branch/displayname" |
846 | + >branch name</a> |
847 | + <a |
848 | + id="translations-branch-edit-link" |
849 | + tal:attributes="href string:+link-translations-branch; |
850 | + title string:Set translations export branch" |
851 | + ><img src="/@@/edit" class="inline-icon" alt="edit" /></a> |
852 | + |
853 | + </tal:translations-branch> |
854 | + </p> |
855 | + |
856 | + </div> |
857 | + </div> |
858 | + </div> |
859 | + |
860 | </div> |
861 | |
862 | </body> |
863 | |
864 | === modified file 'lib/lp/translations/templates/translationimportqueueentry-index.pt' |
865 | --- lib/lp/translations/templates/translationimportqueueentry-index.pt 2009-08-31 22:18:05 +0000 |
866 | +++ lib/lp/translations/templates/translationimportqueueentry-index.pt 2009-09-01 12:09:27 +0000 |
867 | @@ -3,10 +3,7 @@ |
868 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
869 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
870 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
871 | - xml:lang="en" |
872 | - lang="en" |
873 | - dir="ltr" |
874 | - metal:use-macro="context/@@main_template/master" |
875 | + metal:use-macro="view/macro:page/main_only" |
876 | i18n:domain="launchpad" |
877 | > |
878 | <body> |
879 | @@ -24,7 +21,7 @@ |
880 | 'PO': |
881 | ['field.potemplate', 'field.potemplate_name', |
882 | 'field.language', 'field.variant'], |
883 | - 'UNSPEC': [] |
884 | + 'UNSPEC': [] |
885 | }; |
886 | var nodes = {}; |
887 | var last_file_type = 'UNSPEC'; |
888 | @@ -58,11 +55,11 @@ |
889 | } |
890 | |
891 | function updateCurrentFileType(file_type) { |
892 | - for (ftype in nodes) { |
893 | - // Logic has been inverted in the next line to avoid |
894 | - // breaking XHTML compliance of the template due to |
895 | - // ampersand usage. |
896 | - if (!(ftype != file_type || nodes[ftype] != null)) { |
897 | + for (ftype in nodes) { |
898 | + // Logic has been inverted in the next line to avoid |
899 | + // breaking XHTML compliance of the template due to |
900 | + // ampersand usage. |
901 | + if (!(ftype == file_type || nodes[ftype] == null)) { |
902 | nodes[ftype].addClass('dont_show_fields'); |
903 | } |
904 | } |
905 | @@ -103,7 +100,12 @@ |
906 | </metal:script> |
907 | |
908 | <div metal:fill-slot="main"> |
909 | - <div metal:use-macro="context/@@launchpad_form/form" /> |
910 | + <div metal:use-macro="context/@@launchpad_form/form"> |
911 | + <div metal:fill-slot="extra_info"> |
912 | + <input type="hidden" name="next_url" |
913 | + tal:attributes="value view/referrer_url" /> |
914 | + </div> |
915 | + </div> |
916 | </div> |
917 | |
918 | </body> |
919 |
= Bug #423103, #423104 =
Migrate a few "complex" forms: those which do use LaunchpadForm, but
embedded in a bigger page. Changes are mostly mechanical to make them
3.0-compatible.
== Implementation details ==
Lots of whitespace fixes (replacing tabs with spaces and similar) and
reindentation increase the size of the diff.
For translationimpo rtqueueentry- index.pt, I also improve next_url ortQueueEntry edit form, and after
handling so we get back to the import queue which we started from
(basically, +imports page is registered on all of IProduct,
IProductSeries, IDistribution, IDistroSeries, IPerson, but they all go
to the same ITranslationImp
submission should go back). A separate test is added for that, though
it does exhibit some Zope testbrowser bugs in referrer handling.
Everything else is just bits and pieces moved around.
I've also moved translation import queue tests into a separate "story"
so they are easier to run when needed.
== Tests ==
bin/test -vvt stories.importqueue -t translations- xpi-import. txt -t productseries- translations- bzr-request -t distroseries- language- pack
== Demo and Q/A ==
translationsimp ortqueueentry- index.pt:
https:/ /translations. launchpad. dev/+imports/ 1 +imports, /~name16/+imports)
(and get there through /+imports, /evolution/
distroseries- language- packs.pt:
https:/ /translations. launchpad. dev/ubuntu/ hoary/+ language- packs
productseries- translations- bzr-import. pt:
https:/ /translations. launchpad. dev/evolution/ trunk/+ request- bzr-import
productseries- translations- settings. pt:
https:/ /translations. launchpad. dev/evolution/ trunk/+ translations- settings
= Launchpad lint =
Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.
Linting changed files: translations/ stories/ standalone/ xx-translations -xpi-import. txt translations/ stories/ productseries/ xx-productserie s-translations- bzr-request. txt translations/ stories/ importqueue/ xx-translation- import- queue-entry. txt /launchpad/ pagetitles. py translations/ templates/ distroseries- language- packs.pt translations/ browser/ translationimpo rtqueue. py translations/ stories/ importqueue/ xx-translation- import- queue-filtering .txt translations/ templates/ productseries- translations- settings. pt translations/ templates/ productseries- translations- bzr-import. pt translations/ stories/ importqueue/ xx-translation- import- queue.txt translations/ browser/ productseries. py translations/ templates/ translationimpo rtqueueentry- index.pt translations/ stories/ importqueue/ xx-translation- import- queue-edit- autofilling. txt translations/ stories/ distroseries/ xx-distroseries -language- packs.txt
lib/lp/
lib/lp/
lib/lp/
lib/canonical
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/