def getPlatInfo(**kwargs):
    """kwargs: dict: {"module_name": module,...}
    used to display version information about modules."""
    log.debug("*** Platform information")
    log.debug("    System: %s" % platform.system())
    log.debug("    Release: %s" % platform.release())
    log.debug("    Version: %s" % platform.version())
    log.debug("    Architecture: %s, %s" % platform.architecture())
    log.debug("    Dist: %s, %s, %s" % platform.dist())
    log.debug("    Machine: %s" % platform.machine())
    log.debug("    Processor: %s" % platform.processor())
    log.debug("    Locale: %s" % locale.getdefaultlocale()[0])
    log.debug("    Encoding: %s" % locale.getdefaultlocale()[1])
    log.debug("    FS encoding: %s" % os.sys.getfilesystemencoding())
    reVer = re.compile(r"__version__|_version_|__version|_version|version|"
                       "__ver__|_ver_|__ver|_ver|ver", re.IGNORECASE)
    for name, mod in kwargs.items():
        s = "%s" % dir(mod)
        verObjNames = list(re.findall(reVer, s))
        if len(verObjNames) > 0:
            while verObjNames:
                verObjName = verObjNames.pop()
                verObj = getattr(mod, verObjName, None)
                if verObj:
                    if isinstance(verObj, (str, unicode, int, list, tuple)):
                        ver = "%s" % verObj
                        break
                    elif "%s" % type(verObj) == "<type 'module'>": # There is no define module type, so this should stay
                        verObjNames += ["%s.%s" % (verObjName, a) for a in re.findall(reVer, "%s" % dir(verObj))]
                    else:
                        ver = verObj()
                else:
                    ver = "%s" % type(verObj)
            log.debug("    %s version: %s" % (name, ver))
    log.debug("***")
kwargs: dict: {"module_name": module,...}
    used to display version information about modules.
albow/translate.py