plone.app.multilingual/only_show_translated_langs_in_selector: Language selector should only show translated languages if a
Peter Holzer <jenkins-z4DKO/[email protected]> Thu, 27 Jul 2017 07:38:22 -0700 (PDT)
| 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-27T16:37:20+02:00 Author: Peter Holzer (agitator) <peter.holzer-2KzcThb1VtpWk0Htik3J/[email protected]> Commit: https://github.com/plone/plone.app.multilingual/commit/09b8d95c898f8d392fac6e02ba2f1cd538e975d7 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 b132bb8..8f1566c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -56,6 +56,9 @@ New features: Bug fixes: +- Language selector should only show translated languages if always_show_selector is set to false + [agitator] + - Add missing i18n:translate tags [erral] diff --git a/src/plone/app/multilingual/browser/selector.py b/src/plone/app/multilingual/browser/selector.py index e3236da..f522fd9 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