Skip to content

Commit

Permalink
Merge b90310a into b50512a
Browse files Browse the repository at this point in the history
  • Loading branch information
petschki committed Jun 26, 2020
2 parents b50512a + b90310a commit d525496
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 26 deletions.
3 changes: 3 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Changes
2.0.1 (unreleased)
------------------

- fix translating msgid when portal language is not found in taxonomy
[petschki]

- fix JavaScript in ``input_widget.pt`` which had python comments
[petschki]

Expand Down
10 changes: 2 additions & 8 deletions src/collective/taxonomy/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,6 @@ def taxonomyDefaultValue():
return taxonomy


def get_lang_code(lang=None):
if lang is None:
lang = api.portal.get_current_language()
return lang.split('-', 1)[0]


class ITaxonomyForm(Interface):

taxonomy = schema.TextLine(
Expand All @@ -96,9 +90,9 @@ class ITaxonomyForm(Interface):

default_language = schema.Choice(
title=_(u"Default language"),
vocabulary='collective.taxonomy.languages',
vocabulary='plone.app.vocabularies.AvailableContentLanguages',
required=True,
defaultFactory=get_lang_code
defaultFactory=api.portal.get_current_language
)

import_file = NamedBlobFile(
Expand Down
29 changes: 13 additions & 16 deletions src/collective/taxonomy/jsonimpl.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,17 @@
import json
import os

from lxml import etree

from BTrees.OOBTree import OOBTree
from Products.Five.browser import BrowserView
from plone import api
from zope.component import queryMultiAdapter
from zope.component import queryUtility
from zope.i18n import translate

from collective.taxonomy import PATH_SEPARATOR
from collective.taxonomy.i18n import CollectiveTaxonomyMessageFactory as _
from collective.taxonomy.interfaces import ITaxonomy
from collective.taxonomy.interfaces import get_lang_code
from collective.taxonomy.vdex import TreeExport
from lxml import etree
from plone import api
from plone.app.vocabularies.language import AvailableContentLanguageVocabularyFactory
from zope.component import queryUtility
from zope.i18n import translate


class EditTaxonomyData(TreeExport, BrowserView):
Expand Down Expand Up @@ -71,19 +68,19 @@ def get_data(self):

def get_languages_mapping(self):
"""Get mapping token/value for languages."""
portal = api.portal.get()
portal_state = queryMultiAdapter(
(portal, portal.REQUEST), name=u'plone_portal_state')
mapping = portal_state.locale().displayNames.languages
vocab = AvailableContentLanguageVocabularyFactory(self.context)
language_tool = api.portal.get_tool('portal_languages')
supported_langs = language_tool.supported_langs
languages_mapping = {
get_lang_code(lang): mapping[get_lang_code(lang)].capitalize()
lang: vocab.getTermByToken(lang).title
for lang in supported_langs
}
# add taxonomy's default language if it is not in supported langs
default_lang = self.taxonomy.default_language
languages_mapping[default_lang] = mapping[default_lang].capitalize()
# if the supported languages changed we might have data of unsupported
# languages in our taxonomy. let's add them here.
for data_lng in self.taxonomy.inverted_data.keys():
if data_lng not in languages_mapping:
lng_term = vocab.getTermByToken(data_lng)
languages_mapping[data_lng] = lng_term.title if lng_term else data_lng
return json.dumps(languages_mapping)

def get_resource_url(self):
Expand Down
76 changes: 76 additions & 0 deletions src/collective/taxonomy/tests/test_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

from collective.taxonomy.testing import INTEGRATION_TESTING

import json


class TestJson(unittest.TestCase):

Expand All @@ -19,6 +21,7 @@ class TestJson(unittest.TestCase):
def setUp(self):
super(TestJson, self).setUp()
self.portal = self.layer['portal']
self.request = self.layer['request']
setRoles(self.portal, TEST_USER_ID, ['Manager'])

def test_generate_json(self):
Expand Down Expand Up @@ -99,3 +102,76 @@ def test_generate_json(self):
(u'\u241fAnimaux\u241fReptiles', 'reptiles'),
(u'\u241fAnimaux\u241fReptiles\u241fPythons', 'pythons'),
(u'\u241fVégétaux', 'plants')])


class TestEditDataJson(unittest.TestCase):

"""Test Edit Data JSON view."""

layer = INTEGRATION_TESTING

def setUp(self):
super(TestEditDataJson, self).setUp()
self.portal = self.layer['portal']
self.request = self.layer['request']
setRoles(self.portal, TEST_USER_ID, ['Manager'])
login(self.portal, TEST_USER_NAME)
self.request.set('taxonomy', 'collective.taxonomy.test')
self.view = self.portal.restrictedTraverse("@@taxonomy-edit-data")

def test_get_data(self):
data = json.loads(self.view.get_data())
self.assertEqual({
'default_language': 'da',
'key': '0',
'name': 'collective.taxonomy.test',
'subnodes': [{
'key': '1',
'subnodes': [
{
'key': '2',
'subnodes': [{
'key': '4',
'subnodes': [],
'translations': {
'da': 'Hest'
}
}],
'translations': {
'da': 'Bogsamling',
'en': 'Book Collecting'
}
}, {
'key': '3',
'subnodes': [],
'translations': {
'da': 'Kronologi',
'en': 'Chronology'
}
}
],
'translations': {
'da': 'Informationsvidenskab',
'de': 'Informatik',
'en': 'Information Science',
'ru': 'Информатику'
}
}],
'title': 'Test vocabulary'
}, data)

def test_get_languages_mapping(self):
data = json.loads(self.view.get_languages_mapping())
self.assertEqual({
'da': 'Dansk',
'de': 'Deutsch',
'en': 'English',
'ru': 'Русский'
}, data)

def test_get_resource_url(self):
url = self.view.get_resource_url()
self.assertEqual(
'http://nohost/plone/++resource++taxonomy/edittaxonomydata.js',
url
)
12 changes: 10 additions & 2 deletions src/collective/taxonomy/utility.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from collective.taxonomy import generated
from collective.taxonomy.behavior import TaxonomyBehavior
from collective.taxonomy.interfaces import ITaxonomy
from collective.taxonomy.interfaces import get_lang_code
from collective.taxonomy.vocabulary import Vocabulary
from copy import copy
from persistent.dict import PersistentDict
Expand Down Expand Up @@ -102,7 +101,7 @@ def makeVocabulary(self, language):
return Vocabulary(self.name, data, inverted_data, order, version)

def getCurrentLanguage(self, request):
language = get_lang_code()
language = api.portal.get_current_language()
if language in self.data:
return language
elif self.default_language in self.data:
Expand Down Expand Up @@ -293,6 +292,15 @@ def translate(self, msgid, mapping=None, context=None,
target_language not in self.inverted_data:
target_language = str(api.portal.get_current_language())

if target_language not in self.inverted_data:
# might be a non standard language or the portal has
# switched standard language after creating the taxonomy
lngs = list(self.inverted_data.keys())
if not len(lngs):
# empty taxonomy
return ''
target_language = lngs[0]

if msgid not in self.inverted_data[target_language]:
return ''

Expand Down

0 comments on commit d525496

Please sign in to comment.