Ejemplo 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
Ejemplo n.º 2
0
 def _getTranslationDomain(self):
     domain = TranslationDomain('default')
     en_catalog = GettextMessageCatalog('en', 'default', en_file)
     de_catalog = GettextMessageCatalog('de', 'default', de_file)
     domain.addCatalog(en_catalog)
     domain.addCatalog(de_catalog)
     return domain
Ejemplo n.º 3
0
    def testMessageIDRecursiveTranslate(self):
        factory = MessageFactory('default')
        translate = self._domain.translate
        msgid_sub1 = factory(u'44-not-there',
                             '${blue}',
                             mapping={'blue': 'BLUE'})
        msgid_sub2 = factory(u'45-not-there',
                             '${yellow}',
                             mapping={'yellow': 'YELLOW'})
        mapping = {'color1': msgid_sub1, 'color2': msgid_sub2}
        msgid = factory(u'46-not-there',
                        'Color: ${color1}/${color2}',
                        mapping=mapping)
        self.assertEqual(
            translate(msgid, target_language='en', default="default"),
            "Color: BLUE/YELLOW")
        # The recursive translation must not change the mappings
        self.assertEqual(msgid.mapping, {
            'color1': msgid_sub1,
            'color2': msgid_sub2
        })
        # A circular reference should not lead to crashes
        msgid1 = factory(u'47-not-there', 'Message 1 and $msg2', mapping={})
        msgid2 = factory(u'48-not-there', 'Message 2 and $msg1', mapping={})
        msgid1.mapping['msg2'] = msgid2
        msgid2.mapping['msg1'] = msgid1
        self.assertRaises(ValueError, translate, msgid1, None, None, 'en',
                          "default")
        # Recusrive translations also work if the original message id wasn't a
        # message id but a unicode with a directly passed mapping
        self.assertEqual(
            "Color: BLUE/YELLOW",
            translate(u'Color: ${color1}/${color2}',
                      mapping=mapping,
                      target_language='en'))

        # If we have mapping with a message id from a different domain, make sure
        # we use that domain, not ours. If the message domain is not registered yet,
        # we should return a defualt translation.
        alt_factory = MessageFactory('alt')
        msgid_sub = alt_factory(u'special', default=u'oohhh')
        mapping = {'message': msgid_sub}
        msgid = factory(u'46-not-there',
                        'Message: ${message}',
                        mapping=mapping)
        # test we get a default with no domain registerd
        self.assertEqual(
            translate(msgid, target_language='en', default="default"),
            "Message: oohhh")
        # provide the domain
        domain = TranslationDomain('alt')
        path = testdir()
        en_catalog = GettextMessageCatalog('en', 'alt',
                                           os.path.join(path, 'en-alt.mo'))
        domain.addCatalog(en_catalog)
        # test that we get the right translation
        zope.component.provideUtility(domain, ITranslationDomain, 'alt')
        self.assertEqual(
            translate(msgid, target_language='en', default="default"),
            "Message: Wow")
Ejemplo n.º 4
0
    def setUp(self):
        setup.placefulSetUp()
        self.rootFolder = setup.buildSampleFolderTree()
        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 = setup.createSiteManager(traverse(self.rootFolder, "folder1"))
        setup.addUtility(mgr, "default", interfaces.ILocalTranslationDomain, td)

        self.trans1 = td
        self.trans = domain
Ejemplo n.º 5
0
 def _getTranslationDomain(self, locale, variant="default"):
     path = os.path.dirname(tests.__file__)
     self._path = os.path.join(path, '%s-%s.mo' % (locale, variant))
     catalog = GettextMessageCatalog(locale, variant, self._path)
     domain = TranslationDomain('default')
     domain.addCatalog(catalog)
     return domain
Ejemplo n.º 6
0
 def _getTranslationDomain(self, locale, variant="default"):
     path = os.path.dirname(tests.__file__)
     self._path = os.path.join(path, '%s-%s.mo' % (locale, variant))
     catalog = GettextMessageCatalog(locale, variant, self._path)
     domain = TranslationDomain('default')
     domain.addCatalog(catalog)
     return domain
