def get_additional_translations(self): """ Return translations for the current context which aren't available from the language selection drop down {"tr":("Turkish", "http://url",) ...} """ context = self.context portal_langs = [i["code"] for i in self.languages()] translatable = ITranslatable(context, None) if translatable is not None: translations = translatable.getTranslations() else: translations = {} additional_translations = {} portal_state = queryMultiAdapter((context, self.request), name=u'plone_portal_state') lang_names = portal_state.locale().displayNames.languages lang_codes = [i for i in translations.keys() if i not in portal_langs and i != ""] can_edit = getSecurityManager().checkPermission( permissions.ModifyPortalContent, context ) for lang_code in lang_codes: is_published = translations[lang_code][1] == "published" if can_edit or is_published: additional_translations[lang_code] = \ (lang_names[lang_code], translations[lang_code][0].absolute_url(),) return additional_translations
def languages(self): current_language = unicode(getMultiAdapter((self.context, self.request), name='plone_portal_state').language()) languages = LanguageSelector.languages(self) translatable = ITranslatable(self.context, None) if translatable is not None: translations = translatable.getTranslations() else: translations = [] results = [] for data in languages: data['translated'] = data['code'] in translations if data['code'] == current_language or not data['translated']: continue if data['translated']: trans = translations[data['code']][0] state = getMultiAdapter((trans, self.request), name='plone_context_state') data['url'] = state.view_url() + '?set_language=' + data['code'] else: state = getMultiAdapter((self.context, self.request), name='plone_context_state') try: data['url'] = state.view_url() + '?set_language=' + data['code'] except AttributeError: data['url'] = self.context.absolute_url() + '?set_language=' + data['code'] results.append(data) return results
def update(self): self.portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') self.site_url = self.portal_state.portal_url() ls = LanguageSelector(self.context, self.request, self.view, self.manager) ls.update() results = ls.languages() translatable = ITranslatable(self.context, None) if translatable is not None: translations = translatable.getTranslations() else: translations = [] for data in results: data['translated'] = data['code'] in translations if data['translated']: trans = translations[data['code']][0] state = getMultiAdapter((trans, self.request), name='plone_context_state') data['url'] = state.view_url() + '?set_language=' + data['code'] else: state = getMultiAdapter((self.context, self.request), name='plone_context_state') try: data['url'] = state.view_url() + '?set_language=' + data['code'] except AttributeError: data['url'] = self.context.absolute_url() + '?set_language=' + data['code']
def languages(self): results = LanguageSelector.languages(self) # On the main portal, we want to be able to filter out unwanted # languages needes for subsites oshaview = getMultiAdapter((self.context, self.request), name='oshaview') subsite_path = oshaview.subsiteRootPath() potential_subsite = self.context.restrictedTraverse(subsite_path) # get the potentially present question- and country-id # Due to apache rewriting, we cannot use PATH_INFO, but must contruct the path manually # first, get the URL and snip the SERVER_URL off path = self.request.get('URL')[len(self.request.get('SERVER_URL'))+1:] # then pre-pend VirtualURL components if present elems = [x for x in self.request.get('VirtualRootPhysicalPath', [''])] + path.split('/') # join it to a path virtual_path = '/'.join(elems) # get the context's path context_path = '/'.join(self.context.getPhysicalPath()) # just an extra test, as the following expression should always be true if virtual_path.startswith(context_path): question_path = virtual_path[len(context_path):] else: question_path = '' group_by = 'group_by' in self.request and '&group_by=' + \ self.request.get('group_by') or '' # for translatable content, directly link to the translated objects translatable = ITranslatable(self.context, None) if translatable is not None: translations = translatable.getTranslations() else: translations = [] for data in results: data['translated'] = data['code'] in translations if data['translated']: trans = translations[data['code']][0] state = getMultiAdapter((trans, self.request), name='plone_context_state') data['url'] = state.view_url() + question_path + \ '?set_language=' + data['code'] + group_by else: state = getMultiAdapter((self.context, self.request), name='plone_context_state') try: data['url'] = state.view_url() + '/not_available_lang?set_language=' + data['code'] except AttributeError: data['url'] = self.context.absolute_url() + '/not_available_lang?set_language=' + data['code'] return results
def languages(self): context = aq_inner(self.context) results = LanguageSelector.languages(self) translatable = ITranslatable(context, None) if translatable is not None: translations = translatable.getTranslations() else: translations = [] # We want to preserve the current template / view as used for the # current object and also use it for the other languages # We need to find the actual translatable content object. As an # optimization we assume it is one of the last two path segments match = filter(None, context.getPhysicalPath()[-2:]) current_path = filter(None, self.request.get('PATH_INFO', '').split('/')) append_path = [] stop = False while current_path and not stop: check = current_path.pop() if check not in match: append_path.insert(0, check) else: stop = True # we remove virtualhostroot if 'VirtualHostRoot' in append_path: append_path.remove('VirtualHostRoot') if append_path: append_path.insert(0, '') formvariables = self.request.form for k, v in formvariables.items(): if isinstance(v, unicode): formvariables[k] = v.encode('utf-8') for data in results: data['translated'] = data['code'] in translations try: appendtourl = '/'.join(append_path) + \ '?' + make_query(formvariables, dict(set_language=data['code'])) except UnicodeError: appendtourl = '/'.join(append_path) + '?set_language=' + data['code'] if data['translated']: trans = translations[data['code']][0] container = aq_parent(trans) if isDefaultPage(container, trans): trans = container state = getMultiAdapter((trans, self.request), name='plone_context_state') data['url'] = state.view_url() + appendtourl else: container = aq_parent(context) if isDefaultPage(container, context): context = container state = getMultiAdapter((context, self.request), name='plone_context_state') try: data['url'] = state.view_url() + appendtourl except AttributeError: data['url'] = context.absolute_url() + appendtourl return results