Skip to content

Commit

Permalink
Neutral Language Draft implementation
Browse files Browse the repository at this point in the history
There is shared folder on top of the plone site that is shared with all
the languages with a language independent.
  • Loading branch information
bloodbare committed Sep 30, 2012
1 parent 1b252a2 commit 92888d6
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 13 deletions.
33 changes: 32 additions & 1 deletion src/plone/app/multilingual/browser/menu.py
Expand Up @@ -16,6 +16,7 @@
from plone.app.multilingual import _
from plone.uuid.interfaces import IUUID
from plone.multilingual.interfaces import LANGUAGE_INDEPENDENT, ILanguage
from plone.app.multilingual.interfaces import SHARED_NAME


class TranslateMenu(BrowserMenu):
Expand Down Expand Up @@ -120,6 +121,36 @@ def getMenuItems(self, context, request):
"submenu": None,
})

menu.append({
"title": _(u"shared_folder",
default=u"Shared Folder"),
"description": _(
u"description_shared_folder",
default=u"Shared Folder content link"),
"action": portal_url + '/' + SHARED_NAME,
"selected": False,
"icon": None,
"extra": {"id": "_shared_folder",
"separator": None,
"class": ""},
"submenu": None,
})
else:
menu.append({
"title": _(u"language_folder",
default=u"Language Folder"),
"description": _(
u"description_shared_folder",
default=u"Actual Language Folder"),
"action": portal_url + '/' + lt.getPreferredLanguage(),
"selected": False,
"icon": None,
"extra": {"id": "_shared_folder",
"separator": None,
"class": ""},
"submenu": None,
})

menu.append({
"title": _(u"title_set_language",
default=u"Set language"),
Expand All @@ -129,7 +160,7 @@ def getMenuItems(self, context, request):
"selected": False,
"icon": None,
"extra": {"id": "_set_language",
"separator": langs and "actionSeparator" or None,
"separator": None,
"class": ""},
"submenu": None,
})
Expand Down
11 changes: 8 additions & 3 deletions src/plone/app/multilingual/browser/selector.py
Expand Up @@ -15,6 +15,8 @@
from plone.app.i18n.locales.browser.selector import LanguageSelector
from plone.app.layout.navigation.interfaces import INavigationRoot

from plone.multilingual.interfaces import ILanguage
from plone.multilingual.interfaces import LANGUAGE_INDEPENDENT
from plone.multilingual.interfaces import ITranslationManager, ITranslatable
from plone.app.multilingual.browser.controlpanel import IMultiLanguagePolicies

Expand Down Expand Up @@ -160,7 +162,12 @@ def languages(self):
languages_info = super(LanguageSelectorViewlet, self).languages()
supported_langs = [v['code'] for v in languages_info]

if find_translations_policy == 'closest':
results = []

# If it's neutral language don't do anything
if ILanguage(context).get_language() == LANGUAGE_INDEPENDENT:
translations = {}
elif find_translations_policy == 'closest':
translations = self._get_translations_by_closest(supported_langs)
else:
translations = self._get_translations_by_dialog(supported_langs)
Expand All @@ -174,8 +181,6 @@ def languages(self):

non_viewable = set()

results = []

for lang_info in languages_info:
# Avoid to modify the original language dict
data = lang_info.copy()
Expand Down
32 changes: 31 additions & 1 deletion src/plone/app/multilingual/browser/setup.py
@@ -1,6 +1,10 @@
from plone.app.layout.navigation.interfaces import INavigationRoot
from zope.interface import alsoProvides
from plone.multilingual.interfaces import ITranslationManager, ILanguage
from plone.multilingual.interfaces import (
ITranslationManager,
ILanguage,
LANGUAGE_INDEPENDENT
)

from Products.CMFCore.utils import getToolByName
from Products.Five import BrowserView
Expand Down Expand Up @@ -56,6 +60,7 @@ def setupSite(self, context, forceOneLanguage=False):
doneSomething += self.removePortalDefaultPage()
if self.previousDefaultPageId:
doneSomething += self.resetDefaultPage()
doneSomething += self.setupSharedFolder()
doneSomething += self.setupLanguageSwitcher()
if not doneSomething:
return "Nothing done."
Expand Down Expand Up @@ -150,6 +155,31 @@ def setUpLanguage(self, code, name):
LOG.info("INavigationRoot setup on folder '%s'" % code)
return doneSomething

