Exemplo n.º 1
0
    def setUp(self):
        psetup = PlacefulSetup()
        self.sm = psetup.setUp(True, True)
        self.rootFolder = psetup.rootFolder
        setUpSiteManagerLookup()

        import zope.i18n.interfaces
        import zope.i18n.negotiator
        provideUtility(zope.i18n.negotiator.negotiator,
                       zope.i18n.interfaces.INegotiator)

        gsm = getGlobalSiteManager()
        de_catalog = MessageCatalog('de', 'default')
        de_catalog.setMessage('short_greeting', 'Hallo!', 10)
        de_catalog.setMessage('long_greeting', 'Guten Tag!', 10)

        # register global translation domain and add the catalog.
        domain = GlobalTranslationDomain('default')
        domain.addCatalog(de_catalog)
        gsm.registerUtility(domain, ITranslationDomain, 'default')

        # create a local site manager and add a local translation domain
        td = TranslationDomain()
        td.domain = 'default'
        de_catalog = MessageCatalog('de', 'default')
        de_catalog.setMessage('short_greeting', 'Hallo Welt!', 10)
        td['de-default-1'] = de_catalog

        mgr = createSiteManager(traverse(self.rootFolder, 'folder1'))
        mgr['default']['default'] = td
        mgr.registerUtility(mgr['default']['default'], ITranslationDomain,
                            'default')

        self.trans1 = td
        self.trans = domain
Exemplo n.º 2
0
    def setUp(self):
        super(TranslateTest, self).setUp()

        # Setup the registries
        provideAdapter(HTTPCharsets, (IHTTPRequest, ), IUserPreferredCharsets)

        provideUtility(Factory(MessageCatalog), IFactory,
                       'zope.app.MessageCatalog')

        self._domain = domain = TranslationDomain()
        domain.domain = 'default'

        en_catalog = MessageCatalog('en', 'default')
        de_catalog = MessageCatalog('de', 'default')

        en_catalog.setMessage('short_greeting', 'Hello!')
        de_catalog.setMessage('short_greeting', 'Hallo!')

        en_catalog.setMessage('greeting', 'Hello $name, how are you?')
        de_catalog.setMessage('greeting', 'Hallo $name, wie geht es Dir?')

        domain['en-1'] = en_catalog
        domain['de-1'] = de_catalog

        self._view = Translate(domain, self._getRequest())
Exemplo n.º 3
0
    def setUp(self):
        super(TestGettextExportImport, self).setUp()

        # Setup the negotiator utility
        provideUtility(negotiator, INegotiator)

        self._domain = TranslationDomain()
        self._domain.domain = 'default'
        provideUtility(Factory(MessageCatalog), IFactory,
                       'zope.app.MessageCatalog')
Exemplo n.º 4
0
    def setUp(self):
        self._domain = domain = TranslationDomain()
        domain.domain = 'default'

        en_catalog = MessageCatalog('en', 'default')
        de_catalog = MessageCatalog('de', 'default')

        en_catalog.setMessage('short_greeting', 'Hello!')
        de_catalog.setMessage('short_greeting', 'Hallo!')

        en_catalog.setMessage('greeting', 'Hello $name, how are you?')
        de_catalog.setMessage('greeting', 'Hallo $name, wie geht es Dir?')

        domain['en-1'] = en_catalog
        domain['de-1'] = de_catalog
Exemplo n.º 5
0
    def setUp(self):
        super(TestMethods, self).setUp()

        domain = self._domain = TranslationDomain()
        domain.domain = 'default'

        en_catalog = MessageCatalog('en', 'default')
        de_catalog = MessageCatalog('de', 'default')
        # Populate the catalogs with translations of a message id
        en_catalog.setMessage('short_greeting', 'Hello!', 10)
        de_catalog.setMessage('short_greeting', 'Hallo!', 10)
        # And another message id with interpolation placeholders
        en_catalog.setMessage('greeting', 'Hello $name, how are you?', 0)
        de_catalog.setMessage('greeting', 'Hallo $name, wie geht es Dir?', 0)

        domain['en-1'] = en_catalog
        domain['de-1'] = de_catalog
