def testRenderSelectorWithNavigationRootForAnonymous(self):
        self.loginAsPortalOwner()
        en_root = makeContent(self.portal, 'Folder', 'en')
        en_root.setLanguage('en')
        directlyProvides(en_root, INavigationRoot)
        de_root = makeTranslation(en_root, 'de')
        de_root.setLanguage('de')
        directlyProvides(de_root, INavigationRoot)
        no_root = makeTranslation(en_root, 'no')
        no_root.setLanguage('no')
        directlyProvides(no_root, INavigationRoot)

        self.setRoles('Reviewer')
        pw = self.portal.portal_workflow
        pw.doActionFor(en_root, 'publish')
        pw.doActionFor(de_root, 'publish')
        self.logout()

        request = self.app.REQUEST
        selector = TranslatableLanguageSelector(en_root, request, None, None)
        selector.update()
        output = selector.render()

        en_path = en_root.absolute_url()
        en_link = '<a href="%s?set_language=en"' % en_path
        self.assert_(en_link in output)

        de_path = de_root.absolute_url()
        de_link = '<a href="%s?set_language=de"' % de_path
        self.assert_(de_link in output)

        self.assert_('set_language=no' not in output)
    def testRenderSelectorWithNavigationRootForAnonymous(self):
        self.loginAsPortalOwner()
        en_root = makeContent(self.portal, 'Folder', 'en')
        en_root.setLanguage('en')
        directlyProvides(en_root, INavigationRoot)
        de_root = makeTranslation(en_root, 'de')
        de_root.setLanguage('de')
        directlyProvides(de_root, INavigationRoot)
        no_root = makeTranslation(en_root, 'no')
        no_root.setLanguage('no')
        directlyProvides(no_root, INavigationRoot)

        self.setRoles('Reviewer')
        pw = self.portal.portal_workflow
        pw.doActionFor(en_root, 'publish')
        pw.doActionFor(de_root, 'publish')
        self.logout()

        request = self.app.REQUEST
        selector = TranslatableLanguageSelector(
            en_root, request, None, None)
        selector.update()
        output = selector.render()

        en_path = en_root.absolute_url()
        en_link = '<a href="%s?set_language=en"' % en_path
        self.assert_(en_link in output)

        de_path = de_root.absolute_url()
        de_link = '<a href="%s?set_language=de"' % de_path
        self.assert_(de_link in output)

        self.assert_('set_language=no' not in output)
 def testRenderSelectorWithoutCookieNegotiation(self):
     request = self.app.REQUEST
     ltool = getToolByName(self.portal, 'portal_languages')
     ltool.use_cookie_negotiation = False
     selector = TranslatableLanguageSelector(
         self.english, request, None, None)
     selector.update()
     output = selector.render()
     self.assertEquals(output.strip(), u'')
 def __init__(self, context, request, view, manager, data):
     base.Renderer.__init__(self, context, request, view, manager, data)
     self.selector = TranslatableLanguageSelector(context, request, None, None)
     self.selector.update()
     self.languages = self.selector.languages()
     self.languages.sort(key=operator.itemgetter("native"))
     portal_state = getMultiAdapter((context, request),
                                    name=u'plone_portal_state')
     self.portal_url = portal_state.portal_url()
 def testRenderSelectorWithoutCookieNegotiation(self):
     request = self.app.REQUEST
     ltool = getToolByName(self.portal, 'portal_languages')
     ltool.use_cookie_negotiation = False
     selector = TranslatableLanguageSelector(self.english, request, None,
                                             None)
     selector.update()
     output = selector.render()
     self.assertEquals(output.strip(), u'')
 def testRenderSelectorWithFlags(self):
     request = self.app.REQUEST
     ltool = getToolByName(self.portal, 'portal_languages')
     ltool.display_flags = True
     selector = TranslatableLanguageSelector(self.english, request, None,
                                             None)
     selector.update()
     output = selector.render()
     self.assert_('de.gif' in output)
     self.assert_('gb.gif' in output)
 def testRenderSelectorWithFlags(self):
     request = self.app.REQUEST
     ltool = getToolByName(self.portal, 'portal_languages')
     ltool.display_flags = True
     selector = TranslatableLanguageSelector(
         self.english, request, None, None)
     selector.update()
     output = selector.render()
     self.assert_('de.gif' in output)
     self.assert_('gb.gif' in output)
 def testRenderSelectorOnSiteRoot(self):
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(
         self.portal, request, None, None)
     selector.update()
     output = selector.render()
     path = self.portal.absolute_url()
     de_link = '<a href="%s?set_language=de"' % path
     self.assert_(de_link in output)
     en_link = '<a href="%s?set_language=en"' % path
     self.assert_(en_link in output)
 def testRenderSelectorOnSiteRoot(self):
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(self.portal, request, None,
                                             None)
     selector.update()
     output = selector.render()
     path = self.portal.absolute_url()
     de_link = '<a href="%s?set_language=de"' % path
     self.assert_(de_link in output)
     en_link = '<a href="%s?set_language=en"' % path
     self.assert_(en_link in output)
 def test_selector_on_neutral_document(self):
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(self.doc, request, None, None)
     selector.update()
     languages = dict([(l['code'], l) for l in selector.languages()])
     self.assertEqual(languages[u'en']['url'],
                      'http://nohost/plone/en?set_language=en')
     self.assertEqual(languages[u'de']['url'],
                      'http://nohost/plone/en-de?set_language=de')
     self.assertEqual(languages[u'no']['url'],
                      'http://nohost/plone?set_language=no')
 def setUp(self):
     provideAdapter(DummyState,
                    adapts=(Dummy, DummyRequest),
                    provides=Interface,
                    name="plone_context_state")
     self.context = Dummy()
     self.context.portal_url = Dummy()
     self.container = Dummy()
     self.context = self.context.__of__(self.container)
     self.request = DummyRequest()
     self.selector = TranslatableLanguageSelector(self.context,
                                                  self.request, None, None)
 def test_selector_on_neutral_document(self):
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(
         self.doc, request, None, None)
     selector.update()
     languages = dict([(l['code'], l) for l in selector.languages()])
     self.assertEqual(languages[u'en']['url'],
         'http://nohost/plone/en?set_language=en')
     self.assertEqual(languages[u'de']['url'],
         'http://nohost/plone/en-de?set_language=de')
     self.assertEqual(languages[u'no']['url'],
         'http://nohost/plone?set_language=no')
 def test_selector_on_sharing_view(self):
     request = self.app.REQUEST
     request['PATH_INFO'] = self.endoc.absolute_url() + '/@@sharing'
     selector = TranslatableLanguageSelector(
         self.endoc, request, None, None)
     selector.update()
     languages = dict([(l['code'], l) for l in selector.languages()])
     self.assertEqual(languages[u'en']['url'],
         'http://nohost/plone/en/sub-en/endoc/@@sharing?set_language=en')
     self.assertEqual(languages[u'de']['url'],
         'http://nohost/plone/en/sub-en/endoc-de/@@sharing?set_language=de')
     self.assertEqual(languages[u'no']['url'],
         'http://nohost/plone?set_language=no')
 def testRenderSelectorWithNavigationRoot(self):
     request = self.app.REQUEST
     directlyProvides(self.portal.Members, INavigationRoot)
     selector = TranslatableLanguageSelector(self.folder, request, None,
                                             None)
     selector.update()
     output = selector.render()
     path = self.portal.Members.absolute_url()
     folder_path = self.folder.absolute_url()
     de_link = '<a href="%s?set_language=de"' % path
     self.assert_(de_link in output)
     en_link = '<a href="%s?set_language=en"' % folder_path
     self.assert_(en_link in output)
 def testRenderSelectorWithNavigationRoot(self):
     request = self.app.REQUEST
     directlyProvides(self.portal.Members, INavigationRoot)
     selector = TranslatableLanguageSelector(
         self.folder, request, None, None)
     selector.update()
     output = selector.render()
     path = self.portal.Members.absolute_url()
     folder_path = self.folder.absolute_url()
     de_link = '<a href="%s?set_language=de"' % path
     self.assert_(de_link in output)
     en_link = '<a href="%s?set_language=en"' % folder_path
     self.assert_(en_link in output)
