Changeset 2461

Show
Ignore:
Timestamp:
07/12/07 15:52:01 (1 year ago)
Author:
jmt4b04d4v
Message:

TracSpanishTranslation:

closes #1719: Encoding trouble

  • Added string manipulation of Unicode strings everywhere I introduced non-ascii characteres:
    • unicode($UNICODE_STRING, 'utf-8') - in strings that appear in the web UI.
    • unicode($CADENA_UNICODE, 'utf-8').encode('utf-8') - in strings that go to the STDOUT, for tracd and trac-admin (this doen't work really, I don't know why).
  • Fix some miss-translations:
    • 0.10-stable/trac/ticket/web_ui.py#L416
      • by - por
    • 0.10-stable/trac/Timeline.py#L195
      • RSS Feed - Fuente en formato RSS
    • 0.10-stable/templates/newticket.cs#L10
      • Crer - Crear
    • 0.10-stable/templates/newticket.cs#L22
      • Breve descripci?\195?\179n - Descripci?\195?\179n breve
    • 0.10-stable/templates/about.cs#L91 , 0.10-stable/trac/env.py#L83
      • open source - c?\195?\179digo abierto
    • 0.10-stable/templates/changeset.cs#L135
      • from - de
    • 0.10-stable/templates/changeset.cs#L180
      • added - a?\195?\177adido
    • 0.10-stable/templates/changeset.cs#L182
      • deleted - eliminado
    • 0.10-stable/templates/changeset.cs#L184
      • copied - copiado
    • 0.10-stable/templates/changeset.cs#L186
      • moved - movido
    • 0.10-stable/templates/changeset.cs#L188
      • modified - modificado
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tracspanishtranslation/0.10/patchs/trac-spanish-python_utf-8.diff

    r2343 r2461  
    11Index: trac/env.py 
    22=================================================================== 
    3 --- trac/env.py (revision 5758
     3--- trac/env.py (revision 5827
    44+++ trac/env.py (working copy) 
    5 @@ -70,17 +70,17 @@ 
     5@@ -70,19 +70,19 @@ 
    66         setups, usually involving running Trac behind a HTTP proxy, you may 
    77         need to use this option to force Trac to use the correct URL.""") 
     
    2121     project_footer = Option('project', 'footer', 
    2222-                            'Visit the Trac open source project at<br />' 
    23 +                            'Visite el proyecto open source Trac en<br />' 
     23+                            unicode('Visite el proyecto de código abierto Trac en<br />' 
    2424                             '<a href="http://trac.edgewall.org/">' 
    25                              'http://trac.edgewall.org/</a>', 
     25-                            'http://trac.edgewall.org/</a>', 
     26+                            'http://trac.edgewall.org/</a>', 'utf-8'), 
    2627         """Page footer text (right-aligned).""") 
     28  
     29     project_icon = Option('project', 'icon', 'common/trac.ico', 
    2730@@ -330,7 +330,7 @@ 
    2831  
     
    3033         if not db_str.startswith('sqlite:'): 
    3134-            raise EnvironmentError('Can only backup sqlite databases') 
    32 +            raise EnvironmentError('Sólo se pueden realizar copias de seguridad de las bases de datos sqlite'
     35+            raise EnvironmentError(unicode('Sólo se pueden realizar copias de seguridad de las bases de datos sqlite', 'utf-8')
    3336         db_name = os.path.join(self.path, db_str[7:]) 
    3437         if not dest: 
     
    3942         elif dbver > db_default.db_version: 
    4043-            raise TracError, 'Database newer than Trac version' 
    41 +            raise TracError, 'La base de datos es más actual que la versión de Trac' 
     44+            raise TracError, unicode('La base de datos es más actual que la versión de Trac', 'utf-8') 
    4245         return True 
    4346  
     
    4851             except AttributeError: 
    4952-                err = 'No upgrade module for version %i (%s.py)' % (i, name) 
    50 +                err = 'No existe un módulo de actualización para la versión %i (%s.py)' % (i, name) 
     53+                err = unicode('No existe un módulo de actualización para la versión %i (%s.py)', 'utf-8') % (i, name) 
    5154                 raise TracError, err 
    5255             script.do_upgrade(self.env, i, cursor) 
     
    5962-                         'requires this variable to point to a valid Trac ' \ 
    6063-                         'environment.' 
    61 +        raise TracError, 'Falta la variable de entorno "TRAC_ENV". Trac ' \ 
    62 +                         'requiere que esta variable apunte a un entorno válido ' \ 
    63 +                         'Trac.' 
     64+        raise TracError, unicode('Falta la variable de entorno "TRAC_ENV". Trac ' \ 
     65+                         'requiere que esta variable apunte a un entorno Trac ' \ 
     66+                         'válido.', 'utf-8') 
    6467  
    6568     env = Environment(env_path) 
     
    7174Index: trac/core.py 
    7275=================================================================== 
    73 --- trac/core.py        (revision 5758
     76--- trac/core.py        (revision 5827
    7477+++ trac/core.py        (working copy) 
    7578@@ -45,7 +45,7 @@ 
     
    8790         """Return a textual representation of the extension point.""" 
    8891-        return '<ExtensionPoint %s>' % self.interface.__name__ 
    89 +        return '<PuntoDeExtensión %s>' % self.interface.__name__ 
     92+        return unicode('<PuntoDeExtensión %s>', 'utf-8') % self.interface.__name__ 
    9093  
    9194  
     
    9699             if cls not in ComponentMeta._components: 
    97100-                raise TracError, 'Component "%s" not registered' % cls.__name__ 
    98 +                raise TracError, 'El componente "%s" no está registrado' % cls.__name__ 
     101+                raise TracError, unicode('El componente "%s" no está registrado', 'utf-8') % cls.__name__ 
    99102             try: 
    100103                 component = cls(self) 
     
    107110Index: trac/attachment.py 
    108111=================================================================== 
    109 --- trac/attachment.py  (revision 5758
     112--- trac/attachment.py  (revision 5827
    110113+++ trac/attachment.py  (working copy) 
    111114@@ -100,8 +100,8 @@ 
     
    116119-                            'Invalid Attachment') 
    117120+            raise TracError('El adjunto %s no existe.' % (self.title), 
    118 +                            'Adjunto Inválido'
     121+                            unicode('Adjunto Inválido', 'utf-8')
    119122         self.filename = row[0] 
    120123         self.description = row[1] 
     
    143146         except IOError: 
    144147-            raise TracError('Attachment %s not found' % self.filename) 
    145 +            raise TracError('El adjunto %s no fué encontrado' % self.filename) 
     148+            raise TracError(unicode('El adjunto %s no fué encontrado', 'utf-8') % self.filename) 
    146149         return fd 
    147150  
     
    191194         if not hasattr(upload, 'filename') or not upload.filename: 
    192195-            raise TracError('No file uploaded') 
    193 +            raise TracError('No se cargó el archivo adjunto'
     196+            raise TracError(unicode('No se cargó el archivo adjunto', 'utf-8')
    194197         if hasattr(upload.file, 'fileno'): 
    195198             size = os.fstat(upload.file.fileno())[6] 
     
    200203         if size == 0: 
    201204-            raise TracError("Can't upload empty file") 
    202 +            raise TracError('No se puede cargar un fichero vacío'
     205+            raise TracError(unicode('No se puede cargar un fichero vacío', 'utf-8')
    203206  
    204207         # Maximum attachment size (in bytes) 
     
    207210-            raise TracError('Maximum attachment size: %d bytes' % max_size, 
    208211-                            'Upload failed') 
    209 +            raise TracError('El tamaño máximo para adjuntos es: %d bytes' % max_size, 
    210 +                            'La carga del adjunto falló'
     212+            raise TracError(unicode('El tamaño máximo para adjuntos es: %d bytes', 'utf-8') % max_size, 
     213+                            unicode('La carga del adjunto falló', 'utf-8')
    211214  
    212215         # We try to normalize the filename to unicode NFC if we can. 
     
    217220         if not filename: 
    218221-            raise TracError('No file uploaded') 
    219 +            raise TracError('No se cargó el archivo adjunto'
     222+            raise TracError(unicode('No se cargó el archivo adjunto', 'utf-8')
    220223  
    221224         attachment.description = req.args.get('description', '') 
     
    226229                 if field: 
    227230-                    raise InvalidAttachment('Attachment field %s is invalid: %s' 
    228 +                    raise InvalidAttachment('El campo -adjunto- %s es inválido: %s' 
     231+                    raise InvalidAttachment(unicode('El campo -adjunto- %s es inválido: %s', 'utf-8') 
    229232                                             % (field, message)) 
    230233                 else: 
    231234-                    raise InvalidAttachment('Invalid attachment: %s' % message) 
    232 +                    raise InvalidAttachment('Adjunto inválido: %s' % message) 
     235+                    raise InvalidAttachment(unicode('Adjunto inválido: %s', 'utf-8') % message) 
    233236  
    234237         if req.args.get('replace'): 
     
    269272Index: trac/db_default.py 
    270273=================================================================== 
    271 --- trac/db_default.py  (revision 5758
     274--- trac/db_default.py  (revision 5827
    272275+++ trac/db_default.py  (working copy) 
    273276@@ -166,106 +166,106 @@ 
     
    536539Index: trac/mimeview/rst.py 
    537540=================================================================== 
    538 --- trac/mimeview/rst.py        (revision 5758
     541--- trac/mimeview/rst.py        (revision 5827
    539542+++ trac/mimeview/rst.py        (working copy) 
    540543@@ -52,9 +52,9 @@ 
     
    543546         except ImportError: 
    544547-            raise TracError, 'Docutils not found' 
    545 +            raise TracError, 'No se encontró Docutils' 
     548+            raise TracError, unicode('No se encontró Docutils', 'utf-8') 
    546549         if StrictVersion(__version__) < StrictVersion('0.3.9'): 
    547550-            raise TracError, 'Docutils version >= %s required, %s found' \ 
    548 +            raise TracError, 'Se requiere Docutils versión >= %s, se encontró %s'
     551+            raise TracError, unicode('Se requiere Docutils versión >= %s, se encontró %s', 'utf-8')
    549552                              % ('0.3.9', __version__) 
    550553  
     
    555558             warning = state_machine.reporter.warning( 
    556559-                    '%s is not a valid TracLink' % (arguments[0]), 
    557 +                    '%s no es un TracLink válido' % (arguments[0]), 
     560+                    unicode('%s no es un TracLink válido', 'utf-8') % (arguments[0]), 
    558561                     nodes.literal_block(block_text, block_text), 
    559562                     line=lineno) 
     
    564567             warning = nodes.warning(None, nodes.literal_block(text, 
    565568-                'WARNING: %s is not a valid TracLink' % rawtext)) 
    566 +                'ADVERTENCIA: %s no es un TracLink válido' % rawtext)) 
     569+                unicode('ADVERTENCIA: %s no es un TracLink válido', 'utf-8') % rawtext)) 
    567570             return warning, [] 
    568571  
     
    570573Index: trac/mimeview/api.py 
    571574=================================================================== 
    572 --- trac/mimeview/api.py        (revision 5758
     575--- trac/mimeview/api.py        (revision 5827
    573576+++ trac/mimeview/api.py        (working copy) 
    574577@@ -376,7 +376,7 @@ 
     
    577580         if not candidates: 
    578581-            raise TracError('No available MIME conversions from %s to %s' % 
    579 +            raise TracError('No están disponibles conversiones MIME de %s a %s'
     582+            raise TracError(unicode('No están disponibles conversiones MIME de %s a %s', 'utf-8')
    580583                             (mimetype, key)) 
    581584  
     
    586589             return (output[0], output[1], ext) 
    587590-        raise TracError('No available MIME conversions from %s to %s' % 
    588 +        raise TracError('No están disponibles conversiones MIME de %s a %s'
     591+        raise TracError(unicode('No están disponibles conversiones MIME de %s a %s', 'utf-8')
    589592                         (mimetype, key)) 
    590593  
     
    592595Index: trac/mimeview/tests/php.py 
    593596=================================================================== 
    594 --- trac/mimeview/tests/php.py  (revision 5758
     597--- trac/mimeview/tests/php.py  (revision 5827
    595598+++ trac/mimeview/tests/php.py  (working copy) 
    596599@@ -66,7 +66,7 @@ 
     
    599602             raise NotImplementedException( 
    600603-                "Pass either type=file or type=string") 
    601 +                "Pase ya sea type=file ó type=string"
     604+                unicode("Pase ya sea type=file ó type=string", 'utf-8')
    602605         result = list(r.render(None, None, s)) 
    603606         return result 
     
    605608Index: trac/mimeview/silvercity.py 
    606609=================================================================== 
    607 --- trac/mimeview/silvercity.py (revision 5758
     610--- trac/mimeview/silvercity.py (revision 5827
    608611+++ trac/mimeview/silvercity.py (working copy) 
    609612@@ -109,7 +109,7 @@ 
     
    612615         except (KeyError, AttributeError): 
    613616-            err = "No SilverCity lexer found for mime-type '%s'." % mimetype 
    614 +            err = "No se encontró ningún analizador de léxico SilverCity para el tipo-mime '%s'." % mimetype 
     617+            err = unicode("No se encontró ningún analizador de léxico SilverCity para el tipo-mime '%s'.", 'utf-8') % mimetype 
    615618             raise Exception, err 
    616619  
     
    618621Index: trac/mimeview/patch.py 
    619622=================================================================== 
    620 --- trac/mimeview/patch.py      (revision 5758
     623--- trac/mimeview/patch.py      (revision 5827
    621624+++ trac/mimeview/patch.py      (working copy) 
    622625@@ -69,7 +69,7 @@ 
     
    625628         if not d: 
    626629-            raise TracError, 'Invalid unified diff content' 
    627 +            raise TracError, 'El contenido diff unificado es inválido' 
     630+            raise TracError, unicode('El contenido diff unificado es inválido', 'utf-8') 
    628631         hdf = HDFWrapper(loadpaths=[self.env.get_templates_dir(), 
    629632                                     self.config.get('trac', 'templates_dir')]) 
     
    631634Index: trac/mimeview/enscript.py 
    632635=================================================================== 
    633 --- trac/mimeview/enscript.py   (revision 5758
     636--- trac/mimeview/enscript.py   (revision 5827
    634637+++ trac/mimeview/enscript.py   (working copy) 
    635638@@ -137,7 +137,7 @@ 
     
    638641         if np.errorlevel or np.err: 
    639642-            err = 'Running (%s) failed: %s, %s.' % (cmdline, np.errorlevel, 
    640 +            err = 'La ejecución de (%s) falló: %s, %s.' % (cmdline, np.errorlevel, 
     643+            err = unicode('La ejecución de (%s) falló: %s, %s.', 'utf-8') % (cmdline, np.errorlevel, 
    641644                                                     np.err) 
    642645             raise Exception, err 
     
    644647Index: trac/mimeview/php.py 
    645648=================================================================== 
    646 --- trac/mimeview/php.py        (revision 5758
     649--- trac/mimeview/php.py        (revision 5827
    647650+++ trac/mimeview/php.py        (working copy) 
    648651@@ -83,7 +83,7 @@ 
     
    651654         if (os.name != 'nt' and np.errorlevel) or np.err: 
    652655-            msg = 'Running (%s) failed: %s, %s.' % (cmdline, 
    653 +            msg = 'La ejecución de (%s) falló: %s, %s.' % (cmdline, 
     656+            msg = unicode('La ejecución de (%s) falló: %s, %s.', 'utf-8') % (cmdline, 
    654657                                                     np.errorlevel, 
    655658                                                     np.err) 
     
    662665-                            'binary. Trac requires the CLI version ' 
    663666-                            'for syntax highlighting.') 
    664 +            raise TracError('Parece que se está utilizando el binario PHP CGI ' 
     667+            raise TracError(unicode('Parece que se está utilizando el binario PHP CGI ' 
    665668+                            'Trac requiere la versión CLI ' 
    666 +                            'para resaltar (colorear) la sintaxis.'
     669+                            'para resaltar (colorear) la sintaxis.', 'utf-8')
    667670  
    668671         epilogues = ["</span>", "</font>"] 
     
    670673Index: trac/ticket/api.py 
    671674=================================================================== 
    672 --- trac/ticket/api.py  (revision 5758
     675--- trac/ticket/api.py  (revision 5827
    673676+++ trac/ticket/api.py  (working copy) 
    674677@@ -244,7 +244,7 @@ 
     
    683686Index: trac/ticket/web_ui.py 
    684687=================================================================== 
    685 --- trac/ticket/web_ui.py       (revision 5758
     688--- trac/ticket/web_ui.py       (revision 5827
    686689+++ trac/ticket/web_ui.py       (working copy) 
    687690@@ -57,10 +57,10 @@ 
     
    691694-                        raise InvalidTicket('"%s" is not a valid value for ' 
    692695-                                            'the %s field.' % (value, name)) 
    693 +                        raise InvalidTicket('"%s" no es un valor válido para ' 
    694 +                                            'el campo %s.' % (value, name)) 
     696+                        raise InvalidTicket(unicode('"%s" no es un valor válido para ' 
     697+                                            'el campo %s.', 'utf-8') % (value, name)) 
    695698                 elif not field.get('optional', False): 
    696699-                    raise InvalidTicket('field %s must be set' % name) 
     
    704707         except ValueError: 
    705708-            raise InvalidTicket('Invalid comment threading identifier') 
    706 +            raise InvalidTicket('Identificador de serie de comentarios inválido'
     709+            raise InvalidTicket(unicode('Identificador de serie de comentarios inválido', 'utf-8')
    707710  
    708711         # Custom validation rules 
     
    711714                 if field: 
    712715-                    raise InvalidTicket("The ticket %s field is invalid: %s" % 
    713 +                    raise InvalidTicket("EL campo %s del ticket es inválido: %s"
     716+                    raise InvalidTicket(unicode("EL campo %s del ticket es inválido: %s", 'utf-8')
    714717                                         (field, message)) 
    715718                 else: 
    716719-                    raise InvalidTicket("Invalid ticket: %s" % message) 
    717 +                    raise InvalidTicket("Ticket inválido: %s" % message) 
     720+                    raise InvalidTicket(unicode("Ticket inválido: %s", 'utf-8') % message) 
    718721  
    719722  
     
    761764+                field['label'] = 'Informante' 
    762765+            if name == 'description': 
    763 +                field['label'] = 'Descripción' 
     766+                field['label'] = unicode('Descripción', 'utf-8') 
    764767+            if name == 'type': 
    765768+                field['label'] = 'Tipo' 
     
    767770+                field['label'] = 'Estado' 
    768771+            if name == 'resolution': 
    769 +                field['label'] = 'Resolución' 
     772+                field['label'] = unicode('Resolución', 'utf-8') 
    770773+            if name == 'priority': 
    771774+                field['label'] = 'Prioridad' 
     
    775778+                field['label'] = 'Componente' 
    776779+            if name == 'version': 
    777 +                field['label'] = 'Versión' 
     780+                field['label'] = unicode('Versión', 'utf-8') 
    778781+            if name == 'keywords': 
    779782+                field['label'] = 'Palabras clave' 
     
    838841                     return None 
    839842             elif 'ticket' in filters: 
     843@@ -388,7 +413,7 @@ 
     844                 title = 'Ticket #%s (%s %s): %s' % \ 
     845                         (id, type.lower(), verb, summary) 
     846             else: 
     847-                title = Markup('Ticket <em title="%s">#%s</em> (%s) %s by %s', 
     848+                title = Markup('Ticket <em title="%s">#%s</em> (%s) %s por %s', 
     849                                summary, id, type, verb, author) 
     850             ticket_href = href.ticket(id) 
     851             if cid: 
    840852@@ -509,7 +534,7 @@ 
    841853         if req.perm.has_permission('TICKET_CHGPROP'): 
     
    854866-                            "This ticket has been modified by someone else " 
    855867-                            "since you started", 'Mid Air Collision') 
    856 +            raise TracError("Lo siento, no se pueden guardar tus cambios. " 
     868+            raise TracError(unicode("Lo siento, no se pueden guardar tus cambios. " 
    857869+                            "Este ticket ha sido modificado por alguien más " 
    858 +                            "desde que tu comenzaste", 'Colisión en pleno aire'
     870+                            "desde que tu comenzaste", 'utf-8'), unicode('Colisión en pleno aire', 'utf-8')
    859871  
    860872         # Do any action on the ticket? 
     
    863875         if action not in actions: 
    864876-            raise TracError('Invalid action') 
    865 +            raise TracError('Acción inválida'
     877+            raise TracError(unicode('Acción inválida', 'utf-8')
    866878  
    867879         # TODO: this should not be hard-coded like this 
     
    878890Index: trac/ticket/report.py 
    879891=================================================================== 
    880 --- trac/ticket/report.py       (revision 5758
     892--- trac/ticket/report.py       (revision 5827
    881893+++ trac/ticket/report.py       (working copy) 
    882894@@ -46,7 +46,7 @@ 
     
    906918-        req.hdf['title'] = 'Delete Report {%s} %s' % (id, row[0]) 
    907919+            raise TracError('El Reporte %s no existe.' % id, 
    908 +                            'Número de Reporte Inválido'
     920+                            unicode('Número de Reporte Inválido', 'utf-8')
    909921+        req.hdf['title'] = 'Eliminar Reporte {%s} %s' % (id, row[0]) 
    910922         req.hdf['report'] = { 
     
    918930-                                'Invalid Report Number') 
    919931+                raise TracError('El Reporte %s no existe.' % id, 
    920 +                                'Número de Reporte Inválido'
     932+                                unicode('Número de Reporte Inválido', 'utf-8')
    921933             title = row[0] or '' 
    922934             description = row[1] or '' 
     
    941953         except ValueError,e: 
    942954-            raise TracError, 'Report failed: %s' % e 
    943 +            raise TracError, 'Falló el Reporte: %s' % e 
     955+            raise TracError, unicode('Falló el Reporte: %s', 'utf-8') % e 
    944956  
    945957         title, description, sql = self.get_info(db, id, args) 
     
    950962         except Exception, e: 
    951963-            req.hdf['report.message'] = 'Report execution failed: %s' % e 
    952 +            req.hdf['report.message'] = 'Falló la ejecución del Reporte: %s' % e 
     964+            req.hdf['report.message'] = unicode('Falló la ejecución del Reporte: %s', 'utf-8') % e 
    953965             return 'report.cs', None 
    954966  
     
    9981010-                                'Invalid Report Number') 
    9991011+                raise TracError('El Reporte %d no existe.' % id, 
    1000 +                                'Número de Reporte Inválido'
     1012+                                unicode('Número de Reporte Inválido', 'utf-8')
    10011013             title = row[0] or '' 
    10021014             sql = row[1] 
     
    10071019             except KeyError: 
    10081020-                raise TracError("Dynamic variable '$%s' not defined." \ 
    1009 +                raise TracError("La variable Dinámica '$%s' no esta definida."
     1021+                raise TracError(unicode("La variable Dinámica '$%s' no esta definida.", 'utf-8')
    10101022                                 % aname) 
    10111023             req.hdf['report.var.' + aname] = arg 
     
    10131025Index: trac/ticket/model.py 
    10141026=================================================================== 
    1015 --- trac/ticket/model.py        (revision 5758
     1027--- trac/ticket/model.py        (revision 5827
    10161028+++ trac/ticket/model.py        (working copy) 
    10171029@@ -83,8 +83,8 @@ 
     
    10221034-                            'Invalid Ticket Number') 
    10231035+            raise TracError('El Ticket %d no existe.' % tkt_id, 
    1024 +                            'Número de Ticket Inválido'
     1036+                            unicode('Número de Ticket Inválido', 'utf-8')
    10251037  
    10261038         self.id = tkt_id 
     
    11311143-                            'Invalid Milestone Name') 
    11321144+            raise TracError('El Hito %s no existe.' % name, 
    1133 +                            'Nombre de Hito inválido'
     1145+                            unicode('Nombre de Hito inválido', 'utf-8')
    11341146         self.name = row[0] 
    11351147         self.due = row[1] and int(row[1]) or 0 
     
    11661178             if not row: 
    11671179-                raise TracError, 'Version %s does not exist.' % name 
    1168 +                raise TracError, 'La versión %s no existe.' % name 
     1180+                raise TracError, unicode('La versión %s no existe.', 'utf-8') % name 
    11691181             self.name = self._old_name = name 
    11701182             self.time = row[0] and int(row[0]) or None 
     
    11751187     def delete(self, db=None): 
    11761188-        assert self.exists, 'Cannot deleting non-existent version' 
    1177 +        assert self.exists, 'No puede eliminarse una versión inexistente' 
     1189+        assert self.exists, unicode('No puede eliminarse una versión inexistente', 'utf-8') 
    11781190         if not db: 
    11791191             db = self.env.get_db_cnx() 
     
    11851197-        assert not self.exists, 'Cannot insert existing version' 
    11861198-        assert self.name, 'Cannot create version with no name' 
    1187 +        assert not self.exists, 'No puede insertarse una versión ya existente' 
    1188 +        assert self.name, 'No puede crearse una versión sin nombre' 
     1199+        assert not self.exists, unicode('No puede insertarse una versión ya existente', 'utf-8') 
     1200+        assert self.name, unicode('No puede crearse una versión sin nombre', 'utf-8') 
    11891201         self.name = self.name.strip() 
    11901202         if not db: 
     
    11961208-        assert self.exists, 'Cannot update non-existent version' 
    11971209-        assert self.name, 'Cannot update version with no name' 
    1198 +        assert self.exists, 'No puede actualizarse una versión inexistente' 
    1199 +        assert self.name, 'No puede actualizarse una versión sin nombre' 
     1210+        assert self.exists, unicode('No puede actualizarse una versión inexistente', 'utf-8') 
     1211+        assert self.name, unicode('No puede actualizarse una versión sin nombre', 'utf-8') 
    12001212         self.name = self.name.strip() 
    12011213         if not db: 
     
    12031215Index: trac/ticket/roadmap.py 
    12041216=================================================================== 
    1205 --- trac/ticket/roadmap.py      (revision 5758
     1217--- trac/ticket/roadmap.py      (revision 5827
    12061218+++ trac/ticket/roadmap.py      (working copy) 
    12071219@@ -129,7 +129,7 @@ 
     
    12821294         except ValueError, e: 
    12831295-            raise TracError(to_unicode(e), 'Invalid Date Format') 
    1284 +            raise TracError(to_unicode(e), 'Formato de Fecha Inválido'
     1296+            raise TracError(to_unicode(e), unicode('Formato de Fecha Inválido', 'utf-8')
    12851297         if req.args.has_key('completed'): 
    12861298             completed = req.args.get('completeddate', '') 
     
    12891301             except ValueError, e: 
    12901302-                raise TracError(to_unicode(e), 'Invalid Date Format') 
    1291 +                raise TracError(to_unicode(e), 'Formato de Fecha Inválido'
     1303+                raise TracError(to_unicode(e), unicode('Formato de Fecha Inválido', 'utf-8')
    12921304             if milestone.completed > time(): 
    12931305-                raise TracError('Completion date may not be in the future', 
    12941306-                                'Invalid Completion Date') 
    1295 +                raise TracError('La fecha de conclusión no puede estar en el futuro'
    1296 +                                'Fecha de Conclusión Inválida'
     1307+                raise TracError(unicode('La fecha de conclusión no puede estar en el futuro', 'utf-8')
     1308+                                unicode('Fecha de Conclusión Inválida', 'utf-8')
    12971309             retarget_to = req.args.get('target') 
    12981310             if req.args.has_key('retarget'): 
     
    13351347Index: trac/ticket/query.py 
    13361348=================================================================== 
    1337 --- trac/ticket/query.py        (revision 5758
     1349--- trac/ticket/query.py        (revision 5827
    13381350+++ trac/ticket/query.py        (working copy) 
    13391351@@ -67,11 +67,11 @@ 
     
    13431355-                raise QuerySyntaxError, 'Query filter requires field and ' \ 
    13441356-                                        'constraints separated by a "="' 
    1345 +                raise QuerySyntaxError, 'El filtro de consultas requiere que los campos y ' \ 
    1346 +                                        'sus criterios de búsqueda están separadas por un "="' 
     1357+                raise QuerySyntaxError, unicode('El filtro de consultas requiere que los campos y ' \ 
     1358+                                        'sus criterios de búsqueda están separadas por un "="', 'utf-8') 
    13471359             field,values = filter 
    13481360             if not field: 
     
    14181430Index: trac/db/sqlite_backend.py 
    14191431=================================================================== 
    1420 --- trac/db/sqlite_backend.py   (revision 5758
     1432--- trac/db/sqlite_backend.py   (revision 5827
    14211433+++ trac/db/sqlite_backend.py   (working copy) 
    14221434@@ -116,7 +116,7 @@ 
     
    14431455-                                'permission to the database file %s and the ' \ 
    14441456-                                'directory it is located in.' \ 
    1445 +                raise TracError('El usuario %s requiere permisos de lectura ' \ 
     1457+                raise TracError(unicode('El usuario %s requiere permisos de lectura ' \ 
    14461458+                                '_y_ escritura para el archivo base de datos %s y el ' \ 
    1447 +                                'directorio donde éste se encuentra.'
     1459+                                'directorio donde éste se encuentra.', 'utf-8')
    14481460                                 % (getuser(), path)) 
    14491461  
     
    14511463Index: trac/db/api.py 
    14521464=================================================================== 
    1453 --- trac/db/api.py      (revision 5758
     1465--- trac/db/api.py      (revision 5827
    14541466+++ trac/db/api.py      (working copy) 
    14551467@@ -94,7 +94,7 @@ 
     
    14681480-            raise TracError('Database connection string must start with ' 
    14691481-                            'scheme:/') 
    1470 +            raise TracError('La cadena de conexión a la base de datos debe comenzar con ' 
    1471 +                            'esquema:/'
     1482+            raise TracError(unicode('La cadena de conexión a la base de datos debe comenzar con ' 
     1483+                            'esquema:/', 'utf-8')
    14721484     else: 
    14731485         if rest.startswith('/') and not rest.startswith('//'): 
     
    14751487Index: trac/db/pool.py 
    14761488=================================================================== 
    1477 --- trac/db/pool.py     (revision 5758
     1489--- trac/db/pool.py     (revision 5827
    14781490+++ trac/db/pool.py     (working copy) 
    14791491@@ -104,8 +104,8 @@ 
     
    14831495-                            raise TimeoutError('Unable to get database ' 
    14841496-                                               'connection within %d seconds' 
    1485 +                            raise TimeoutError('No se pudo obtener una conexión a la ' 
    1486 +                                               'base de datos en el plazo de %d segundos' 
     1497+                            raise TimeoutError(unicode('No se pudo obtener una conexión a la ' 
     1498+                                               'base de datos en el plazo de %d segundos', 'utf-8') 
    14871499                                                 % timeout) 
    14881500                         self._available.wait(timeout) 
     
    14901502Index: trac/db/mysql_backend.py 
    14911503=================================================================== 
    1492 --- trac/db/mysql_backend.py    (revision 5758
     1504--- trac/db/mysql_backend.py    (revision 5827
    14931505+++ trac/db/mysql_backend.py    (working copy) 
    14941506@@ -122,7 +122,7 @@ 
     
    15031515Index: trac/versioncontrol/api.py 
    15041516=================================================================== 
    1505 --- trac/versioncontrol/api.py  (revision 5758
     1517--- trac/versioncontrol/api.py  (revision 5827
    15061518+++ trac/versioncontrol/api.py  (working copy) 
    15071519@@ -88,9 +88,9 @@ 
     
    15121524-                                'Check that the Python bindings for "%s" are ' 
    15131525-                                'correctly installed.' % 
    1514 +                raise TracError('Sistema de control de versiones no soportado "%s". ' 
     1526+                raise TracError(unicode('Sistema de control de versiones no soportado "%s". ' 
    15151527+                                'Verifique que las librerías Python para "%s" están ' 
    1516 +                                'correctamente instaladas.'
     1528+                                'correctamente instaladas.', 'utf-8')
    15171529                                 ((self.repository_type,)*2)) 
    15181530             self._connector = heappop(candidates)[1] 
     
    15281540     def __init__(self, path, rev, msg=None): 
    15291541-        TracError.__init__(self, "%sNo node %s at revision %s" \ 
    1530 +        TracError.__init__(self, "%sNo existe el nodo %s en la revisión %s"
     1542+        TracError.__init__(self, unicode("%sNo existe el nodo %s en la revisión %s", 'utf-8')
    15311543                            % (msg and '%s: ' % msg or '', path, rev)) 
    15321544  
     
    15581570Index: trac/versioncontrol/svn_fs.py 
    15591571=================================================================== 
    1560 --- trac/versioncontrol/svn_fs.py       (revision 5758
     1572--- trac/versioncontrol/svn_fs.py       (revision 5827
    15611573+++ trac/versioncontrol/svn_fs.py       (working copy) 
    15621574@@ -254,7 +254,7 @@ 
     
    15651577         if core.SVN_VER_MAJOR < 1: 
    15661578-            raise TracError("Subversion >= 1.0 required: Found %d.%d.%d" % \ 
    1567 +            raise TracError("Se requiere Subversion >= 1.0: Se encontró %d.%d.%d" % \ 
     1579+            raise TracError(unicode("Se requiere Subversion >= 1.0: Se encontró %d.%d.%d", 'utf-8') % \ 
    15681580                             (core.SVN_VER_MAJOR, 
    15691581                              core.SVN_VER_MINOR, 
     
    15831595         else: 
    15841596-            raise NoSuchNode(old_path, old_rev, 'The Base for Diff is invalid') 
    1585 +            raise NoSuchNode(old_path, old_rev, 'La base para el Diff es inválida'
     1597+            raise NoSuchNode(old_path, old_rev, unicode('La base para el Diff es inválida', 'utf-8')
    15861598         if self.has_node(new_path, new_rev): 
    15871599             new_node = self.get_node(new_path, new_rev) 
    15881600         else: 
    15891601-            raise NoSuchNode(new_path, new_rev, 'The Target for Diff is invalid') 
    1590 +            raise NoSuchNode(new_path, new_rev, 'El objetivo para el Diff es inválido'
     1602+            raise NoSuchNode(new_path, new_rev, unicode('El objetivo para el Diff es inválido', 'utf-8')
    15911603         if new_node.kind != old_node.kind: 
    15921604-            raise TracError('Diff mismatch: Base is a %s (%s in revision %s) ' 
    15931605-                            'and Target is a %s (%s in revision %s).' \ 
    1594 +            raise TracError('Incoincidencia Diff: La Base es  %s (%s en la revisión %s) ' 
    1595 +                            'y el Objetivo es %s (%s en la revisión %s).'
     1606+            raise TracError(unicode('Incoincidencia Diff: La Base es  %s (%s en la revisión %s) ' 
     1607+                            'y el Objetivo es %s (%s en la revisión %s).', 'utf-8')
    15961608                             % (old_node.kind, old_path, old_rev, 
    15971609                                new_node.kind, new_path, new_rev)) 
     
    15991611Index: trac/versioncontrol/web_ui/util.py 
    16001612=================================================================== 
    1601 --- trac/versioncontrol/web_ui/util.py  (revision 5758
     1613--- trac/versioncontrol/web_ui/util.py  (revision 5827
    16021614+++ trac/versioncontrol/web_ui/util.py  (working copy) 
    16031615@@ -72,7 +72,7 @@ 
     
    16061618 def get_path_links(href, fullpath, rev): 
    16071619-    links = [{'name': 'root', 'href': href.browser(rev=rev)}] 
    1608 +    links = [{'name': 'raíz', 'href': href.browser(rev=rev)}] 
     1620+    links = [{'name': unicode('raíz', 'utf-8'), 'href': href.browser(rev=rev)}] 
    16091621     path = '' 
    16101622     for part in [p for p in fullpath.split('/') if p]: 
     
    16171629-                               'in the repository history to see if that path ' 
    16181630-                               'existed but was later removed.</p>', e.message, 
    1619 +        raise TracError(Markup('%s<br><p>Tu puedes <a href="%s">buscar</a> '  
     1631+        raise TracError(Markup(unicode('%s<br><p>Tu puedes <a href="%s">buscar</a> '  
    16201632+                               'en el historial del repositorio para ver si la ruta ' 
    1621 +                               'existía pero fué posteriormente eliminada.</p>', e.message, 
     1633+                               'existía pero fué posteriormente eliminada.</p>', 'utf-8'), e.message, 
    16221634                                req.href.log(path, rev=rev, 
    16231635                                             mode='path_history'))) 
     
    16251637Index: trac/versioncontrol/web_ui/changeset.py 
    16261638=================================================================== 
    1627 --- trac/versioncontrol/web_ui/changeset.py     (revision 5758
     1639--- trac/versioncontrol/web_ui/changeset.py     (revision 5827
    16281640+++ trac/versioncontrol/web_ui/changeset.py     (working copy) 
    16291641@@ -259,9 +259,9 @@ 
     
    17071719Index: trac/versioncontrol/web_ui/log.py 
    17081720=================================================================== 
    1709 --- trac/versioncontrol/web_ui/log.py   (revision 5758
     1721--- trac/versioncontrol/web_ui/log.py   (revision 5827
    17101722+++ trac/versioncontrol/web_ui/log.py   (working copy) 
    17111723@@ -94,7 +94,7 @@ 
     
    17251737-                            "at revision %s or at any previous revision." 
    17261738-                            % (path, rev), 'Nonexistent path') 
    1727 +            raise TracError("El archivo o directorio '%s' no existe " 
    1728 +                            "en la revisión %s o ni en ninguna revisión previa." 
     1739+            raise TracError(unicode("El archivo o directorio '%s' no existe " 
     1740+                            "en la revisión %s o ni en ninguna revisión previa.", 'utf-8') 
    17291741+                            % (path, rev), 'Ruta inexistente') 
    17301742  
     
    17361748             add_link(req, 'next', make_log_href(next_path, rev=next_rev), 
    17371749-                     'Revision Log (restarting at %s, rev. %s)' 
    1738 +                     'Bitácora de Revisiones (reiniciando en %s, rev. %s)' 
     1750+                     unicode('Bitácora de Revisiones (reiniciando en %s, rev. %s)', 'utf-8') 
    17391751                      % (next_path, next_rev)) 
    17401752             # now, only show 'limit' results 
     
    17501762                                        stop_rev=stop_rev) 
    17511763-        add_link(req, 'alternate', changelog_href, 'ChangeLog', 'text/plain') 
    1752 +        add_link(req, 'alternate', changelog_href, 'Bitácora de cambios', 'text/plain') 
     1764+        add_link(req, 'alternate', changelog_href, unicode('Bitácora de cambios', 'utf-8'), 'text/plain') 
    17531765  
    17541766         return 'log.cs', None 
     
    17561768Index: trac/versioncontrol/web_ui/browser.py 
    17571769=================================================================== 
    1758 --- trac/versioncontrol/web_ui/browser.py       (revision 5758
     1770--- trac/versioncontrol/web_ui/browser.py       (revision 5827
    17591771+++ trac/versioncontrol/web_ui/browser.py       (working copy) 
    17601772@@ -78,7 +78,7 @@ 
     
    18021814Index: trac/versioncontrol/cache.py 
    18031815=================================================================== 
    1804 --- trac/versioncontrol/cache.py        (revision 5758
     1816--- trac/versioncontrol/cache.py        (revision 5827
    18051817+++ trac/versioncontrol/cache.py        (working copy) 
    18061818@@ -81,8 +81,8 @@ 
     
    18101822-                raise TracError("The 'repository_dir' has changed, " 
    18111823-                                "a 'trac-admin resync' operation is needed.") 
    1812 +                raise TracError("La entrada 'repository_dir' ha cambiado, " 
    1813 +                                "es necesario realizar la operación 'trac-admin resync'."
     1824+                raise TracError(unicode("La entrada 'repository_dir' ha cambiado, " 
     1825+                                "es necesario realizar la operación 'trac-admin resync'.", 'utf-8')
    18141826         elif repository_dir is None: #  
    18151827             self.log.info('Storing initial "repository_dir": %s' % self.name) 
     
    18201832         if CACHE_YOUNGEST_REV not in metadata: 
    18211833-            raise TracError('Missing "youngest_rev" in cache metadata') 
    1822 +            raise TracError('No existe "youngest_rev" en el cache de meta-datos'
     1834+            raise TracError(unicode('No existe "youngest_rev" en el caché de meta-datos', 'utf-8')
    18231835          
    18241836         self.youngest = metadata[CACHE_YOUNGEST_REV] 
     
    18261838Index: trac/Set