Exemplo n.º 6
0
    def onEnabled(self, theme, settings, dependenciesSettings):  # noqa
        res = queryResourceDirectory(THEME_RESOURCE_NAME, theme)
        if res is None:
            return

        # We need to get settings by ourselves to avoid p.a.theming caching
        settings = getSettings(res)
        if not isEnabled(settings):
            return

        # Remove imported folders not-required on run-time
        autocleanup = (settings.get('self-destruct')
                       or '').lower() in ('true', 'yes', 'on', '1')

        # Register permissions
        sm = getSiteManager()
        for key, value in _getPermissions(settings).items():
            util = sm.queryUtility(IPermission, name=key)
            if util is None:
                name = str('collective.themesitesetup.permission.' + key)
                util = LocalPermission(value, u'')
                util.id = key
                util.__name__ = name
                util.__parent__ = aq_base(sm)
                sm._setObject(name,
                              util,
                              set_owner=False,
                              suppress_events=True)
                sm.registerUtility(util, provided=IPermission, name=key)
                addPermission(str(value))

        # Import GS profile
        directoryName = DEFAULT_ENABLED_PROFILE_NAME
        if 'install' in settings:
            directoryName = settings['install']

        directory = None
        if res.isDirectory(directoryName):
            directory = res[directoryName]

        if directory:
            tarball = createTarball(directory)
            portal_setup = api.portal.get_tool('portal_setup')
            portal_setup.runAllImportStepsFromProfile(None,
                                                      purge_old=False,
                                                      archive=tarball)
            # Self-destruct imported profile
            if autocleanup and IWritableResourceDirectory.providedBy(res):
                del res[directoryName]

        # Register locales
        localesDirectoryName = DEFAULT_ENABLED_LOCALES_NAME
        if 'locales' in settings:
            localesDirectoryName = settings['locales']

        if res.isDirectory(localesDirectoryName):
            catalogs = getMessageCatalogs(res[localesDirectoryName])
            for domain in catalogs:
                util = sm.queryUtility(ITranslationDomain, name=domain)
                if not isinstance(util, TranslationDomain):
                    name = str('collective.themesitesetup.domain.' + domain)
                    util = TranslationDomain()
                    util.__name__ = name
                    util.__parent__ = aq_base(sm)
                    util.domain = domain
                    sm._setObject(name,
                                  util,
                                  set_owner=False,
                                  suppress_events=True)
                    sm.registerUtility(util,
                                       provided=ITranslationDomain,
                                       name=domain)
                for language in catalogs[domain]:
                    name = '.'.join([
                        'collective.themesitesetup.catalog', res.__name__,
                        domain, language
                    ])
                    if name in util:
                        try:
                            del util[name]
                        except ValueError:
                            pass
                    util[name] = catalogs[domain][language]
            # Self-destruct imported catalogs
            if autocleanup and IWritableResourceDirectory.providedBy(res):
                del res[localesDirectoryName]

        # Update Dexterity models
        modelsDirectoryName = DEFAULT_ENABLED_MODELS_NAME
        if 'models' in settings:
            modelsDirectoryName = settings['models']
        overwrite = overwriteModels(settings)

        if res.isDirectory(modelsDirectoryName):
            types_tool = api.portal.get_tool('portal_types')
            directory = res[modelsDirectoryName]
            for name in directory.listDirectory():
                if not name.endswith('.xml') or not directory.isFile(name):
                    continue
                fti = types_tool.get(name[:-4])
                if not fti:
                    continue
                model = unicode(directory.readFile(name), 'utf-8', 'ignore')
                if fti.model_source == model:
                    continue
                try:
                    loadString(model, fti.schema_policy)  # fail for errors
                except SupermodelParseError:
                    logger.error(
                        u'Error while parsing {0:s}/{1:s}/{2:s}'.format(
                            res.__name__, modelsDirectoryName, name))
                    raise
                # Set model source when model is empty of override is enabled
                desc = DexterityFTIModificationDescription(
                    'model_source', fti.model_source)
                if not fti.model_source:
                    fti.model_source = model
                    notify(ObjectModifiedEvent(fti, desc))
                elif not loadString(fti.model_source,
                                    fti.schema_policy).schema.names():  # noqa
                    fti.model_source = model
                    notify(ObjectModifiedEvent(fti, desc))
                elif overwrite:
                    fti.model_source = model
                    notify(ObjectModifiedEvent(fti, desc))
            # Self-destruct imported models
            if autocleanup and IWritableResourceDirectory.providedBy(res):
                del res[modelsDirectoryName]

        # Copy resources
        resourcesDirectoryName = DEFAULT_ENABLED_RESOURCES_NAME
        if 'resources' in settings:
            resourcesDirectoryName = settings['resources']
        purge = purgeResources(settings)
        overwrite = overwriteResources(settings)
        root = queryUtility(IResourceDirectory, name=u'persistent')
        if root and res.isDirectory(resourcesDirectoryName):
            copyResources(res[resourcesDirectoryName], root, purge, overwrite)
            # Invalidate site layout cache of plone.app.blocks
            portal_catalog = api.portal.get_tool('portal_catalog')
            portal_catalog._increment_counter()
            # Self-desctruct imported resources
            if autocleanup and IWritableResourceDirectory.providedBy(res):
                del res[resourcesDirectoryName]
Exemplo n.º 7
0
    def setUp(self):
        super(TestExportImport, self).setUp()

        self._domain = TranslationDomain()
        self._domain.domain = 'default'
Exemplo n.º 8
0
 def setUp(self):
     self._domain = TranslationDomain()
     super(TestParseGetText, self).setUp()