Beispiel #16
0
class Renderer(base.Renderer):
    def __init__(self, context, request, view, manager, data):
        base.Renderer.__init__(self, context, request, view, manager, data)
        self.selector = TranslatableLanguageSelector(context, request, None,
                                                     None)
        self.selector.update()
        self.languages = self.selector.languages()
        self.languages.sort(key=operator.itemgetter("native"))
        portal_state = getMultiAdapter((context, request),
                                       name=u'plone_portal_state')
        self.portal_url = portal_state.portal_url()

    def show(self):
        return self.selector.available() and len(self.languages) > 1

    def showFlags(self):
        return self.selector.showFlags()

    def update(self):
        pass

    render = ViewPageTemplateFile('language.pt')

    @memoize
    def items(self):
        if not ITranslatable.providedBy(self.context):

            def plain_context(info):
                info["has_translation"] = False

            updater = plain_context
        else:

            def translatable_context(info):
                trans = self.context.getTranslation(info["code"])
                if trans is None:
                    info["has_translation"] = False
                else:
                    info["has_translation"] = True
                    state = getMultiAdapter((trans, self.request),
                                            name='plone_context_state')
                    info["url"] = state.view_url()

            updater = translatable_context

        for lang in self.languages:
            updater(lang)

        return self.languages
 def test_selector_on_sharing_view(self):
     request = self.app.REQUEST
     request['PATH_INFO'] = self.endoc.absolute_url() + '/@@sharing'
     selector = TranslatableLanguageSelector(self.endoc, request, None,
                                             None)
     selector.update()
     languages = dict([(l['code'], l) for l in selector.languages()])
     self.assertEqual(
         languages[u'en']['url'],
         'http://nohost/plone/en/sub-en/endoc/@@sharing?set_language=en')
     self.assertEqual(
         languages[u'de']['url'],
         'http://nohost/plone/en/sub-en/endoc-de/@@sharing?set_language=de')
     self.assertEqual(languages[u'no']['url'],
                      'http://nohost/plone?set_language=no')
 def testRenderSelector(self):
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(
         self.english, request, None, None)
     selector.update()
     output = selector.render()
     self.assert_('<ul id="portal-languageselector"' in output)
     en_path = self.english.absolute_url()
     en_link = '<a href="%s?set_language=en"' % en_path
     self.assert_(en_link in output)
     de_path = self.german.absolute_url()
     de_link = '<a href="%s?set_language=de"' % de_path
     self.assert_(de_link in output)
     no_path = self.portal.absolute_url()
     no_link = '<a href="%s?set_language=no"' % no_path
     self.assert_(no_link in output)
 def testRenderSelector(self):
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(self.english, request, None,
                                             None)
     selector.update()
     output = selector.render()
     self.assert_('<ul id="portal-languageselector"' in output)
     en_path = self.english.absolute_url()
     en_link = '<a href="%s?set_language=en"' % en_path
     self.assert_(en_link in output)
     de_path = self.german.absolute_url()
     de_link = '<a href="%s?set_language=de"' % de_path
     self.assert_(de_link in output)
     no_path = self.portal.absolute_url()
     no_link = '<a href="%s?set_language=no"' % no_path
     self.assert_(no_link in output)