Ejemplo n.º 7
0
def registerTranslations(_context, directory):
    path = os.path.normpath(directory)
    domains = {}

    # Gettext has the domain-specific catalogs inside the language directory,
    # which is exactly the opposite as we need it. So create a dictionary that
    # reverses the nesting.
    for language in os.listdir(path):
        lc_messages_path = os.path.join(path, language, 'LC_MESSAGES')
        if os.path.isdir(lc_messages_path):
            for domain_file in os.listdir(lc_messages_path):
                if domain_file.endswith('.mo'):
                    domain_path = os.path.join(lc_messages_path, domain_file)
                    domain = domain_file[:-3]
                    if not domain in domains:
                        domains[domain] = {}
                    domains[domain][language] = domain_path

    # Now create TranslationDomain objects and add them as utilities
    for name, langs in domains.items():
        domain = TranslationDomain(name)

        for lang, file in langs.items():
            domain.addCatalog(GettextMessageCatalog(lang, name, file))

        # make sure we have a TEST catalog for each domain:
        domain.addCatalog(TestMessageCatalog(name))

        utility(_context, ITranslationDomain, domain, name=name)
Ejemplo n.º 8
0
    def setUp(self):
        setup.placefulSetUp()
        self.rootFolder = setup.buildSampleFolderTree()
        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 = setup.createSiteManager(traverse(self.rootFolder, 'folder1'))
        setup.addUtility(
            mgr, 'default', interfaces.ILocalTranslationDomain, td)

        self.trans1 = td
        self.trans = domain
    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
    def _getTranslationDomain(self):
        domain = TranslationDomain("default")
        path = testdir()
        en_catalog = GettextMessageCatalog("en", "default", os.path.join(path, "en-default.mo"))
        de_catalog = GettextMessageCatalog("de", "default", os.path.join(path, "de-default.mo"))

        domain.addCatalog(en_catalog)
        domain.addCatalog(de_catalog)
        return domain
Ejemplo n.º 11
0
    def testMessageIDRecursiveTranslate(self):
        factory = MessageFactory('default')
        translate = self._domain.translate
        msgid_sub1 = factory(_u("44-not-there"), '${blue}',
                            mapping = {'blue': 'BLUE'})
        msgid_sub2 = factory(_u("45-not-there"), '${yellow}',
                            mapping = {'yellow': 'YELLOW'})
        mapping = {'color1': msgid_sub1,
                   'color2': msgid_sub2}
        msgid = factory(_u("46-not-there"), 'Color: ${color1}/${color2}',
                        mapping=mapping)
        self.assertEqual(
            translate(msgid, target_language='en', default="default"),
            "Color: BLUE/YELLOW")
        # The recursive translation must not change the mappings
        self.assertEqual(msgid.mapping, {'color1': msgid_sub1,
                                         'color2': msgid_sub2})
        # A circular reference should not lead to crashes
        msgid1 = factory(_u("47-not-there"), 'Message 1 and $msg2',
                         mapping = {})
        msgid2 = factory(_u("48-not-there"), 'Message 2 and $msg1',
                         mapping = {})
        msgid1.mapping['msg2'] = msgid2
        msgid2.mapping['msg1'] = msgid1
        self.assertRaises(ValueError,
                          translate, msgid1, None, None, 'en',"default")
        # Recusrive translations also work if the original message id wasn't a
        # message id but a unicode with a directly passed mapping
        self.assertEqual("Color: BLUE/YELLOW",
                         translate(_u("Color: ${color1}/${color2}"), mapping=mapping,
                                   target_language='en'))

        # If we have mapping with a message id from a different domain, make sure
        # we use that domain, not ours. If the message domain is not registered yet,
        # we should return a defualt translation.
        alt_factory = MessageFactory('alt')
        msgid_sub = alt_factory(_u("special"), default=_u("oohhh"))
        mapping = {'message': msgid_sub}
        msgid = factory(_u("46-not-there"), 'Message: ${message}',
                                  mapping=mapping)
        # test we get a default with no domain registerd
        self.assertEqual(
            translate(msgid, target_language='en', default="default"),
            "Message: oohhh")
        # provide the domain
        domain = TranslationDomain('alt')
        path = testdir()
        en_catalog = GettextMessageCatalog('en', 'alt',
                                           os.path.join(path, 'en-alt.mo'))
        domain.addCatalog(en_catalog)
        # test that we get the right translation
        zope.component.provideUtility(domain, ITranslationDomain, 'alt')
        self.assertEqual(
            translate(msgid, target_language='en', default="default"),
            "Message: Wow")
