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)
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 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)
def __init__(self, context, request, view, manager): TranslatableLanguageSelector.__init__(self, context, request, view, manager) grok.Viewlet.__init__(self, context, request, view, manager)
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)
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)