class Renderer(base.Renderer):

    def __init__(self, context, request, view, manager, data):
        base.Renderer.__init__(self, context, request, view, manager, data)
        self.selector = TranslatableLanguageSelector(context, request, None, None)
        self.selector.update()
        self.languages = self.selector.languages()
        self.languages.sort(key=operator.itemgetter("native"))
        portal_state = getMultiAdapter((context, request),
                                       name=u'plone_portal_state')
        self.portal_url = portal_state.portal_url()

    def show(self):
        return self.selector.available() and len(self.languages) > 1

    def showFlags(self):
        return self.selector.showFlags()

    def update(self):
        pass

    render = ViewPageTemplateFile('language.pt')

    @memoize
    def items(self):
        if not ITranslatable.providedBy(self.context):
            def plain_context(info):
                info["has_translation"]=False
            updater=plain_context
        else:
            def translatable_context(info):
                trans=self.context.getTranslation(info["code"])
                if trans is None:
                    info["has_translation"]=False
                else:
                    info["has_translation"]=True
                    state=getMultiAdapter((trans, self.request),
                            name='plone_context_state')
                    info["url"]=state.view_url()
            updater=translatable_context

        for lang in self.languages:
            updater(lang)

        return self.languages
 def setUp(self):
     provideAdapter(DummyState, adapts=(Dummy, DummyRequest),
                    provides=Interface, name="plone_context_state")
     self.context = Dummy()
     self.context.portal_url = Dummy()
     self.container = Dummy()
     self.context = self.context.__of__(self.container)
     self.request = DummyRequest()
     self.selector = TranslatableLanguageSelector(self.context,
                         self.request, None, None)
    def update(self):
        self.tool = getToolByName(self.context, "portal_languages", None)
        portal_tool = getToolByName(self.context, "portal_url", None)
        # self.port_url = None
        if portal_tool is not None:
            self.port_url = portal_tool.getPortalObject().absolute_url()

        self.available = TranslatableLanguageSelector.available(self)
        self.languages = []
        for language in TranslatableLanguageSelector.languages(self):
            if language["code"] == "en":
                language["pic"] = u"english.png"
            elif language["code"] == "uk":
                language["pic"] = u"ukrainian.png"
            elif language["code"] == "ru":
                language["pic"] = u"russian.png"
            else:
                language["pic"] = 0
            self.languages.append(language)
    def update(self):
        self.tool = getToolByName(self.context, 'portal_languages', None)
        portal_tool = getToolByName(self.context, 'portal_url', None)
        #self.port_url = None
        if portal_tool is not None:
            self.port_url = portal_tool.getPortalObject().absolute_url()

        self.available = TranslatableLanguageSelector.available(self)
        self.languages = []
        for language in TranslatableLanguageSelector.languages(self):
            if language['code'] == 'en':
                language['pic'] = u'english.png'
            elif language['code'] == 'uk':
                language['pic'] = u'ukrainian.png'
            elif language['code'] == 'ru':
                language['pic'] = u'russian.png'
            else:
                language['pic'] = 0
            self.languages.append(language)
 def testRenderSelectorForAnonymous(self):
     self.setRoles('Reviewer')
     pw = self.portal.portal_workflow
     pw.doActionFor(self.english, 'publish')
     self.logout()
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(self.english, request, None,
                                             None)
     selector.update()
     output = selector.render()
     self.assert_('<ul id="portal-languageselector"' in output)
     en_path = self.english.absolute_url()
     en_link = '<a href="%s?set_language=en"' % en_path
     self.assert_(en_link in output)
     de_path = self.portal.absolute_url()
     de_link = '<a href="%s?set_language=de"' % de_path
     self.assert_(de_link in output)
     no_path = self.portal.absolute_url()
     no_link = '<a href="%s?set_language=no"' % no_path
     self.assert_(no_link in output)
 def testRenderSelectorForAnonymous(self):
     self.setRoles('Reviewer')
     pw = self.portal.portal_workflow
     pw.doActionFor(self.english, 'publish')
     self.logout()
     request = self.app.REQUEST
     selector = TranslatableLanguageSelector(
         self.english, request, None, None)
     selector.update()
     output = selector.render()
     self.assert_('<ul id="portal-languageselector"' in output)
     en_path = self.english.absolute_url()
     en_link = '<a href="%s?set_language=en"' % en_path
     self.assert_(en_link in output)
     de_path = self.portal.absolute_url()
     de_link = '<a href="%s?set_language=de"' % de_path
     self.assert_(de_link in output)
     no_path = self.portal.absolute_url()
     no_link = '<a href="%s?set_language=no"' % no_path
     self.assert_(no_link in output)