Ejemplo n.º 12
0
    def _getTranslationDomain(self):
        domain = TranslationDomain('default')
        path = testdir()
        en_catalog = GettextMessageCatalog('en', 'default',
                                           os.path.join(path, 'en-default.mo'))
        de_catalog = GettextMessageCatalog('de', 'default',
                                           os.path.join(path, 'de-default.mo'))

        domain.addCatalog(en_catalog)
        domain.addCatalog(de_catalog)
        return domain
Ejemplo n.º 13
0
    def _getTranslationDomain(self):
        domain = TranslationDomain('default')
        path = testdir()
        en_catalog = GettextMessageCatalog('en', 'default',
                                           os.path.join(path, 'en-default.mo'))
        de_catalog = GettextMessageCatalog('de', 'default',
                                           os.path.join(path, 'de-default.mo'))

        domain.addCatalog(en_catalog)
        domain.addCatalog(de_catalog)
        return domain
    def testMessageIDTranslateForDifferentDomain(self):
        domain = TranslationDomain("alt")
        path = testdir()
        en_catalog = GettextMessageCatalog("en", "alt", os.path.join(path, "en-alt.mo"))
        domain.addCatalog(en_catalog)

        zope.component.provideUtility(domain, ITranslationDomain, "alt")

        factory = MessageFactory("alt")
        msgid = factory(u"special", "default")
        self.assertEqual(self._domain.translate(msgid, target_language="en"), u"Wow")
Ejemplo n.º 15
0
def handler(catalogs, name):
    """ special handler handling the merging of two message catalogs """
    gsm = getSiteManager()
    # Try to get an existing domain and add the given catalogs to it
    domain = queryUtility(ITranslationDomain, name)
    if domain is None:
        domain = TranslationDomain(name)
        gsm.registerUtility(domain, ITranslationDomain, name=name)
    for catalog in catalogs:
        domain.addCatalog(catalog)
    # make sure we have a TEST catalog for each domain:
    domain.addCatalog(TestMessageCatalog(name))
Ejemplo n.º 16
0
def handler(catalogs, name):
    """ special handler handling the merging of two message catalogs """
    gsm = getSiteManager()
    # Try to get an existing domain and add the given catalogs to it
    domain = queryUtility(ITranslationDomain, name)
    if domain is None:
        domain = TranslationDomain(name)
        gsm.registerUtility(domain, ITranslationDomain, name=name)
    for catalog in catalogs:
        domain.addCatalog(catalog)
    # make sure we have a TEST catalog for each domain:
    domain.addCatalog(TestMessageCatalog(name))
Ejemplo n.º 17
0
    def testMessageIDTranslateForDifferentDomain(self):
        domain = TranslationDomain('alt')
        path = testdir()
        en_catalog = GettextMessageCatalog('en', 'alt',
                                           os.path.join(path, 'en-alt.mo'))
        domain.addCatalog(en_catalog)

        zope.component.provideUtility(domain, ITranslationDomain, 'alt')

        factory = MessageFactory('alt')
        msgid = factory(u'special', 'default')
        self.assertEqual(self._domain.translate(msgid, target_language='en'),
                         u'Wow')
