=========== LinguaPlone =========== Um `LinguaPlone`_ ordnungsgemäß in einer Plone-Site aktivieren zu können, muss folgende Reihenfolge eingehalten werden: #. Zunächst muss die Sprachauswahl im *Plone Language Tool* angegeben werden. #. Erst im Anschluss daran kann LinguaPlone installiert werden. #. Und schließlich wird der ``@@language-setup-folders``-View von LinguaPlone aufgerufen um auch das Site-Root-Objekt mehrsprachig darzustellen. .. _`LinguaPlone`: http://pypi.python.org/pypi/Products.LinguaPlone/ Programmatisch lässt sich dies realisieren, indem in ``vs.policy/vs/policy/setuphandlers.py`` zunächst die Spracheinstellungen gesetzt werden, anschließend LinguaPlone aktiviert und der View ``@@language-setup-folders`` aufgerufen wird:: def installLinguaPlone(site): # LP must be installed a last step in order to deal with # several strange annoyances and expecations that LP relies on. pl = getToolByName(site, 'portal_languages') pl.supported_langs = ('de', 'en') qi = getToolByName(site, 'portal_quickinstaller') qi.installProducts(['Products.LinguaPlone']) transaction.savepoint(1)# site.restrictedTraverse('@@language-setup-folders')() … def setupVarious(context): if context.readDataFile('ise.policy_various.txt') is None: return … installLinguaPlone(site) Tests ===== In ``test_language_settings.py`` können folgende Tests geschrieben werden:: import unittest2 from base import TestBase class LanguageTests(TestBase): def testInstalledProducts(self): … self.assertEqual('LinguaPlone' in installed, True) def testLanguageSettings(self): lang_tool = self.portal.portal_languages default_language = self.portal.portal_languages.getDefaultLanguage() self.assertEqual(default_language == 'de', True) # return [(country code, countryname), ...] supported_languages = [r[0] for r in self.portal.portal_languages.listSupportedLanguages()] self.assertEqual('en' in supported_languages, True) self.assertEqual('de' in supported_languages, True) self.assertEqual(lang_tool.use_cookie_negotiation, True) self.assertEqual(lang_tool.use_request_negotiation, True) self.assertEqual(lang_tool.use_content_negotiation, True) def test_suite(): from unittest2 import TestSuite, makeSuite suite = TestSuite() suite.addTest(makeSuite(LanguageTests)) return suite TinyMCE-Erweiterungen ===================== Sollen sprachneutrale Inhalte wie z.B. Bilder erstellt werden, sollte TinyMCE so gepatcht werden, dass er über die sprachspezifischen Ordner hinaus referenzieren kann. Dies lässt sich am einfachsten realisieren mit `collective.monkeypatcher`_. .. _`collective.monkeypatcher`: http://pypi.python.org/pypi/collective.monkeypatcher Anschließend erweitern wir unsere ``configure.zcml``-Datei um ``patches.zcml``:: Nun legen wir ``patches.zcml`` mit folgendem Inhalt an:: Schließlich schreiben wir noch die Datei :download:`patches.py`, die die Originalklassen mit den entsprechenden Änderungen enthält.