Beispiel #26
0
 def __init__(self, context, request, view, manager):
     TranslatableLanguageSelector.__init__(self, context, request, view, manager)
     grok.Viewlet.__init__(self, context, request, view, manager)
Beispiel #27
0
    def languages(self):
        context = aq_inner(self.context)
        results = LSBase.languages(self)
        supported_langs = [v['code'] for v in results]
        missing = set([str(c) for c in supported_langs])
        translations = self._translations(missing)

        # We want to preserve the current template / view as used for the
        # current object and also use it for the other languages
        append_path = self._findpath(context.getPhysicalPath(),
                                     self.request.get('PATH_INFO', ''))
        formvariables = self._formvariables(self.request.form)
        try:
            all_translations = context.getTranslations(review_state=False)
        except:
            return []
        
        not_translated = missing.difference(all_translations.keys())
        for item in results:
            if item['code'] in not_translated:            
                item['unavailable'] = True
        

        for data in results:
            code = str(data['code'])
            data['translated'] = code in translations

            try:
                appendtourl = '/'.join(append_path)
                if data.get('unavailable', False):
                    appendtourl += '/not_available'
                    formvariables['uid'] = context.UID()
                else:
                    try:
                        del formvariables['uid']
                    except KeyError:
                        pass
                    
                if self.set_language:
                    appendtourl += '?' + make_query(formvariables,
                                                    dict(set_language=code))
                elif formvariables:
                    appendtourl += '?' + make_query(formvariables)
            except UnicodeError:
                appendtourl = '/'.join(append_path)
                if self.set_language:
                    appendtourl += '?set_language=%s' % code

            if data['translated']:
                trans = translations[code]
                state = getMultiAdapter((trans, self.request),
                        name='plone_context_state')
                data['url'] = state.canonical_object_url() + appendtourl
            else:
                state = getMultiAdapter((context, self.request),
                        name='plone_context_state')
                try:
                    data['url'] = state.canonical_object_url() + appendtourl
                except AttributeError:
                    data['url'] = context.absolute_url() + appendtourl

        return results
