Exemple #1
0
    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