Edgewall Software

Ticket #129: i18n_choose_translate.patch

File i18n_choose_translate.patch, 4.1 KB (added by palgarvio, 8 years ago)

Translation also working now!!!!!! I think ;)

  • genshi/filters/i18n.py

    diff --git a/genshi/filters/i18n.py b/genshi/filters/i18n.py
    a b  
    131131            gettext = self.translator.ugettext
    132132        except AttributeError:
    133133            gettext = self.translator.gettext
     134        try:
     135            # Unicode aware version first
     136            ngettext = self.translator.ungettext
     137        except AttributeError:
     138            ngettext = self.translator.ngettext
    134139
    135140        if not self.extract_text:
    136141            search_text = False
    137142        skip = 0
    138         i18n_msg = I18N_NAMESPACE['msg']
     143        i18n_msg = I18N_NAMESPACE['msg']       
     144        i18n_choose = I18N_NAMESPACE['choose']
    139145        ns_prefixes = []
    140146        xml_lang = XML_NAMESPACE['lang']
    141 
     147       
    142148        for kind, data, pos in stream:
    143149
    144150            # skip chunks that should not be localized
     
    184190                    params = attrs.get(i18n_msg)
    185191                    msgbuf = MessageBuffer(params)
    186192                    attrs -= i18n_msg
     193                elif i18n_choose in attrs:
     194                    params = attrs.get(i18n_choose)
     195                    msgbuf = MessageBuffer(params)
     196                    attrs -= i18n_choose                   
    187197
    188198                yield kind, (tag, attrs), pos
    189199
     
    202212            elif not skip and msgbuf and kind is END:
    203213                msgbuf.append(kind, data, pos)
    204214                if not msgbuf.depth:
    205                     for event in msgbuf.translate(gettext(msgbuf.format())):
    206                         yield event
     215                    if msgbuf.singular or msgbuf.plural:
     216                        singular, plural, expr = msgbuf.format()
     217                        events = ngettext(singular, plural, expr.evaluate(ctxt))
     218                        for event in msgbuf.translate(events):
     219                            yield event
     220                    else:
     221                        for event in msgbuf.translate(gettext(msgbuf.format())):
     222                            yield event
    207223                    msgbuf = None
    208224                    yield kind, data, pos
    209225
     
    328344                msgbuf.append(kind, data, pos)
    329345                if not msgbuf.depth:
    330346                    if msgbuf.singular or msgbuf.plural:
    331                          yield msgbuf.lineno, 'ngettext', msgbuf.format(), \
     347                        singular, plural, num = msgbuf.format()
     348                        yield msgbuf.lineno, 'ngettext', (singular, plural), \
    332349                                                                msgbuf.comments
    333350                    else:
    334351                        yield msgbuf.lineno, None, msgbuf.format(), \
     
    384401        self.plural = []
    385402        self.events = {}
    386403        self.values = {}
    387         self.singular_values = {}
    388         self.plural_values = {}
    389404        self.depth = 1
    390405        self.order = 1
    391406        self.choose_order = 1
     
    414429        elif kind is EXPR:
    415430            if self.choose_singular:
    416431                param = self.singular_params.pop(0)
    417                 self.singular.append('%%(%s)s' % param)
    418                 self.singular_values[param] = (kind, data, pos)         
     432                self.singular.append('%%(%s)s' % param)     
    419433            elif self.choose_plural:
    420434                param = self.plural_params.pop(0)
    421435                self.plural.append('%%(%s)s' % param)
    422                 self.plural_values[param] = (kind, data, pos)
    423436            else:
    424437                param = self.params.pop(0)
    425438                self.string.append('%%(%s)s' % param)
    426                 self.values[param] = (kind, data, pos)
     439            self.values[param] = (kind, data, pos)
    427440            self.events.setdefault(self.stack[-1], []).append(None)
    428441        else:
    429442            if kind is START:
     
    469482        """
    470483        if self.singular or self.plural:
    471484            return (u''.join(self.singular).strip(),
    472                     u''.join(self.plural).strip())
     485                    u''.join(self.plural).strip(), self.choose_numeral)
    473486        return u''.join(self.string).strip()
    474487
    475488    def translate(self, string, regex=re.compile(r'%\((\w+)\)s')):