plone.app.multilingual/only_show_translated_langs_in_selector: Language selector should only show translated languages if a
Peter Holzer <jenkins-z4DKO/[email protected]>
| Newsgroups | gmane.comp.web.zope.plone.cvs |
|---|---|
| Message-ID | <[email protected]> |
Repository: plone.app.multilingual Branch: refs/heads/only_show_translated_langs_in_selector Date: 2017-07-18T10:24:01+02:00 Author: Peter Holzer (agitator) <peter.holzer-2KzcThb1VtpWk0Htik3J/[email protected]> Commit: https://github.com/plone/plone.app.multilingual/commit/ee3a92d9836dade7dfd2a6ebee10748e8ca35ca9 Language selector should only show translated languages if always_show_selector is set to false Files changed: M CHANGES.rst M src/plone/app/multilingual/browser/selector.py diff --git a/CHANGES.rst b/CHANGES.rst index dc9362a7..bae44252 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,10 @@ Changelog 5.0.6 (unreleased) ------------------ -- Nothing changed yet. +Bug fixes: + +- Language selector should only show translated languages if always_show_selector is set to false + [agitator] 5.0.5 (2017-04-27) diff --git a/src/plone/app/multilingual/browser/selector.py b/src/plone/app/multilingual/browser/selector.py index e3236dab..f522fd95 100644 --- a/src/plone/app/multilingual/browser/selector.py +++ b/src/plone/app/multilingual/browser/selector.py @@ -1,10 +1,14 @@ # -*- coding: utf-8 -*- -from ZTUtils import make_query from plone.app.i18n.locales.browser.selector import LanguageSelector +from plone.app.multilingual.api import get_translation_manager from plone.app.multilingual.interfaces import ITG +from plone.app.multilingual.interfaces import ITranslationManager from plone.app.multilingual.interfaces import NOTG +from plone.registry.interfaces import IRegistry +from zope.component import getUtility from zope.component import queryAdapter from zope.component.hooks import getSite +from ZTUtils import make_query def addQuery(request, url, exclude=tuple(), **extras): @@ -72,14 +76,35 @@ class LanguageSelectorViewlet(LanguageSelector): def languages(self): languages_info = super(LanguageSelectorViewlet, self).languages() + registry = getUtility(IRegistry) + always_show_selector = registry['plone.always_show_selector'] results = [] + translations = [] translation_group = queryAdapter(self.context, ITG) + if translation_group is None: translation_group = NOTG + + # for some reason there is no ITranslationManager provided by + # context even if the api method get_translation_manager + # returns a translation_manager + try: + translation_manager = get_translation_manager(self.context) + translations = translation_manager.get_translated_languages() + except: # noqa + pass + for lang_info in languages_info: + + if not (always_show_selector or + lang_info['code'] in translations or + translation_group == 'notg' + ): + continue + # Avoid to modify the original language dict data = lang_info.copy() - data['translated'] = True + data['translated'] = lang_info['code'] in translations query_extras = { 'set_language': data['code'], } @@ -87,12 +112,19 @@ def languages(self): if post_path: query_extras['post_path'] = post_path site = getSite() - data['url'] = addQuery(self.request, - site.absolute_url().rstrip("/") + - "/@@multilingual-selector/%s/%s" % ( - translation_group, - lang_info['code'] - ), - **query_extras) + # if there is no translationgroup, + # we still want to switch language in the same context + if translation_group == 'notg': + data['url'] = self.context.absolute_url() + \ + '/?set_language=' + lang_info['code'] + else: + data['url'] = addQuery(self.request, + site.absolute_url().rstrip("/") + + "/@@multilingual-selector/%s/%s" % ( + translation_group, + lang_info['code'] + ), + **query_extras) results.append(data) + return results ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot