Show
Ignore:
Timestamp:
08/25/07 21:47:41 (1 year ago)
Author:
jmt4b04d4v
Message:

closes #1915: 'trac-admin TRACENV upgrade' failed in patched trac-0.10.5dev
https://trac-hacks.org/ticket/1915

  • Undo translation of $TRACSRC/trac/scripts/admin.py script and related test.
Files:

Legend:

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

    r2576 r2594  
    19071907         if req.authname == 'anonymous': 
    19081908             req.hdf['settings.session_id'] = req.session.sid 
    1909 Index: trac/scripts/admin.py 
    1910 =================================================================== 
    1911 --- trac/scripts/admin.py       (revision 5935) 
    1912 +++ trac/scripts/admin.py       (working copy) 
    1913 @@ -67,8 +67,8 @@ 
    1914  class TracAdmin(cmd.Cmd): 
    1915      intro = '' 
    1916      license = trac.__license_long__ 
    1917 -    doc_header = 'Trac Admin Console %(ver)s\n' \ 
    1918 -                 'Available Commands:\n' \ 
    1919 +    doc_header = 'Consola Administrativa Trac %(ver)s\n' \ 
    1920 +                 'Commandos Disponibles:\n' \ 
    1921                   % {'ver':trac.__version__ } 
    1922      ruler = '' 
    1923      prompt = "Trac> " 
    1924 @@ -97,17 +97,17 @@ 
    1925          except SystemExit: 
    1926              raise 
    1927          except Exception, e: 
    1928 -            print>>sys.stderr, 'Command failed: %s' % e 
    1929 +            print>>sys.stderr, unicode('El comando falló: %s', 'utf-8').encode('utf-8') % e 
    1930              rv = 2 
    1931          if not self.interactive: 
    1932              return rv 
    1933   
    1934      def run(self): 
    1935          self.interactive = True 
    1936 -        print 'Welcome to trac-admin %(ver)s\n'                \ 
    1937 -              'Interactive Trac administration console.\n'       \ 
    1938 +        print unicode('Bienvenido a trac-admin %(ver)s\n'                \ 
    1939 +              'Consola interactiva de administración Trac.\n'       \ 
    1940                'Copyright (c) 2003-2006 Edgewall Software\n\n'                                    \ 
    1941 -              "Type:  '?' or 'help' for help on commands.\n" %  \ 
    1942 +              "Ingrese:  '?' ᅵ 'help' para obtener ayuda acerca de los comandos.\n", 'utf-8').encode('utf-8') %  \ 
    1943                {'ver':trac.__version__} 
    1944          self.cmdloop() 
    1945   
    1946 @@ -134,7 +134,7 @@ 
    1947                  self.__env = Environment(self.envname) 
    1948              return self.__env 
    1949          except Exception, e: 
    1950 -            print 'Failed to open environment.', e 
    1951 +            print 'No se pudo abrir el entorno Trac.', e 
    1952              traceback.print_exc() 
    1953              sys.exit(1) 
    1954   
    1955 @@ -283,7 +283,7 @@ 
    1956              except ValueError: 
    1957                  pass 
    1958          if seconds == None: 
    1959 -            print>>sys.stderr, 'Unknown time format %s' % t 
    1960 +            print>>sys.stderr, 'Formato de hora desconocido %s' % t 
    1961          return seconds 
    1962   
    1963      def _format_date(self, s): 
    1964 @@ -298,7 +298,7 @@ 
    1965      ## 
    1966   
    1967      ## Help 
    1968 -    _help_help = [('help', 'Show documentation')] 
    1969 +    _help_help = [('help', unicode('Mostrar documentación', 'utf-8').encode('utf-8'))] 
    1970   
    1971      def all_docs(cls): 
    1972          return (cls._help_about + cls._help_help + 
    1973 @@ -320,30 +320,30 @@ 
    1974                  doc = getattr(self, "_help_" + arg[0]) 
    1975                  self.print_doc(doc) 
    1976              except AttributeError: 
    1977 -                print "No documentation found for '%s'" % arg[0] 
    1978 +                print unicode("No se encontró documentación para '%s'", 'utf-8').encode('utf-8') % arg[0] 
    1979          else: 
    1980 -            print 'trac-admin - The Trac Administration Console %s' \ 
    1981 +            print 'trac-admin - La Consola Administrativa Trac %s' \ 
    1982                    % trac.__version__ 
    1983              if not self.interactive: 
    1984                  print 
    1985 -                print "Usage: trac-admin </path/to/projenv> [command [subcommand] [option ...]]\n" 
    1986 -                print "Invoking trac-admin without command starts "\ 
    1987 -                      "interactive mode." 
    1988 +                print unicode("Uso: trac-admin </ruta/al/proyecto> [comando [subcomando] [opción ...]]\n", 'utf-8').encode('utf-8') 
    1989 +                print unicode("El invocar trac-admin sin ningún comando, inicia "\ 
    1990 +                      "el modo interactivo.", 'utf-8').encode('utf-8') 
    1991              self.print_doc(self.all_docs()) 
    1992   
    1993       
    1994      ## About / Version 
    1995 -    _help_about = [('about', 'Shows information about trac-admin')] 
    1996 +    _help_about = [('about', unicode('Mostrar información acerca de trac-admin', 'utf-8').encode('utf-8'))] 
    1997   
    1998      def do_about(self, line): 
    1999          print 
    2000 -        print 'Trac Admin Console %s' % trac.__version__ 
    2001 +        print 'Consola Administrativa Trac %s' % trac.__version__ 
    2002          print '=================================================================' 
    2003          print self.license 
    2004   
    2005   
    2006      ## Quit / EOF 
    2007 -    _help_quit = [['quit', 'Exit the program']] 
    2008 +    _help_quit = [['quit', 'Salir del programa']] 
    2009      _help_exit = _help_quit 
    2010      _help_EOF = _help_quit 
    2011   
    2012 @@ -356,14 +356,14 @@ 
    2013   
    2014   
    2015      # Component 
    2016 -    _help_component = [('component list', 'Show available components'), 
    2017 -                       ('component add <name> <owner>', 'Add a new component'), 
    2018 -                       ('component rename <name> <newname>', 
    2019 -                        'Rename a component'), 
    2020 -                       ('component remove <name>', 
    2021 -                        'Remove/uninstall component'), 
    2022 -                       ('component chown <name> <owner>', 
    2023 -                        'Change component ownership')] 
    2024 +    _help_component = [('component list', 'Mostrar los componentes disponibles'), 
    2025 +                       ('component add <nombre> <responsable>', unicode('Añadir un nuevo componente', 'utf-8').encode('utf-8')), 
    2026 +                       ('component rename <nombre> <nuevo_nombre>', 
    2027 +                        'Renombrar un componente'), 
    2028 +                       ('component remove <nombre>', 
    2029 +                        'Quitar/eliminar un componente'), 
    2030 +                       ('component chown <nombre> <responsable>', 
    2031 +                        'Modificar el responsable del componente')] 
    2032   
    2033      def complete_component(self, text, line, begidx, endidx): 
    2034          if begidx in (16, 17): 
    2035 @@ -400,7 +400,7 @@ 
    2036          data = [] 
    2037          for c in Component.select(self.env_open()): 
    2038              data.append((c.name, c.owner)) 
    2039 -        self.print_listing(['Name', 'Owner'], data) 
    2040 +        self.print_listing(['Nombre', 'Responsable'], data) 
    2041   
    2042      def _do_component_add(self, name, owner): 
    2043          component = Component(self.env_open()) 
    2044 @@ -424,11 +424,11 @@ 
    2045   
    2046   
    2047      ## Permission 
    2048 -    _help_permission = [('permission list [user]', 'List permission rules'), 
    2049 -                        ('permission add <user> <action> [action] [...]', 
    2050 -                         'Add a new permission rule'), 
    2051 -                        ('permission remove <user> <action> [action] [...]', 
    2052 -                         'Remove permission rule')] 
    2053 +    _help_permission = [('permission list [user]', 'Listar las reglas de permisos'), 
    2054 +                        (unicode('permission add <usuario> <acción> [acción] [...]', 'utf-8').encode('utf-8'), 
    2055 +                         unicode('Añadir una nueva regla de permisos', 'utf-8').encode('utf-8')), 
    2056 +                        (unicode('permission remove <usuario> <acción> [acción] [...]', 'utf-8').encode('utf-8'), 
    2057 +                         'Quitar una regla de permisos')] 
    2058   
    2059      def complete_permission(self, text, line, begidx, endidx): 
    2060          argv = self.arg_tokenize(line) 
    2061 @@ -472,9 +472,9 @@ 
    2062          else: 
    2063              rows = self._permsys.get_all_permissions() 
    2064          rows.sort() 
    2065 -        self.print_listing(['User', 'Action'], rows) 
    2066 +        self.print_listing(['Usuario', unicode('Acción', 'utf-8').encode('utf-8')], rows) 
    2067          print 
    2068 -        print 'Available actions:' 
    2069 +        print 'Acciones disponibles:' 
    2070          actions = self._permsys.get_actions() 
    2071          actions.sort() 
    2072          text = ', '.join(actions) 
    2073 @@ -486,7 +486,7 @@ 
    2074          if not self._permsys: 
    2075              self._permsys = PermissionSystem(self.env_open()) 
    2076          if not action.islower() and not action.isupper(): 
    2077 -            print 'Group names must be in lower case and actions in upper case' 
    2078 +            print unicode('Los nombres de los grupos deben estar en minúsculas y las acciones en mayúsculas', 'utf-8').encode('utf-8') 
    2079              return 
    2080          self._permsys.grant_permission(user, action) 
    2081   
    2082 @@ -509,72 +509,72 @@ 
    2083   
    2084      ## Initenv 
    2085      _help_initenv = [('initenv', 
    2086 -                      'Create and initialize a new environment interactively'), 
    2087 -                     ('initenv <projectname> <db> <repostype> <repospath> <templatepath>', 
    2088 -                      'Create and initialize a new environment from arguments')] 
    2089 +                      'Crear e inicializar un nuevo entorno de manera interactiva'), 
    2090 +                     ('initenv <nombre_proyecto> <db> <tipo_repositorio> <ruta_repositorio> <ruta_plantillas>', 
    2091 +                      'Crear e inicializar un nuevo entorno en base a los argumentos')] 
    2092   
    2093      def do_initdb(self, line): 
    2094          self.do_initenv(line) 
    2095   
    2096      def get_initenv_args(self): 
    2097          returnvals = [] 
    2098 -        print 'Creating a new Trac environment at %s' % self.envname 
    2099 +        print 'Creando un nuevo entorno Trac en %s' % self.envname 
    2100          print 
    2101 -        print 'Trac will first ask a few questions about your environment ' 
    2102 -        print 'in order to initalize and prepare the project database.' 
    2103 +        print unicode('Trac primero realizará algunas preguntas acerca de tu entorno ', 'utf-8').encode('utf-8') 
    2104 +        print 'para poder inicializar y preparar la base de datos del proyecto.' 
    2105          print 
    2106 -        print " Please enter the name of your project." 
    2107 -        print " This name will be used in page titles and descriptions." 
    2108 +        print " Por favor ingrese el nombre de su proyecto." 
    2109 +        print unicode(" Este nombre será utilizado en títulos de páginas y descripciones.", 'utf-8').encode('utf-8') 
    2110          print 
    2111 -        dp = 'My Project' 
    2112 -        returnvals.append(raw_input('Project Name [%s]> ' % dp).strip() or dp) 
    2113 +        dp = 'Mi Proyecto' 
    2114 +        returnvals.append(raw_input('Nombre del Proyecto [%s]> ' % dp).strip() or dp) 
    2115          print 
    2116 -        print ' Please specify the connection string for the database to use.' 
    2117 -        print ' By default, a local SQLite database is created in the environment ' 
    2118 -        print ' directory. It is also possible to use an already existing ' 
    2119 -        print ' PostgreSQL database (check the Trac documentation for the exact ' 
    2120 -        print ' connection string syntax).' 
    2121 +        print unicode(' Por favor especifique la cadena de conexión para la base de datos a utilizar.', 'utf-8').encode('utf-8') 
    2122 +        print unicode(' Por defecto, se creará una base de datos local SQLite en el directorio ', 'utf-8').encode('utf-8') 
    2123 +        print unicode(' del entorno. También es posible utilizar una base de datos PostgreSQL ', 'utf-8').encode('utf-8') 
    2124 +        print unicode(' ya existente (revise la documentación de Trac para informarse acerca de la ', 'utf-8').encode('utf-8') 
    2125 +        print unicode(' sintaxis exacta de la cadena de conexión).', 'utf-8').encode('utf-8') 
    2126          print 
    2127          ddb = 'sqlite:db/trac.db' 
    2128 -        prompt = 'Database connection string [%s]> ' % ddb 
    2129 +        prompt = unicode('Cadena de conexión para la base de datos [%s]> ', 'utf-8').encode('utf-8') % ddb 
    2130          returnvals.append(raw_input(prompt).strip() or ddb) 
    2131          print 
    2132 -        print ' Please specify the type of version control system,' 
    2133 -        print ' By default, it will be svn.' 
    2134 +        print ' Por favor especifique el tipo de sistema de control de versiones,' 
    2135 +        print unicode(' Por defecto, será svn.', 'utf-8').encode('utf-8') 
    2136          print 
    2137 -        print ' If you don\'t want to use Trac with version control integration, ' 
    2138 -        print ' choose the default here and don\'t specify a repository directory. ' 
    2139 -        print ' in the next question.' 
    2140 +        print unicode(' Si no desea utilizar Trac con integración a un sistema de control de versiones,', 'utf-8').encode('utf-8') 
    2141 +        print unicode(' escoja acá el valor por defecto y no especifique un directorio-repositorio ', 'utf-8').encode('utf-8') 
    2142 +        print ' en la siguiente pregunta.' 
    2143          print  
    2144          drpt = 'svn' 
    2145 -        prompt = 'Repository type [%s]> ' % drpt 
    2146 +        prompt = 'Tipo de repositorio [%s]> ' % drpt 
    2147          returnvals.append(raw_input(prompt).strip() or drpt) 
    2148          print 
    2149 -        print ' Please specify the absolute path to the version control ' 
    2150 -        print ' repository, or leave it blank to use Trac without a repository.' 
    2151 -        print ' You can also set the repository location later.' 
    2152 +        print ' Por favor especifique la ruta absoluta al repositorio de control de ' 
    2153 +        print ' versiones, o en su lugar, deje este campo en blanco para usar Trac sin un repositorio.' 
    2154 +        print unicode(' También será posible fijar la localización del repositorio más adelante.', 'utf-8').encode('utf-8') 
    2155          print  
    2156 -        prompt = 'Path to repository [/path/to/repos]> ' 
    2157 +        prompt = 'Ruta al repositorio [/ruta/al/repositorio]> ' 
    2158          returnvals.append(raw_input(prompt).strip()) 
    2159          print 
    2160 -        print ' Please enter location of Trac page templates.' 
    2161 -        print ' Default is the location of the site-wide templates installed with Trac.' 
    2162 +        print unicode(' Por favor ingrese la localización de las plantillas de las páginas de Trac.', 'utf-8').encode('utf-8') 
    2163 +        print unicode(' Por defecto se escoge la localización de las plantillas ubicadas en la instalación de Trac.', 'utf-8').encode('utf-8') 
    2164          print 
    2165          dt = default_dir('templates') 
    2166 -        prompt = 'Templates directory [%s]> ' % dt 
    2167 +        prompt = 'Directorio de plantillas [%s]> ' % dt 
    2168          returnvals.append(raw_input(prompt).strip() or dt) 
    2169          print 
    2170          return returnvals 
    2171   
    2172      def do_initenv(self, line): 
    2173          if self.env_check(): 
    2174 -            print "Initenv for '%s' failed." % self.envname 
    2175 -            print "Does an environment already exist?" 
    2176 +            print unicode("Falló initenv para '%s'.", 'utf-8').encode('utf-8') % self.envname 
    2177 +            print "ᅵSerᅵ posible que ya exista un entorno?" 
    2178              return 2 
    2179   
    2180          if os.path.exists(self.envname) and os.listdir(self.envname): 
    2181 -            print "Initenv for '%s' failed." % self.envname 
    2182 -            print "Directory exists and is not empty." 
    2183 +            print unicode("Falló initenv para '%s'.", 'utf-8').encode('utf-8') % self.envname 
    2184 +            print unicode("El directorio existe y no está vacío.", 'utf-8').encode('utf-8') 
    2185              return 2 
    2186   
    2187          arg = self.arg_tokenize(line) 
    2188 @@ -587,20 +587,20 @@ 
    2189              project_name, db_str, repository_type, repository_dir, \ 
    2190                            templates_dir = returnvals 
    2191          elif len(arg) != 5: 
    2192 -            print 'Wrong number of arguments to initenv: %d' % len(arg) 
    2193 +            print unicode('Número incorrecto de argumentos para initenv: %d', 'utf-8').encode('utf-8') % len(arg) 
    2194              return 2 
    2195          else: 
    2196              project_name, db_str, repository_type, repository_dir, \ 
    2197                            templates_dir = arg[:5] 
    2198   
    2199          if not os.access(os.path.join(templates_dir, 'header.cs'), os.F_OK): 
    2200 -            print templates_dir, "doesn't look like a Trac templates directory" 
    2201 +            print templates_dir, "no parece un directorio de plantillas Trac" 
    2202              return 2 
    2203          if templates_dir == default_dir('templates'): 
    2204              templates_dir = None # let the runtime default_dir() take over 
    2205   
    2206          try: 
    2207 -            print 'Creating and Initializing Project' 
    2208 +            print 'Creando e Inicializando el Proyecto' 
    2209              options = [ 
    2210                  ('trac', 'database', db_str), 
    2211                  ('trac', 'repository_type', repository_type), 
    2212 @@ -612,12 +612,12 @@ 
    2213                  self.__env = Environment(self.envname, create=True, 
    2214                                           options=options) 
    2215              except Exception, e: 
    2216 -                print 'Failed to create environment.', e 
    2217 +                print unicode('Falló la creación del entorno.', 'utf-8').encode('utf-8'), e 
    2218                  traceback.print_exc() 
    2219                  sys.exit(1) 
    2220   
    2221              # Add a few default wiki pages 
    2222 -            print ' Installing default wiki pages' 
    2223 +            print unicode(' Instalando páginas por defecto del wiki', 'utf-8').encode('utf-8') 
    2224              cnx = self.__env.get_db_cnx() 
    2225              cursor = cnx.cursor() 
    2226              self._do_wiki_load(default_dir('wiki'), cursor) 
    2227 @@ -627,50 +627,50 @@ 
    2228                  try: 
    2229                      repos = self.__env.get_repository() 
    2230                      if repos: 
    2231 -                        print ' Indexing repository' 
    2232 +                        print ' Indexando el repositorio' 
    2233                          self._resync(repos) 
    2234                  except TracError, e: 
    2235 -                    print>>sys.stderr, "\nWarning:\n" 
    2236 +                    print>>sys.stderr, "\nAdvertencia:\n" 
    2237                      if repository_type == "svn": 
    2238 -                        print>>sys.stderr, "You should install the SVN bindings" 
    2239 +                        print>>sys.stderr, unicode("Debería instalar las librerías SVN para Python", 'utf-8').encode('utf-8') 
    2240                      else: 
    2241 -                        print>>sys.stderr, "Repository type %s not supported" \ 
    2242 +                        print>>sys.stderr, "El tipo de repositorio %s no es soportado" \ 
    2243                                             % repository_type 
    2244          except Exception, e: 
    2245 -            print 'Failed to initialize environment.', e 
    2246 +            print unicode('Falló la inicialización del entorno.', 'utf-8').encode('utf-8'), e 
    2247              traceback.print_exc() 
    2248              return 2 
    2249   
    2250 -        print """ 
    2251 +        print unicode(""" 
    2252  --------------------------------------------------------------------- 
    2253 -Project environment for '%(project_name)s' created. 
    2254 +El entorno del proyecto para '%(project_name)s' fué creado. 
    2255   
    2256 -You may now configure the environment by editing the file: 
    2257 +Ahora puedes realizar la configuración del entorno editando el archivo: 
    2258   
    2259    %(config_path)s 
    2260   
    2261 -If you'd like to take this new project environment for a test drive, 
    2262 -try running the Trac standalone web server `tracd`: 
    2263 +Si quieres efectuar una prueba de este nuevo entorno-proyecto, 
    2264 +prueba ejecutar el servidor web `tracd`: 
    2265   
    2266    tracd --port 8000 %(project_path)s 
    2267   
    2268 -Then point your browser to http://localhost:8000/%(project_dir)s. 
    2269 -There you can also browse the documentation for your installed 
    2270 -version of Trac, including information on further setup (such as 
    2271 -deploying Trac to a real web server). 
    2272 +Luego dirige tu navegador hacia http://localhost:8000/%(project_dir)s. 
    2273 +Allá también podrás encontrar la documentación para la versión de Trac  
    2274 +que tienes instalada, incluyendo información acerca de configuración adicional  
    2275 +(como el desplegar Trac en un verdadero servidor web). 
    2276   
    2277 -The latest documentation can also always be found on the project 
    2278 -website: 
    2279 +La documentación más actual siempre estará disponible en el 
    2280 +sitio web del proyecto: 
    2281   
    2282    http://trac.edgewall.org/ 
    2283   
    2284 -Congratulations! 
    2285 -""" % dict(project_name=project_name, project_path=self.envname, 
    2286 +Felicitaciones! 
    2287 +""", 'utf-8').encode('utf-8') % dict(project_name=project_name, project_path=self.envname, 
    2288             project_dir=os.path.basename(self.envname), 
    2289             config_path=os.path.join(self.envname, 'conf', 'trac.ini')) 
    2290   
    2291 -    _help_resync = [('resync', 'Re-synchronize trac with the repository'), 
    2292 -                    ('resync <rev>', 'Re-synchronize only the given <rev>')] 
    2293 +    _help_resync = [('resync', 'Re-sincronizar trac con el repositorio'), 
    2294 +                    ('resync <revisión>', unicode('Re-sincronizar sólo la <revisión> dada', 'utf-8').encode('utf-8'))] 
    2295   
    2296      def _resync(self, repos): 
    2297          if hasattr(repos, 'sync'): # introduced "officially" in 0.10.4 
    2298 @@ -689,10 +689,10 @@ 
    2299              rev = argv[0] 
    2300              if rev: 
    2301                  env.get_repository().sync_changeset(rev) 
    2302 -                print '%s resynced.' % rev 
    2303 +                print '%s resincronizado.' % rev 
    2304                  return 
    2305          from trac.versioncontrol.cache import CACHE_METADATA_KEYS 
    2306 -        print 'Resyncing repository history... ' 
    2307 +        print 'Resincronizando el historial del repositorio... ' 
    2308          cnx = self.db_open() 
    2309          cursor = cnx.cursor() 
    2310          cursor.execute("DELETE FROM revision") 
    2311 @@ -705,22 +705,22 @@ 
    2312          repos = self._resync(env.get_repository()) 
    2313          cursor.execute("SELECT count(rev) FROM revision") 
    2314          for cnt, in cursor: 
    2315 -            print cnt, 'revisions cached.', 
    2316 -        print 'Done.' 
    2317 +            print cnt, 'revisiones cacheadas.', 
    2318 +        print 'Terminado.' 
    2319   
    2320      ## Wiki 
    2321 -    _help_wiki = [('wiki list', 'List wiki pages'), 
    2322 -                  ('wiki remove <name>', 'Remove wiki page'), 
    2323 -                  ('wiki export <page> [file]', 
    2324 -                   'Export wiki page to file or stdout'), 
    2325 -                  ('wiki import <page> [file]', 
    2326 -                   'Import wiki page from file or stdin'), 
    2327 -                  ('wiki dump <directory>', 
    2328 -                   'Export all wiki pages to files named by title'), 
    2329 -                  ('wiki load <directory>', 
    2330 -                   'Import all wiki pages from directory'), 
    2331 +    _help_wiki = [('wiki list', unicode('Listar las páginas del wiki', 'utf-8').encode('utf-8')), 
    2332 +                  ('wiki remove <nombre>', unicode('Eliminar una página del wiki', 'utf-8').encode('utf-8')), 
    2333 +                  (unicode('wiki export <página> [archivo]', 'utf-8').encode('utf-8'), 
    2334 +                   unicode('Exportar una página del wiki a un archivo ó a la salida estándar', 'utf-8').encode('utf-8')), 
    2335 +                  (unicode('wiki import <página> [archivo]', 'utf-8').encode('utf-8'), 
    2336 +                   unicode('Importar una página del wiki de un archivo ó de la entrada estándar', 'utf-8').encode('utf-8')), 
    2337 +                  ('wiki dump <directorio>', 
    2338 +                   unicode('Exportar todas las páginas del wiki hacia archivos, nombrando los archivos de acuerdo al título de cada página', 'utf-8').encode('utf-8')), 
    2339 +                  ('wiki load <directorio>', 
    2340 +                   unicode('Importar todas las páginas del wiki de un directorio', 'utf-8').encode('utf-8')), 
    2341                    ('wiki upgrade', 
    2342 -                   'Upgrade default wiki pages to current version')] 
    2343 +                   unicode('Actualizar las páginas por defecto del wiki a la versión actual', 'utf-8').encode('utf-8'))] 
    2344   
    2345      def complete_wiki(self, text, line, begidx, endidx): 
    2346          argv = self.arg_tokenize(line) 
    2347 @@ -773,7 +773,7 @@ 
    2348      def _do_wiki_list(self): 
    2349          rows = self.db_query("SELECT name, max(version), max(time) " 
    2350                               "FROM wiki GROUP BY name ORDER BY name") 
    2351 -        self.print_listing(['Title', 'Edits', 'Modified'], 
    2352 +        self.print_listing([unicode('Título', 'utf-8').encode('utf-8'), 'Ediciones', 'Modificado'], 
    2353                             [(r[0], int(r[1]), self._format_datetime(r[2])) 
    2354                              for r in rows]) 
    2355   
    2356 @@ -784,7 +784,7 @@ 
    2357      def _do_wiki_import(self, filename, title, cursor=None, 
    2358                          create_only=[]): 
    2359          if not os.path.isfile(filename): 
    2360 -            raise Exception, '%s is not a file' % filename 
    2361 +            raise Exception, '%s no es un archivo' % filename 
    2362   
    2363          f = open(filename,'r') 
    2364          data = to_unicode(f.read(), 'utf-8') 
    2365 @@ -795,10 +795,10 @@ 
    2366                               params=(title,)) 
    2367          old = list(rows) 
    2368          if old and title in create_only: 
    2369 -            print '  %s already exists.' % title 
    2370 +            print '  %s ya existe.' % title 
    2371              return 
    2372          if old and data == old[0][0]: 
    2373 -            print '  %s already up to date.' % title 
    2374 +            print unicode('  %s ya está actualizado.', 'utf-8').encode('utf-8') % title 
    2375              return 
    2376          f.close() 
    2377   
    2378 @@ -816,7 +816,7 @@ 
    2379              print text 
    2380          else: 
    2381              if os.path.isfile(filename): 
    2382 -                raise Exception("File '%s' exists" % filename) 
    2383 +                raise Exception("El archivo '%s' ya existe" % filename) 
    2384              f = open(filename,'w') 
    2385              f.write(text.encode('utf-8')) 
    2386              f.close() 
    2387 @@ -839,7 +839,7 @@ 
    2388                  self._do_wiki_import(filename, page, cursor, create_only) 
    2389   
    2390      ## Ticket 
    2391 -    _help_ticket = [('ticket remove <number>', 'Remove ticket')] 
    2392 +    _help_ticket = [(unicode('ticket remove <número>', 'utf-8').encode('utf-8'), 'Eliminar un ticket')] 
    2393   
    2394      def complete_ticket(self, text, line, begidx, endidx): 
    2395          argv = self.arg_tokenize(line) 
    2396 @@ -857,7 +857,7 @@ 
    2397              try: 
    2398                  number = int(arg[1]) 
    2399              except ValueError: 
    2400 -                print>>sys.stderr, "<number> must be a number" 
    2401 +                print>>sys.stderr, unicode("<número> debe ser un número", 'utf-8').encode('utf-8') 
    2402                  return 
    2403              self._do_ticket_remove(number) 
    2404          else:     
    2405 @@ -866,17 +866,17 @@ 
    2406      def _do_ticket_remove(self, number): 
    2407          ticket = Ticket(self.env_open(), number) 
    2408          ticket.delete() 
    2409 -        print "Ticket %d and all associated data removed." % number 
    2410 +        print "El ticket %d y todos los datos asociados fueron eliminados." % number 
    2411   
    2412   
    2413      ## (Ticket) Type 
    2414 -    _help_ticket_type = [('ticket_type list', 'Show possible ticket types'), 
    2415 -                         ('ticket_type add <value>', 'Add a ticket type'), 
    2416 -                         ('ticket_type change <value> <newvalue>', 
    2417 -                          'Change a ticket type'), 
    2418 -                         ('ticket_type remove <value>', 'Remove a ticket type'), 
    2419 -                         ('ticket_type order <value> up|down', 
    2420 -                          'Move a ticket type up or down in the list')] 
    2421 +    _help_ticket_type = [('ticket_type list', 'Mostrar los posibles tipos de tickets'), 
    2422 +                         ('ticket_type add <value>', unicode('Añadir un nuevo tipo de ticket', 'utf-8').encode('utf-8')), 
    2423 +                         ('ticket_type change <valor> <nuevo_valor>', 
    2424 +                          'Modificar un tipo de ticket'), 
    2425 +                         ('ticket_type remove <valor>', 'Eliminar un tipo de ticket'), 
    2426 +                         ('ticket_type order <valor> up|down', 
    2427 +                          unicode('Mover un tipo de ticket arriba ó abajo en la lista', 'utf-8').encode('utf-8'))] 
    2428   
    2429      def complete_ticket_type (self, text, line, begidx, endidx): 
    2430          if begidx == 16: 
    2431 @@ -889,13 +889,13 @@ 
    2432          self._do_enum('ticket_type', line) 
    2433    
    2434      ## (Ticket) Priority 
    2435 -    _help_priority = [('priority list', 'Show possible ticket priorities'), 
    2436 -                       ('priority add <value>', 'Add a priority value option'), 
    2437 -                       ('priority change <value> <newvalue>', 
    2438 -                        'Change a priority value'), 
    2439 -                       ('priority remove <value>', 'Remove priority value'), 
    2440 -                       ('priority order <value> up|down', 
    2441 -                        'Move a priority value up or down in the list')] 
    2442 +    _help_priority = [('priority list', 'Mostrar las posibles prioridades de un ticket'), 
    2443 +                       ('priority add <valor>', unicode('Añadir una opción a los valores de prioridad', 'utf-8').encode('utf-8')), 
    2444 +                       ('priority change <valor> <nuevo_valor>', 
    2445 +                        'Modificar un valor de prioridad'), 
    2446 +                       ('priority remove <valor>', 'Eliminar un valor de prioridad'), 
    2447 +                       ('priority order <valor> up|down', 
    2448 +                        unicode('Mover un valor de prioridad arriba ó abajo en la lista', 'utf-8').encode('utf-8'))] 
    2449   
    2450      def complete_priority (self, text, line, begidx, endidx): 
    2451          if begidx == 16: 
    2452 @@ -908,13 +908,13 @@ 
    2453          self._do_enum('priority', line) 
    2454   
    2455      ## (Ticket) Severity 
    2456 -    _help_severity = [('severity list', 'Show possible ticket severities'), 
    2457 -                      ('severity add <value>', 'Add a severity value option'), 
    2458 -                      ('severity change <value> <newvalue>', 
    2459 -                       'Change a severity value'), 
    2460 -                      ('severity remove <value>', 'Remove severity value'), 
    2461 -                      ('severity order <value> up|down', 
    2462 -                       'Move a severity value up or down in the list')] 
    2463 +    _help_severity = [('severity list', 'Mostrar las posibles severidades de un ticket'), 
    2464 +                      ('severity add <valor>', unicode('Añadir una opción a los valores de severidad', 'utf-8').encode('utf-8')), 
    2465 +                      ('severity change <valor> <nuevo_valor>', 
    2466 +                       'Modificar un valor de severidad'), 
    2467 +                      ('severity remove <valor>', 'Eliminar un valor de severidad'), 
    2468 +                      ('severity order <valor> up|down', 
    2469 +                       unicode('Mover un valor de severidad arriba ó abajo en la lista', 'utf-8').encode('utf-8'))] 
    2470   
    2471      def complete_severity (self, text, line, begidx, endidx): 
    2472          if begidx == 16: 
    2473 @@ -957,7 +957,7 @@ 
    2474   
    2475      def _do_enum_list(self, type): 
    2476          enum_cls = self._enum_map[type] 
    2477 -        self.print_listing(['Possible Values'], 
    2478 +        self.print_listing(['Valores Posibles'], 
    2479                             [(e.name,) for e in enum_cls.select(self.env_open())]) 
    2480   
    2481      def _do_enum_add(self, type, name): 
    2482 @@ -997,17 +997,17 @@ 
    2483   
    2484      ## Milestone 
    2485   
    2486 -    _help_milestone = [('milestone list', 'Show milestones'), 
    2487 -                       ('milestone add <name> [due]', 'Add milestone'), 
    2488 -                       ('milestone rename <name> <newname>', 
    2489 -                        'Rename milestone'), 
    2490 -                       ('milestone due <name> <due>', 
    2491 -                        'Set milestone due date (Format: "%s" or "now")' 
    2492 +    _help_milestone = [('milestone list', 'Mostrar hitos'), 
    2493 +                       ('milestone add <nombre> [vencimiento]', unicode('Añadir hito', 'utf-8').encode('utf-8')), 
    2494 +                       ('milestone rename <nombre> <nuevo_nombre>', 
    2495 +                        'Renombrar un hito'), 
    2496 +                       ('milestone due <nombre> <vencimiento>', 
    2497 +                        unicode('Fijar la fecha de vencimiento de un hito (Formato: "%s" ó "now")', 'utf-8').encode('utf-8') 
    2498                          % _date_format_hint), 
    2499 -                       ('milestone completed <name> <completed>', 
    2500 -                        'Set milestone completed date (Format: "%s" or "now")' 
    2501 +                       (unicode('milestone completed <nombre> <conclusión>', 'utf-8').encode('utf-8'), 
    2502 +                        unicode('Fijar la fecha de conclusión de un hito (Formato: "%s" ó "now")', 'utf-8').encode('utf-8') 
    2503                          % _date_format_hint), 
    2504 -                       ('milestone remove <name>', 'Remove milestone')] 
    2505 +                       ('milestone remove <nombre>', 'Eliminar hito')] 
    2506   
    2507      def complete_milestone (self, text, line, begidx, endidx): 
    2508          if begidx in (15, 17): 
    2509 @@ -1041,7 +1041,7 @@ 
    2510              data.append((m.name, m.due and self._format_date(m.due), 
    2511                           m.completed and self._format_datetime(m.completed))) 
    2512   
    2513 -        self.print_listing(['Name', 'Due', 'Completed'], data) 
    2514 +        self.print_listing(['Nombre', 'Vencimiento', unicode('Conclusión', 'utf-8').encode('utf-8')], data) 
    2515   
    2516      def _do_milestone_rename(self, name, newname): 
    2517          milestone = Milestone(self.env_open(), name) 
    2518 @@ -1068,14 +1068,14 @@ 
    2519          milestone.update() 
    2520   
    2521      ## Version 
    2522 -    _help_version = [('version list', 'Show versions'), 
    2523 -                       ('version add <name> [time]', 'Add version'), 
    2524 -                       ('version rename <name> <newname>', 
    2525 -                        'Rename version'), 
    2526 -                       ('version time <name> <time>', 
    2527 -                        'Set version date (Format: "%s" or "now")' 
    2528 +    _help_version = [('version list', 'Mostrar versiones'), 
    2529 +                       ('version add <nombre> [fecha]', unicode('Añadir versión', 'utf-8').encode('utf-8')), 
    2530 +                       ('version rename <nombre> <nuevo_nombre>', 
    2531 +                        unicode('Renombrar una versión', 'utf-8').encode('utf-8')), 
    2532 +                       ('version time <nombre> <fecha>', 
    2533 +                        unicode('Fijar la fecha de una versión (Formato: "%s" ó "now")', 'utf-8').encode('utf-8') 
    2534                          % _date_format_hint), 
    2535 -                       ('version remove <name>', 'Remove version')] 
    2536 +                       ('version remove <nombre>', unicode('Eliminar una versión', 'utf-8').encode('utf-8'))] 
    2537   
    2538      def complete_version (self, text, line, begidx, endidx): 
    2539          if begidx in (13, 15): 
    2540 @@ -1105,7 +1105,7 @@ 
    2541          data = [] 
    2542          for v in Version.select(self.env_open()): 
    2543              data.append((v.name, v.time and self._format_date(v.time))) 
    2544 -        self.print_listing(['Name', 'Time'], data) 
    2545 +        self.print_listing(['Nombre', 'Fecha'], data) 
    2546   
    2547      def _do_version_rename(self, name, newname): 
    2548          version = Version(self.env_open(), name) 
    2549 @@ -1126,7 +1126,7 @@ 
    2550          version.time = self._parse_date(t) 
    2551          version.update() 
    2552   
    2553 -    _help_upgrade = [('upgrade', 'Upgrade database to current version')] 
    2554 +    _help_upgrade = [('upgrade', unicode('Actualizar la base de datos a la versión actual', 'utf-8').encode('utf-8'))] 
    2555      def do_upgrade(self, line): 
    2556          arg = self.arg_tokenize(line) 
    2557          do_backup = True 
    2558 @@ -1135,7 +1135,7 @@ 
    2559          self.db_open() 
    2560   
    2561          if not self.__env.needs_upgrade(): 
    2562 -            print "Database is up to date, no upgrade necessary." 
    2563 +            print unicode("La base de datos ya está actualizada, no es necesario actualizarla nuevamente.", 'utf-8').encode('utf-8') 
    2564              return 
    2565   
    2566          try: 
    2567 @@ -1143,14 +1143,14 @@ 
    2568          except EnvironmentError, e: 
    2569              msg = unicode(e) 
    2570              if 'backup' in msg: 
    2571 -                raise TracError("Backup failed '%s'.\nUse `--no-backup' to " 
    2572 -                                "upgrade without doing a backup." % msg) 
    2573 +                raise TracError(unicode("Falló la copia de seguridad '%s'.\nUtilice `--no-backup' para " 
    2574 +                                "actualizar sin realizar una copia de seguridad.", 'utf-8').encode('utf-8') % msg) 
    2575              else: 
    2576                  raise 
    2577 -        print 'Upgrade done.' 
    2578 +        print unicode('Actualización terminada.', 'utf-8').encode('utf-8') 
    2579   
    2580 -    _help_hotcopy = [('hotcopy <backupdir>', 
    2581 -                      'Make a hot backup copy of an environment')] 
    2582 +    _help_hotcopy = [('hotcopy <dir_copia_seguridad>', 
    2583 +                      "Realizar una copia de seguridad 'caliente' de un entorno")] 
    2584      def do_hotcopy(self, line): 
    2585          arg = self.arg_tokenize(line) 
    2586          if arg[0]: 
    2587 @@ -1165,7 +1165,7 @@ 
    2588          cursor.execute("UPDATE system SET name=NULL WHERE name IS NULL") 
    2589   
    2590          try: 
    2591 -            print 'Hotcopying %s to %s ...' % (self.__env.path, dest), 
    2592 +            print "Copiando en 'caliente' %s en %s ..." % (self.__env.path, dest), 
    2593              db_str = self.__env.config.get('trac', 'database') 
    2594              prefix, db_path = db_str.split(':', 1) 
    2595              if prefix == 'sqlite': 
    2596 @@ -1200,7 +1200,7 @@ 
    2597                  arg = content.split(' ', 1)[0] 
    2598                  doc = getattr(TracAdmin, '_help_' + arg) 
    2599              except AttributeError: 
    2600 -                raise TracError('Unknown trac-admin command "%s"' % content) 
    2601 +                raise TracError('Comando trac-admin "%s" desconocido' % content) 
    2602              if arg != content: 
    2603                  for cmd, help in doc: 
    2604                      if cmd.startswith(content): 
    2605 Index: trac/scripts/tests/admin.py 
    2606 =================================================================== 
    2607 --- trac/scripts/tests/admin.py (revision 5935) 
    2608 +++ trac/scripts/tests/admin.py (working copy) 
    2609 @@ -185,7 +185,7 @@ 
    2610              self.assertEqual(0, rv) 
    2611              self.assertEqual(self.expected_results[test_name], output) 
    2612          except SkipTest, e: 
    2613 -            print>>sys.stderr, 'Skipping test %s: %s' % (test_name, e) 
    2614 +            print>>sys.stderr, 'Omitiendo el test %s: %s' % (test_name, e) 
    2615   
    2616      def test_permission_add_one_action_ok(self): 
    2617          """ 
    2618 @@ -200,7 +200,7 @@ 
    2619              self.assertEqual(0, rv) 
    2620              self.assertEqual(self.expected_results[test_name], output) 
    2621          except SkipTest, e: 
    2622 -            print>>sys.stderr, 'Skipping test %s: %s' % (test_name, e) 
    2623 +            print>>sys.stderr, 'Omitiendo el test %s: %s' % (test_name, e) 
    2624   
    2625      def test_permission_add_multiple_actions_ok(self): 
    2626          """ 
    2627 @@ -215,7 +215,7 @@ 
    2628              self.assertEqual(0, rv) 
    2629              self.assertEqual(self.expected_results[test_name], output) 
    2630          except SkipTest, e: 
    2631 -            print>>sys.stderr, 'Skipping test %s: %s' % (test_name, e) 
    2632 +            print>>sys.stderr, 'Omitiendo el test %s: %s' % (test_name, e) 
    2633   
    2634      def test_permission_remove_one_action_ok(self): 
    2635          """ 
    2636 @@ -230,7 +230,7 @@ 
    2637              self.assertEqual(0, rv) 
    2638              self.assertEqual(self.expected_results[test_name], output) 
    2639          except SkipTest, e: 
    2640 -            print>>sys.stderr, 'Skipping test %s: %s' % (test_name, e) 
    2641 +            print>>sys.stderr, 'Omitiendo el test %s: %s' % (test_name, e) 
    2642   
    2643      def test_permission_remove_multiple_actions_ok(self): 
    2644          """ 
    2645 @@ -246,7 +246,7 @@ 
    2646              self.assertEqual(0, rv) 
    2647              self.assertEqual(self.expected_results[test_name], output) 
    2648          except SkipTest, e: 
    2649 -            print>>sys.stderr, 'Skipping test %s: %s' % (test_name, e) 
    2650 +            print>>sys.stderr, 'Omitiendo el test %s: %s' % (test_name, e) 
    2651   
    2652      # Component tests 
    2653   
    26541909Index: trac/perm.py 
    26551910===================================================================