Edgewall Software

Ticket #129: i18n_choose_translate.patch

File i18n_choose_translate.patch, 4.1 KB (added by palgarvio, 6 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')):