def testGetTranslatedLanguages(self): # List should contain all existing translations makeTranslation(self.english, 'de') makeTranslation(self.english, 'fr') langs = self.english.getTranslatedLanguages() langs = [l[0] for l in langs] self.assertEqual(set(langs), set(['de', 'en', 'fr']))
def testGetDeletableLanguages(self): # List should contain all translations except the canonical one makeTranslation(self.english, 'de') makeTranslation(self.english, 'fr') langs = self.english.getDeletableLanguages() langs = [l[0] for l in langs] self.assertEqual(set(langs), set(['de', 'fr']))
def testTranslationIsMovedToTranslatedFolder(self): self.weblog_de = makeTranslation(self.weblog_en, 'de') englishpost = makeContent(self.weblog_en, 'WeblogEntry', 'post') englishpost.setLanguage('en') germanpost = makeTranslation(englishpost, 'de') self.failUnless(englishpost in self.weblog_en.objectValues()) self.failUnless(germanpost in self.weblog_de.objectValues())
def testTranslationIsMovedToTranslatedFolder(self): self.folder_de = makeTranslation(self.folder_en, 'de') english = makeContent(self.folder_en, 'SimpleType', 'doc') english.setLanguage('en') german = makeTranslation(english, 'de') self.failUnless(english.getId() in self.folder_en) self.failUnless(german.getId() in self.folder_de)
def testRenderSelectorWithNavigationRootForAnonymous(self): self.loginAsPortalOwner() en_root = makeContent(self.portal, 'Folder', 'en') en_root.setLanguage('en') directlyProvides(en_root, INavigationRoot) de_root = makeTranslation(en_root, 'de') de_root.setLanguage('de') directlyProvides(de_root, INavigationRoot) no_root = makeTranslation(en_root, 'no') no_root.setLanguage('no') directlyProvides(no_root, INavigationRoot) self.setRoles('Reviewer') pw = self.portal.portal_workflow pw.doActionFor(en_root, 'publish') pw.doActionFor(de_root, 'publish') self.logout() request = self.app.REQUEST selector = TranslatableLanguageSelector( en_root, request, None, None) selector.update() output = selector.render() en_path = en_root.absolute_url() en_link = '<a href="%s?set_language=en"' % en_path self.assert_(en_link in output) de_path = de_root.absolute_url() de_link = '<a href="%s?set_language=de"' % de_path self.assert_(de_link in output) self.assert_('set_language=no' not in output)
def testRenderSelectorWithNavigationRootForAnonymous(self): self.loginAsPortalOwner() en_root = makeContent(self.portal, 'Folder', 'en') en_root.setLanguage('en') directlyProvides(en_root, INavigationRoot) de_root = makeTranslation(en_root, 'de') de_root.setLanguage('de') directlyProvides(de_root, INavigationRoot) no_root = makeTranslation(en_root, 'no') no_root.setLanguage('no') directlyProvides(no_root, INavigationRoot) self.setRoles('Reviewer') pw = self.portal.portal_workflow pw.doActionFor(en_root, 'publish') pw.doActionFor(de_root, 'publish') self.logout() request = self.app.REQUEST selector = TranslatableLanguageSelector(en_root, request, None, None) selector.update() output = selector.render() en_path = en_root.absolute_url() en_link = '<a href="%s?set_language=en"' % en_path self.assert_(en_link in output) de_path = de_root.absolute_url() de_link = '<a href="%s?set_language=de"' % de_path self.assert_(de_link in output) self.assert_('set_language=no' not in output)
def testDeleteCanonicalWithTranslationsBTreeFolder(self): # Must delete translations first english = makeContent(self.folder, 'BTreeFolder', 'foo') english.setLanguage('en') makeTranslation(english, 'de') self.assertRaises(BeforeDeleteException, self.folder._delObject, 'foo')
def testLangIndependentReferenceIndexing(self): catalog = getToolByName(self.portal, 'portal_catalog') catalog.addIndex('getRawReference', 'FieldIndex') catalog.addColumn('getRawReference') catalog.addIndex('getRawReferenceDependent', 'FieldIndex') catalog.addColumn('getRawReferenceDependent') english = makeContent(self.folder, 'SimpleType', 'doc') english.setLanguage('en') german = makeTranslation(english, 'de') target = makeContent(self.folder, 'SimpleType', 'target') target.setLanguage('en') target_german = makeTranslation(target, 'de') # Test language independent reference fields english.processForm(values=dict( reference=target.UID(), referenceDependent=target.UID())) self.assertEqual(english.getReference().UID(), target.UID()) self.assertEqual(german.getReference().UID(), target_german.UID()) brains = catalog(dict(getRawReferenceDependent=target.UID())) self.assertEqual(brains[0].getRawReferenceDependent, target.UID()) brains = catalog(dict(getRawReferenceDependent=target.UID())) self.assertEqual(brains[0].getRawReferenceDependent, target.UID()) brains = catalog(dict(UID=english.UID())) self.assertEqual(brains[0].getRawReference, target.UID()) brains = catalog(dict(UID=german.UID())) self.assertEqual(brains[0].getRawReference, target_german.UID())
def testGetDeletableLanguages(self): # List should contain all translations except the canonical one makeTranslation(self.english, 'de') makeTranslation(self.english, 'fr') langs = self.english.getDeletableLanguages() langs = [l['id'] for l in langs] self.assertEqual(set(langs), set(['de', 'fr']))
def afterSetUp(self): directlyProvides(self.portal.REQUEST, ILinguaPloneProductLayer) self.addLanguage('de') self.setLanguage('en') self.english = makeContent(self.folder, 'SimpleType', 'doc') self.germanfolder = makeTranslation(self.folder, 'de') self.english.setLanguage('en') self.german = makeTranslation(self.english, 'de')
def testDeleteAlreadyTranslatedLanguage(self): # Must delete translations first english = makeContent(self.folder, 'SimpleType', 'doc') english.setLanguage('en') makeTranslation(english, 'de') self.portal.portal_languages.removeSupportedLanguages(('de', )) try: english.getDeletableLanguages() except KeyError: self.fail("getDeletableLanguages raised KeyError unexpectedly!")
def testDeleteAlreadyTranslatedLanguage(self): # Must delete translations first english = makeContent(self.folder, 'SimpleType', 'doc') english.setLanguage('en') makeTranslation(english, 'de') self.portal.portal_languages.removeSupportedLanguages(('de',)) try: english.getDeletableLanguages() except KeyError: self.fail("getDeletableLanguages raised KeyError unexpectedly!")
def testTranslatingDefaultPagePutsItIntoTranslatedParentFolder(self): english_folder = self.folder makeTranslation(english_folder, 'de') # translated folder exists english_doc = makeContent(english_folder, 'SimpleType', 'doc') english_folder.setDefaultPage(english_doc.getId()) makeTranslation(english_doc, 'de').processForm( values=dict(title='dok')) german_folder = english_folder.getTranslation('de') german_doc = english_doc.getTranslation('de') self.assertTrue(german_doc.getId() in german_folder) self.assertTrue(isDefaultPage(english_folder, english_doc)) self.assertTrue(isDefaultPage(german_folder, german_doc))
def testTranslatingDefaultPagePutsItIntoTranslatedParentFolder(self): english_folder = self.folder makeTranslation(english_folder, 'de') # translated folder exists english_doc = makeContent(english_folder, 'SimpleType', 'doc') english_folder.setDefaultPage(english_doc.getId()) makeTranslation(english_doc, 'de').processForm(values=dict(title='dok')) german_folder = english_folder.getTranslation('de') german_doc = english_doc.getTranslation('de') self.assertTrue(german_doc.getId() in german_folder) self.assertTrue(isDefaultPage(english_folder, english_doc)) self.assertTrue(isDefaultPage(german_folder, german_doc))
def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] language_tool = getToolByName(self.portal, 'portal_languages') language_tool.addSupportedLanguage('ca') language_tool.addSupportedLanguage('es') self.doc1 = makeContent(self.portal, 'Document', id='doc1') self.doc1.setLanguage('en') self.doc1_ca = makeTranslation(self.doc1, 'ca') self.doc1_ca.edit(title="Foo", language='ca') self.doc1_es = makeTranslation(self.doc1, 'es') self.doc1_es.edit(title="Foo", language='es')
def testTranslatingDefaultPageInNeutralFolderDoesntCreateFolder(self): neutral_folder = self.folder neutral_folder.setLanguage('') english_doc = makeContent(neutral_folder, 'SimpleType', 'doc') english_doc.setLanguage('en') neutral_folder.setDefaultPage(english_doc.getId()) makeTranslation(english_doc, 'de').processForm(values=dict(title='dok')) self.assertEqual(neutral_folder.getTranslation('de'), None) german_doc = english_doc.getTranslation('de') self.assertTrue(german_doc.getId() in neutral_folder) self.assertTrue(isDefaultPage(neutral_folder, english_doc)) self.assertFalse(isDefaultPage(neutral_folder, german_doc))
def testTranslatingDefaultPageInNeutralFolderDoesntCreateFolder(self): neutral_folder = self.folder neutral_folder.setLanguage('') english_doc = makeContent(neutral_folder, 'SimpleType', 'doc') english_doc.setLanguage('en') neutral_folder.setDefaultPage(english_doc.getId()) makeTranslation(english_doc, 'de').processForm( values=dict(title='dok')) self.assertEqual(neutral_folder.getTranslation('de'), None) german_doc = english_doc.getTranslation('de') self.assertTrue(german_doc.getId() in neutral_folder) self.assertTrue(isDefaultPage(neutral_folder, english_doc)) self.assertFalse(isDefaultPage(neutral_folder, german_doc))
def createLinguaPloneStructure(self): self.folder = makeContent(self.portal, 'Folder', id='folder') self.folder.setLanguage('en') self.folder_ca = makeTranslation(self.folder, 'ca') self.folder_es = makeTranslation(self.folder, 'es') self.doc1 = makeContent(self.portal, 'Document', id='doc1') self.doc1.setLanguage('en') self.doc1_ca = makeTranslation(self.doc1, 'ca') self.doc1_ca.edit(title="Foo-ca", language='ca') self.doc1_es = makeTranslation(self.doc1, 'es') self.doc1_es.edit(title="Foo-es", language='es') self.doc2 = makeContent(self.folder, 'Document', id='doc2') self.doc2.setLanguage('en') self.doc2_ca = makeTranslation(self.doc2, 'ca') self.doc2_ca.edit(title="Bar-ca", language='ca') self.doc2_es = makeTranslation(self.doc2, 'es') self.doc2_es.edit(title="Bar-es", language='es') self.doc3 = makeContent(self.folder_ca, 'Document', id='doc3') self.doc3.setLanguage('ca') self.doc3_es = makeTranslation(self.doc3, 'es') self.doc3_es.edit(title="Woot", language="es") self.doc4 = makeContent(self.folder_es, 'Document', id='doc4') self.doc4.setLanguage('es') self.doc4_en = makeTranslation(self.doc4, 'en') self.doc4_en.edit(title="Woot woot", language="en")
def testMigration(self): self.doc1 = makeContent(self.portal, 'Document', id='doc1') self.doc1.setLanguage('en') self.doc1_ca = makeTranslation(self.doc1, 'ca') self.doc1_ca.edit(title="Foo", language='ca') self.doc1_es = makeTranslation(self.doc1, 'es') self.doc1_es.edit(title="Foo", language='es') migration_view = getMultiAdapter((self.portal, self.request), name='transfer-lp-catalog') migration_view() self.assertEqual(ITranslationManager(self.doc1).get_translations(), {'ca': self.doc1_ca, 'en': self.doc1, 'es': self.doc1_es} )
def afterSetUp(self): self.addLanguage('de') self.addLanguage('fr') self.setLanguage('en') self.english = makeContent(self.folder, 'SimpleType', 'doc') self.english.setLanguage('en') self.german = makeTranslation(self.english, 'de')
def testChangeCanonical(self): self.german.setCanonical() self.failIf(self.english.isCanonical()) self.failUnless(self.german.isCanonical()) self.assertEqual('de', self.english.getCanonicalLanguage()) self.assertEqual('de', self.german.getCanonicalLanguage()) self.assertEqual(self.german, self.english.getCanonical()) self.assertEqual(self.german, self.german.getCanonical()) self.french = makeTranslation(self.german, 'fr') self.french.setCanonical() self.failIf(self.english.isCanonical()) self.failIf(self.german.isCanonical()) self.failUnless(self.french.isCanonical()) self.assertEqual('fr', self.english.getCanonicalLanguage()) self.assertEqual('fr', self.french.getCanonicalLanguage()) self.assertEqual('fr', self.german.getCanonicalLanguage()) self.assertEqual(self.french, self.english.getCanonical()) self.assertEqual(self.french, self.french.getCanonical()) self.assertEqual(self.french, self.german.getCanonical()) self.english.setCanonical() self.failUnless(self.english.isCanonical()) self.failIf(self.german.isCanonical()) self.failIf(self.french.isCanonical()) self.assertEqual('en', self.english.getCanonicalLanguage()) self.assertEqual('en', self.french.getCanonicalLanguage()) self.assertEqual('en', self.german.getCanonicalLanguage()) self.assertEqual(self.english, self.english.getCanonical()) self.assertEqual(self.english, self.french.getCanonical()) self.assertEqual(self.english, self.german.getCanonical())
def testProcessFormIdFromTitleWithRequestSeparateFolder(self): self.en_folder = makeContent(self.folder, 'Folder', 'inner_folder') self.inner_english = makeContent(self.en_folder, 'SimpleType', 'doc') self.loginAsPortalOwner() self.addLanguage('fr') fr_folder = makeTranslation(self.en_folder, 'fr') french = makeTranslation(self.inner_english, 'fr') self.assertTrue(french.absolute_url().startswith( fr_folder.absolute_url())) from zope.publisher.browser import TestRequest request = TestRequest(form={ 'id': french.getId(), 'title': 'Biere'}) french.processForm(REQUEST=request) self.assertNotEqual(french.getId(), 'doc-fr') self.assertEqual(french.getId(), 'biere')
def afterSetUp(self): LinguaPloneTestCase.LinguaPloneTestCase.afterSetUp(self) self.addLanguage('de') self.setLanguage('en') self.english = makeContent(self.folder, 'SimpleType', 'index_html') self.english.setLanguage('en') self.german = makeTranslation(self.english, 'de')
def test_textfield_on_document(self): from Products.LinguaPlone.utils import LanguageIndependentFields english = makeContent(self.folder, 'Document', 'doc') english.setLanguage('en') english.setText('') key = 'Archetypes.storage.AnnotationStorage-text' baseunit = english.__annotations__[key] self.assertEqual(baseunit.getContentType(), 'text/plain') # use the LanguageIndependentFields adapter to copy the text field def getFields(self, schema=None): if schema is None: schema = self.context.Schema() return schema.filterFields(__name__='text') orig = LanguageIndependentFields.getFields try: LanguageIndependentFields.getFields = getFields german = makeTranslation(english, 'de') self.assertEqual(german.getText(), '') de_baseunit = german.__annotations__[key] self.assertEqual(de_baseunit.getContentType(), 'text/plain') # update field english.setText('<p>Hello</p>') LanguageIndependentFields(english).copyFields(german) self.assertEqual(baseunit.getContentType(), 'text/html') self.assertEqual(german.getText(), '<p>Hello</p>') self.assertEqual(de_baseunit.getContentType(), 'text/html') finally: LanguageIndependentFields.getFields = orig
def testIndependentGIF(self): self.english.setImage(GIF) self.german = makeTranslation(self.english, 'de') img_en = self.english.getImage() img_de = self.german.getImage() self.failUnlessEqual(img_en.content_type, 'image/gif') self.failUnlessEqual(img_de.content_type, 'image/gif')
def testDeleteTranslationClearsReference(self): # Deleting a translation object should remove # the relation in the canonical object. german = makeTranslation(self.english, 'de') self.assertEqual(len(self.english.getTranslations()), 2) self.folder._delObject(german.getId()) self.assertEqual(len(self.english.getTranslations()), 1)
def testLanguageIndependentField(self): english = makeContent(self.folder, 'SimpleType', 'doc') english.setLanguage('en') contact = 'Fred Flintstone' english.setContactName(contact) german = makeTranslation(english, 'de') self.assertEqual(english.getContactName(), contact) self.assertEqual(english.getRawContactName(), contact) self.assertEqual(german.getContactName(), contact) self.assertEqual(german.getRawContactName(), contact) self.failUnless(english.contactName) self.failUnless(german.contactName) self.failUnless(hasattr(german, 'testing')) self.assertEqual(german.testing, english.contactName) self.assertEqual(english.contactName, german.contactName) contact = 'Barney Rubble' german.setContactName(contact) self.assertEqual(english.getContactName(), contact) self.assertEqual(english.getRawContactName(), contact) self.assertEqual(german.getContactName(), contact) self.assertEqual(german.getRawContactName(), contact) self.failUnless(english.contactName) self.failUnless(german.contactName) self.failUnless(hasattr(english, 'testing')) self.assertEqual(english.testing, german.contactName) self.assertEqual(english.contactName, german.contactName) # Sanity check: not all fields are language independent english.setTitle('English title') german.setTitle('German title') self.failIfEqual(english.Title(), german.Title())
def testUpdatedOnNonCanonical(self): german = makeTranslation(self.english, 'de') german.getTranslations() translations = getattr(german, '_v_translations', None) self.assertEqual(len(translations), 1) self.failUnless('de' in translations.keys()) self.assertEqual(german, translations['de'][0])
def testTranslationsAreCached(self): translations = getattr(self.english, '_v_translations', None) self.assertEqual(len(translations), 1) german = makeTranslation(self.english, 'de') self.english.getTranslations() translations = getattr(self.english, '_v_translations', None) self.assertEqual(len(translations), 2)
def testLanguageIndependentField(self): english = makeContent(self.folder, 'SimpleType', 'doc') english.setLanguage('en') german = makeTranslation(english, 'de') contact = 'Test string' english.setTitle('English title') english.setContactName(contact) german.setTitle('German title') self.failIfEqual(english.Title(), german.Title()) self.assertEqual(english.getContactName(), contact) self.assertEqual(english.getRawContactName(), contact) self.assertEqual(german.getContactName(), contact) self.assertEqual(german.getRawContactName(), contact) self.failUnless(english.contactName) self.failUnless(german.contactName) self.failUnless(hasattr(german, 'testing')) self.assertEqual(german.testing, english.contactName) self.assertEqual(english.contactName, german.contactName) contact = 'First name' german.setContactName(contact) self.assertEqual(english.getContactName(), contact) self.assertEqual(english.getRawContactName(), contact) self.assertEqual(german.getContactName(), contact) self.assertEqual(german.getRawContactName(), contact) self.failUnless(english.contactName) self.failUnless(german.contactName) self.failUnless(hasattr(english, 'testing')) self.assertEqual(english.testing, german.contactName) self.assertEqual(english.contactName, german.contactName)
def testSetLanguageMoveTranslatedContent(self): self.folder_de = makeTranslation(self.folder_en, 'de') en2de = makeContent(self.folder_en, 'SimpleType', 'doc2') en2de.setLanguage('en') transaction.savepoint(optimistic=True) en2de.setLanguage('de') self.failIf(en2de.getId() in self.folder_en.objectIds()) self.failUnless(en2de.getId() in self.folder_de.objectIds())
def testFolderTranslationMoveTranslatedContent(self): english1 = makeContent(self.folder_en, 'SimpleType', 'doc1') english1.setLanguage('en') english2 = makeContent(self.folder_en, 'SimpleType', 'doc2') english2.setLanguage('en') german1 = makeTranslation(english1, 'de') german2 = makeTranslation(english2, 'de') transaction.savepoint(optimistic=True) self.folder_de = makeTranslation(self.folder_en, 'de') self.failUnless(english1.getId() in self.folder_en.objectIds()) self.failUnless(english2.getId() in self.folder_en.objectIds()) self.failIf(english1.getId() in self.folder_de.objectIds()) self.failIf(english2.getId() in self.folder_de.objectIds()) self.failUnless(german1.getId() in self.folder_de.objectIds()) self.failUnless(german2.getId() in self.folder_de.objectIds()) self.failIf(german1.getId() in self.folder_en.objectIds()) self.failIf(german2.getId() in self.folder_en.objectIds())
def testGetTranslationsMissingObject(self): french = makeTranslation(self.german, 'fr') translations = self.english.getTranslations(review_state=False) self.assertEqual(translations['fr'], french) self.loginAsPortalOwner() self.folder._delOb(french.getId()) translations = self.english.getTranslations(review_state=False) self.assert_('fr' not in translations)
def testThreeLanguagesNonCanonicalSetLanguageToNeutral(self): self.french = makeTranslation(self.english, 'fr') self.german.setLanguage('') self.failIf('de' in self.german.getTranslationLanguages()) self.failIf('en' in self.german.getTranslationLanguages()) self.failIf('fr' in self.german.getTranslationLanguages()) self.failIf('de' in self.english.getTranslationLanguages()) self.failIf('de' in self.french.getTranslationLanguages())
def afterSetUp(self): self.addLanguage('de') self.addLanguage('no') self.setLanguage('en') self.setRoles(['Manager']) en = makeContent(self.portal, 'Folder', 'en') en.setLanguage('en') suben = makeContent(en, 'Folder', 'sub-en') suben.setLanguage('en') self.endoc = makeContent(suben, 'SimpleType', 'endoc') self.endoc.setLanguage('en') makeTranslation(en, 'de') self.dedoc = makeTranslation(self.endoc, 'de') neutral = makeContent(en, 'Folder', 'neutral') neutral.setLanguage('') self.doc = makeContent(neutral, 'SimpleType', 'doc') self.doc.setLanguage('')
def testSetLanguageMoveTranslatedContent(self): self.weblog_de = makeTranslation(self.weblog_en, 'de') en2de = makeContent(self.weblog_en, 'WeblogEntry', 'entry2') en2de.setLanguage('en') transaction.savepoint(optimistic=True) en2de.setLanguage('de') self.failIf(en2de.getId() in self.weblog_en.objectIds()) self.failUnless(en2de.getId() in self.weblog_de.objectIds())
def testLangIndependentInBoth(self): english = makeContent(self.folder, 'DerivedType', 'doc') english.setLanguage('en') german = makeTranslation(english, 'de') teststring = 'Test string' english.setLangIndependentInBoth(teststring) self.assertEqual(german.getLangIndependentInBoth(), teststring) self.assertEqual(german.getRawLangIndependentInBoth(), teststring)
def testDependent(self): self.english.setImageDependent(JPG) self.german = makeTranslation(self.english, 'de') self.german.setImageDependent(PNG) img_en = self.english.getImageDependent() img_de = self.german.getImageDependent() self.failUnlessEqual(img_en.content_type, 'image/jpeg') self.failUnlessEqual(img_de.content_type, 'image/png')
def testGetTranslationWithMultipleLanguages(self): self.french = makeTranslation(self.german, 'fr') self.assertEqual(self.french, self.german.getTranslation('fr')) self.assertEqual(self.french, self.english.getTranslation('fr')) self.assertEqual(self.german, self.french.getTranslation('de')) self.assertEqual(self.german, self.english.getTranslation('de')) self.assertEqual(self.english, self.german.getTranslation('en')) self.assertEqual(self.english, self.french.getTranslation('en'))
def afterSetUp(self): self.addLanguage('de') self.setLanguage('en') self.english = makeContent(self.folder, 'SimpleType', 'doc') self.english.edit(title='Foo', language='en') self.german = makeTranslation(self.english, 'de') self.german.edit(title='Foo') self.catalog = self.portal.portal_catalog
def testLangIndependentIndexing(self): catalog = getToolByName(self.folder, 'portal_catalog') catalog.addColumn('getContactName') english = makeContent(self.folder, 'SimpleType', 'doc') english.setLanguage('en') english.processForm(values=dict(contactName='foo')) res = [r.getContactName for r in catalog(dict(portal_type='SimpleType', Language='en'))] self.assertEqual(res, ['foo']) makeTranslation(english, 'de') english.processForm(values=dict(contactName='bar')) brains = catalog(dict(portal_type='SimpleType', Language='en')) self.assertEqual(brains[0].getContactName, 'bar') brains = catalog(dict(portal_type='SimpleType', Language='de')) self.assertEqual(brains[0].getContactName, 'bar')
def test_textfield(self): english = makeContent(self.folder, 'SimpleType', 'doc') english.setLanguage('en') english.setNeutralText('<p>Hello</p>') self.assertEqual(english.neutralText.getContentType(), 'text/html') german = makeTranslation(english, 'de') text = german.getNeutralText() self.assertEqual(text, '<p>Hello</p>') self.assertEqual(german.neutralText.getContentType(), 'text/html')