class TestLanguageSelectorBasics(cleanup.CleanUp, TestCase):
    def setUp(self):
        provideAdapter(DummyState,
                       adapts=(Dummy, DummyRequest),
                       provides=Interface,
                       name="plone_context_state")
        self.context = Dummy()
        self.context.portal_url = Dummy()
        self.container = Dummy()
        self.context = self.context.__of__(self.container)
        self.request = DummyRequest()
        self.selector = TranslatableLanguageSelector(self.context,
                                                     self.request, None, None)

    def test_available(self):
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        self.assertEquals(self.selector.available(), True)

    def test_available_no_tool(self):
        self.selector.update()
        self.selector.tool = None
        self.assertEquals(self.selector.available(), False)

    def test_languages(self):
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        self.assertEqual(self.selector.languages(), [
            {
                'code': 'nl',
                'translated': True,
                'selected': False,
                'url': 'object_url?set_language=nl'
            },
            {
                'code': 'en',
                'translated': True,
                'selected': True,
                'url': 'object_url?set_language=en'
            },
            {
                'code': 'no',
                'translated': False,
                'selected': False,
                'url': 'object_url?set_language=no'
            },
        ])

    def test_languages_vhr(self):
        self.context.physicalpath = ['', 'fake', 'path']
        vbase = '/VirtualHostBase/http/127.0.0.1/'
        self.request.PATH_INFO = vbase + 'fake/path/VirtualHostRoot/to/object'
        self.request.form['uni'] = u'pres\xd8rved'
        self.request.form['int'] = '1'
        self.request.REQUEST_METHOD = "GET"
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        base = 'object_url/to/object?int=1&uni='
        expected = [{
            'code': 'nl',
            'translated': True,
            'selected': False,
            'url': base + 'pres%C3%98rved&set_language=nl'
        }, {
            'code': 'en',
            'translated': True,
            'selected': True,
            'url': base + 'pres%C3%98rved&set_language=en'
        }, {
            'code': 'no',
            'translated': False,
            'selected': False,
            'url': base + 'pres%C3%98rved&set_language=no'
        }]
        self.assertEqual(self.selector.languages(), expected)

    def test_languages_preserve_view_and_query(self):
        self.context.physicalpath = ['', 'fake', 'path']
        self.request.PATH_INFO = '/fake/path/to/object'
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        base = 'object_url/to/object?set_language='
        expected = [{
            'code': 'nl',
            'translated': True,
            'selected': False,
            'url': base + 'nl'
        }, {
            'code': 'en',
            'translated': True,
            'selected': True,
            'url': base + 'en'
        }, {
            'code': 'no',
            'translated': False,
            'selected': False,
            'url': base + 'no'
        }]
        self.assertEqual(self.selector.languages(), expected)
