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