Merge lp:~danilo/launchpad/bug-516317 into lp:launchpad

Proposed by Данило Шеган
Status: Merged
Approved by: Данило Шеган
Approved revision: no longer in the source branch.
Merged at revision: 12155
Proposed branch: lp:~danilo/launchpad/bug-516317
Merge into: lp:launchpad
Diff against target: 654 lines (+88/-112)
21 files modified
lib/canonical/launchpad/pagetests/basics/notfound-traversals.txt (+2/-2)
lib/lp/registry/browser/configure.zcml (+0/-7)
lib/lp/registry/browser/distribution.py (+2/-2)
lib/lp/registry/browser/product.py (+1/-9)
lib/lp/registry/configure.zcml (+2/-8)
lib/lp/registry/interfaces/distribution.py (+4/-3)
lib/lp/registry/interfaces/product.py (+2/-2)
lib/lp/translations/browser/configure.zcml (+5/-6)
lib/lp/translations/browser/distribution.py (+10/-9)
lib/lp/translations/browser/product.py (+11/-14)
lib/lp/translations/stories/distribution/xx-distribution-translations.txt (+6/-5)
lib/lp/translations/stories/standalone/xx-potemplate-index.txt (+9/-18)
lib/lp/translations/stories/translationfocus/xx-product-translationfocus.txt (+6/-4)
lib/lp/translations/stories/translationgroups/10-distro-translation-group.txt (+3/-3)
lib/lp/translations/stories/translationgroups/15-product-translation-group.txt (+4/-4)
lib/lp/translations/stories/translationgroups/45-test-distro-restricted-permissions.txt (+2/-1)
lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt (+1/-1)
lib/lp/translations/stories/translationgroups/xx-change-translation-policy.txt (+10/-9)
lib/lp/translations/templates/distribution-translations.pt (+4/-0)
lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt (+0/-5)
lib/lp/translations/templates/project-translations.pt (+4/-0)
To merge this branch: bzr merge lp:~danilo/launchpad/bug-516317
Reviewer Review Type Date Requested Status
Henning Eggers (community) ui,code Approve
Launchpad code reviewers Pending
Review via email: mp+44746@code.launchpad.net

Commit message

[r=henninge][ui=henninge][bug=516317] Sanitize and unify translation settings pages.

Description of the change

= Bug 516317 =

Merge +settings and +configure-translations page and update the links which say "Change permissions" to say "Configure translations".

Caveats:

- At the moment, products have double link to "configure translations" page: http://people.canonical.com/~danilo/screenshots/evolution-translations.png.
- At the moment, Ubuntu doesn't have "configure translations" near the top, even though I think it should (where it says what's the default focus): http://people.canonical.com/~danilo/screenshots/ubuntu-translations.png
- I haven't updated the project group page (see eg. https://translations.launchpad.dev/gnome) because you can't change anything but permissions there
- Ideally, we'd have all this ajaxified and we could eg. change permissions just-in-place, be able to set up per-series translation settings while choosing translation focus... But hey :)
- I am unsure about "custom language codes" link: I feel it should be close to "Configure translations" link (maybe even available from the settings page)

Though I'd like to fix all of these, I still think getting these onto single translations configuration page is a win in itself and I'd probably be happy if I get your input on the first two points: should I keep the double "configure translations" link on the project page (I'd like to get rid of the first one, but since that one was added by registry, I want second opinion :), and what should I do for the distro page (I'd like to have a "change" button near the translation focus description)?

FWIW, remaining lint issue is due to comment being treated as empty line.

== Tests ==

bin/test -cvvm lp.translations -t stories

== Demo and Q/A ==

https://translations.launchpad.dev/evolution
https://translations.launchpad.dev/ubuntu

= Launchpad lint =

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/registry/configure.zcml
  lib/lp/registry/browser/configure.zcml
  lib/lp/registry/browser/product.py
  lib/lp/registry/interfaces/distribution.py
  lib/lp/registry/interfaces/product.py
  lib/lp/translations/browser/configure.zcml
  lib/lp/translations/browser/distribution.py
  lib/lp/translations/browser/product.py
  lib/lp/translations/stories/distribution/xx-distribution-translations.txt
  lib/lp/translations/stories/standalone/xx-potemplate-index.txt
  lib/lp/translations/stories/translationfocus/xx-product-translationfocus.txt
  lib/lp/translations/stories/translationgroups/10-distro-translation-group.txt
  lib/lp/translations/stories/translationgroups/15-product-translation-group.txt
  lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt
  lib/lp/translations/stories/translationgroups/xx-change-translation-policy.txt
  lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt

./lib/lp/registry/interfaces/product.py
     982: E301 expected 1 blank line, found 2

To post a comment you must log in.
Revision history for this message
Henning Eggers (henninge) wrote :

Hi Danilo,
thank you for doing this and also for pointing out the caveats - makes life easy for me. ;)

I think there should be only one "Configure translations" link and it should be near the top. I guess the intention of that placement near the help link is to make it easy for project maintainers to start on translations. That is not so important on distributions as they don't get started very often. Also, the current placement at the bottom is in the "permissions" portlet but this page is not just about permissions any more, even before this branch. So, a general placement in the top portlet seems logical.

Another little thing: The check box on the distribution configuration page is labelled "Translations for this project are done in Launchpad" - can you put "distribution" there, please?

Cheers,
Henning

review: Needs Fixing (ui)
Revision history for this message
Данило Шеган (danilo) wrote :

Ok, I've got rid of the double link and added a top-level link for the distribution. I didn't change "project" to "distribution" for official_rosetta in the interface since it's still extended by other interfaces like IProduct.

Revision history for this message
Henning Eggers (henninge) wrote :
Download full text (8.4 KiB)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Danilo,
thank you for this branch, great improvement in this. I am happy with you
landing this but please consider my few little comments.

 review approve code,ui

Cheers,
Henning

> === modified file 'lib/lp/registry/browser/configure.zcml'
> === modified file 'lib/lp/registry/browser/distribution.py'
> --- lib/lp/registry/browser/distribution.py 2010-12-16 19:59:20 +0000
> +++ lib/lp/registry/browser/distribution.py 2010-12-29 12:49:35 +0000
> @@ -430,7 +430,7 @@
> def configure_translations(self):
> text = 'Configure translations'
> summary = 'Allow users to provide translations for this project.'
> - return Link('+edit', text, summary, icon='edit')
> + return Link('+configure-translations', text, summary, icon='edit')

