def test_content_is_translated_into_all_languages(self):
        a_ac = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        api.translate(a_ac, 'en')
        api.translate(a_ac, 'es')

        self.assertEqual(len(untranslated_languages(a_ac)), 0)
    def test_content_is_translated_into_all_languages(self):
        a_ac = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        api.translate(a_ac, 'en')
        api.translate(a_ac, 'es')

        self.assertEqual(len(untranslated_languages(a_ac)), 0)
    def test_universal_link_view(self):
        self.browser.addHeader('Accept-Language', 'ca')

        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")
        a_en = api.translate(a_ca, 'en')
        api.translate(a_ca, 'es')

        transaction.commit()

        self.browser.open(a_en.absolute_url())
        self.browser.getLink("Universal Link").click()
        self.assertEqual(self.browser.url, a_ca.absolute_url())
示例#4
0
    def test_universal_link_view(self):
        self.browser.addHeader('Accept-Language', 'ca')

        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")
        a_en = api.translate(a_ca, 'en')
        api.translate(a_ca, 'es')

        transaction.commit()

        self.browser.open(a_en.absolute_url())
        self.browser.getLink("Universal Link").click()
        self.assertEqual(self.browser.url, a_ca.absolute_url())
    def test_relation_list_gets_translated(self):
        b_ca = api.translate(self.b_en, 'ca')
        a_ca = api.translate(self.a_en, 'ca')

        adapted = IRelatedItems(a_ca)

        bound = IRelatedItems['relatedItems'].bind(adapted)
        self.assertEqual(len(bound.get(adapted)), 1)

        value = bound.get(adapted)
        self.assertEqual(type(value[0]), RelationValue)

        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        self.assertEqual(dm.get(), [b_ca])
    def test_alternates(self):
        # Create
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        # Translate
        a_en = api.translate(a_ca, 'en')

        # Get the viewlet
        viewlet = AlternateLanguagesViewlet(a_en, self.request, None, None)
        viewlet.update()

        # Get translations
        translations = ITranslationManager(a_ca).get_translations()

        # Check translations
        self.assertEqual(len(viewlet.alternates), 2)
        for item in viewlet.alternates:
            self.assertIn(item['lang'], translations)
            self.assertEqual(
                "{0}/{1}/{2}".format(
                    self.portal.absolute_url(),
                    item['lang'],
                    item['url']),
                translations[item['lang']].absolute_url()
            )
示例#7
0
    def test_languages_untranslated_by_closest(self):
        # Define selector policy
        self.registry = getUtility(IRegistry)
        self.settings = self.registry.forInterface(IMultiLanguagePolicies)
        self.settings.selector_lookup_translations_policy = 'closest'

        wftool = getToolByName(self.portal, "portal_workflow")

        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")
        a_ca.setLanguage('ca')
        wftool.doActionFor(a_ca, 'publish')

        view = selector_view(a_ca, self.request)
        view.tg = ITG(a_ca)

        # Check that the 'original' language gets the created document
        view.lang = 'ca'
        url = view.getClosestDestination()
        self.assertEqual(url, a_ca.absolute_url())

        # Check that untranslated languages get the nearest translated parent
        view.lang = 'es'
        url = view.getClosestDestination()
        self.assertEqual(url, self.portal['es'].absolute_url())

        view.lang = 'en'
        url = view.getClosestDestination()
        self.assertEqual(url, self.portal['en'].absolute_url())

        # Check that translating content updates the closest destination
        a_es = api.translate(a_ca, 'es')
        view.lang = 'es'
        url = view.getClosestDestination()
        self.assertEqual(url, a_es.absolute_url())
