class GettextMessageCatalog(object):
    """A message catalog based on GNU gettext and Python's gettext module."""

    implements(IGlobalMessageCatalog)

    def __init__(self, language, domain, path_to_file):
        """Initialize the message catalog"""
        self.language = language
        self.domain = domain
        self._path_to_file = path_to_file
        self.reload()
        self._catalog.add_fallback(_KeyErrorRaisingFallback())

    def reload(self):
        'See IMessageCatalog'
        fp = open(self._path_to_file, 'rb')
        try:
            self._catalog = GNUTranslations(fp)
        finally:
            fp.close()

    def getMessage(self, id):
        'See IMessageCatalog'
        return self._catalog.ugettext(id)

    def queryMessage(self, id, default=None):
        'See IMessageCatalog'
        try:
            return self._catalog.ugettext(id)
        except KeyError:
            return default

    def getIdentifier(self):
        'See IMessageCatalog'
        return self._path_to_file
class GettextMessageCatalog(object):
    """A message catalog based on GNU gettext and Python's gettext module."""

    implements(IGlobalMessageCatalog)

    def __init__(self, language, domain, path_to_file):
        """Initialize the message catalog"""
        self.language = language
        self.domain = domain
        self._path_to_file = path_to_file
        self.reload()
        self._catalog.add_fallback(_KeyErrorRaisingFallback())

    def reload(self):
        'See IMessageCatalog'
        fp = open(self._path_to_file, 'rb')
        try:
            self._catalog = GNUTranslations(fp)
        finally:
            fp.close()

    def getMessage(self, id):
        'See IMessageCatalog'
        return self._catalog.ugettext(id)

    def queryMessage(self, id, default=None):
        'See IMessageCatalog'
        try:
            return self._catalog.ugettext(id)
        except KeyError:
            return default

    def getIdentifier(self):
        'See IMessageCatalog'
        return self._path_to_file
Beispiel #3
0
def process_dir(dirpath, filenames, projects):
    '''
    Process a directory
    '''
    translations = GNUTranslations(
        open(os.path.join(options.podir, options.lang + '.mo')))
    loader = TemplateLoader(['.'],
                            callback=lambda template: template.filters.insert(
                                0, Translator(translations.ugettext)))
    for fn in filenames:
        if fn.endswith('~') or fn.endswith('.swp'):
            continue
        src_file = os.path.join(dirpath, fn)
        dest_file = os.path.join(
            options.output,
            src_file[len(options.input):]) + '.' + options.lang  # Hideous
        curpage = src_file[len(options.input):].rstrip('.html')
        relpath = '../' * (dest_file.count('/') - 1)
        relpath = relpath.rstrip('/')
        if relpath == '': relpath = '.'
        if not os.path.exists(os.path.dirname(dest_file)):
            os.makedirs(os.path.dirname(dest_file))
        template = loader.load(src_file)
        # Variables made availble to all templates
        page = template.generate(
            _=lambda text: Markup(translations.ugettext(text)),
            lang=options.lang,
            path=options.basepath,
            relpath=relpath,
            curpage=curpage,
            projects=projects).render(method='html', doctype='html')
        output = open(dest_file, 'w')
        output.write(page)
        output.close()
Beispiel #4
0
class MOFile(File):

    class_mimetypes = ['application/x-gettext-translation']
    class_extension = 'mo'

    def _load_state_from_file(self, file):
        self.translations = GNUTranslations(file)

    def gettext(self, message):
        """Returns the translation for the given message.
        """
        return self.translations.ugettext(message)
Beispiel #5
0
class MOFile(File):

    class_mimetypes = ['application/x-gettext-translation']
    class_extension = 'mo'

    def _load_state_from_file(self, file):
        self.translations = GNUTranslations(file)


    def gettext(self, message):
        """Returns the translation for the given message.
        """
        return self.translations.ugettext(message)
Beispiel #6
0
def translate(lang, text):
    trans = None
    if lang in _CACHE:
        trans = _CACHE[lang]
    else:
        mpath = get_lc_messages_path(lang)
        if mpath is not None:
            with ZipFile(P('localization/locales.zip',
                allow_user_override=False), 'r') as zf:
                try:
                    buf = cStringIO.StringIO(zf.read(mpath + '/messages.mo'))
                except:
                    pass
                else:
                    trans = GNUTranslations(buf)
                    _CACHE[lang] = trans
    if trans is None:
        return getattr(__builtins__, '_', lambda x: x)(text)
    return trans.ugettext(text)