Beispiel #29
0
 def setUp(self):
     self.selector = TranslatableLanguageSelector(None, None, None, None)
     self.fv = self.selector._formvariables
 def setUp(self):
     self.selector = TranslatableLanguageSelector(None, None, None, None)
     self.fp = self.selector._findpath
class TestLanguageSelectorBasics(cleanup.CleanUp, TestCase):

    def setUp(self):
        provideAdapter(DummyState, adapts=(Dummy, DummyRequest),
                       provides=Interface, name="plone_context_state")
        self.context = Dummy()
        self.context.portal_url = Dummy()
        self.container = Dummy()
        self.context = self.context.__of__(self.container)
        self.request = DummyRequest()
        self.selector = TranslatableLanguageSelector(self.context,
                            self.request, None, None)

    def test_available(self):
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        self.assertEquals(self.selector.available(), True)

    def test_available_no_tool(self):
        self.selector.update()
        self.selector.tool = None
        self.assertEquals(self.selector.available(), False)

    def test_languages(self):
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        self.assertEqual(self.selector.languages(),
            [{'code': 'nl',
              'translated': True,
              'selected': False,
              'url': 'object_url?set_language=nl'},
             {'code': 'en',
              'translated': True,
              'selected': True,
              'url': 'object_url?set_language=en'},
             {'code': 'no',
              'translated': False,
              'selected': False,
              'url': 'object_url?set_language=no'},
             ])

    def test_languages_vhr(self):
        self.context.physicalpath = ['', 'fake', 'path']
        vbase = '/VirtualHostBase/http/127.0.0.1/'
        self.request.PATH_INFO = vbase + 'fake/path/VirtualHostRoot/to/object'
        self.request.form['uni'] = u'pres\xd8rved'
        self.request.form['int'] = '1'
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        base = 'object_url/to/object?int=1&uni='
        expected = [
            {'code': 'nl',
             'translated': True,
             'selected': False,
             'url': base + 'pres%C3%98rved&set_language=nl'},
            {'code': 'en',
             'translated': True,
             'selected': True,
             'url': base + 'pres%C3%98rved&set_language=en'},
            {'code': 'no',
             'translated': False,
             'selected': False,
             'url': base + 'pres%C3%98rved&set_language=no'}]
        self.assertEqual(self.selector.languages(), expected)

    def test_languages_preserve_view_and_query(self):
        self.context.physicalpath = ['', 'fake', 'path']
        self.request.PATH_INFO = '/fake/path/to/object'
        self.selector.update()
        self.selector.tool = MockLanguageTool()
        base = 'object_url/to/object?set_language='
        expected = [
            {'code': 'nl',
             'translated': True,
             'selected': False,
             'url': base + 'nl'},
            {'code': 'en',
             'translated': True,
             'selected': True,
             'url': base + 'en'},
            {'code': 'no',
             'translated': False,
             'selected': False,
             'url': base + 'no'}]
        self.assertEqual(self.selector.languages(), expected)