def setupSharedFolder(self):
"""
Create the shared neutral language folder
"""
folderId = "shared"
folder = getattr(self.context, folderId, None)
wftool = getToolByName(self.context, 'portal_workflow')
if folder is None:
self.context.invokeFactory(self.folder_type, folderId)
folder = getattr(self.context, folderId)
ILanguage(folder).set_language(LANGUAGE_INDEPENDENT)
folder.setTitle("Language Shared")
state = wftool.getInfoFor(folder, 'review_state', None)
# This assumes a direct 'publish' transition from the initial state
if state != 'published':
wftool.doActionFor(folder, 'publish')
folder.reindexObject()
doneSomething = True
LOG.info("Added LANGUAGE_INDEPENDENT folder: %s" % (folderId))
if not INavigationRoot.providedBy(folder):
alsoProvides(folder, INavigationRoot)
doneSomething = True
LOG.info("INavigationRoot setup on shared folder ")
return doneSomething

def removePortalDefaultPage(self):
"""
Remove the default page of the site
Expand Down
1 change: 0 additions & 1 deletion src/plone/app/multilingual/browser/update_language_form.py
Expand Up @@ -24,7 +24,6 @@ class UpdateLanguageForm(form.SchemaForm):
def handle_update(self, action):
data, errors = self.extractData()
new_object = self.context
import pdb; pdb.set_trace()
if not errors:
language = data['language']
# We need to move the object to its place!!
Expand Down
31 changes: 24 additions & 7 deletions src/plone/app/multilingual/catalog.py
Expand Up @@ -7,13 +7,15 @@

from plone.app.content.browser.foldercontents import (FolderContentsView,
FolderContentsTable)
from plone.app.multilingual.interfaces import IMultiLanguageExtraOptionsSchema
from plone.app.multilingual.interfaces import IMultiLanguageExtraOptionsSchema, SHARED_NAME
from Acquisition import aq_inner
from zope.component import getUtility
from plone.registry.interfaces import IRegistry

from App.special_dtml import DTMLFile

from plone.i18n.locales.languages import _languagelist


NO_FILTER = ['Language', 'UID', 'id', 'getId']
_enabled = []
Expand All @@ -26,18 +28,33 @@ def Language(object, **kw):


def language_filter(query):
for key in NO_FILTER: # any "nofilter" indexing prevent mangling
if key in query:
return
if query.get('Language') == 'all':
del query['Language']
return
site = getSite()
languageTool = getToolByName(site, 'portal_languages', None)
if languageTool is None:
return
if query.get('Language') == 'all':
del query['Language']
return
for key in NO_FILTER: # any "nofilter" indexing prevent mangling
if key in query:
return
query['Language'] = [languageTool.getPreferredLanguage(),
LANGUAGE_INDEPENDENT]
old_path = query.get('path', None)
# In case is a depth path search
if isinstance(old_path, dict) and 'query' in old_path:
old_path_url = old_path['query']
# We are going to check if is language root
root_path = '/'.join(site.getPhysicalPath())
query_list = old_path['query'].split('/')

# Check is a language root folder to add the shared folder
if old_path['query'].split('/')[-1] in _languagelist:
old_path['query'] = [old_path_url, root_path + '/' + SHARED_NAME]

# Check if its shared folder to add the root path
#elif old_path['query'].split('/')[-1] == SHARED_NAME:
# old_path['query'] = [old_path_url, root_path + '/' + languageTool.getPreferredLanguage()]


def AlreadyApplied(patch):
Expand Down
2 changes: 2 additions & 0 deletions src/plone/app/multilingual/interfaces.py
Expand Up @@ -2,6 +2,8 @@
from zope import schema
from plone.app.multilingual import _

SHARED_NAME = 'shared'


class IPloneAppMultilingualInstalled(Interface):
""" layer """
Expand Down

0 comments on commit 92888d6

Please sign in to comment.