Beispiel #7
0
def translate(lang, text):
    trans = None
    if lang in _CACHE:
        trans = _CACHE[lang]
    else:
        mpath = get_lc_messages_path(lang)
        if mpath is not None:
            with ZipFile(P('localization/locales.zip',
                allow_user_override=False), 'r') as zf:
                try:
                    buf = io.BytesIO(zf.read(mpath + '/messages.mo'))
                except Exception:
                    pass
                else:
                    trans = GNUTranslations(buf)
                    _CACHE[lang] = trans
    if trans is None:
        return getattr(__builtins__, '_', lambda x: x)(text)
    return trans.ugettext(text)
Beispiel #8
0
def process_dir(dirpath, filenames):
    '''
    Process a directory
    '''
    if options.podir and options.lang:
        translations = GNUTranslations(open(os.path.join(options.podir, options.lang + '.mo')))
        if int(get_distribution('genshi').version[2]) < 6:
            loader = TemplateLoader(['.'], callback=lambda template: template.filters.insert(0, Translator(translations.ugettext)))
        else:
            loader = TemplateLoader(['.'], callback=lambda template: template.filters.insert(0, Translator(translations)))
    for fn in filenames:
        if fn.endswith('~') or fn.endswith('.swp'):
            continue
        src_file = os.path.join(dirpath, fn)
        if options.rss:
            sys.setrecursionlimit(1500)
            for line in fileinput.input(src_file):
                if line.find('feedparse')>0:
                    match = re.split('^.*feedparse\(\'', line)
                    feedurl = re.split('\'\)', match[1])
                    feedparse(feedurl[0])
            continue;
        release_date = None
        if schedule is not None:
            release_date = schedule(globalvar.release['next_id'])

            # We need to localize the date format. First, set locale to the original format
            locale.setlocale(locale.LC_ALL, 'en_US')

            # Then convert to time_struct
            alpha =  time.strptime(release_date[globalvar.release['next_id']]['alpha'], "%Y-%b-%d")
            beta =  time.strptime(release_date[globalvar.release['next_id']]['beta'], "%Y-%b-%d")
            final =  time.strptime(release_date[globalvar.release['next_id']]['final'], "%Y-%b-%d")

            # Stort the US format for further processing
            alpha_us = time.strftime("%Y-%b-%d", alpha)
            beta_us = time.strftime("%Y-%b-%d", beta)
            final_us = time.strftime("%Y-%b-%d", final)

            # Let's slice the US date for the calendar png

            beta_cal = beta_us[-2:]
            final_cal = final_us[-2:]

            # Move to the right locale (if known)
            try:
                locale.setlocale(locale.LC_ALL, locale.locale_alias[options.lang.lower()])
            except:
                pass

            # Convert back!
            alpha = convert_date(alpha)
            beta = convert_date(beta)
            final = convert_date(final)

            locale.setlocale(locale.LC_ALL, 'en_US')
            release_date = {'alpha':alpha, 'beta':beta, 'final':final, 'alpha_us':alpha_us, 'beta_us':beta_us, 'final_us':final_us, 'beta_cal':beta_cal, 'final_cal':final_cal}

        ec2 = None
        if get_amis is not None:
            ec2 = get_amis()

        dest_file = os.path.join(options.output, src_file[len(options.input):]) + '.' + options.lang # Hideous
        curpage = src_file[len(options.input):].rstrip('.html')
        relpath = '../' * (dest_file.count('/') - 1)
        relpath = relpath.rstrip('/')
        if relpath == '': relpath = '.'
        safe_makedir(os.path.dirname(dest_file))
        template = loader.load(src_file)
        # Variables made availble to all templates
        page = template.generate(
            _=lambda text: translations.ugettext(text),
            feedparse=feedparse,
            lang=options.lang,
            relpath=relpath,
            path=options.basepath,
            curpage=curpage,
            global_variables=globalvar,
            schedule = release_date,
            ec2_ami = ec2
            ).render(method='html', doctype='html', encoding='utf-8')
        output = open(dest_file, 'w')
        output.write(page)
        output.close()