• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

import logging
import os
import os.path
from os.path import isdir
 
from zope.deprecation import deprecate
 
import Globals
from App.ImageFile import ImageFile
pts_globals = globals()
 
CACHE_PATH = os.path.join(Globals.INSTANCE_HOME, 'var', 'pts')
 
from AccessControl import ModuleSecurityInfo, allow_module
from AccessControl.Permissions import view
from OFS.Application import get_products
 
from Products.PlacelessTranslationService.load import (
    _load_i18n_dir, _remove_mo_cache)
from Products.PlacelessTranslationService.utils import log
 
# # Apply import time patches
if not bool(os.getenv('DISABLE_PTS')):
    import patches
 
# BBB
import warnings
showwarning = warnings.showwarning
warnings.showwarning = lambda *a, **k: None
# ignore deprecation warnings on import
from Products.PlacelessTranslationService.PlacelessTranslationService import (
    PlacelessTranslationService, PTSWrapper, PTS_IS_RTL)
# restore warning machinery
warnings.showwarning = showwarning
 
# id to use in the Control Panel
cp_id = 'TranslationService'
 
# module level translation service
translation_service = None
 
# icon
misc_ = {
    'PlacelessTranslationService.png':
    ImageFile('www/PlacelessTranslationService.png', globals()),
    'GettextMessageCatalog.png':
    ImageFile('www/GettextMessageCatalog.png', globals()),
    }
 
# set product-wide attrs for importing
security = ModuleSecurityInfo('Products.PlacelessTranslationService')
allow_module('Products.PlacelessTranslationService')
 
security.declareProtected(view, 'getTranslationService')
@deprecate("The getTranslationService method of PTS is deprecated and "
           "will be removed in the next major version of PTS.")
def getTranslationService():
    """returns the PTS instance
    """
    return translation_service
 
@deprecate("The make_translation_service method of PTS is deprecated and "
           "will be removed in the next major version of PTS.")
def make_translation_service(cp):
    """Control_Panel translation service
    """
    global translation_service
    translation_service = PlacelessTranslationService('default')
    translation_service.id = cp_id
    cp._setObject(cp_id, translation_service)
    translation_service = PTSWrapper()
    return getattr(cp, cp_id)
 
 
IGNORED = frozenset([
    'BTreeFolder2', 'ExternalEditor', 'ExternalMethod', 'Five', 'MIMETools',
    'MailHost', 'OFSP', 'PageTemplates', 'PlacelessTranslationService',
    'PluginIndexes', 'PythonScripts', 'Sessions', 'SiteAccess', 'SiteErrorLog',
    'StandardCacheManagers', 'TemporaryFolder', 'Transience', 'ZCTextIndex',
    'ZCatalog', 'ZODBMountPoint', 'ZReST', 'ZSQLMethods',
])
 
def initialize2(context):
    # allow for disabling PTS entirely by setting an environment variable.
    if bool(os.getenv('DISABLE_PTS')):
        log('Disabled by environment variable "DISABLE_PTS".', logging.WARNING)
        return
 
    cp = getattr(context._ProductContext__app, 'Control_Panel', None) # argh
    if cp is not None and cp_id in cp.objectIds():
        cp_ts = getattr(cp, cp_id, None)
        # Clean up ourselves
        if cp_ts is not None:
            cp._delObject(cp_id)
            _remove_mo_cache(CACHE_PATH)
 
    # load translation files from all packages and products
    loaded = {}
 
    import Products
    packages = getattr(Products, '_registered_packages', ())
    for package in packages:
        name = package.__name__
        path = package.__path__[0]
        loaded[name] = True
        i18n_dir = os.path.join(path, 'i18n')
        if isdir(i18n_dir):
            _load_i18n_dir(i18n_dir)
 
    for product in get_products():
        name = product[1]
        if name in IGNORED:
            continue
        basepath = product[3]
        fullname = 'Products.' + name
        # Avoid loading products registered as packages twice
        if loaded.get(fullname):
            continue
        loaded[fullname] = True
        i18n_dir = os.path.join(basepath, name, 'i18n')
        if isdir(i18n_dir):
            _load_i18n_dir(i18n_dir)