Merge lp:~danilo/launchpad/project-and-products into lp:launchpad
- project-and-products
- Merge into devel
Proposed by
Данило Шеган
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~danilo/launchpad/project-and-products |
Merge into: | lp:launchpad |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~danilo/launchpad/project-and-products |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Celso Providelo (community) | code | Approve | |
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Данило Шеган (danilo) wrote : | # |
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Celso Providelo (cprov) wrote : | # |
Hi Danilo,
Thanks for working on these pages, they looks good.
I agree that this branch fits in ui=rs, trivial but precise changes.
Land it!
review:
Approve
(code)
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'lib/lp/translations/browser/configure.zcml' | |||
2 | --- lib/lp/translations/browser/configure.zcml 2009-09-01 11:09:53 +0000 | |||
3 | +++ lib/lp/translations/browser/configure.zcml 2009-09-10 11:44:08 +0000 | |||
4 | @@ -815,6 +815,7 @@ | |||
5 | 815 | for="lp.registry.interfaces.project.IProject" | 815 | for="lp.registry.interfaces.project.IProject" |
6 | 816 | permission="zope.Public" | 816 | permission="zope.Public" |
7 | 817 | name="+translations" | 817 | name="+translations" |
8 | 818 | class="lp.translations.browser.project.ProjectView" | ||
9 | 818 | template="../templates/project-translations.pt" | 819 | template="../templates/project-translations.pt" |
10 | 819 | layer="canonical.launchpad.layers.TranslationsLayer"/> | 820 | layer="canonical.launchpad.layers.TranslationsLayer"/> |
11 | 820 | <browser:page | 821 | <browser:page |
12 | 821 | 822 | ||
13 | === modified file 'lib/lp/translations/browser/product.py' | |||
14 | --- lib/lp/translations/browser/product.py 2009-08-31 00:31:01 +0000 | |||
15 | +++ lib/lp/translations/browser/product.py 2009-09-10 18:35:28 +0000 | |||
16 | @@ -29,7 +29,7 @@ | |||
17 | 29 | facet = 'translations' | 29 | facet = 'translations' |
18 | 30 | links = ( | 30 | links = ( |
19 | 31 | 'overview', | 31 | 'overview', |
21 | 32 | 'translators', | 32 | 'settings', |
22 | 33 | 'translationdownload', | 33 | 'translationdownload', |
23 | 34 | 'imports', | 34 | 'imports', |
24 | 35 | ) | 35 | ) |
25 | @@ -39,7 +39,7 @@ | |||
26 | 39 | return Link('+imports', text) | 39 | return Link('+imports', text) |
27 | 40 | 40 | ||
28 | 41 | @enabled_with_permission('launchpad.Edit') | 41 | @enabled_with_permission('launchpad.Edit') |
30 | 42 | def translators(self): | 42 | def settings(self): |
31 | 43 | text = 'Settings' | 43 | text = 'Settings' |
32 | 44 | return Link('+changetranslators', text, icon='edit') | 44 | return Link('+changetranslators', text, icon='edit') |
33 | 45 | 45 | ||
34 | @@ -113,3 +113,10 @@ | |||
35 | 113 | 'potemplates': translatable.getCurrentTranslationTemplates(), | 113 | 'potemplates': translatable.getCurrentTranslationTemplates(), |
36 | 114 | 'base_url': canonical_url(translatable) | 114 | 'base_url': canonical_url(translatable) |
37 | 115 | } | 115 | } |
38 | 116 | |||
39 | 117 | @cachedproperty | ||
40 | 118 | def untranslatable_series(self): | ||
41 | 119 | """Return series which are not yet set up for translations.""" | ||
42 | 120 | all_series = set(self.context.serieses) | ||
43 | 121 | translatable = set(self.context.translatable_series) | ||
44 | 122 | return all_series - translatable | ||
45 | 116 | 123 | ||
46 | === modified file 'lib/lp/translations/browser/project.py' | |||
47 | --- lib/lp/translations/browser/project.py 2009-08-31 00:31:01 +0000 | |||
48 | +++ lib/lp/translations/browser/project.py 2009-09-10 11:44:08 +0000 | |||
49 | @@ -23,10 +23,10 @@ | |||
50 | 23 | 23 | ||
51 | 24 | usedfor = IProject | 24 | usedfor = IProject |
52 | 25 | facet = 'translations' | 25 | facet = 'translations' |
54 | 26 | links = ['products', 'changetranslators', 'overview'] | 26 | links = ['products', 'settings', 'overview'] |
55 | 27 | 27 | ||
56 | 28 | @enabled_with_permission('launchpad.Edit') | 28 | @enabled_with_permission('launchpad.Edit') |
58 | 29 | def changetranslators(self): | 29 | def settings(self): |
59 | 30 | text = 'Settings' | 30 | text = 'Settings' |
60 | 31 | return Link('+changetranslators', text, icon='edit') | 31 | return Link('+changetranslators', text, icon='edit') |
61 | 32 | 32 | ||
62 | @@ -41,7 +41,12 @@ | |||
63 | 41 | 41 | ||
64 | 42 | 42 | ||
65 | 43 | class ProjectView(LaunchpadView): | 43 | class ProjectView(LaunchpadView): |
67 | 44 | pass | 44 | """A view for `IProject` in the translations context.""" |
68 | 45 | @property | ||
69 | 46 | def untranslatables(self): | ||
70 | 47 | translatables = set(self.context.translatables()) | ||
71 | 48 | all_products = set(self.context.products) | ||
72 | 49 | return list(all_products - translatables) | ||
73 | 45 | 50 | ||
74 | 46 | 51 | ||
75 | 47 | class ProjectChangeTranslatorsView(TranslationsMixin, ProjectEditView): | 52 | class ProjectChangeTranslatorsView(TranslationsMixin, ProjectEditView): |
76 | 48 | 53 | ||
77 | === modified file 'lib/lp/translations/stories/importqueue/xx-translation-import-queue-targets.txt' | |||
78 | --- lib/lp/translations/stories/importqueue/xx-translation-import-queue-targets.txt 2009-09-01 20:06:37 +0000 | |||
79 | +++ lib/lp/translations/stories/importqueue/xx-translation-import-queue-targets.txt 2009-09-10 18:35:28 +0000 | |||
80 | @@ -51,7 +51,7 @@ | |||
81 | 51 | The import queue is linked from the translations page for products. | 51 | The import queue is linked from the translations page for products. |
82 | 52 | 52 | ||
83 | 53 | >>> user_browser.open('http://translations.launchpad.dev/evolution') | 53 | >>> user_browser.open('http://translations.launchpad.dev/evolution') |
85 | 54 | >>> user_browser.getLink('Import queue').click() | 54 | >>> user_browser.getLink('Evolution import queue').click() |
86 | 55 | 55 | ||
87 | 56 | This time, we do have content for this product: | 56 | This time, we do have content for this product: |
88 | 57 | 57 | ||
89 | 58 | 58 | ||
90 | === modified file 'lib/lp/translations/stories/productseries/xx-productseries-translation-export.txt' | |||
91 | --- lib/lp/translations/stories/productseries/xx-productseries-translation-export.txt 2009-08-28 15:54:41 +0000 | |||
92 | +++ lib/lp/translations/stories/productseries/xx-productseries-translation-export.txt 2009-09-10 18:35:28 +0000 | |||
93 | @@ -22,7 +22,7 @@ | |||
94 | 22 | 22 | ||
95 | 23 | >>> user_browser.open( | 23 | >>> user_browser.open( |
96 | 24 | ... 'http://translations.launchpad.dev/evolution/+translations') | 24 | ... 'http://translations.launchpad.dev/evolution/+translations') |
98 | 25 | >>> user_browser.getLink('Download').click() | 25 | >>> user_browser.getLink('download').click() |
99 | 26 | >>> print user_browser.url | 26 | >>> print user_browser.url |
100 | 27 | http://translations.launchpad.dev/evolution/trunk/+export | 27 | http://translations.launchpad.dev/evolution/trunk/+export |
101 | 28 | 28 | ||
102 | 29 | 29 | ||
103 | === modified file 'lib/lp/translations/stories/project/xx-project-translations.txt' | |||
104 | --- lib/lp/translations/stories/project/xx-project-translations.txt 2009-07-10 12:49:30 +0000 | |||
105 | +++ lib/lp/translations/stories/project/xx-project-translations.txt 2009-09-10 18:35:28 +0000 | |||
106 | @@ -11,28 +11,33 @@ | |||
107 | 11 | 11 | ||
108 | 12 | >>> evo_link = browser.getLink('Evolution') | 12 | >>> evo_link = browser.getLink('Evolution') |
109 | 13 | >>> print evo_link.url | 13 | >>> print evo_link.url |
111 | 14 | http://translations.launchpad.dev/evolution | 14 | http://launchpad.dev/evolution/+translations |
112 | 15 | 15 | ||
113 | 16 | >>> browser.open('http://translations.launchpad.dev/gnome') | 16 | >>> browser.open('http://translations.launchpad.dev/gnome') |
114 | 17 | >>> print browser.url | 17 | >>> print browser.url |
115 | 18 | http://translations.launchpad.dev/gnome | 18 | http://translations.launchpad.dev/gnome |
116 | 19 | 19 | ||
124 | 20 | Netapplet is another product of GNOME project. It has translations, but it's not | 20 | Netapplet is another product of GNOME project. It has translations, |
125 | 21 | using Launchpad officially, so it's not in this page. | 21 | but it's not using Launchpad officially, so it's not listed among |
126 | 22 | 22 | translatable projects. | |
127 | 23 | >>> browser.getLink('Network Applet') | 23 | |
128 | 24 | Traceback (most recent call last): | 24 | >>> translated_projects = find_tag_by_id( |
129 | 25 | ... | 25 | ... browser.contents, 'translatable-projects') |
130 | 26 | LinkNotFoundError | 26 | >>> link = translated_projects.find(text='Network Applet') |
131 | 27 | >>> print link | ||
132 | 28 | None | ||
133 | 29 | |||
134 | 30 | It does show up among untranslated projects. | ||
135 | 31 | |||
136 | 32 | >>> untranslated_projects = find_tag_by_id( | ||
137 | 33 | ... browser.contents, 'untranslatable-projects') | ||
138 | 34 | >>> link = untranslated_projects.find(text='NetApplet').parent | ||
139 | 35 | >>> link['href'] | ||
140 | 36 | u'http://launchpad.dev/netapplet/+translations' | ||
141 | 27 | 37 | ||
142 | 28 | Let's confirm what we just stated. | 38 | Let's confirm what we just stated. |
143 | 29 | 39 | ||
144 | 30 | >>> anon_browser.open('http://launchpad.dev/gnome') | 40 | >>> anon_browser.open('http://launchpad.dev/gnome') |
145 | 31 | >>> print anon_browser.title | ||
146 | 32 | The GNOME Project in Launchpad | ||
147 | 33 | |||
148 | 34 | Netapplet is in fact a product belonging to GNOME project. | ||
149 | 35 | |||
150 | 36 | >>> anon_browser.getLink('NetApplet').click() | 41 | >>> anon_browser.getLink('NetApplet').click() |
151 | 37 | >>> print anon_browser.title | 42 | >>> print anon_browser.title |
152 | 38 | Network Applet in Launchpad | 43 | Network Applet in Launchpad |
153 | @@ -54,17 +59,6 @@ | |||
154 | 54 | ... 'portlet-obsolete-translatable-series') is None | 59 | ... 'portlet-obsolete-translatable-series') is None |
155 | 55 | True | 60 | True |
156 | 56 | 61 | ||
157 | 57 | but administrators see translations disabled. | ||
158 | 58 | |||
159 | 59 | >>> admin_browser.open(anon_browser.url) | ||
160 | 60 | >>> print admin_browser.title | ||
161 | 61 | Translations of Network Applet in Launchpad | ||
162 | 62 | >>> print extract_text(find_tag_by_id( | ||
163 | 63 | ... admin_browser.contents, | ||
164 | 64 | ... 'portlet-obsolete-translatable-series')) | ||
165 | 65 | All product series with obsolete templates | ||
166 | 66 | NetApplet trunk series | ||
167 | 67 | |||
168 | 68 | alsa-utils is a product that doesn't belong to GNOME project. It has | 62 | alsa-utils is a product that doesn't belong to GNOME project. It has |
169 | 69 | translations and is using Launchpad Translations officially, and it | 63 | translations and is using Launchpad Translations officially, and it |
170 | 70 | shouldn't appear in GNOME project translations page. | 64 | shouldn't appear in GNOME project translations page. |
171 | @@ -106,13 +100,3 @@ | |||
172 | 106 | >>> alsa_utils_spanish = browser.getLink('Spanish') | 100 | >>> alsa_utils_spanish = browser.getLink('Spanish') |
173 | 107 | >>> print alsa_utils_spanish.url | 101 | >>> print alsa_utils_spanish.url |
174 | 108 | http://translations.../alsa-utils/trunk/+pots/alsa-utils/es/+translate | 102 | http://translations.../alsa-utils/trunk/+pots/alsa-utils/es/+translate |
175 | 109 | |||
176 | 110 | The translations page has also a link to the product search page to see | ||
177 | 111 | whether a product is registered in Launchpad. | ||
178 | 112 | |||
179 | 113 | >>> browser.open('http://translations.launchpad.dev/gnome') | ||
180 | 114 | >>> print browser.url | ||
181 | 115 | http://translations.launchpad.dev/gnome | ||
182 | 116 | >>> browser.getLink('registered with Launchpad').click() | ||
183 | 117 | >>> print browser.url | ||
184 | 118 | http://translations.launchpad.dev/projects | ||
185 | 119 | 103 | ||
186 | === modified file 'lib/lp/translations/stories/standalone/xx-product-export.txt' | |||
187 | --- lib/lp/translations/stories/standalone/xx-product-export.txt 2009-08-28 15:54:41 +0000 | |||
188 | +++ lib/lp/translations/stories/standalone/xx-product-export.txt 2009-09-10 18:35:28 +0000 | |||
189 | @@ -4,7 +4,7 @@ | |||
190 | 4 | translation downloads. | 4 | translation downloads. |
191 | 5 | 5 | ||
192 | 6 | >>> user_browser.open('http://translations.launchpad.dev/evolution') | 6 | >>> user_browser.open('http://translations.launchpad.dev/evolution') |
194 | 7 | >>> download = user_browser.getLink('Download "trunk"') | 7 | >>> download = user_browser.getLink('download') |
195 | 8 | 8 | ||
196 | 9 | For products, that option downloads translations for the series that is | 9 | For products, that option downloads translations for the series that is |
197 | 10 | currently the preferred translation target. | 10 | currently the preferred translation target. |
198 | @@ -45,7 +45,7 @@ | |||
199 | 45 | >>> product.official_rosetta = False | 45 | >>> product.official_rosetta = False |
200 | 46 | >>> product.sync() | 46 | >>> product.sync() |
201 | 47 | >>> user_browser.open('http://translations.launchpad.dev/evolution') | 47 | >>> user_browser.open('http://translations.launchpad.dev/evolution') |
203 | 48 | >>> user_browser.getLink('Download "trunk"') | 48 | >>> user_browser.getLink('download') |
204 | 49 | Traceback (most recent call last): | 49 | Traceback (most recent call last): |
205 | 50 | ... | 50 | ... |
206 | 51 | LinkNotFoundError | 51 | LinkNotFoundError |
207 | @@ -54,7 +54,7 @@ | |||
208 | 54 | >>> product.official_rosetta = True | 54 | >>> product.official_rosetta = True |
209 | 55 | >>> product.sync() | 55 | >>> product.sync() |
210 | 56 | >>> user_browser.open('http://translations.launchpad.dev/evolution') | 56 | >>> user_browser.open('http://translations.launchpad.dev/evolution') |
212 | 57 | >>> user_browser.getLink('Download "trunk"') is not None | 57 | >>> user_browser.getLink('download') is not None |
213 | 58 | True | 58 | True |
214 | 59 | 59 | ||
215 | 60 | 60 | ||
216 | @@ -63,7 +63,7 @@ | |||
217 | 63 | Only logged-in users get the option to request downloads. | 63 | Only logged-in users get the option to request downloads. |
218 | 64 | 64 | ||
219 | 65 | >>> anon_browser.open('http://translations.launchpad.dev/evolution/') | 65 | >>> anon_browser.open('http://translations.launchpad.dev/evolution/') |
221 | 66 | >>> anon_browser.getLink('Download "trunk"').click() | 66 | >>> anon_browser.getLink('download').click() |
222 | 67 | Traceback (most recent call last): | 67 | Traceback (most recent call last): |
223 | 68 | ... | 68 | ... |
224 | 69 | LinkNotFoundError | 69 | LinkNotFoundError |
225 | 70 | 70 | ||
226 | === modified file 'lib/lp/translations/stories/standalone/xx-product-translations.txt' | |||
227 | --- lib/lp/translations/stories/standalone/xx-product-translations.txt 2009-08-13 19:03:36 +0000 | |||
228 | +++ lib/lp/translations/stories/standalone/xx-product-translations.txt 2009-09-10 18:35:28 +0000 | |||
229 | @@ -79,9 +79,9 @@ | |||
230 | 79 | >>> unprivileged = setupBrowser(auth='Basic no-priv@canonical.com:test') | 79 | >>> unprivileged = setupBrowser(auth='Basic no-priv@canonical.com:test') |
231 | 80 | >>> unprivileged.open('http://translations.launchpad.dev/gnomebaker') | 80 | >>> unprivileged.open('http://translations.launchpad.dev/gnomebaker') |
232 | 81 | >>> print extract_text(find_main_content(unprivileged.contents)) | 81 | >>> print extract_text(find_main_content(unprivileged.contents)) |
234 | 82 | Overview / Import queue | 82 | Gnome Baker |
235 | 83 | ... | ||
236 | 83 | Translation setup needed | 84 | Translation setup needed |
237 | 84 | ... | ||
238 | 85 | This project is not configured to use Launchpad for translations. | 85 | This project is not configured to use Launchpad for translations. |
239 | 86 | The gnomebaker project is not set up for translation in Launchpad. | 86 | The gnomebaker project is not set up for translation in Launchpad. |
240 | 87 | You might want to talk with Foo Bar, the project registrant, about | 87 | You might want to talk with Foo Bar, the project registrant, about |
241 | @@ -121,9 +121,9 @@ | |||
242 | 121 | 121 | ||
243 | 122 | >>> anon_browser.open('http://translations.launchpad.dev/gnomebaker') | 122 | >>> anon_browser.open('http://translations.launchpad.dev/gnomebaker') |
244 | 123 | >>> print extract_text(find_main_content(anon_browser.contents)) | 123 | >>> print extract_text(find_main_content(anon_browser.contents)) |
246 | 124 | Overview / Import queue | 124 | Gnome Baker |
247 | 125 | ... | ||
248 | 125 | Translation setup needed | 126 | Translation setup needed |
249 | 126 | ... | ||
250 | 127 | This project is not configured to use Launchpad for translations. | 127 | This project is not configured to use Launchpad for translations. |
251 | 128 | The gnomebaker project is not set up for translation in Launchpad. | 128 | The gnomebaker project is not set up for translation in Launchpad. |
252 | 129 | If you are Foo Bar, log in to begin the setup process. | 129 | If you are Foo Bar, log in to begin the setup process. |
253 | @@ -153,21 +153,12 @@ | |||
254 | 153 | >>> print find_tag_by_id(anon_browser.contents, 'language-chart') | 153 | >>> print find_tag_by_id(anon_browser.contents, 'language-chart') |
255 | 154 | None | 154 | None |
256 | 155 | 155 | ||
260 | 156 | When browsing it as an admin, we can see that it has some 'obsolete' | 156 | Even when browsing it as an admin, 'obsolete' translations are not |
261 | 157 | translation templates, which is just that the product is not using | 157 | shown since it is not marked as using Launchpad for translation. |
259 | 158 | them anymore. | ||
262 | 159 | 158 | ||
263 | 160 | >>> admin_browser.open('http://translations.launchpad.dev/netapplet') | 159 | >>> admin_browser.open('http://translations.launchpad.dev/netapplet') |
274 | 161 | >>> print extract_text( | 160 | >>> print find_tag_by_id(admin_browser.contents, |
275 | 162 | ... find_tag_by_id(admin_browser.contents, | 161 | ... 'portlet-obsolete-translatable-series') |
266 | 163 | ... 'portlet-obsolete-translatable-series')) | ||
267 | 164 | All product series with obsolete templates | ||
268 | 165 | NetApplet trunk series | ||
269 | 166 | |||
270 | 167 | While we can see that anonymous people are not getting such information: | ||
271 | 168 | |||
272 | 169 | >>> print find_tag_by_id(anon_browser.contents, | ||
273 | 170 | ... 'portlet-obsolete-translatable-series') | ||
276 | 171 | None | 162 | None |
277 | 172 | 163 | ||
278 | 173 | If the netapplet project is updated to use Launchpad for translations... | 164 | If the netapplet project is updated to use Launchpad for translations... |
279 | 174 | 165 | ||
280 | === modified file 'lib/lp/translations/stories/translationgroups/15-product-translation-group.txt' | |||
281 | --- lib/lp/translations/stories/translationgroups/15-product-translation-group.txt 2009-08-31 22:13:07 +0000 | |||
282 | +++ lib/lp/translations/stories/translationgroups/15-product-translation-group.txt 2009-09-10 18:35:28 +0000 | |||
283 | @@ -36,13 +36,12 @@ | |||
284 | 36 | ... find_tag_by_id(netapplet_owner_browser.contents, | 36 | ... find_tag_by_id(netapplet_owner_browser.contents, |
285 | 37 | ... 'translation-permissions')) | 37 | ... 'translation-permissions')) |
286 | 38 | NetApplet (Unspecified) is translated with Open permissions. | 38 | NetApplet (Unspecified) is translated with Open permissions. |
287 | 39 | You can modify permissions on the Settings page. | ||
288 | 40 | 39 | ||
289 | 41 | Now let's make sure we can see the page to let us change translation | 40 | Now let's make sure we can see the page to let us change translation |
290 | 42 | group and permissions. | 41 | group and permissions. |
291 | 43 | 42 | ||
292 | 44 | >>> translations_page_url = netapplet_owner_browser.url | 43 | >>> translations_page_url = netapplet_owner_browser.url |
294 | 45 | >>> netapplet_owner_browser.getLink('Settings').click() | 44 | >>> netapplet_owner_browser.getLink('Change permissions').click() |
295 | 46 | >>> change_translators_url = netapplet_owner_browser.url | 45 | >>> change_translators_url = netapplet_owner_browser.url |
296 | 47 | 46 | ||
297 | 48 | >>> print netapplet_owner_browser.title | 47 | >>> print netapplet_owner_browser.title |
298 | @@ -57,11 +56,11 @@ | |||
299 | 57 | ... 'Translation group').displayValue | 56 | ... 'Translation group').displayValue |
300 | 58 | ['(no value)'] | 57 | ['(no value)'] |
301 | 59 | 58 | ||
303 | 60 | Ordinary users cannot see the "Settings" link or the page it | 59 | Ordinary users cannot see the "Change permissions" link or the page it |
304 | 61 | leads to. | 60 | leads to. |
305 | 62 | 61 | ||
306 | 63 | >>> user_browser.open(translations_page_url) | 62 | >>> user_browser.open(translations_page_url) |
308 | 64 | >>> user_browser.getLink('Settings').click() | 63 | >>> user_browser.getLink('Change permissions').click() |
309 | 65 | Traceback (most recent call last): | 64 | Traceback (most recent call last): |
310 | 66 | ... | 65 | ... |
311 | 67 | LinkNotFoundError | 66 | LinkNotFoundError |
312 | 68 | 67 | ||
313 | === modified file 'lib/lp/translations/stories/translationgroups/20-project-translationgroup.txt' | |||
314 | --- lib/lp/translations/stories/translationgroups/20-project-translationgroup.txt 2009-08-31 22:13:07 +0000 | |||
315 | +++ lib/lp/translations/stories/translationgroups/20-project-translationgroup.txt 2009-09-10 18:35:28 +0000 | |||
316 | @@ -13,7 +13,7 @@ | |||
317 | 13 | And now make sure we can see the form to change the translation group | 13 | And now make sure we can see the form to change the translation group |
318 | 14 | and permissions on a project. | 14 | and permissions on a project. |
319 | 15 | 15 | ||
321 | 16 | >>> gnome_owner_browser.getLink('Settings').click() | 16 | >>> gnome_owner_browser.getLink('Change permissions').click() |
322 | 17 | >>> print gnome_owner_browser.title | 17 | >>> print gnome_owner_browser.title |
323 | 18 | Set translation permissions for GNOME | 18 | Set translation permissions for GNOME |
324 | 19 | 19 | ||
325 | @@ -21,7 +21,7 @@ | |||
326 | 21 | to access the page it leads to. | 21 | to access the page it leads to. |
327 | 22 | 22 | ||
328 | 23 | >>> user_browser.open(translations_page_url) | 23 | >>> user_browser.open(translations_page_url) |
330 | 24 | >>> user_browser.getLink('Settings').click() | 24 | >>> user_browser.getLink('Change permissions').click() |
331 | 25 | Traceback (most recent call last): | 25 | Traceback (most recent call last): |
332 | 26 | ... | 26 | ... |
333 | 27 | LinkNotFoundError | 27 | LinkNotFoundError |
334 | 28 | 28 | ||
335 | === modified file 'lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt' | |||
336 | --- lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt 2009-08-31 22:13:07 +0000 | |||
337 | +++ lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt 2009-09-10 18:35:28 +0000 | |||
338 | @@ -13,7 +13,7 @@ | |||
339 | 13 | as the translation group for the netapplet product... | 13 | as the translation group for the netapplet product... |
340 | 14 | 14 | ||
341 | 15 | >>> admin_browser.getLink('Translations').click() | 15 | >>> admin_browser.getLink('Translations').click() |
343 | 16 | >>> admin_browser.getLink('Settings').click() | 16 | >>> admin_browser.getLink('Change permissions').click() |
344 | 17 | >>> admin_browser.getControl('Translation group').displayOptions | 17 | >>> admin_browser.getControl('Translation group').displayOptions |
345 | 18 | ['(no value)', 'Single-language Translators', | 18 | ['(no value)', 'Single-language Translators', |
346 | 19 | 'The PolyGlot Translation Group', 'Just a testing team'] | 19 | 'The PolyGlot Translation Group', 'Just a testing team'] |
347 | 20 | 20 | ||
348 | === modified file 'lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt' | |||
349 | --- lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt 2009-07-17 17:59:07 +0000 | |||
350 | +++ lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt 2009-09-10 18:47:57 +0000 | |||
351 | @@ -1,22 +1,21 @@ | |||
371 | 1 | <div class="portlet" id="portlet-translation-permissions"> | 1 | <div id="portlet-translation-permissions" |
372 | 2 | <h2>Translation permissions</h2> | 2 | xmlns="http://www.w3.org/1999/xhtml" |
373 | 3 | <div class="portletBody"> | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal"> |
374 | 4 | <table> | 4 | <p id="translation-permissions"> |
375 | 5 | <tr> | 5 | <tal:product replace="structure context/fmt:link">This |
376 | 6 | <th>Translation group:</th> | 6 | project</tal:product> is translated |
377 | 7 | <td tal:condition="not: context/translationgroup"> | 7 | <tal:hasgroup condition="context/translationgroup">by |
378 | 8 | Not assigned | 8 | <a tal:replace="structure context/translationgroup/fmt:link" |
379 | 9 | </td> | 9 | >translators</a> |
380 | 10 | <td tal:condition="context/translationgroup"> | 10 | </tal:hasgroup> |
381 | 11 | <a tal:attributes="href context/translationgroup/fmt:url" | 11 | with <a target="help" href="/+help/permissions-policies.html" |
382 | 12 | tal:content="context/translationgroup/title" /> | 12 | tal:content="context/translationpermission/title">certain</a> |
383 | 13 | </td> | 13 | permissions. |
384 | 14 | </tr> | 14 | </p> |
385 | 15 | <tr> | 15 | <div tal:condition="context/required:launchpad.Edit"> |
386 | 16 | <th>Permissions:</th> | 16 | <a class="edit sprite" |
387 | 17 | <td tal:content="context/translationpermission/title">Open</td> | 17 | tal:define="link context/menu:navigation/settings" |
388 | 18 | </tr> | 18 | tal:attributes="href link/url" |
389 | 19 | </table> | 19 | >Change permissions</a> |
390 | 20 | </div> | 20 | </div> |
391 | 21 | </div> | 21 | </div> |
392 | 22 | |||
393 | 23 | 22 | ||
394 | === modified file 'lib/lp/translations/templates/product-portlet-translatables.pt' | |||
395 | --- lib/lp/translations/templates/product-portlet-translatables.pt 2009-07-17 17:59:07 +0000 | |||
396 | +++ lib/lp/translations/templates/product-portlet-translatables.pt 2009-09-10 18:35:28 +0000 | |||
397 | @@ -6,10 +6,9 @@ | |||
398 | 6 | 6 | ||
399 | 7 | <div class="portlet" id="portlet-translatable-branches" | 7 | <div class="portlet" id="portlet-translatable-branches" |
400 | 8 | tal:condition="context/translatable_series"> | 8 | tal:condition="context/translatable_series"> |
402 | 9 | <h2>All translatable series</h2> | 9 | <h3>All translatable series</h3> |
403 | 10 | 10 | ||
404 | 11 | <div class="portletBody portletContent"> | 11 | <div class="portletBody portletContent"> |
405 | 12 | |||
406 | 13 | <ul> | 12 | <ul> |
407 | 14 | <li class="translations" | 13 | <li class="translations" |
408 | 15 | tal:repeat="series context/translatable_series"> | 14 | tal:repeat="series context/translatable_series"> |
409 | @@ -18,14 +17,37 @@ | |||
410 | 18 | series title</a> | 17 | series title</a> |
411 | 19 | </li> | 18 | </li> |
412 | 20 | </ul> | 19 | </ul> |
414 | 21 | 20 | </div> | |
415 | 21 | </div> | ||
416 | 22 | |||
417 | 23 | <div tal:condition="context/required:launchpad.Edit"> | ||
418 | 24 | <div class="portlet" id="portlet-untranslatable-branches" | ||
419 | 25 | tal:condition="view/untranslatable_series"> | ||
420 | 26 | <h3>Set up translations for other series</h3> | ||
421 | 27 | |||
422 | 28 | <div class="portletBody portletContent"> | ||
423 | 29 | <ul> | ||
424 | 30 | <li class="translations" | ||
425 | 31 | tal:repeat="series view/untranslatable_series"> | ||
426 | 32 | <a tal:content="series/title" | ||
427 | 33 | tal:attributes="href string:${series/fmt:url}/+translations"> | ||
428 | 34 | series title</a> — | ||
429 | 35 | <a tal:attributes=" | ||
430 | 36 | href string:${series/fmt:url}/+translations-upload"> | ||
431 | 37 | upload</a> or | ||
432 | 38 | <a tal:attributes=" | ||
433 | 39 | href string:${series/fmt:url}/+translations-settings"> | ||
434 | 40 | set up a bzr import</a>. | ||
435 | 41 | </li> | ||
436 | 42 | </ul> | ||
437 | 43 | </div> | ||
438 | 22 | </div> | 44 | </div> |
439 | 23 | </div> | 45 | </div> |
440 | 24 | 46 | ||
441 | 25 | <div class="portlet" id="portlet-translatable-packages" | 47 | <div class="portlet" id="portlet-translatable-packages" |
442 | 26 | tal:condition="context/translatable_packages"> | 48 | tal:condition="context/translatable_packages"> |
443 | 27 | 49 | ||
445 | 28 | <h2>All translatable distribution packages</h2> | 50 | <h3>All translatable distribution packages</h3> |
446 | 29 | 51 | ||
447 | 30 | <div class="portletBody portletContent "> | 52 | <div class="portletBody portletContent "> |
448 | 31 | 53 | ||
449 | 32 | 54 | ||
450 | === modified file 'lib/lp/translations/templates/product-translations.pt' | |||
451 | --- lib/lp/translations/templates/product-translations.pt 2009-07-17 17:59:07 +0000 | |||
452 | +++ lib/lp/translations/templates/product-translations.pt 2009-09-10 18:35:28 +0000 | |||
453 | @@ -2,30 +2,13 @@ | |||
454 | 2 | xmlns="http://www.w3.org/1999/xhtml" | 2 | xmlns="http://www.w3.org/1999/xhtml" |
455 | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
456 | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
463 | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" | 5 | metal:use-macro="view/macro:page/main_only" |
458 | 6 | xml:lang="en" | ||
459 | 7 | lang="en" | ||
460 | 8 | dir="ltr" | ||
461 | 9 | metal:use-macro="view/macro:page/onecolumn" | ||
462 | 10 | i18n:domain="launchpad" | ||
464 | 11 | > | 6 | > |
465 | 12 | <!-- metal:use-macro="context/@@main_template/master" --> | ||
466 | 13 | 7 | ||
467 | 14 | <body> | 8 | <body> |
468 | 15 | <div metal:fill-slot="main" | 9 | <div metal:fill-slot="main" |
469 | 16 | tal:define="uses_translations view/uses_translations; | 10 | tal:define="uses_translations view/uses_translations; |
470 | 17 | admin_user context/required:launchpad.TranslationsAdmin"> | 11 | admin_user context/required:launchpad.TranslationsAdmin"> |
471 | 18 | <tal:uses-translations condition="uses_translations"> | ||
472 | 19 | <h1>Translation overview</h1> | ||
473 | 20 | </tal:uses-translations> | ||
474 | 21 | <tal:not-uses-translations condition="not: uses_translations"> | ||
475 | 22 | <h1 tal:condition="admin_user"> | ||
476 | 23 | How to start using Launchpad Translations | ||
477 | 24 | </h1> | ||
478 | 25 | <h1 tal:condition="not: admin_user"> | ||
479 | 26 | Translation setup needed | ||
480 | 27 | </h1> | ||
481 | 28 | </tal:not-uses-translations> | ||
482 | 29 | <ul class="helplinks"> | 12 | <ul class="helplinks"> |
483 | 30 | <li> | 13 | <li> |
484 | 31 | <a href="https://help.launchpad.net/Translations" | 14 | <a href="https://help.launchpad.net/Translations" |
485 | @@ -35,31 +18,80 @@ | |||
486 | 35 | </li> | 18 | </li> |
487 | 36 | </ul> | 19 | </ul> |
488 | 37 | <tal:uses-translations condition="uses_translations"> | 20 | <tal:uses-translations condition="uses_translations"> |
489 | 21 | <h1>Translation overview</h1> | ||
490 | 22 | </tal:uses-translations> | ||
491 | 23 | <tal:not-uses-translations condition="not: uses_translations"> | ||
492 | 24 | <h1 tal:condition="admin_user"> | ||
493 | 25 | How to start using Launchpad Translations | ||
494 | 26 | </h1> | ||
495 | 27 | <h1 tal:condition="not: admin_user"> | ||
496 | 28 | Translation setup needed | ||
497 | 29 | </h1> | ||
498 | 30 | </tal:not-uses-translations> | ||
499 | 31 | <tal:uses-translations condition="uses_translations"> | ||
500 | 38 | <tal:translatable define="target context/primary_translatable"> | 32 | <tal:translatable define="target context/primary_translatable"> |
525 | 39 | <p id="translation-permissions"> | 33 | |
526 | 40 | <tal:product replace="structure context/fmt:link">This | 34 | <div class="top-portlet"> |
527 | 41 | project</tal:product> is translated | 35 | </div> |
528 | 42 | <tal:hasgroup condition="context/translationgroup">by | 36 | |
529 | 43 | <a tal:attributes="href context/translationgroup/fmt:url" | 37 | <div class="yui-g"> |
530 | 44 | tal:content="context/translationgroup/title">translators</a> | 38 | <div class="yui-u first"> |
531 | 45 | </tal:hasgroup> | 39 | <div class="portlet"> |
532 | 46 | with <a target="help" href="/+help/permissions-policies.html" | 40 | <h3>Translation details</h3> |
533 | 47 | tal:content="context/translationpermission/title">certain</a> | 41 | <p> |
534 | 48 | permissions. | 42 | Launchpad currently recommends translating |
535 | 49 | <tal:permissions condition="context/required:launchpad.Edit"> | 43 | <tal:target replace="structure target/fmt:link/+translations" |
536 | 50 | You can modify permissions on the | 44 | >trunk</tal:target>. |
537 | 51 | <a | 45 | <tal:admins condition="context/required:launchpad.AnyPerson"> |
538 | 52 | tal:define="link context/menu:navigation/translators" | 46 | You can also |
539 | 53 | tal:attributes="href link/url" | 47 | <a tal:attributes="href target/fmt:url/+export" |
540 | 54 | >Settings</a> page. | 48 | >download</a> or |
541 | 55 | </tal:permissions> | 49 | <a tal:attributes=" |
542 | 56 | </p> | 50 | href target/fmt:url/+translations-upload" |
543 | 57 | <h2>Translation for | 51 | >upload</a> translations for |
544 | 58 | <span tal:replace="target/displayname">main</span></h2> | 52 | <tal:target replace="structure target/name" |
545 | 59 | <div tal:replace="structure target/@@+languages" /> | 53 | >trunk</tal:target>. |
546 | 60 | <div style="height:1em;"></div> | 54 | </tal:admins> |
547 | 61 | <div tal:replace="structure context/@@+rosetta-status-legend" /> | 55 | </p> |
548 | 62 | <div tal:replace="structure context/@@+portlet-translatables" /> | 56 | <p>To see all the translation files that are waiting to be |
549 | 57 | imported, please look at | ||
550 | 58 | <a tal:attributes="href context/fmt:url/+imports" | ||
551 | 59 | tal:content="string:${context/displayname} import queue"> | ||
552 | 60 | import queue</a>. | ||
553 | 61 | </p> | ||
554 | 62 | </div> | ||
555 | 63 | <div class="portlet"> | ||
556 | 64 | <h3>Permissions</h3> | ||
557 | 65 | <p> | ||
558 | 66 | <tal:permissions replace=" | ||
559 | 67 | structure | ||
560 | 68 | context/@@+portlet-translation-groups-and-permission"/> | ||
561 | 69 | </p> | ||
562 | 70 | </div> | ||
563 | 71 | </div> | ||
564 | 72 | <div class="yui-u"> | ||
565 | 73 | <div> | ||
566 | 74 | <tal:registrant-or-admin | ||
567 | 75 | condition="admin_user"> | ||
568 | 76 | <tal:has-obsolete-entries | ||
569 | 77 | condition="context/obsolete_translatable_series"> | ||
570 | 78 | <div tal:replace=" | ||
571 | 79 | structure | ||
572 | 80 | context/@@+portlet-obsolete-translatables" /> | ||
573 | 81 | </tal:has-obsolete-entries> | ||
574 | 82 | </tal:registrant-or-admin> | ||
575 | 83 | </div> | ||
576 | 84 | <div tal:replace="structure context/@@+portlet-translatables" /> | ||
577 | 85 | </div> | ||
578 | 86 | </div> | ||
579 | 87 | |||
580 | 88 | <div class="yui-b"> | ||
581 | 89 | <h2>Translation for | ||
582 | 90 | <span tal:replace="target/displayname">main</span></h2> | ||
583 | 91 | <div tal:replace="structure target/@@+languages" /> | ||
584 | 92 | <div style="height:1em;"></div> | ||
585 | 93 | <div tal:replace="structure context/@@+rosetta-status-legend" /> | ||
586 | 94 | </div> | ||
587 | 63 | </tal:translatable> | 95 | </tal:translatable> |
588 | 64 | </tal:uses-translations> | 96 | </tal:uses-translations> |
589 | 65 | <tal:not-uses-translations condition="not: uses_translations"> | 97 | <tal:not-uses-translations condition="not: uses_translations"> |
590 | @@ -123,14 +155,6 @@ | |||
591 | 123 | </p> | 155 | </p> |
592 | 124 | </tal:other> | 156 | </tal:other> |
593 | 125 | </tal:not-uses-translations> | 157 | </tal:not-uses-translations> |
594 | 126 | <tal:registrant-or-admin | ||
595 | 127 | condition="admin_user"> | ||
596 | 128 | <tal:has-obsolete-entries | ||
597 | 129 | condition="context/obsolete_translatable_series"> | ||
598 | 130 | <div | ||
599 | 131 | tal:replace="structure context/@@+portlet-obsolete-translatables" /> | ||
600 | 132 | </tal:has-obsolete-entries> | ||
601 | 133 | </tal:registrant-or-admin> | ||
602 | 134 | </div> | 158 | </div> |
603 | 135 | </body> | 159 | </body> |
604 | 136 | </html> | 160 | </html> |
605 | 137 | 161 | ||
606 | === modified file 'lib/lp/translations/templates/productseries-translations-languages.pt' | |||
607 | --- lib/lp/translations/templates/productseries-translations-languages.pt 2009-07-17 17:59:07 +0000 | |||
608 | +++ lib/lp/translations/templates/productseries-translations-languages.pt 2009-09-10 07:24:24 +0000 | |||
609 | @@ -3,7 +3,7 @@ | |||
610 | 3 | xmlns:metal="http://xml.zope.org/namespaces/metal" | 3 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
611 | 4 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" | 4 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" |
612 | 5 | omit-tag=""> | 5 | omit-tag=""> |
614 | 6 | <table class="sortable listing" style="width:auto;" id="languagestats"> | 6 | <table class="sortable listing" style="width:100%;" id="languagestats"> |
615 | 7 | <thead> | 7 | <thead> |
616 | 8 | <tr> | 8 | <tr> |
617 | 9 | <th>Language</th> | 9 | <th>Language</th> |
618 | 10 | 10 | ||
619 | === modified file 'lib/lp/translations/templates/productseries-translations.pt' | |||
620 | --- lib/lp/translations/templates/productseries-translations.pt 2009-07-17 17:59:07 +0000 | |||
621 | +++ lib/lp/translations/templates/productseries-translations.pt 2009-09-10 07:24:24 +0000 | |||
622 | @@ -70,7 +70,7 @@ | |||
623 | 70 | <tal:permissions condition="context/product/required:launchpad.Edit"> | 70 | <tal:permissions condition="context/product/required:launchpad.Edit"> |
624 | 71 | You can modify permissions on the | 71 | You can modify permissions on the |
625 | 72 | <a | 72 | <a |
627 | 73 | tal:define="link context/product/menu:navigation/translators" | 73 | tal:define="link context/product/menu:navigation/settings" |
628 | 74 | tal:attributes="href link/url" | 74 | tal:attributes="href link/url" |
629 | 75 | >project settings</a> page. | 75 | >project settings</a> page. |
630 | 76 | </tal:permissions> | 76 | </tal:permissions> |
631 | 77 | 77 | ||
632 | === modified file 'lib/lp/translations/templates/project-translations.pt' | |||
633 | --- lib/lp/translations/templates/project-translations.pt 2009-07-17 17:59:07 +0000 | |||
634 | +++ lib/lp/translations/templates/project-translations.pt 2009-09-10 18:35:28 +0000 | |||
635 | @@ -2,80 +2,88 @@ | |||
636 | 2 | xmlns="http://www.w3.org/1999/xhtml" | 2 | xmlns="http://www.w3.org/1999/xhtml" |
637 | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" | 3 | xmlns:tal="http://xml.zope.org/namespaces/tal" |
638 | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" | 4 | xmlns:metal="http://xml.zope.org/namespaces/metal" |
645 | 5 | xmlns:i18n="http://xml.zope.org/namespaces/i18n" | 5 | metal:use-macro="view/macro:page/main_only" |
640 | 6 | xml:lang="en" | ||
641 | 7 | lang="en" | ||
642 | 8 | dir="ltr" | ||
643 | 9 | metal:use-macro="view/macro:page/onecolumn" | ||
644 | 10 | i18n:domain="launchpad" | ||
646 | 11 | > | 6 | > |
681 | 12 | <body> | 7 | <body> |
682 | 13 | <metal:portlets fill-slot="portlets"> | 8 | <div metal:fill-slot="main"> |
683 | 14 | <tal:portlet | 9 | |
684 | 15 | replace="structure context/@@+portlet-translation-groups-and-permission" | 10 | <h1>Translatable applications</h1> |
685 | 16 | /> | 11 | |
686 | 17 | <tal:portlet replace="structure context/@@+portlet-preflangs" /> | 12 | <div class="top-portlet"> |
687 | 18 | </metal:portlets> | 13 | <p tal:condition="context/translatables"> |
688 | 19 | 14 | Select a project you want to translate into your own language. | |
689 | 20 | <metal:heading fill-slot="pageheading"> | 15 | </p> |
690 | 21 | 16 | <p tal:condition="not:context/translatables"> | |
691 | 22 | <tal:block condition="view/required:launchpad.Edit"> | 17 | There are no translatable projects in |
692 | 23 | <p tal:condition="not: context/products" class="warning message"> | 18 | <span tal:content="context/displayname">GNOME</span>. |
693 | 24 | There are no projects registered for | 19 | </p> |
694 | 25 | <span tal:replace="context/displayname">project displayname</span>. | 20 | <p tal:condition="not:view/required:launchpad.Edit"> |
695 | 26 | <br /> | 21 | If a project for <span tal:content="context/displayname">Project |
696 | 27 | You need to <a href="+newproduct">register another project that is | 22 | </span> is not listed here, get in touch with |
697 | 28 | part of <tal:project replace="context/displayname" /></a> or associate | 23 | <a tal:replace="structure context/owner/fmt:link">owner</a> who is |
698 | 29 | an existing project with it. | 24 | the administrator for the project. |
699 | 30 | </p> | 25 | </p> |
666 | 31 | </tal:block> | ||
667 | 32 | |||
668 | 33 | <tal:untranslatable condition="not: context/translatables"> | ||
669 | 34 | <h1 tal:condition="context/required:launchpad.Edit"> | ||
670 | 35 | How to set up translations | ||
671 | 36 | </h1> | ||
672 | 37 | <h1 tal:condition="not: context/required:launchpad.Edit"> | ||
673 | 38 | Translation setup needed | ||
674 | 39 | </h1> | ||
675 | 40 | </tal:untranslatable> | ||
676 | 41 | </metal:heading> | ||
677 | 42 | |||
678 | 43 | <div metal:fill-slot="main"> | ||
679 | 44 | |||
680 | 45 | <h2>Translatable applications</h2> | ||
700 | 46 | 26 | ||
701 | 47 | <p> | 27 | <p> |
735 | 48 | Select a project to begin translating it into your own language. | 28 | <tal:permissions |
736 | 49 | If a project for <span tal:content="context/displayname">Project | 29 | replace="structure |
737 | 50 | </span> is not listed here, check that it’s | 30 | context/@@+portlet-translation-groups-and-permission" |
738 | 51 | <a href="/projects">registered with Launchpad</a>, and follow the | 31 | /> |
739 | 52 | instructions described at | 32 | </p> |
740 | 53 | <a href="https://help.launchpad.net/RosettaFAQ">RosettaFAQ</a> | 33 | </div> |
741 | 54 | </p> | 34 | |
742 | 55 | 35 | <div class="yui-g"> | |
743 | 56 | <table class="listing"> | 36 | <div class="yui-u first"> |
744 | 57 | <thead> | 37 | <div class="portlet" id="translatable-projects"> |
745 | 58 | <tr> | 38 | <h3>Translatable projects</h3> |
746 | 59 | <th>Project</th> | 39 | <dl tal:condition="context/translatables"> |
747 | 60 | <th>Title</th> | 40 | <tal:project repeat="product context/translatables"> |
748 | 61 | </tr> | 41 | <dt> |
749 | 62 | </thead> | 42 | <a tal:replace="structure product/fmt:link/+translations"> |
750 | 63 | <tbody> | 43 | Evolution |
751 | 64 | <tr tal:repeat="product context/translatables"> | 44 | </a> |
752 | 65 | <td> | 45 | </dt> |
753 | 66 | <img alt="" src="/@@/product" /> | 46 | <dd> |
754 | 67 | <a tal:content="product/displayname" | 47 | <span tal:replace="product/title"> |
755 | 68 | tal:attributes=" | 48 | The Evolution Groupware Application |
756 | 69 | href product/fmt:url">Evolution</a> | 49 | </span> |
757 | 70 | </td> | 50 | </dd> |
758 | 71 | <td> | 51 | </tal:project> |
759 | 72 | <span tal:replace="product/title"> | 52 | </dl> |
760 | 73 | The Evolution Groupware Application | 53 | </div> |
761 | 74 | </span> | 54 | </div> |
762 | 75 | </td> | 55 | <div class="yui-u"> |
763 | 76 | </tr> | 56 | <div class="portlet" id="untranslatable-projects"> |
764 | 77 | </tbody> | 57 | <h3>Other projects in |
765 | 78 | </table> | 58 | <tal:group replace="context/displayname">GNOME</tal:group> |
766 | 79 | </div><!--main--> | 59 | </h3> |
767 | 80 | </body> | 60 | <p> |
768 | 61 | These projects are not yet set up for translation in Launchpad. | ||
769 | 62 | </p> | ||
770 | 63 | <dl tal:condition="view/untranslatables"> | ||
771 | 64 | <tal:project repeat="product view/untranslatables"> | ||
772 | 65 | <dt> | ||
773 | 66 | <a tal:replace="structure product/fmt:link/+translations"> | ||
774 | 67 | Evolution | ||
775 | 68 | </a> | ||
776 | 69 | </dt> | ||
777 | 70 | <dd> | ||
778 | 71 | <span tal:replace="product/title"> | ||
779 | 72 | The Evolution Groupware Application | ||
780 | 73 | </span> | ||
781 | 74 | </dd> | ||
782 | 75 | </tal:project> | ||
783 | 76 | </dl> | ||
784 | 77 | </div> | ||
785 | 78 | </div> | ||
786 | 79 | </div> | ||
787 | 80 | <div class="yui-b"> | ||
788 | 81 | <p tal:condition="view/required:launchpad.Edit"> | ||
789 | 82 | <a class="add sprite" href="+newproduct">Add another project</a> | ||
790 | 83 | </p> | ||
791 | 84 | </div> | ||
792 | 85 | |||
793 | 86 | |||
794 | 87 | </div><!--main--> | ||
795 | 88 | </body> | ||
796 | 81 | </html> | 89 | </html> |
797 | 82 | 90 |
= Bug #427486 =
Migrate product- translations. pt and project- translations. pt pages to
3.0 layout with mostly mechanical changes.
Xmllint reports problem in a page I have touched just so it doesn't
OOPS, which is not migrated yet (next step), so that's where I'll fix
xmllint issues as well.
== Proposed fix ==
1. https:/ /translations. launchpad. dev/gnome (project page)
* Move permissions display and settings inline
* Add untranslated applications next to translated applications
(this is just a very minor step, which is why changes are considered
'mechanical': in the future, this page should aggregate statistics
over all translatable projects)
2. https:/ /translations. launchpad. dev/evolution /translations. launchpad. dev/firefox (not using translations, strictly mechanical changes)
https:/
* Move 'translation focus' (direct link, and upload and download links
for those who can see them) inline.
* Move 'import queue' link inline.
* Move permissions display and settings inline (reuse the same portlet)
* Use two column layout and list all translatable series on the top of
the page (people had trouble to find these when they were at the bottom)
* For those who manage translations for this project, also show a list of
all series which do not have translations with direct links on how they
can set them up
== Tests ==
Strictly relevant tests:
bin/test -vvt xx-productserie s-translation- export. txt -t xx-product- export. txt -t xx-project- translations. txt -t xx-product- translations. txt -t xx-translation- import- queue-targets. txt -t stories. translationgrou ps
But basically, all translations tests cover this:
bin/test -vvt 'translations. *stories'
== Demo and Q/A ==
https:/ /translations. launchpad. dev/gnome /translations. launchpad. dev/evolution /translations. launchpad. dev/firefox
https:/
https:/
= Launchpad lint =
Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.
Linting changed files: translations/ browser/ project. py translations/ browser/ configure. zcml translations/ stories/ standalone/ xx-product- translations. txt translations/ stories/ translationgrou ps/20-project- translationgrou p.txt translations/ stories/ standalone/ xx-product- export. txt translations/ templates/ hastranslationg roup-portlet- translation- groups- and-permission. pt translations/ templates/ productseries- translations. pt translations/ templates/ product- translations. pt translations/ browser/ product. py translations/ templates/ project- translations. pt translations/ stories/ productseries/ xx-productserie s-translation- export. txt translations/ stories/ importqueue/ xx-translation- import- queue-targets. txt translations/ stories/ translationgrou ps/46-test- distro- structured- permissions. txt translations/ templates/ product- portlet- translatables. pt translations/ templates/ productseries- translations- languages. pt translations/ stories/ translationgrou ps/15-product- translation- group.txt translations/ stories/ project/ xx-project- translations. ..
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/
lib/lp/