zope.app.i18n-3.6.4/ 0000775 0001771 0002004 00000000000 12062644246 015172 5 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/README.txt 0000664 0001771 0002004 00000000172 12062644232 016663 0 ustar menesis menesis 0000000 0000000 This package provides placeful persistent translation domains and message catalogs along with ZMI views for managing them. zope.app.i18n-3.6.4/src/ 0000775 0001771 0002004 00000000000 12062644246 015761 5 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/ 0000775 0001771 0002004 00000000000 12062644246 021765 5 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/namespace_packages.txt 0000664 0001771 0002004 00000000016 12062644242 026311 0 ustar menesis menesis 0000000 0000000 zope zope.app zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/not-zip-safe 0000664 0001771 0002004 00000000001 12062644232 024206 0 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/requires.txt 0000664 0001771 0002004 00000000255 12062644242 024363 0 ustar menesis menesis 0000000 0000000 setuptools zope.publisher>=3.9 zope.component>=3.6 zope.container zope.configuration zope.i18n zope.i18nmessageid zope.interface zope.security ZODB3 [test] zope.app.testing zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/dependency_links.txt 0000664 0001771 0002004 00000000001 12062644242 026027 0 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/SOURCES.txt 0000664 0001771 0002004 00000002726 12062644242 023654 0 ustar menesis menesis 0000000 0000000 CHANGES.txt COPYRIGHT.txt LICENSE.txt README.txt bootstrap.py buildout.cfg setup.py src/zope/__init__.py src/zope.app.i18n.egg-info/PKG-INFO src/zope.app.i18n.egg-info/SOURCES.txt src/zope.app.i18n.egg-info/dependency_links.txt src/zope.app.i18n.egg-info/namespace_packages.txt src/zope.app.i18n.egg-info/not-zip-safe src/zope.app.i18n.egg-info/requires.txt src/zope.app.i18n.egg-info/top_level.txt src/zope/app/__init__.py src/zope/app/i18n/__init__.py src/zope/app/i18n/configure.zcml src/zope/app/i18n/filters.py src/zope/app/i18n/interfaces.py src/zope/app/i18n/messagecatalog.py src/zope/app/i18n/translationdomain.py src/zope/app/i18n/browser/__init__.py src/zope/app/i18n/browser/configure.zcml src/zope/app/i18n/browser/exportimport.pt src/zope/app/i18n/browser/exportimport.py src/zope/app/i18n/browser/i18n_domain.gif src/zope/app/i18n/browser/synchronize.pt src/zope/app/i18n/browser/synchronize.py src/zope/app/i18n/browser/translate.pt src/zope/app/i18n/browser/translate.py src/zope/app/i18n/browser/translatemessage.pt src/zope/app/i18n/browser/tests/__init__.py src/zope/app/i18n/browser/tests/test_translate.py src/zope/app/i18n/tests/__init__.py src/zope/app/i18n/tests/configure.zcml src/zope/app/i18n/tests/placelesssetup.py src/zope/app/i18n/tests/test_filters.py src/zope/app/i18n/tests/test_messagecatalog.py src/zope/app/i18n/tests/test_translationdomain.py src/zope/app/i18n/xmlrpc/__init__.py src/zope/app/i18n/xmlrpc/configure.zcml src/zope/app/i18n/xmlrpc/methods.py zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/PKG-INFO 0000664 0001771 0002004 00000007341 12062644242 023063 0 ustar menesis menesis 0000000 0000000 Metadata-Version: 1.1 Name: zope.app.i18n Version: 3.6.4 Summary: Persistent translation domains and message catalogs Home-page: http://pypi.python.org/pypi/zope.app.i18n Author: Zope Corporation and Contributors Author-email: zope-dev@zope.org License: ZPL 2.1 Description: This package provides placeful persistent translation domains and message catalogs along with ZMI views for managing them. ======= CHANGES ======= 3.6.4 (2012-12-14) ------------------ - Fix translate() when used with ZODB 4. - Remove test dependency on zope.app.component 3.6.3 (2010-09-01) ------------------ - Remove undeclared dependency on zope.deferredimport. - Use zope.publisher >= 3.9 instead of zope.app.publisher. 3.6.2 (2009-10-07) ------------------ - Fix test_translate and follow recent change of HTTPResponse.redirect. 3.6.1 (2009-08-15) ------------------ - Added a missing testing dependency on zope.app.component. 3.6.0 (2009-03-18) ------------------ - Some of ZCML configuration was moved into another packages: * The global INegotiator utility registration was moved into ``zope.i18n``. * The include of ``zope.i18n.locales`` was also moved into ``zope.i18n``. * The registration of IModifiableUserPreferredLanguages adapter was moved into ``zope.app.publisher``. * The IAttributeAnnotation implementation statement for HTTPRequest was moved into ``zope.publisher`` and will only apply if ``zope.annotation`` is available. * The IUserPreferredCharsets adapter registration was also moved into ``zope.publisher``. - Depend on zope.component >= 3.6 instead of zope.app.component as the `queryNextUtility` function was moved there. - Remove the old ``zope.app.i18n.metadirectives`` module as the directive was moved to ``zope.i18n`` ages ago. 3.5.0 (2009-02-01) ------------------ - Use zope.container instead of zope.app.container. 3.4.6 (2009-01-27) ------------------ - Fix a simple inconsistent MRO problem in tests - Substitute zope.app.zapi by direct calls to its wrapped apis. See bug 219302. 3.4.5 (unreleased) ------------------ - This was skipped over by accident. 3.4.4 (2007-10-23) ------------------ - Fix deprecation warning. 3.4.3 (2007-10-23) ------------------ - Fix imports in tests. - Clean up long lines. 3.4.2 (2007-9-26) ----------------- - Release to fix packaging issues with 3.4.1. 3.4.1 (2007-9-25) ----------------- - Added missing Changes.txt and README.txt files to egg 3.4.0 (2007-9-25) ----------------- - Initial documented release - Move ZopeMessageFactory to zope.i18nmessageid Keywords: zope3 i18n message factory Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Zope Public License Classifier: Programming Language :: Python Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Topic :: Internet :: WWW/HTTP Classifier: Framework :: Zope3 zope.app.i18n-3.6.4/src/zope.app.i18n.egg-info/top_level.txt 0000664 0001771 0002004 00000000005 12062644242 024506 0 ustar menesis menesis 0000000 0000000 zope zope.app.i18n-3.6.4/src/zope/ 0000775 0001771 0002004 00000000000 12062644246 016736 5 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope/__init__.py 0000664 0001771 0002004 00000000310 12062644231 021033 0 ustar menesis menesis 0000000 0000000 # this is a namespace package try: import pkg_resources pkg_resources.declare_namespace(__name__) except ImportError: import pkgutil __path__ = pkgutil.extend_path(__path__, __name__) zope.app.i18n-3.6.4/src/zope/app/ 0000775 0001771 0002004 00000000000 12062644246 017516 5 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope/app/i18n/ 0000775 0001771 0002004 00000000000 12062644246 020275 5 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope/app/i18n/filters.py 0000664 0001771 0002004 00000015240 12062644231 022313 0 ustar menesis menesis 0000000 0000000 ############################################################################## # # Copyright (c) 2001, 2002 Zope Foundation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################## """Translation Domain Message Export and Import Filters $Id: filters.py 126935 2012-06-18 15:48:16Z tseaver $ """ __docformat__ = 'restructuredtext' import time, re from types import StringTypes from zope.interface import implements from zope.i18n.interfaces import IMessageExportFilter, IMessageImportFilter from zope.app.i18n.interfaces import ILocalTranslationDomain class ParseError(Exception): def __init__(self, state, lineno): Exception.__init__(self, state, lineno) self.state = state self.lineno = lineno def __str__(self): return "state %s, line %s" % (self.state, self.lineno) class GettextExportFilter(object): implements(IMessageExportFilter) __used_for__ = ILocalTranslationDomain def __init__(self, domain): self.domain = domain def exportMessages(self, languages): 'See IMessageExportFilter' domain = self.domain.domain if isinstance(languages, StringTypes): language = languages elif len(languages) == 1: language = languages[0] else: raise TypeError( 'Only one language at a time is supported for gettext export.') dt = time.time() dt = time.localtime(dt) dt = time.strftime('%Y/%m/%d %H:%M', dt) output = _file_header %(dt, language.encode('UTF-8'), domain.encode('UTF-8')) for msgid in self.domain.getMessageIds(): msgstr = self.domain.translate(msgid, target_language=language) msgstr = msgstr.encode('UTF-8') msgid = msgid.encode('UTF-8') output += _msg_template %(msgid, msgstr) return output class GettextImportFilter(object): implements(IMessageImportFilter) __used_for__ = ILocalTranslationDomain def __init__(self, domain): self.domain = domain def importMessages(self, languages, file): 'See IMessageImportFilter' if isinstance(languages, StringTypes): language = languages elif len(languages) == 1: language = languages[0] else: raise TypeError( 'Only one language at a time is supported for gettext export.') result = parseGetText(file.readlines())[3] headers = parserHeaders(''.join(result[('',)][1])) del result[('',)] charset = extractCharset(headers['content-type']) for msg in result.items(): msgid = unicode(''.join(msg[0]), charset) msgid = msgid.replace('\\n', '\n') msgstr = unicode(''.join(msg[1][1]), charset) msgstr = msgstr.replace('\\n', '\n') self.domain.addMessage(msgid, msgstr, language) def extractCharset(header): charset = header.split('charset=')[-1] return charset.lower() def parserHeaders(headers_text): headers = {} for line in headers_text.split('\\n'): name = line.split(':')[0] value = ''.join(line.split(':')[1:]) headers[name.lower()] = value return headers def parseGetText(content): # The regular expressions com = re.compile('^#.*') msgid = re.compile(r'^ *msgid *"(.*?[^\\]*)"') msgstr = re.compile(r'^ *msgstr *"(.*?[^\\]*)"') re_str = re.compile(r'^ *"(.*?[^\\])"') blank = re.compile(r'^\s*$') trans = {} pointer = 0 state = 0 COM, MSGID, MSGSTR = [], [], [] while pointer < len(content): line = content[pointer] #print 'STATE:', state #print 'LINE:', line, content[pointer].strip() if state == 0: COM, MSGID, MSGSTR = [], [], [] if com.match(line): COM.append(line.strip()) state = 1 pointer = pointer + 1 elif msgid.match(line): MSGID.append(msgid.match(line).group(1)) state = 2 pointer = pointer + 1 elif blank.match(line): pointer = pointer + 1 else: raise ParseError(0, pointer + 1) elif state == 1: if com.match(line): COM.append(line.strip()) state = 1 pointer = pointer + 1 elif msgid.match(line): MSGID.append(msgid.match(line).group(1)) state = 2 pointer = pointer + 1 elif blank.match(line): pointer = pointer + 1 else: raise ParseError(1, pointer + 1) elif state == 2: if com.match(line): COM.append(line.strip()) state = 2 pointer = pointer + 1 elif re_str.match(line): MSGID.append(re_str.match(line).group(1)) state = 2 pointer = pointer + 1 elif msgstr.match(line): MSGSTR.append(msgstr.match(line).group(1)) state = 3 pointer = pointer + 1 elif blank.match(line): pointer = pointer + 1 else: raise ParseError(2, pointer + 1) elif state == 3: if com.match(line) or msgid.match(line): # print "\nEn", language, "detected", MSGID trans[tuple(MSGID)] = (COM, MSGSTR) state = 0 elif re_str.match(line): MSGSTR.append(re_str.match(line).group(1)) state = 3 pointer = pointer + 1 elif blank.match(line): pointer = pointer + 1 else: raise ParseError(3, pointer + 1) # the last also goes in if tuple(MSGID): trans[tuple(MSGID)] = (COM, MSGSTR) return COM, MSGID, MSGSTR, trans _file_header = ''' msgid "" msgstr "" "Project-Id-Version: Zope 3\\n" "PO-Revision-Date: %s\\n" "Last-Translator: Zope 3 Gettext Export Filter\\n" "Zope-Language: %s\\n" "Zope-Domain: %s\\n" "MIME-Version: 1.0\\n" "Content-Type: text/plain; charset=UTF-8\\n" "Content-Transfer-Encoding: 8bit\\n" ''' _msg_template = ''' msgid "%s" msgstr "%s" ''' zope.app.i18n-3.6.4/src/zope/app/i18n/browser/ 0000775 0001771 0002004 00000000000 12062644246 021760 5 ustar menesis menesis 0000000 0000000 zope.app.i18n-3.6.4/src/zope/app/i18n/browser/translate.pt 0000664 0001771 0002004 00000012270 12062644231 024316 0 ustar menesis menesis 0000000 0000000
No connection could be made to remote data source.
Here you can export and import messages from your Translation Domain.