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:32:38+02:00
Author: Peter Holzer (agitator) <peter.holzer-2KzcThb1VtpWk0Htik3J/[email protected]>
Commit: https://github.com/plone/plone.app.multilingual/commit/19a8fc7787378ce4419408ccda19610ee552cf83

Language selector should only show translated languages if always_show_selector is set to false

Files changed:
M src/plone/app/multilingual/browser/selector.py

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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.