Ejemplo n.º 18
0
    def testMessageIDTranslateForDifferentDomain(self):
        domain = TranslationDomain('other')
        path = testdir()
        en_catalog = GettextMessageCatalog('en', 'other',
                                           os.path.join(path, 'en-default.mo'))
        domain.addCatalog(en_catalog)

        zope.component.provideUtility(domain, ITranslationDomain, 'other')

        factory = MessageIDFactory('other')
        msgid = factory(u'short_greeting', 'default')
        self.assertEqual(
            self._domain.translate(msgid, target_language='en'), u'Hello!')
Ejemplo n.º 19
0
    def testMessageIDTranslateForDifferentDomain(self):
        domain = TranslationDomain('alt')
        path = testdir()
        en_catalog = GettextMessageCatalog('en', 'alt',
                                           os.path.join(path, 'en-alt.mo'))
        domain.addCatalog(en_catalog)

        zope.component.provideUtility(domain, ITranslationDomain, 'alt')

        factory = MessageFactory('alt')
        msgid = factory(_u("special"), 'default')
        self.assertEqual(
            self._domain.translate(msgid, target_language='en'), _u("Wow"))
Ejemplo n.º 20
0
def _setup_i18n():
    global DOMAIN_SETUP
    if DOMAIN_SETUP:
        return

    domain = TranslationDomain(I18N_DOMAIN)
    for catalog in os.listdir(MO_PATH):
        catalog_path = os.path.join(MO_PATH, catalog)

        mo_path = os.path.join(catalog_path, 'LC_MESSAGES', I18N_DOMAIN + '.mo')
        if not os.path.exists(mo_path):
            continue

        domain.addCatalog(UTF8GettextMessageCatalog(
                catalog, I18N_DOMAIN, mo_path))

    component.provideUtility(domain, ITranslationDomain, name='cc_org')
    DOMAIN_SETUP = True
Ejemplo n.º 21
0
def _setup_i18n():
    global DOMAIN_SETUP
    if DOMAIN_SETUP:
        return

    domain = TranslationDomain(I18N_DOMAIN)
    for catalog in os.listdir(MO_PATH):
        catalog_path = os.path.join(MO_PATH, catalog)

        mo_path = os.path.join(catalog_path, 'LC_MESSAGES',
                               I18N_DOMAIN + '.mo')
        if not os.path.exists(mo_path):
            continue

        domain.addCatalog(
            UTF8GettextMessageCatalog(catalog, I18N_DOMAIN, mo_path))

    component.provideUtility(domain, ITranslationDomain, name='cc_org')
    DOMAIN_SETUP = True
    def testMessageIDRecursiveTranslate(self):
        factory = MessageFactory("default")
        translate = self._domain.translate
        msgid_sub1 = factory(u"44-not-there", "${blue}", mapping={"blue": "BLUE"})
        msgid_sub2 = factory(u"45-not-there", "${yellow}", mapping={"yellow": "YELLOW"})
        mapping = {"color1": msgid_sub1, "color2": msgid_sub2}
        msgid = factory(u"46-not-there", "Color: ${color1}/${color2}", mapping=mapping)
        self.assertEqual(translate(msgid, target_language="en", default="default"), "Color: BLUE/YELLOW")
        # The recursive translation must not change the mappings
        self.assertEqual(msgid.mapping, {"color1": msgid_sub1, "color2": msgid_sub2})
        # A circular reference should not lead to crashes
        msgid1 = factory(u"47-not-there", "Message 1 and $msg2", mapping={})
        msgid2 = factory(u"48-not-there", "Message 2 and $msg1", mapping={})
        msgid1.mapping["msg2"] = msgid2
        msgid2.mapping["msg1"] = msgid1
        self.assertRaises(ValueError, translate, msgid1, None, None, "en", "default")
        # Recusrive translations also work if the original message id wasn't a
        # message id but a unicode with a directly passed mapping
        self.assertEqual(
            "Color: BLUE/YELLOW", translate(u"Color: ${color1}/${color2}", mapping=mapping, target_language="en")
        )

        # If we have mapping with a message id from a different domain, make sure
        # we use that domain, not ours. If the message domain is not registered yet,
        # we should return a defualt translation.
        alt_factory = MessageFactory("alt")
        msgid_sub = alt_factory(u"special", default=u"oohhh")
        mapping = {"message": msgid_sub}
        msgid = factory(u"46-not-there", "Message: ${message}", mapping=mapping)
        # test we get a default with no domain registerd
        self.assertEqual(translate(msgid, target_language="en", default="default"), "Message: oohhh")
        # provide the domain
        domain = TranslationDomain("alt")
        path = testdir()
        en_catalog = GettextMessageCatalog("en", "alt", os.path.join(path, "en-alt.mo"))
        domain.addCatalog(en_catalog)
        # test that we get the right translation
        zope.component.provideUtility(domain, ITranslationDomain, "alt")
        self.assertEqual(translate(msgid, target_language="en", default="default"), "Message: Wow")