This may be missing a site="translations" parameter but I just checked the
other links on the project page and they all go to the root site. In fact they
seem to be available on all sites. All other links to +configure-translations
go to the translations site. I don't know if there is some kind of concept
behind this setup or if it is just an oversight.

For a distribution, +configure-translations is only available on the
translations site. This adds to my confusion here.

But I don't think you need to do anything about it now. ;)

>
>
> class DerivativeDistributionOverviewMenu(DistributionOverviewMenu):
>
> === modified file 'lib/lp/registry/browser/product.py'
> === modified file 'lib/lp/registry/configure.zcml'
> === modified file 'lib/lp/registry/interfaces/distribution.py'
> --- lib/lp/registry/interfaces/distribution.py 2010-12-01 11:26:57 +0000
> +++ lib/lp/registry/interfaces/distribution.py 2010-12-29 12:49:35 +0000
> @@ -284,9 +284,9 @@
> "get the full functionality of LP")
>
> translation_focus = Choice(
> - title=_("Translation Focus"),
> + title=_("Translation focus"),
> description=_(
> - "The DistroSeries that should get the translation effort focus."),
> + "The release series translators should focus on."),

"The release series *that* translators should focus on." is much better to read.

> required=False,
> vocabulary='FilteredDistroSeries')
>
> @@ -636,7 +636,8 @@
> archive = ubuntu.main_archive
> series = ubuntu.current_series
> print archive.getPublishedSources(exact_match=True,
> - source_name="apport", distro_series=series)[0].source_package_version
> + source_name="apport",
> + distro_series=series)[0].source_package_version
> """
> export_as_webservice_entry()
>
>
> === modified file 'lib/lp/registry/interfaces/product.py'
> --- lib/lp/registry/interfaces/product.py 2010-12-01 11:26:57 +0000
> +++ lib/lp/registry/interfaces/product.py 2010-12-29 12:49:35 +0000
> @@ -679,11 +679,11 @@
>
> translation_focus = exported(
> ReferenceChoice(
> - title=_("Translation Focus"), required=False,
> + title=_("Translation focus"), required=False,
> vocabulary='FilteredProductSeries',
> schema=IProductSeri...

Read more...

review: Approve (code,ui)
Revision history for this message
Henning Eggers (henninge) :
review: Approve (ui,code)
Revision history for this message
Данило Шеган (danilo) wrote :

Henning, thanks again for the review. I didn't apply all of your
comments though, so see below.

У сре, 29. 12 2010. у 16:08 +0000, Henning Eggers пише:
>
> This may be missing a site="translations" parameter but I just checked
> the other links on the project page and they all go to the root site.
> In fact they seem to be available on all sites. All other links to
> +configure-translations go to the translations site. I don't know if
> there is some kind of concept behind this setup or if it is just an
> oversight.
>
> For a distribution, +configure-translations is only available on the
> translations site. This adds to my confusion here.

Indeed. As explained on IRC, all this is intentional, but just because
I touch on work done by others. Ideally, I think we should just let
them live on the translations site, but that should be made a general
policy. I didn't change distribution one because that one is basically
entirely different, and I brought them only slightly closer together (by
using the same page ID and narrative).

> > + "The release series translators should focus on."),
>
> "The release series *that* translators should focus on." is much
> better to read.

I disagree, and looking online, so do many others (especially in
writing). I've still adjusted it (in both places) so as to make my nice
reviewer happy :)

As for the facet attribute, entire section is included in <facet
facet="translations"> tag so I wanted to cancel it out explicitely.
Still, considering it's useless, I removed it.

> > class DistributionSettingsView(TranslationsMixin,
> DistributionEditView):
> > - label = "Set permissions and policies"
> > - field_names = ["translationgroup", "translationpermission"]
> > -
> > - @property
> > - def page_title(self):
> > - return "Set translation permissions for %s" % (
> > - self.context.displayname)
> > + label = "Translations settings"
>
> Yeah! Finally this page is converted to 3.0! ;) I think, though, that
> it is custom to include the displayname of the context in the label.

I believe that we (LP team) have had a long discussion about this in the
past, and agreed that it isn't. The result of not including it makes
the following critical elements as such:

| Settings : Translations : Ubuntu (Browser title)
+-------------------------------------------------
| __
| / \ Ubuntu Linux
| \ /
| ^^ Overview Code Bugs *Translations* Answers
|
| <h1>Translation settings</h1>
| Ubuntu > Translations > Settings

And I hold a very strong opinion that including context is not necessary
considering[*] context is mentioned in the page title, at the top of the
page and in breadcrumbs right after the heading. The only decent
argument in favor of including it I could ever hear is that it is better
for search engines. But, with context being so prominent anyway, I
doubt it will make much of a difference.

[*] "...considering *that* context...", if you please :)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/canonical/launchpad/pagetests/basics/notfound-traversals.txt'
--- lib/canonical/launchpad/pagetests/basics/notfound-traversals.txt 2010-12-16 19:27:54 +0000
+++ lib/canonical/launchpad/pagetests/basics/notfound-traversals.txt 2010-12-30 20:12:18 +0000
@@ -147,8 +147,8 @@
147>>> check("/ubuntu/+edit", auth=True)147>>> check("/ubuntu/+edit", auth=True)
148>>> check("/ubuntu/+reassign", auth=True)148>>> check("/ubuntu/+reassign", auth=True)
149>>> check("/ubuntu/+selectmemberteam", auth=True)149>>> check("/ubuntu/+selectmemberteam", auth=True)
150>>> check("/ubuntu/+settings", host='translations.launchpad.dev',150>>> check("/ubuntu/+configure-translations",
151... auth=True)151... host='translations.launchpad.dev', auth=True)
152>>> check("/ubuntu/hoary/+addmilestone", auth=True)152>>> check("/ubuntu/hoary/+addmilestone", auth=True)
153>>> check("/ubuntu/+addspec", auth=True)153>>> check("/ubuntu/+addspec", auth=True)
154>>> check("/ubuntu/+imports", host='translations.launchpad.dev')154>>> check("/ubuntu/+imports", host='translations.launchpad.dev')
155155
=== modified file 'lib/lp/registry/browser/configure.zcml'
--- lib/lp/registry/browser/configure.zcml 2010-12-20 20:16:02 +0000
+++ lib/lp/registry/browser/configure.zcml 2010-12-30 20:12:18 +0000
@@ -1443,13 +1443,6 @@
1443 template="../../app/templates/generic-edit.pt"1443 template="../../app/templates/generic-edit.pt"
1444 class="lp.registry.browser.product.ProductConfigureBlueprintsView"/>1444 class="lp.registry.browser.product.ProductConfigureBlueprintsView"/>
1445 <browser:page1445 <browser:page
1446 for="lp.registry.interfaces.product.IProduct"
1447 facet="overview"
1448 permission="launchpad.Edit"
1449 name="+configure-translations"
1450 template="../../app/templates/generic-edit.pt"
1451 class="lp.registry.browser.product.ProductConfigureTranslationsView"/>
1452 <browser:page
1453 name="+branding"1446 name="+branding"
1454 for="lp.registry.interfaces.product.IProduct"1447 for="lp.registry.interfaces.product.IProduct"
1455 facet="overview"1448 facet="overview"
14561449
=== modified file 'lib/lp/registry/browser/distribution.py'
--- lib/lp/registry/browser/distribution.py 2010-12-16 19:59:20 +0000
+++ lib/lp/registry/browser/distribution.py 2010-12-30 20:12:18 +0000
@@ -426,11 +426,11 @@
426 summary = 'Enable tracking of feature planning.'426 summary = 'Enable tracking of feature planning.'
427 return Link('+edit', text, summary, icon='edit')427 return Link('+edit', text, summary, icon='edit')
428428
429 @enabled_with_permission('launchpad.Edit')429 @enabled_with_permission('launchpad.TranslationsAdmin')
430 def configure_translations(self):430 def configure_translations(self):
431 text = 'Configure translations'431 text = 'Configure translations'
432 summary = 'Allow users to provide translations for this project.'432 summary = 'Allow users to provide translations for this project.'
433 return Link('+edit', text, summary, icon='edit')433 return Link('+configure-translations', text, summary, icon='edit')
434434
435435
436class DerivativeDistributionOverviewMenu(DistributionOverviewMenu):436class DerivativeDistributionOverviewMenu(DistributionOverviewMenu):
437437
=== modified file 'lib/lp/registry/browser/product.py'
--- lib/lp/registry/browser/product.py 2010-12-21 17:18:59 +0000
+++ lib/lp/registry/browser/product.py 2010-12-30 20:12:18 +0000
@@ -15,7 +15,6 @@
15 'ProductConfigureBase',15 'ProductConfigureBase',
16 'ProductConfigureAnswersView',16 'ProductConfigureAnswersView',
17 'ProductConfigureBlueprintsView',17 'ProductConfigureBlueprintsView',
18 'ProductConfigureTranslationsView',
19 'ProductDownloadFileMixin',18 'ProductDownloadFileMixin',
20 'ProductDownloadFilesView',19 'ProductDownloadFilesView',
21 'ProductEditPeopleView',20 'ProductEditPeopleView',
@@ -525,7 +524,7 @@
525 summary = 'Specify where bugs are tracked for this project'524 summary = 'Specify where bugs are tracked for this project'
526 return Link('+configure-bugtracker', text, summary, icon='edit')525 return Link('+configure-bugtracker', text, summary, icon='edit')
527526
528 @enabled_with_permission('launchpad.Edit')527 @enabled_with_permission('launchpad.TranslationsAdmin')
529 def configure_translations(self):528 def configure_translations(self):
530 text = 'Configure translations'529 text = 'Configure translations'
531 summary = 'Allow users to submit translations for this project'530 summary = 'Allow users to submit translations for this project'
@@ -1432,13 +1431,6 @@
1432 usage_fieldname = 'blueprints_usage'1431 usage_fieldname = 'blueprints_usage'
14331432
14341433
1435class ProductConfigureTranslationsView(ProductConfigureBase):
1436 """View class to configure the Launchpad Translations for a project."""
1437
1438 label = "Configure translations"
1439 usage_fieldname = 'translations_usage'
1440
1441
1442class ProductConfigureAnswersView(ProductConfigureBase):1434class ProductConfigureAnswersView(ProductConfigureBase):
1443 """View class to configure the Launchpad Answers for a project."""1435 """View class to configure the Launchpad Answers for a project."""
14441436
14451437
=== modified file 'lib/lp/registry/configure.zcml'
--- lib/lp/registry/configure.zcml 2010-12-15 22:05:43 +0000
+++ lib/lp/registry/configure.zcml 2010-12-30 20:12:18 +0000
@@ -1107,6 +1107,7 @@
1107 <require1107 <require
1108 permission="launchpad.TranslationsAdmin"1108 permission="launchpad.TranslationsAdmin"
1109 set_attributes="1109 set_attributes="
1110 official_rosetta
1110 translation_focus1111 translation_focus
1111 translationgroup1112 translationgroup
1112 translationpermission"/>1113 translationpermission"/>
@@ -1124,13 +1125,6 @@
1124 set_schema="lp.registry.interfaces.product.IProductModerateRestricted"1125 set_schema="lp.registry.interfaces.product.IProductModerateRestricted"
1125 set_attributes="active private_bugs "/>1126 set_attributes="active private_bugs "/>
11261127
1127 <!-- Changes to official_rosetta must be available to Launchpad
1128 Translations admins so we need its own permission. -->
1129
1130 <require
1131 permission="launchpad.TranslationsAdmin"
1132 set_attributes="official_rosetta"/>
1133
1134 <!-- IHasAliases -->1128 <!-- IHasAliases -->
11351129
1136 <allow1130 <allow
@@ -1400,7 +1394,6 @@
1400 official_answers1394 official_answers
1401 official_blueprints1395 official_blueprints
1402 official_malone1396 official_malone
1403 official_rosetta
1404 owner1397 owner
1405 security_contact1398 security_contact
1406 summary1399 summary
@@ -1413,6 +1406,7 @@
1413 permission="launchpad.TranslationsAdmin"1406 permission="launchpad.TranslationsAdmin"
1414 set_attributes="1407 set_attributes="
1415 language_pack_admin1408 language_pack_admin
1409 official_rosetta
1416 translationgroup1410 translationgroup
1417 translationpermission1411 translationpermission
1418 translation_focus"/>1412 translation_focus"/>
14191413
=== modified file 'lib/lp/registry/interfaces/distribution.py'
--- lib/lp/registry/interfaces/distribution.py 2010-12-01 11:26:57 +0000
+++ lib/lp/registry/interfaces/distribution.py 2010-12-30 20:12:18 +0000
@@ -284,9 +284,9 @@
284 "get the full functionality of LP")284 "get the full functionality of LP")
285285
286 translation_focus = Choice(286 translation_focus = Choice(
287 title=_("Translation Focus"),287 title=_("Translation focus"),
288 description=_(288 description=_(
289 "The DistroSeries that should get the translation effort focus."),289 "The release series that translators should focus on."),
290 required=False,290 required=False,
291 vocabulary='FilteredDistroSeries')291 vocabulary='FilteredDistroSeries')
292292
@@ -636,7 +636,8 @@
636 archive = ubuntu.main_archive636 archive = ubuntu.main_archive
637 series = ubuntu.current_series637 series = ubuntu.current_series
638 print archive.getPublishedSources(exact_match=True,638 print archive.getPublishedSources(exact_match=True,
639 source_name="apport", distro_series=series)[0].source_package_version639 source_name="apport",
640 distro_series=series)[0].source_package_version
640 """641 """
641 export_as_webservice_entry()642 export_as_webservice_entry()
642643
643644
=== modified file 'lib/lp/registry/interfaces/product.py'
--- lib/lp/registry/interfaces/product.py 2010-12-01 11:26:57 +0000
+++ lib/lp/registry/interfaces/product.py 2010-12-30 20:12:18 +0000
@@ -679,11 +679,11 @@
679679
680 translation_focus = exported(680 translation_focus = exported(
681 ReferenceChoice(681 ReferenceChoice(
682 title=_("Translation Focus"), required=False,682 title=_("Translation focus"), required=False,
683 vocabulary='FilteredProductSeries',683 vocabulary='FilteredProductSeries',
684 schema=IProductSeries,684 schema=IProductSeries,
685 description=_(685 description=_(
686 'The ProductSeries where translations are focused.')))686 'Project series that translators should focus on.')))
687687
688 translatable_packages = Attribute(688 translatable_packages = Attribute(
689 "A list of the source packages for this product that can be "689 "A list of the source packages for this product that can be "
690690
=== modified file 'lib/lp/translations/browser/configure.zcml'
--- lib/lp/translations/browser/configure.zcml 2010-12-22 12:05:12 +0000
+++ lib/lp/translations/browser/configure.zcml 2010-12-30 20:12:18 +0000
@@ -809,12 +809,11 @@
809 template="../templates/hastranslationimports-index.pt"809 template="../templates/hastranslationimports-index.pt"
810 layer="lp.translations.publisher.TranslationsLayer"/>810 layer="lp.translations.publisher.TranslationsLayer"/>
811 <browser:page811 <browser:page
812 name="+settings"812 name="+configure-translations"
813 for="lp.registry.interfaces.product.IProduct"813 for="lp.registry.interfaces.product.IProduct"
814 class="lp.translations.browser.product.ProductSettingsView"814 class="lp.translations.browser.product.ProductSettingsView"
815 permission="launchpad.TranslationsAdmin"815 permission="launchpad.TranslationsAdmin"
816 template="../templates/set-translators.pt"816 template="../templates/configure-translations.pt"/>
817 layer="lp.translations.publisher.TranslationsLayer"/>
818 <browser:pages817 <browser:pages
819 for="lp.registry.interfaces.product.IProduct"818 for="lp.registry.interfaces.product.IProduct"
820 permission="zope.Public"819 permission="zope.Public"
@@ -872,7 +871,7 @@
872 for="lp.registry.interfaces.projectgroup.IProjectGroup"871 for="lp.registry.interfaces.projectgroup.IProjectGroup"
873 class="lp.translations.browser.project.ProjectSettingsView"872 class="lp.translations.browser.project.ProjectSettingsView"
874 permission="launchpad.TranslationsAdmin"873 permission="launchpad.TranslationsAdmin"
875 template="../templates/set-translators.pt"874 template="../templates/configure-translations.pt"
876 layer="lp.translations.publisher.TranslationsLayer"/>875 layer="lp.translations.publisher.TranslationsLayer"/>
877876
878<!-- Distribution -->877<!-- Distribution -->
@@ -903,11 +902,11 @@
903 class="lp.translations.browser.translations.HelpTranslateButtonView"902 class="lp.translations.browser.translations.HelpTranslateButtonView"
904 permission="zope.Public"/>903 permission="zope.Public"/>
905 <browser:page904 <browser:page
906 name="+settings"905 name="+configure-translations"
907 for="lp.registry.interfaces.distribution.IDistribution"906 for="lp.registry.interfaces.distribution.IDistribution"
908 class="lp.translations.browser.distribution.DistributionSettingsView"907 class="lp.translations.browser.distribution.DistributionSettingsView"
909 permission="launchpad.TranslationsAdmin"908 permission="launchpad.TranslationsAdmin"
910 template="../templates/set-translators.pt"909 template="../templates/configure-translations.pt"
911 layer="lp.translations.publisher.TranslationsLayer"/>910 layer="lp.translations.publisher.TranslationsLayer"/>
912 <browser:page911 <browser:page
913 for="lp.registry.interfaces.distribution.IDistribution"912 for="lp.registry.interfaces.distribution.IDistribution"
914913
=== modified file 'lib/lp/translations/browser/distribution.py'
--- lib/lp/translations/browser/distribution.py 2010-09-23 14:33:51 +0000
+++ lib/lp/translations/browser/distribution.py 2010-12-30 20:12:18 +0000
@@ -44,7 +44,7 @@
4444
45 @enabled_with_permission('launchpad.TranslationsAdmin')45 @enabled_with_permission('launchpad.TranslationsAdmin')
46 def settings(self):46 def settings(self):
47 text = 'Change permissions'47 text = 'Configure translations'
48 return Link('+settings', text, icon='edit', site='translations')48 return Link('+settings', text, icon='edit', site='translations')
4949
50 @enabled_with_permission('launchpad.TranslationsAdmin')50 @enabled_with_permission('launchpad.TranslationsAdmin')
@@ -106,7 +106,7 @@
106106
107 def can_configure_translations(self):107 def can_configure_translations(self):
108 """Whether or not the user can configure translations."""108 """Whether or not the user can configure translations."""
109 return check_permission("launchpad.Edit", self.context)109 return check_permission("launchpad.TranslationsAdmin", self.context)
110110
111 def is_translations_admin(self):111 def is_translations_admin(self):
112 """Whether or not the user is a translations admin."""112 """Whether or not the user is a translations admin."""
@@ -129,13 +129,14 @@
129129
130130
131class DistributionSettingsView(TranslationsMixin, DistributionEditView):131class DistributionSettingsView(TranslationsMixin, DistributionEditView):
132 label = "Set permissions and policies"132 label = "Translations settings"
133 field_names = ["translationgroup", "translationpermission"]133 page_title = "Settings"
134134 field_names = [
135 @property135 "official_rosetta",
136 def page_title(self):136 "translation_focus",
137 return "Set translation permissions for %s" % (137 "translationgroup",
138 self.context.displayname)138 "translationpermission",
139 ]
139140
140 @property141 @property
141 def cancel_url(self):142 def cancel_url(self):
142143
=== modified file 'lib/lp/translations/browser/product.py'
--- lib/lp/translations/browser/product.py 2010-09-23 14:33:51 +0000
+++ lib/lp/translations/browser/product.py 2010-12-30 20:12:18 +0000
@@ -20,7 +20,7 @@
20from canonical.launchpad.webapp.authorization import check_permission20from canonical.launchpad.webapp.authorization import check_permission
21from canonical.launchpad.webapp.menu import NavigationMenu21from canonical.launchpad.webapp.menu import NavigationMenu
22from lp.app.enums import service_uses_launchpad22from lp.app.enums import service_uses_launchpad
23from lp.registry.browser.product import ProductEditView23from lp.registry.browser.product import ProductConfigureBase
24from lp.registry.interfaces.product import IProduct24from lp.registry.interfaces.product import IProduct
25from lp.registry.interfaces.productseries import IProductSeries25from lp.registry.interfaces.productseries import IProductSeries
26from lp.registry.interfaces.series import SeriesStatus26from lp.registry.interfaces.series import SeriesStatus
@@ -45,8 +45,9 @@
4545
46 @enabled_with_permission('launchpad.TranslationsAdmin')46 @enabled_with_permission('launchpad.TranslationsAdmin')
47 def settings(self):47 def settings(self):
48 text = 'Change permissions'48 text = 'Configure translations'
49 return Link('+settings', text, icon='edit', site='translations')49 return Link(
50 '+configure-translations', text, icon='edit', site='translations')
5051
51 @enabled_with_permission('launchpad.AnyPerson')52 @enabled_with_permission('launchpad.AnyPerson')
52 def translationdownload(self):53 def translationdownload(self):
@@ -70,21 +71,17 @@
70 return Link(link, text, icon='translation')71 return Link(link, text, icon='translation')
7172
7273
73class ProductSettingsView(TranslationsMixin, ProductEditView):74class ProductSettingsView(TranslationsMixin, ProductConfigureBase):
74 label = "Set permissions and policies"75 label = "Configure translations"
75 page_title = "Permissions and policies"76 page_title = "Configure translations"
77 usage_fieldname = "translations_usage"
76 field_names = [78 field_names = [
79 usage_fieldname,
80 "translation_focus",
77 "translationgroup",81 "translationgroup",
78 "translationpermission",82 "translationpermission",
79 "translation_focus",
80 ]83 ]
8184
82 @property
83 def cancel_url(self):
84 return canonical_url(self.context, rootsite="translations")
85
86 next_url = cancel_url
87
8885
89class ProductView(LaunchpadView):86class ProductView(LaunchpadView):
9087
@@ -110,7 +107,7 @@
110107
111 def can_configure_translations(self):108 def can_configure_translations(self):
112 """Whether or not the user can configure translations."""109 """Whether or not the user can configure translations."""
113 return check_permission("launchpad.Edit", self.context)110 return check_permission("launchpad.TranslationsAdmin", self.context)
114111
115 def is_translations_admin(self):112 def is_translations_admin(self):
116 """Whether or not the user is a translations admin."""113 """Whether or not the user is a translations admin."""
117114
=== modified file 'lib/lp/translations/stories/distribution/xx-distribution-translations.txt'
--- lib/lp/translations/stories/distribution/xx-distribution-translations.txt 2010-09-27 20:22:00 +0000
+++ lib/lp/translations/stories/distribution/xx-distribution-translations.txt 2010-12-30 20:12:18 +0000
@@ -1,4 +1,5 @@
1= Distribution translations =1Distribution translations
2=========================
23
3This page shows a list of PO templates contained within all source4This page shows a list of PO templates contained within all source
4packages for the distroseries that is the translation focus for a5packages for the distroseries that is the translation focus for a
@@ -91,7 +92,7 @@
91 >>> logout()92 >>> logout()
9293
93We should get latest release as the translation focus.94We should get latest release as the translation focus.
94 95
95 >>> browser.open('http://translations.launchpad.dev/debian')96 >>> browser.open('http://translations.launchpad.dev/debian')
96 >>> browser.url97 >>> browser.url
97 'http://translations.launchpad.dev/debian'98 'http://translations.launchpad.dev/debian'
@@ -134,11 +135,11 @@
134 ... auth='Basic jeff.waugh@ubuntulinux.com:jdub')135 ... auth='Basic jeff.waugh@ubuntulinux.com:jdub')
135 >>> editor_browser.open('http://launchpad.dev/ubuntu')136 >>> editor_browser.open('http://launchpad.dev/ubuntu')
136 >>> editor_browser.getLink('Change details').click()137 >>> editor_browser.getLink('Change details').click()
137 >>> editor_browser.getControl('Translation Focus').displayValue138 >>> editor_browser.getControl('Translation focus').displayValue
138 ['ubuntu hoary']139 ['ubuntu hoary']
139 >>> editor_browser.getControl('Translation Focus').displayValue = [140 >>> editor_browser.getControl('Translation focus').displayValue = [
140 ... 'ubuntu grumpy']141 ... 'ubuntu grumpy']
141 >>> editor_browser.getControl('Change', index=3).click()142 >>> editor_browser.getControl('Change', index=3).click()
142 >>> editor_browser.getLink('Change details').click()143 >>> editor_browser.getLink('Change details').click()
143 >>> editor_browser.getControl('Translation Focus').displayValue144 >>> editor_browser.getControl('Translation focus').displayValue
144 ['ubuntu grumpy']145 ['ubuntu grumpy']
145146
=== modified file 'lib/lp/translations/stories/standalone/xx-potemplate-index.txt'
--- lib/lp/translations/stories/standalone/xx-potemplate-index.txt 2010-09-02 22:26:01 +0000
+++ lib/lp/translations/stories/standalone/xx-potemplate-index.txt 2010-12-30 20:12:18 +0000
@@ -40,7 +40,7 @@
40 Afrikaans 22 ... ... &mdash; &mdash;40 Afrikaans 22 ... ... &mdash; &mdash;
41 Japanese 21 ... ... ... Carlos...41 Japanese 21 ... ... ... Carlos...
42 Sotho, Southern 22 ... ... &mdash; &mdash;42 Sotho, Southern 22 ... ... &mdash; &mdash;
43 Spanish 15 1 1 ... Valentina Commissari43 Spanish 15 1 1 ... Valent...
44 Xhosa 22 ... ... ... &mdash;44 Xhosa 22 ... ... ... &mdash;
45 Zulu 22 ... ... &mdash; &mdash;45 Zulu 22 ... ... &mdash; &mdash;
4646
@@ -117,7 +117,8 @@
117A source package with five templates is created.117A source package with five templates is created.
118118
119 >>> from zope.component import getUtility119 >>> from zope.component import getUtility
120 >>> from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities120 >>> from canonical.launchpad.interfaces.launchpad import (
121 ... ILaunchpadCelebrities)
121122
122 >>> login('admin@canonical.com')123 >>> login('admin@canonical.com')
123 >>> ubuntu = getUtility(ILaunchpadCelebrities).ubuntu124 >>> ubuntu = getUtility(ILaunchpadCelebrities).ubuntu
@@ -209,9 +210,6 @@
209210
210A product series with 7 templates is created.211A product series with 7 templates is created.
211212
212 >>> from zope.component import getUtility
213 >>> from canonical.launchpad.interfaces.launchpad import (
214 ... ILaunchpadCelebrities)
215 >>> from lp.app.enums import ServiceUsage213 >>> from lp.app.enums import ServiceUsage
216 >>> login('admin@canonical.com')214 >>> login('admin@canonical.com')
217 >>> product = factory.makeProduct(name="fusa",215 >>> product = factory.makeProduct(name="fusa",
@@ -281,9 +279,9 @@
281279
282 >>> user_browser.getLink('download').click()280 >>> user_browser.getLink('download').click()
283 >>> print user_browser.url281 >>> print user_browser.url
284 http://translations.launchpad.dev/ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+export282 http://trans.../ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+export
285283
286Translation administrators will see both download and upload links. 284Translation administrators will see both download and upload links.
287Beside administering this template, "Change permissions"285Beside administering this template, "Change permissions"
288and "Change details" should be also accessible.286and "Change details" should be also accessible.
289287
@@ -292,34 +290,27 @@
292 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')290 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')
293 >>> admin_browser.getLink('upload').click()291 >>> admin_browser.getLink('upload').click()
294 >>> print admin_browser.url292 >>> print admin_browser.url
295 http://translations.launchpad.dev/ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+upload293 http://trans.../ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+upload
296294
297 >>> admin_browser.open(295 >>> admin_browser.open(
298 ... 'http://translations.launchpad.dev/'296 ... 'http://translations.launchpad.dev/'
299 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')297 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')
300 >>> admin_browser.getLink('download').click()298 >>> admin_browser.getLink('download').click()
301 >>> print admin_browser.url299 >>> print admin_browser.url
302 http://translations.launchpad.dev/ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+export300 http://trans.../ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+export
303301
304 >>> admin_browser.open(302 >>> admin_browser.open(
305 ... 'http://translations.launchpad.dev/'303 ... 'http://translations.launchpad.dev/'
306 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')304 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')
307 >>> admin_browser.getLink('Administer this template').click()305 >>> admin_browser.getLink('Administer this template').click()
308 >>> print admin_browser.url306 >>> print admin_browser.url
309 http://translations.launchpad.dev/ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+admin307 http://trans.../ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+admin
310308
311 >>> admin_browser.open(309 >>> admin_browser.open(
312 ... 'http://translations.launchpad.dev/'310 ... 'http://translations.launchpad.dev/'
313 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')311 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')
314 >>> admin_browser.getLink('Change details').click()312 >>> admin_browser.getLink('Change details').click()
315 >>> print admin_browser.url313 >>> print admin_browser.url
316 http://translations.launchpad.dev/ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+edit314 http://trans.../ubuntu/hoary/+source/evolution/+pots/evolution-2.2/+edit
317
318 >>> admin_browser.open(
319 ... 'http://translations.launchpad.dev/'
320 ... 'ubuntu/hoary/+source/evolution/+pots/evolution-2.2')
321 >>> admin_browser.getLink('Change permissions').click()
322 >>> print admin_browser.url
323 http://translations.launchpad.dev/ubuntu/+settings
324315
325316
326317
=== modified file 'lib/lp/translations/stories/translationfocus/xx-product-translationfocus.txt'
--- lib/lp/translations/stories/translationfocus/xx-product-translationfocus.txt 2010-10-06 20:49:58 +0000
+++ lib/lp/translations/stories/translationfocus/xx-product-translationfocus.txt 2010-12-30 20:12:18 +0000
@@ -12,12 +12,13 @@
1212
13Only admin users are able to change the translation focus of a product.13Only admin users are able to change the translation focus of a product.
14Unprivileged users can see the recommended series for translation,14Unprivileged users can see the recommended series for translation,
15but have no access to the 'Change permissions' menu.15but have no access to the 'Configure translations' menu.
1616
17 >>> admin_browser.open(fooproject_url)17 >>> admin_browser.open(fooproject_url)
18 >>> print extract_text(18 >>> print extract_text(
19 ... find_tags_by_class(admin_browser.contents, 'edit sprite')[1])19 ... find_tags_by_class(admin_browser.contents,
20 Change permissions20 ... 'menu-link-configure_translations')[0])
21 Configure translations
2122
22 >>> browser.open(fooproject_url)23 >>> browser.open(fooproject_url)
23 >>> print extract_text(24 >>> print extract_text(
@@ -85,5 +86,6 @@
85 >>> browser.open(fooproject_url)86 >>> browser.open(fooproject_url)
86 >>> print extract_text(find_tags_by_class(browser.contents, 'portlet')[0])87 >>> print extract_text(find_tags_by_class(browser.contents, 'portlet')[0])
87 Translation details...88 Translation details...
88 Launchpad currently recommends translating... Fooproject other-series series.89 Launchpad currently recommends translating...
90 Fooproject other-series series.
89 ...91 ...
9092
=== modified file 'lib/lp/translations/stories/translationgroups/10-distro-translation-group.txt'
--- lib/lp/translations/stories/translationgroups/10-distro-translation-group.txt 2010-10-05 20:25:59 +0000
+++ lib/lp/translations/stories/translationgroups/10-distro-translation-group.txt 2010-12-30 20:12:18 +0000
@@ -21,14 +21,14 @@
21 >>> ubuntu_owner_browser = setupBrowser(21 >>> ubuntu_owner_browser = setupBrowser(
22 ... auth='Basic colin.watson@ubuntulinux.com:test')22 ... auth='Basic colin.watson@ubuntulinux.com:test')
23 >>> ubuntu_owner_browser.open(anon_browser.url)23 >>> ubuntu_owner_browser.open(anon_browser.url)
24 >>> ubuntu_owner_browser.getLink('Change permissions').click()24 >>> ubuntu_owner_browser.getLink('Configure translations').click()
25 >>> print ubuntu_owner_browser.title25 >>> print ubuntu_owner_browser.title
26 Set translation permissions for Ubuntu...26 Settings : Translations : Ubuntu
2727
28Other users cannot access this page, nor see the menu link to it.28Other users cannot access this page, nor see the menu link to it.
2929
30 >>> user_browser.open(anon_browser.url)30 >>> user_browser.open(anon_browser.url)
31 >>> user_browser.getLink('Change permissions').click()31 >>> user_browser.getLink('Configure translations').click()
32 Traceback (most recent call last):32 Traceback (most recent call last):
33 ...33 ...
34 LinkNotFoundError34 LinkNotFoundError
3535
=== modified file 'lib/lp/translations/stories/translationgroups/15-product-translation-group.txt'
--- lib/lp/translations/stories/translationgroups/15-product-translation-group.txt 2010-10-06 20:49:58 +0000
+++ lib/lp/translations/stories/translationgroups/15-product-translation-group.txt 2010-12-30 20:12:18 +0000
@@ -32,11 +32,11 @@
32group and permissions.32group and permissions.
3333
34 >>> translations_page_url = netapplet_owner_browser.url34 >>> translations_page_url = netapplet_owner_browser.url
35 >>> netapplet_owner_browser.getLink('Change permissions').click()35 >>> netapplet_owner_browser.getLink('Configure translations').click()
36 >>> change_translators_url = netapplet_owner_browser.url36 >>> change_translators_url = netapplet_owner_browser.url
3737
38 >>> print netapplet_owner_browser.title38 >>> print netapplet_owner_browser.title
39 Permissions and policies...39 Configure translations : Translations : NetApplet
4040
41 >>> print netapplet_owner_browser.getControl(41 >>> print netapplet_owner_browser.getControl(
42 ... 'Translation group').displayOptions42 ... 'Translation group').displayOptions
@@ -47,11 +47,11 @@
47 ... 'Translation group').displayValue47 ... 'Translation group').displayValue
48 ['(no value)']48 ['(no value)']
4949
50Ordinary users cannot see the "Change permissions" link or the page it50Ordinary users cannot see the "Configure translations" link or the page it
51leads to.51leads to.
5252
53 >>> user_browser.open(translations_page_url)53 >>> user_browser.open(translations_page_url)
54 >>> user_browser.getLink('Change permissions').click()54 >>> user_browser.getLink('Configure translations').click()
55 Traceback (most recent call last):55 Traceback (most recent call last):
56 ...56 ...
57 LinkNotFoundError57 LinkNotFoundError
5858
=== modified file 'lib/lp/translations/stories/translationgroups/45-test-distro-restricted-permissions.txt'
--- lib/lp/translations/stories/translationgroups/45-test-distro-restricted-permissions.txt 2010-04-13 16:06:52 +0000
+++ lib/lp/translations/stories/translationgroups/45-test-distro-restricted-permissions.txt 2010-12-30 20:12:18 +0000
@@ -8,7 +8,8 @@
8 >>> browser.addHeader('Authorization', 'Basic no-priv@canonical.com:test')8 >>> browser.addHeader('Authorization', 'Basic no-priv@canonical.com:test')
99
10 >>> admin_browser.open(10 >>> admin_browser.open(
11 ... 'http://translations.launchpad.dev/ubuntu/+settings')11 ... 'http://translations.launchpad.dev/ubuntu/'
12 ... '+configure-translations')
1213
13 >>> admin_browser.getControl(14 >>> admin_browser.getControl(
14 ... 'Translation permissions policy').value = ['RESTRICTED']15 ... 'Translation permissions policy').value = ['RESTRICTED']
1516
=== modified file 'lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt'
--- lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt 2010-08-24 22:23:17 +0000
+++ lib/lp/translations/stories/translationgroups/46-test-distro-structured-permissions.txt 2010-12-30 20:12:18 +0000
@@ -15,7 +15,7 @@
15as the translation group for the netapplet product...15as the translation group for the netapplet product...
1616
17 >>> admin_browser.getLink('Translations').click()17 >>> admin_browser.getLink('Translations').click()
18 >>> admin_browser.getLink('Change permissions').click()18 >>> admin_browser.getLink('Configure translations').click()
19 >>> admin_browser.getControl('Translation group').displayOptions19 >>> admin_browser.getControl('Translation group').displayOptions
20 ['(no value)', 'Single-language Translators',20 ['(no value)', 'Single-language Translators',
21 'The PolyGlot Translation Group', 'Just a testing team']21 'The PolyGlot Translation Group', 'Just a testing team']
2222
=== modified file 'lib/lp/translations/stories/translationgroups/xx-change-translation-policy.txt'
--- lib/lp/translations/stories/translationgroups/xx-change-translation-policy.txt 2010-08-31 18:10:51 +0000
+++ lib/lp/translations/stories/translationgroups/xx-change-translation-policy.txt 2010-12-30 20:12:18 +0000
@@ -19,20 +19,20 @@
19 >>> po_browser = setupBrowser("Basic po@ex.com:test")19 >>> po_browser = setupBrowser("Basic po@ex.com:test")
2020
21Visiting the main products translations page, product owners and Rosetta21Visiting the main products translations page, product owners and Rosetta
22administrators sees the "Change permissions" link, leading to the22administrators sees the "Configure translations" link, leading to the
23translations settings page.23translations settings page.
2424
25 >>> re_browser.open(25 >>> re_browser.open(
26 ... 'http://translations.launchpad.dev/chestii')26 ... 'http://translations.launchpad.dev/chestii')
27 >>> re_browser.getLink('Change permissions').click()27 >>> re_browser.getLink('Configure translations').click()
28 >>> print re_browser.url28 >>> print re_browser.url
29 http://translations.launchpad.dev/chestii/+settings29 http://translations.launchpad.dev/chestii/+configure-translations
3030
31 >>> po_browser.open(31 >>> po_browser.open(
32 ... 'http://translations.launchpad.dev/chestii')32 ... 'http://translations.launchpad.dev/chestii')
33 >>> po_browser.getLink('Change permissions').click()33 >>> po_browser.getLink('Configure translations').click()
34 >>> print po_browser.url34 >>> print po_browser.url
35 http://translations.launchpad.dev/chestii/+settings35 http://translations.launchpad.dev/chestii/+configure-translations
3636
37From the settings page, translations group and translation permissions37From the settings page, translations group and translation permissions
38can be changed.38can be changed.
@@ -58,7 +58,7 @@
5858
59 >>> dtc_browser.open(59 >>> dtc_browser.open(
60 ... 'http://translations.launchpad.dev/chestii')60 ... 'http://translations.launchpad.dev/chestii')
61 >>> dtc_browser.getLink('Change permissions')61 >>> dtc_browser.getLink('Configure translations')
62 Traceback (most recent call last):62 Traceback (most recent call last):
63 ...63 ...
64 LinkNotFoundError...64 LinkNotFoundError...
@@ -66,7 +66,8 @@
66An attempt to access the translations policy url will not be authorized.66An attempt to access the translations policy url will not be authorized.
6767
68 >>> browser.open(68 >>> browser.open(
69 ... 'http://translations.launchpad.dev/chestii/+settings')69 ... 'http://translations.launchpad.dev/'
70 ... 'chestii/+configure-translations')
70 Traceback (most recent call last):71 Traceback (most recent call last):
71 ...72 ...
72 Unauthorized...73 Unauthorized...
@@ -80,9 +81,9 @@
8081
81 >>> dtc_browser.open(82 >>> dtc_browser.open(
82 ... 'http://translations.launchpad.dev/ubuntu')83 ... 'http://translations.launchpad.dev/ubuntu')
83 >>> dtc_browser.getLink('Change permissions').click()84 >>> dtc_browser.getLink('Configure translations').click()
84 >>> print dtc_browser.url85 >>> print dtc_browser.url
85 http://translations.launchpad.dev/ubuntu/+settings86 http://translations.launchpad.dev/ubuntu/+configure-translations
8687
87 >>> dtc_browser.getControl('Translation group').value = [88 >>> dtc_browser.getControl('Translation group').value = [
88 ... 'ubuntu-translators']89 ... 'ubuntu-translators']
8990
=== renamed file 'lib/lp/translations/templates/set-translators.pt' => 'lib/lp/translations/templates/configure-translations.pt'
=== modified file 'lib/lp/translations/templates/distribution-translations.pt'
--- lib/lp/translations/templates/distribution-translations.pt 2010-10-10 21:54:16 +0000
+++ lib/lp/translations/templates/distribution-translations.pt 2010-12-30 20:12:18 +0000
@@ -48,6 +48,10 @@
48 <tal:target replace="structure target/fmt:link/+translations"48 <tal:target replace="structure target/fmt:link/+translations"
49 >trunk</tal:target>.49 >trunk</tal:target>.
50 </p>50 </p>
51 <p tal:condition="view/can_configure_translations">
52 <a tal:replace="structure context/menu:overview/configure_translations/fmt:link"/>
53 </p>
54
51 </div>55 </div>
52 <div class="yui-g">56 <div class="yui-g">
53 <div class="yui-u first">57 <div class="yui-u first">
5458
=== modified file 'lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt'
--- lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt 2010-02-16 21:21:14 +0000
+++ lib/lp/translations/templates/hastranslationgroup-portlet-translation-groups-and-permission.pt 2010-12-30 20:12:18 +0000
@@ -12,9 +12,4 @@
12 tal:content="context/translationpermission/title">certain</a>12 tal:content="context/translationpermission/title">certain</a>
13 permissions.13 permissions.
14 </p>14 </p>
15 <div tal:condition="context/required:launchpad.TranslationsAdmin">
16 <a tal:replace="structure context/menu:translations/settings/fmt:link">
17 Change permissions
18 </a>
19 </div>
20</div>15</div>
2116
=== modified file 'lib/lp/translations/templates/project-translations.pt'
--- lib/lp/translations/templates/project-translations.pt 2010-10-26 21:26:27 +0000
+++ lib/lp/translations/templates/project-translations.pt 2010-12-30 20:12:18 +0000
@@ -38,6 +38,10 @@
38 context/@@+portlet-translation-groups-and-permission"38 context/@@+portlet-translation-groups-and-permission"
39 />39 />
40 </p>40 </p>
41 <p tal:condition="view/required:launchpad.TranslationsAdmin">
42 <a tal:replace="
43 structure context/menu:translations/settings/fmt:link"/>
44 </p>
41 </div>45 </div>
4246
43 <div class="yui-g">47 <div class="yui-g">