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_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')
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')
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)
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)
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 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