示例#8
0
    def request_translation(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        fieldname = data.get("field_to_translate")
        filepath = self._make_html_document_from_field(fieldname)
        result = self._translate(filepath, data.get("model"), data.get("tr_mode"))

        translation = pam.translate(self.context, target_language="en")
        translation.title = self.context.title
        translation.description = self.context.description
        translation.text = self.context.text

        if result is not None:
            annotated = IAnnotations(translation)
            annotated[KEY] = result

            messages = IStatusMessage(self.request)
            messages.add(_(u"TGATE translation requested correctly"))
            return self.request.response.redirect(translation.absolute_url())
        else:
            messages = IStatusMessage(self.request)
            messages.add(_(u"Error when requesting translations"), "error")
            return self.request.response.redirect(self.context.absolute_url())
    def test_modify_translations_delete(self):
        createContentInContainer(
            self.portal['ca'], 'Folder', title=u"Test folder")

        a_ca = createContentInContainer(
            self.portal['ca']['test-folder'],
            'Document', title=u"Test document")

        a_en = api.translate(a_ca, 'en')

        view = a_en.restrictedTraverse('modify_translations')()
        self.assertIn(
            'href="http://nohost/plone/ca/test-folder/test-document/delete_confirmation" '  # noqa§
            'title="Delete translated item"',
            view,
            'modify_translations was missing delete link for translation'
        )

        # Test https://github.com/plone/plone.app.multilingual/pull/283
        self.assertNotIn(
            'href="http://nohost/plone/en/test-document/delete_confirmation" '  # noqa§
            'title="Delete translated item"',
            view,
            'modify_translations contained delete link for the context'
        )
    def test_viewlet_render(self):
        """Validate that the alternate languages viewlet renders correctly."""
        try:
            from plone.app.multilingual.setuphandlers import (
                enable_translatable_behavior,
            )
        except ImportError:
            pass
        else:
            enable_translatable_behavior(self.portal)

        sample_en = self.portal['en']['sample-folder']
        sample_de = translate(sample_en, 'de')
        viewlet_orig = AlternateLanguagesViewlet(
            sample_de,
            self.app.REQUEST,
            None,
            None,
        )
        viewlet_orig.update()

        viewlet = CustomAlternateLanguagesViewlet(
            sample_de,
            self.app.REQUEST,
            None,
            None,
        )
        viewlet.update()
        self.assertTrue(len(viewlet.alternates), 3)
示例#11
0
    def add_subscriber(self, context, fields):
        request = self.request
        alsoProvides(request, IDisableCSRFProtection)
        form = EasyFormForm(context, request)
        form.updateFields()
        form.updateWidgets()
        data, errors = form.extractData()

        period_id = data.get("period")
        if isinstance(period_id, list):
            period_id = period_id[0]
        period = context.aq_parent.get(period_id)
        title = "{0} {1}".format(data.get("last_name"), data.get("first_name"))

        subscriber = api.content.create(
            container=period, type="subscriber", title=title
        )
        self.add_subscriber_in_period(context, period, subscriber, form, data)

        if not IPloneAppMultilingualInstalled.providedBy(request):
            return

        registry = getUtility(IRegistry)
        langs = list(registry['plone.available_languages'])
        current_lang = api.portal.get_current_language()[:2]
        langs.remove(current_lang)

        for lang in langs:
            trans = ITranslationManager(period).get_translation(lang)
            if trans:
                new_subscriber = api_lng.translate(subscriber, lang)
                new_subscriber.title = title
                self.add_subscriber_in_period(context, trans, new_subscriber, form, data)
    def test_relation_list_gets_translated(self):
        b_ca = api.translate(self.b_en, 'ca')
        a_ca = api.translate(self.a_en, 'ca')

        adapted = IRelatedItems(a_ca)

        bound = IRelatedItems['relatedItems'].bind(adapted)
        self.assertEqual(len(bound.get(adapted)), 1)

        value = bound.get(adapted)
        self.assertEqual(type(value[0]), RelationValue)

        dm = getMultiAdapter(
            (adapted, IRelatedItems['relatedItems']),
            IDataManager
        )
        self.assertEqual(dm.get(), [b_ca])
示例#13
0
    def test_copied_relation_list_gets_translated(self):
        a_ca = api.translate(self.a_en, 'ca')
        b_ca = api.translate(self.b_en, 'ca')

        # But only after self.a_en is modified (this is a feature, not a bug):
        notify(ObjectModifiedEvent(self.a_en))

        adapted = IRelatedItems(a_ca)

        bound = IRelatedItems['relatedItems'].bind(adapted)
        self.assertEqual(len(bound.get(adapted)), 1)

        value = bound.get(adapted)
        self.assertEqual(type(value[0]), RelationValue)

        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        self.assertEqual(dm.get(), [b_ca])
示例#14
0
    def setUpFullyTranslatedContent(self):
        wftool = getToolByName(self.portal, 'portal_workflow')

        self.setUpPartiallyTranslatedContent()

        a_ca = api.translate(self.portal['en']['test-folder']['test-document'],
                             'ca')
        a_ca.setTitle(u"Test document CA")
        wftool.doActionFor(a_ca, 'publish')

        f_es = api.translate(self.portal['en']['test-folder'], 'es')
        f_es.setTitle(u"Test folder ES")
        wftool.doActionFor(f_es, 'publish')

        a_es = api.translate(self.portal['en']['test-folder']['test-document'],
                             'es')
        a_es.setTitle(u"Test document ES")
        wftool.doActionFor(a_es, 'publish')

        transaction.commit()
    def test_copied_relation_list_gets_translated(self):
        a_ca = api.translate(self.a_en, 'ca')
        b_ca = api.translate(self.b_en, 'ca')

        # But only after self.a_en is modified (this is a feature, not a bug):
        notify(ObjectModifiedEvent(self.a_en))

        adapted = IRelatedItems(a_ca)

        bound = IRelatedItems['relatedItems'].bind(adapted)
        self.assertEqual(len(bound.get(adapted)), 1)

        value = bound.get(adapted)
        self.assertEqual(type(value[0]), RelationValue)

        dm = getMultiAdapter(
            (adapted, IRelatedItems['relatedItems']),
            IDataManager
        )
        self.assertEqual(dm.get(), [b_ca])
    def setUpFullyTranslatedContent(self):
        wftool = getToolByName(self.portal, 'portal_workflow')

        self.setUpPartiallyTranslatedContent()

        a_ca = api.translate(
            self.portal['en']['test-folder']['test-document'], 'ca')
        a_ca.setTitle(u"Test document CA")
        wftool.doActionFor(a_ca, 'publish')

        f_es = api.translate(
            self.portal['en']['test-folder'], 'es')
        f_es.setTitle(u"Test folder ES")
        wftool.doActionFor(f_es, 'publish')

        a_es = api.translate(
            self.portal['en']['test-folder']['test-document'], 'es')
        a_es.setTitle(u"Test document ES")
        wftool.doActionFor(a_es, 'publish')

        transaction.commit()
    def test_translate(self):
        # Create
        a_ca = createContentInContainer(
            self.portal['ca'], 'Document', title=u"Test document")

        self.assertEqual(ITranslationManager(a_ca).get_translations(),
                         {'ca': a_ca})

        # Translate
        a_en = api.translate(a_ca, 'en')

        self.assertEqual(ITranslationManager(a_ca).get_translations(),
                         {'ca': a_ca, 'en': a_en})
示例#18
0
    def test_relation_list_gets_cleared(self):
        a_ca = api.translate(self.a_en, 'ca')

        adapted = IRelatedItems(self.a_en)
        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        dm.set([])

        notify(ObjectModifiedEvent(self.a_en))

        adapted = IRelatedItems(a_ca)
        dm = getMultiAdapter((adapted, IRelatedItems['relatedItems']),
                             IDataManager)
        self.assertEqual(dm.get(), [])
    def test_get_translation_group(self):
        # Create
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")
        a_en = api.translate(a_ca, 'en')

        # get groups
        tg_ca = api.get_translation_group(a_en)
        tg_en = api.get_translation_group(a_en)

        # check
        self.assertTrue(tg_ca is not None)
        self.assertTrue(tg_en is not None)
        self.assertEqual(tg_en, tg_ca)
def translation_folderish(obj, lang, title):
    translated_obj = api_lng.translate(obj, lang)
    translate_title = translate(_(title), target_language=lang)
    normalizer = getUtility(IIDNormalizer)
    new_id = normalizer.normalize(translate_title)
    translated_obj.title = translate_title
    if translated_obj.id != new_id:
        api.content.rename(translated_obj, new_id=new_id)
    try:
        nav = IExcludeFromNavigation(translated_obj)
    except:
        pass
    if nav:
        nav.exclude_from_nav = True
    translated_obj.reindexObject()
    return translated_obj
示例#21
0
    def test_get_translation_group(self):
        # Create
        a_ca = createContentInContainer(
            self.portal['ca'],
            'Document',
            title=u"Test document"
        )
        a_en = api.translate(a_ca, 'en')

        # get groups
        tg_ca = api.get_translation_group(a_en)
        tg_en = api.get_translation_group(a_en)

        # check
        self.assertTrue(tg_ca is not None)
        self.assertTrue(tg_en is not None)
        self.assertEqual(tg_en, tg_ca)
示例#22
0
    def setUpPartiallyTranslatedContent(self):
        wftool = getToolByName(self.portal, 'portal_workflow')

        f_en = createContentInContainer(
            self.portal['en'], 'Folder', title=u"Test folder")
        wftool.doActionFor(f_en, 'publish')

        a_en = createContentInContainer(
            self.portal['en']['test-folder'], 'Document',
            title=u"Test document")
        wftool.doActionFor(a_en, 'publish')

        f_ca = api.translate(f_en, 'ca')
        f_ca.setTitle(u"Test folder CA")
        wftool.doActionFor(f_ca, 'publish')

        transaction.commit()
    def test_translate(self):
        # Create
        a_ca = createContentInContainer(self.portal['ca'],
                                        'Document',
                                        title=u"Test document")

        self.assertEqual(
            api.get_translation_manager(a_ca).get_translations(), {'ca': a_ca})

        # Translate
        a_en = api.translate(a_ca, 'en')

        # check
        self.assertEqual(
            api.get_translation_manager(a_ca).get_translations(), {
                'ca': a_ca,
                'en': a_en
            })
    def test_relation_list_gets_cleared(self):
        a_ca = api.translate(self.a_en, 'ca')

        adapted = IRelatedItems(self.a_en)
        dm = getMultiAdapter(
            (adapted, IRelatedItems['relatedItems']),
            IDataManager
        )
        dm.set([])

        notify(ObjectModifiedEvent(self.a_en))

        adapted = IRelatedItems(a_ca)
        dm = getMultiAdapter(
            (adapted, IRelatedItems['relatedItems']),
            IDataManager
        )
        self.assertEqual(dm.get(), [])
示例#25
0
    def test_move_content_existing_translation_inside(self):
        f_ca = createContentInContainer(self.portal['ca'],
                                        'Folder',
                                        title=u"Test folder")

        a_ca = createContentInContainer(self.portal['ca']['test-folder'],
                                        'Document',
                                        title=u"Test document")

        a_en = api.translate(a_ca, 'en')
        translations = ITranslationManager(self.portal['en'][a_en.id])
        self.assertEqual(
            translations.get_translations(), {
                'ca': self.portal['ca'][f_ca.id][a_ca.id],
                'en': self.portal['en'][a_ca.id]
            })

        self.assertIn(a_en.id, self.portal['en'].objectIds())
        self.assertEqual(a_en, self.portal['en'][a_en.id])

        # Change the content language of the created folder to 'en'
        multilingualMoveObject(f_ca, 'en')

        self.assertIn(f_ca.id, self.portal['en'].objectIds())
        self.assertEqual(f_ca, self.portal['en'][f_ca.id])

        self.assertIn(a_ca.id, self.portal['en'][f_ca.id].objectIds())
        self.assertEqual(a_ca, self.portal['en'][f_ca.id][a_ca.id])

        adapter = ILanguage(self.portal['en'][f_ca.id])
        self.assertEqual(adapter.get_language(), 'en')

        adapter = ILanguage(self.portal['en'][f_ca.id][a_ca.id])
        self.assertEqual(adapter.get_language(), 'en')

        translations = ITranslationManager(self.portal['en'][f_ca.id][a_ca.id])
        self.assertEqual(translations.get_translations(),
                         {'en': self.portal['en'][f_ca.id][a_ca.id]})

        translations = ITranslationManager(self.portal['en'][a_en.id])
        self.assertEqual(translations.get_translations(),
                         {'en': self.portal['en'][a_en.id]})
    def test_move_content_existing_translation_inside(self):
        f_ca = createContentInContainer(
            self.portal['ca'], 'Folder', title=u"Test folder")

        a_ca = createContentInContainer(
            self.portal['ca']['test-folder'],
            'Document', title=u"Test document")

        a_en = api.translate(a_ca, 'en')
        translations = ITranslationManager(self.portal['en'][a_en.id])
        self.assertEqual(translations.get_translations(),
                         {'ca': self.portal['ca'][f_ca.id][a_ca.id],
                          'en': self.portal['en'][a_ca.id]})

        self.assertIn(a_en.id, self.portal['en'].objectIds())
        self.assertEqual(a_en, self.portal['en'][a_en.id])

        # Change the content language of the created folder to 'en'
        multilingualMoveObject(f_ca, 'en')

        self.assertIn(f_ca.id, self.portal['en'].objectIds())
        self.assertEqual(f_ca, self.portal['en'][f_ca.id])

        self.assertIn(a_ca.id, self.portal['en'][f_ca.id].objectIds())
        self.assertEqual(a_ca, self.portal['en'][f_ca.id][a_ca.id])

        adapter = ILanguage(self.portal['en'][f_ca.id])
        self.assertEqual(adapter.get_language(), 'en')

        adapter = ILanguage(self.portal['en'][f_ca.id][a_ca.id])
        self.assertEqual(adapter.get_language(), 'en')

        translations = ITranslationManager(self.portal['en'][f_ca.id][a_ca.id])
        self.assertEqual(translations.get_translations(),
                         {'en': self.portal['en'][f_ca.id][a_ca.id]})

        translations = ITranslationManager(self.portal['en'][a_en.id])
        self.assertEqual(translations.get_translations(),
                         {'en': self.portal['en'][a_en.id]})
示例#27
0
    def test_modify_translations_delete(self):
        createContentInContainer(self.portal['ca'],
                                 'Folder',
                                 title=u"Test folder")

        a_ca = createContentInContainer(self.portal['ca']['test-folder'],
                                        'Document',
                                        title=u"Test document")

        a_en = api.translate(a_ca, 'en')

        view = a_en.restrictedTraverse('modify_translations')()
        self.assertIn(
            'href="http://nohost/plone/ca/test-folder/test-document/delete_confirmation" '  # noqa§
            'title="Delete translated item"',
            view,
            'modify_translations was missing delete link for translation')

        # Test https://github.com/plone/plone.app.multilingual/pull/283
        self.assertNotIn(
            'href="http://nohost/plone/en/test-document/delete_confirmation" '  # noqa§
            'title="Delete translated item"',
            view,
            'modify_translations contained delete link for the context')
    def assertFullyTranslatedPages(self):
        a = createContentInContainer(
            self.portal['en'], 'Document', title=u"Test document")

        a_ca = api.translate(a, 'ca')
        a_ca.setTitle(u"Test Document (CA)")

        a_es = api.translate(a, 'es')
        a_es.setTitle(u"Test Document (ES)")

        wftool = getToolByName(self.portal, 'portal_workflow')
        wftool.doActionFor(a, 'publish')
        wftool.doActionFor(a_ca, 'publish')
        wftool.doActionFor(a_es, 'publish')

        notify(ObjectModifiedEvent(a))
        notify(ObjectModifiedEvent(a_ca))
        notify(ObjectModifiedEvent(a_es))

        selector_viewlet =\
            LanguageSelectorViewlet(a, self.request, None, None)
        selector_viewlet.update()
        selector_viewlet_languages = selector_viewlet.languages()

        self.assertEqual(selector_viewlet_languages, [{
            'code': u'en',
            u'flag': u'/++resource++country-flags/gb.gif',
            u'name': u'English',
            u'native': u'English',
            'url': SELECTOR_VIEW_TEMPLATE % {
                'url': self.portal_url,
                'tg': ITG(a),
                'lang': 'en',
                'query': '?set_language=en'
            },
            'selected': True,
            'translated': True,
        }, {
            'code': u'ca',
            u'flag': u'/++resource++language-flags/ca.gif',
            u'name': u'Catalan',
            u'native': u'Catal\xe0',
            'url': SELECTOR_VIEW_TEMPLATE % {
                'url': self.portal_url,
                'tg': ITG(a),
                'lang': 'ca',
                'query': '?set_language=ca'
            },
            'selected': False,
            'translated': True,
        }, {
            'code': u'es',
            u'flag': u'/++resource++country-flags/es.gif',
            u'name': u'Spanish',
            u'native': u'Espa\xf1ol',
            'url': SELECTOR_VIEW_TEMPLATE % {
                'url': self.portal_url,
                'tg': ITG(a),
                'lang': 'es',
                'query': '?set_language=es'
            },
            'selected': False,
            'translated': True,
        }])

        transaction.commit()

        self.browser.open(selector_viewlet_languages[0]['url'])
        self.assertEqual(self.browser.url,
                         a.absolute_url() + '?set_language=en')
        self.assertRegexpMatches(self.browser.contents, r"You\s*are here")

        self.browser.open(selector_viewlet_languages[1]['url'])
        self.assertEqual(self.browser.url,
                         a_ca.absolute_url() + '?set_language=ca')

        self.assertIn(u'lang="ca"'.encode("utf-8"), self.browser.contents)

        self.browser.open(selector_viewlet_languages[2]['url'])
        self.assertEqual(self.browser.url,
                         a_es.absolute_url() + '?set_language=es')
        self.assertIn(u'lang="es"'.encode("utf-8"), self.browser.contents)
    def assertFullyTranslatedPages(self):
        a = createContentInContainer(
            self.portal['en'], 'Document', title=u"Test document"
        )

        a_ca = api.translate(a, 'ca')
        a_ca.setTitle(u"Test Document (CA)")

        a_es = api.translate(a, 'es')
        a_es.setTitle(u"Test Document (ES)")

        wftool = getToolByName(self.portal, 'portal_workflow')
        wftool.doActionFor(a, 'publish')
        wftool.doActionFor(a_ca, 'publish')
        wftool.doActionFor(a_es, 'publish')

        notify(ObjectModifiedEvent(a))
        notify(ObjectModifiedEvent(a_ca))
        notify(ObjectModifiedEvent(a_es))

        selector_viewlet = LanguageSelectorViewlet(a, self.request, None, None)
        selector_viewlet.update()
        selector_viewlet_languages = selector_viewlet.languages()

        self.assertEqual(
            selector_viewlet_languages,
            [
                {
                    'code': u'en',
                    u'flag': u'/++resource++country-flags/gb.gif',
                    u'name': u'English',
                    u'native': u'English',
                    'url': SELECTOR_VIEW_TEMPLATE
                    % {
                        'url': self.portal_url,
                        'tg': ITG(a),
                        'lang': 'en',
                        'query': '?set_language=en',
                    },
                    'selected': True,
                    'translated': True,
                },
                {
                    'code': u'ca',
                    u'flag': u'/++resource++language-flags/ca.gif',
                    u'name': u'Catalan',
                    u'native': u'Catal\xe0',
                    'url': SELECTOR_VIEW_TEMPLATE
                    % {
                        'url': self.portal_url,
                        'tg': ITG(a),
                        'lang': 'ca',
                        'query': '?set_language=ca',
                    },
                    'selected': False,
                    'translated': True,
                },
                {
                    'code': u'es',
                    u'flag': u'/++resource++country-flags/es.gif',
                    u'name': u'Spanish',
                    u'native': u'Espa\xf1ol',
                    'url': SELECTOR_VIEW_TEMPLATE
                    % {
                        'url': self.portal_url,
                        'tg': ITG(a),
                        'lang': 'es',
                        'query': '?set_language=es',
                    },
                    'selected': False,
                    'translated': True,
                },
            ],
        )

        transaction.commit()

        self.browser.open(selector_viewlet_languages[0]['url'])
        self.assertEqual(
            self.browser.url, a.absolute_url() + '?set_language=en'
        )
        self.assertRegexpMatches(self.browser.contents, r"You\s*are here")

        self.browser.open(selector_viewlet_languages[1]['url'])
        self.assertEqual(
            self.browser.url, a_ca.absolute_url() + '?set_language=ca'
        )

        self.assertIn('lang="ca"', self.browser.contents)

        self.browser.open(selector_viewlet_languages[2]['url'])
        self.assertEqual(
            self.browser.url, a_es.absolute_url() + '?set_language=es'
        )
        self.assertIn('lang="es"', self.browser.contents)