Ejemplo n.º 23
0
    def setUp(self):
        setup.placefulSetUp()
        self.rootFolder = setup.buildSampleFolderTree()
        sm = zapi.getGlobalSiteManager()
        de_catalog = MessageCatalog("de", "default")
        de_catalog.setMessage("short_greeting", "Hallo!", 10)

        # Create global translation domain and add the catalog.
        domain = GlobalTranslationDomain("default")
        domain.addCatalog(de_catalog)
        sm.provideUtility(ITranslationDomain, domain, "default")

        # Create Domain in root folder
        mgr = setup.createSiteManager(self.rootFolder)
        self.trans = setup.addDomain(mgr, Translation, TranslationDomain())

        # Create Domain in folder1
        mgr = setup.createSiteManager(zapi.traverse(self.rootFolder, "folder1"))
        td = TranslationDomain()
        td.domain = "default"
        de_catalog = MessageCatalog("de", "default")
        de_catalog.setMessage("short_greeting", "Hallo Welt!", 10)
        td["de-default-1"] = de_catalog
        self.trans1 = setup.addDomain(mgr, Translation, ts)
Ejemplo n.º 24
0
for lang in os.listdir(basepath):
    if lang.endswith('.pot'):
        continue
    langpath = os.path.join(basepath, lang, 'LC_MESSAGES')
    available_languages.append(lang)
    for file in os.listdir(langpath):
        domainpath = os.path.abspath(os.path.join(langpath, file))
        if not file.endswith('.mo'):
            continue
        domainname = file[:-3]
        domain = gsm.queryUtility(ITranslationDomain, domainname)
        if domain is None:
            domain = TranslationDomain(domainname)
            gsm.registerUtility(domain, ITranslationDomain, name=domainname)        
        domain.addCatalog(GettextMessageCatalog(lang, domainname, domainpath))

# negotiation sucks :( because Chameleon never passes a context into the 
# translate method of the template. but the target_language is passed.
# so we need to set the target language to what comes with the request as 
# 'Accept-Language' header. The RequestNegotiator then get this header value

class RequestNegotiator(object):
    
    implements(INegotiator)
    
    def getLanguage(self, available_languages, accept_languages_header):
        if isinstance(accept_languages_header, Request):
             accept_languages_header = accept_languages_header.headers.get('Accept-Language', '')
        accept_languages = self.accept_languages(accept_languages_header)
        for accepted_language in accept_languages:
Ejemplo n.º 25
0
def TestMessageFallbackDomain(domain_id=u""):
    domain = TranslationDomain(domain_id)
    domain.addCatalog(TestMessageCatalog(domain_id))
    return domain
Ejemplo n.º 26
0
def TestMessageFallbackDomain(domain_id=u""):
    domain = TranslationDomain(domain_id)
    domain.addCatalog(TestMessageCatalog(domain_id))
    return domain