diff --git a/VERSION b/VERSION index 7b051cc2..12453fd8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.7.4-stable+timestamp.2013.11.07.11.15.25 +Version 2.7.4-stable+timestamp.2013.11.11.09.39.55 diff --git a/applications/admin/views/default/errors.html b/applications/admin/views/default/errors.html index 840e35d0..3ba94398 100644 --- a/applications/admin/views/default/errors.html +++ b/applications/admin/views/default/errors.html @@ -15,11 +15,11 @@ pass}}

{{if 'db' in method:}} - source : db + {{=T('source : db')}} {{=T('switch to : filesystem')}} {{=T('lists by ticket')}} {{else:}} - source : filesystem + {{=T('source : filesystem')}} {{=switchbutton}} {{=T('lists by ticket')}} {{pass}} @@ -66,11 +66,11 @@ pass}}

{{if 'db' in method:}} - source : db + {{=T('source : db')}} {{=T('switch to : filesystem')}} {{=T('lists by exception')}} {{else:}} - source : filesystem + {{=T('source : filesystem')}} {{=switchbutton}} {{=T('lists by exception')}} {{pass}} diff --git a/applications/welcome/languages/es.py b/applications/welcome/languages/es.py index 15446ce6..1e757cc9 100644 --- a/applications/welcome/languages/es.py +++ b/applications/welcome/languages/es.py @@ -1,37 +1,41 @@ -# coding: utf8 +# coding: utf-8 { '!langcode!': 'es', '!langname!': 'Español', '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresión opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN', -'%s %%{row} deleted': '%s filas eliminadas', -'%s %%{row} updated': '%s filas actualizadas', -'%s selected': '%s seleccionado(s)', -'%Y-%m-%d': '%Y-%m-%d', -'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S', +'%s %%{row} deleted': '%s %%{fila} %%{eliminada}', +'%s %%{row} updated': '%s %%{fila} %%{actualizada}', +'%s selected': '%s %%{seleccionado}', +'%Y-%m-%d': '%d/%m/%Y', +'%Y-%m-%d %H:%M:%S': '%d/%m/%Y %H:%M:%S', '(something like "it-it")': '(algo como "eso-eso")', +'@markmin\x01An error occured, please [[reload %s]] the page': 'Ha ocurrido un error, por favor [[recargar %s]] la página', 'A new version of web2py is available': 'Hay una nueva versión de web2py disponible', 'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s', -'about': 'acerca de', 'About': 'Acerca de', +'about': 'acerca de', 'About application': 'Acerca de la aplicación', 'Access Control': 'Control de Acceso', 'additional code for your application': 'código adicional para su aplicación', -'admin disabled because no admin password': ' por falta de contraseña', +'admin disabled because no admin password': 'admin deshabilitado por falta de contraseña', 'admin disabled because not supported on google app engine': 'admin deshabilitado, no es soportado en GAE', 'admin disabled because unable to access password file': 'admin deshabilitado, imposible acceder al archivo con la contraseña', 'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro', 'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro', -'Administrative Interface': 'Interfaz Administrativa', 'Administrative interface': 'Interfaz administrativa', +'Administrative Interface': 'Interfaz Administrativa', 'Administrator Password:': 'Contraseña del Administrador:', 'Ajax Recipes': 'Recetas AJAX', +'An error occured, please %s the page': 'Ha ocurrido un error, por favor %s la página', 'and rename it (required):': 'y renómbrela (requerido):', 'and rename it:': ' y renómbrelo:', +'Aplicar cambios': 'Aplicar cambios', 'appadmin': 'appadmin', 'appadmin is disabled because insecure channel': 'admin deshabilitado, el canal no es seguro', 'application "%s" uninstalled': 'aplicación "%s" desinstalada', 'application compiled': 'aplicación compilada', 'application is compiled and cannot be designed': 'la aplicación está compilada y no puede ser modificada', +'Apply changes': 'Aplicar cambios', 'Are you sure you want to delete file "%s"?': '¿Está seguro que desea eliminar el archivo "%s"?', 'Are you sure you want to delete this object?': '¿Está seguro que desea borrar este objeto?', 'Are you sure you want to uninstall application "%s"': '¿Está seguro que desea desinstalar la aplicación "%s"', @@ -42,22 +46,25 @@ 'Authentication': 'Autenticación', 'Available Databases and Tables': 'Bases de datos y tablas disponibles', 'Buy this book': 'Compra este libro', -'cache': 'cache', -'Cache': 'Cache', -'Cache Keys': 'Llaves de la Cache', -'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados', +'Cache': 'Caché', +'cache': 'caché', +'Cache Keys': 'Llaves de la Caché', +'cache, errors and sessions cleaned': 'caché, errores y sesiones eliminados', +'Cambie la contraseña': 'Cambie la contraseña', 'Cannot be empty': 'No puede estar vacío', 'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicación. Depure, corrija errores y vuelva a intentarlo.', 'cannot create file': 'no es posible crear archivo', 'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"', -'Change Password': 'Cambie la contraseña', +'Change Password': 'Cambie la Contraseña', +'Change password': 'Cambie la contraseña', 'change password': 'cambie la contraseña', 'check all': 'marcar todos', 'Check to delete': 'Marque para eliminar', 'clean': 'limpiar', -'Clear CACHE?': '¿Limpiar CACHE?', +'Clear CACHE?': '¿Limpiar CACHÉ?', 'Clear DISK': 'Limpiar DISCO', 'Clear RAM': 'Limpiar RAM', +'Click on the link %(link)s to reset your password': 'Pulse en el enlace %(link)s para reiniciar su contraseña', 'click to check for upgrades': 'haga clic para buscar actualizaciones', 'Client IP': 'IP del Cliente', 'Community': 'Comunidad', @@ -68,57 +75,64 @@ 'Controllers': 'Controladores', 'controllers': 'controladores', 'Copyright': 'Copyright', +'Correo electrónico inválido': 'Correo electrónico inválido', 'create file with filename:': 'cree archivo con nombre:', 'Create new application': 'Cree una nueva aplicación', 'create new application:': 'nombre de la nueva aplicación:', +'Created By': 'Creado Por', +'Created On': 'Creado En', 'crontab': 'crontab', 'Current request': 'Solicitud en curso', 'Current response': 'Respuesta en curso', 'Current session': 'Sesión en curso', 'currently saved or': 'actualmente guardado o', -'customize me!': 'Adaptame!', +'customize me!': '¡Adáptame!', 'data uploaded': 'datos subidos', -'Database': 'base de datos', +'Database': 'Base de datos', 'Database %s select': 'selección en base de datos %s', 'database administration': 'administración base de datos', 'Date and Time': 'Fecha y Hora', -'db': 'db', -'DB Model': 'Modelo "DB"', +'db': 'bdd', +'DB Model': 'Modelo BDD', 'defines tables': 'define tablas', 'Delete': 'Eliminar', 'delete': 'eliminar', 'delete all checked': 'eliminar marcados', 'Delete:': 'Eliminar:', -'Demo': 'Demo', +'Demo': 'Demostración', 'Deploy on Google App Engine': 'Despliegue en Google App Engine', 'Deployment Recipes': 'Recetas de despliegue', 'Description': 'Descripción', +'design': 'diseño', 'DESIGN': 'DISEÑO', -'design': 'modificar', 'Design for': 'Diseño por', -'DISK': 'DISK', -'Disk Cache Keys': 'Llaves de Cache en Disco', +'DISK': 'DISCO', +'Disk Cache Keys': 'Llaves de Caché en Disco', 'Disk Cleared': 'Disco limpiado', 'Documentation': 'Documentación', "Don't know what to do?": '¿No sabe que hacer?', -'done!': '¡listo!', -'Download': 'Download', +'done!': '¡hecho!', +'Download': 'Descargas', 'E-mail': 'Correo electrónico', -'EDIT': 'EDITAR', 'edit': 'editar', +'EDIT': 'EDITAR', 'Edit': 'Editar', 'Edit application': 'Editar aplicación', 'edit controller': 'editar controlador', 'Edit current record': 'Edite el registro actual', -'edit profile': 'editar perfil', 'Edit Profile': 'Editar Perfil', +'edit profile': 'editar perfil', 'Edit This App': 'Edite esta App', 'Editing file': 'Editando archivo', 'Editing file "%s"': 'Editando archivo "%s"', 'Email and SMS': 'Correo electrónico y SMS', +'Email sent': 'Correo electrónico enviado', +'enter a number between %(min)g and %(max)g': 'introduzca un número entre %(min)g y %(max)g', +'enter an integer between %(min)g and %(max)g': 'introduzca un entero entre %(min)g y %(max)g', 'Error logs for "%(app)s"': 'Bitácora de errores en "%(app)s"', -'Errors': 'Errores', 'errors': 'errores', +'Errors': 'Errores', +'Errors in form, please check it out.': 'Hay errores en el formulario, por favor comprúebelo.', 'export as csv file': 'exportar como archivo CSV', 'exposes': 'expone', 'extends': 'extiende', @@ -134,32 +148,41 @@ 'file saved on %(time)s': 'archivo guardado %(time)s', 'file saved on %s': 'archivo guardado %s', 'First name': 'Nombre', +'Forgot username?': '¿Olvidó el nombre de usuario?', 'Forms and Validators': 'Formularios y validadores', 'Free Applications': 'Aplicaciones Libres', 'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].', +'Group %(group_id)s created': 'Grupo %(group_id)s creado', 'Group ID': 'ID de Grupo', +'Group uniquely assigned to user %(id)s': 'Grupo asignado únicamente al usuario %(id)s', 'Groups': 'Grupos', 'Hello World': 'Hola Mundo', 'help': 'ayuda', -'Home': 'Home', +'Home': 'Inicio', 'How did you get here?': '¿Cómo llegaste aquí?', 'htmledit': 'htmledit', +'Impersonate': 'Suplantar', 'import': 'importar', 'Import/Export': 'Importar/Exportar', 'includes': 'incluye', 'Index': 'Índice', +'Inicio de sesión': 'Inicio de sesión', 'insert new': 'inserte nuevo', 'insert new %s': 'inserte nuevo %s', 'Installed applications': 'Aplicaciones instaladas', +'Insufficient privileges': 'Privilegios insuficientes', 'internal error': 'error interno', 'Internal State': 'Estado Interno', 'Introduction': 'Introducción', 'Invalid action': 'Acción inválida', 'Invalid email': 'Correo electrónico inválido', +'Invalid login': 'Inicio de sesión inválido', 'invalid password': 'contraseña inválida', 'Invalid Query': 'Consulta inválida', 'invalid request': 'solicitud inválida', +'Invalid reset password': 'Reinicio de contraseña inválido', 'invalid ticket': 'tiquete inválido', +'Is Active': 'Está Activo', 'Key': 'Llave', 'language file "%(filename)s" created/updated': 'archivo de lenguaje "%(filename)s" creado/actualizado', 'Language files (static strings) updated': 'Archivos de lenguaje (cadenas estáticas) actualizados', @@ -174,63 +197,90 @@ 'License for': 'Licencia para', 'Live Chat': 'Chat en vivo', 'loading...': 'cargando...', -'login': 'inicio de sesión', +'Logged in': 'Sesión iniciada', +'Logged out': 'Sesión finalizada', 'Login': 'Inicio de sesión', +'login': 'inicio de sesión', +'Login disabled by administrator': 'Inicio de sesión deshabilitado por el administrador', 'Login to the Administrative Interface': 'Inicio de sesión para la Interfaz Administrativa', 'logout': 'fin de sesión', 'Logout': 'Fin de sesión', +'Los campos de contraseña no coinciden': 'Los campos de contraseña no coinciden', 'Lost Password': 'Contraseña perdida', -'lost password?': '¿Olvido la contraseña?', +'Lost password?': '¿Olvidó la contraseña?', +'lost password?': '¿olvidó la contraseña?', 'Main Menu': 'Menú principal', -'Manage Cache': 'Manejar la Cache', +'Manage Cache': 'Gestionar la Caché', 'Menu Model': 'Modelo "menu"', 'merge': 'combinar', -'models': 'modelos', 'Models': 'Modelos', +'models': 'modelos', +'Modified By': 'Modificado Por', +'Modified On': 'Modificado En', 'Modules': 'Módulos', 'modules': 'módulos', +'must be YYYY-MM-DD HH:MM:SS!': '¡debe ser DD/MM/YYYY HH:MM:SS!', +'must be YYYY-MM-DD!': '¡debe ser DD/MM/YYYY!', 'My Sites': 'Mis Sitios', 'Name': 'Nombre', 'new application "%s" created': 'nueva aplicación "%s" creada', +'New password': 'Contraseña nueva', 'New Record': 'Registro nuevo', 'new record inserted': 'nuevo registro insertado', 'next 100 rows': '100 filas siguientes', 'NO': 'NO', 'No databases in this application': 'No hay bases de datos en esta aplicación', +'Not authorized': 'No autorizado', +'Object or table name': 'Nombre del objeto o tabla', +'Old password': 'Contraseña vieja', 'Online examples': 'Ejemplos en línea', 'or import from csv file': 'o importar desde archivo CSV', 'or provide application url:': 'o provea URL de la aplicación:', 'Origin': 'Origen', 'Original/Translation': 'Original/Traducción', 'Other Plugins': 'Otros Plugins', -'Other Recipes': 'Otas Recetas', +'Other Recipes': 'Otras Recetas', 'Overview': 'Resumen', 'pack all': 'empaquetar todo', 'pack compiled': 'empaquete compiladas', 'Password': 'Contraseña', +'Password changed': 'Contraseña cambiada', +"Password fields don't match": 'Los campos de contraseña no coinciden', +'Password reset': 'Reinicio de contraseña', 'Peeking at file': 'Visualizando archivo', +'Phone': 'Teléfono', +'please input your password again': 'por favor introduzca su contraseña otra vez', 'Plugins': 'Plugins', 'Powered by': 'Este sitio usa', -'Preface': 'Preface', +'Preface': 'Prefacio', 'previous 100 rows': '100 filas anteriores', +'Profile': 'Perfil', +'Profile updated': 'Perfil actualizado', 'Python': 'Python', 'Query:': 'Consulta:', 'Quick Examples': 'Ejemplos Rápidos', 'RAM': 'RAM', -'RAM Cache Keys': 'Llaves de la RAM Cache', +'RAM Cache Keys': 'Llaves de la Caché en RAM', 'Ram Cleared': 'Ram Limpiada', 'Recipes': 'Recetas', -'Record': 'registro', +'Record': 'Registro', 'record does not exist': 'el registro no existe', 'Record ID': 'ID de Registro', -'Record id': 'id de registro', -'Register': 'Regístrese', +'Record id': 'Id de registro', 'register': 'regístrese', -'Registration key': 'Llave de Registro', +'Register': 'Regístrese', +'Registration identifier': 'Identificador de Registro', +'Registration key': 'Llave de registro', +'Registration successful': 'Registro con éxito', +'Regístrese': 'Regístrese', +'reload': 'recargar', +'Remember me (for 30 days)': 'Recuérdame (durante 30 días)', 'remove compiled': 'eliminar compiladas', +'Request reset password': 'Solicitar reinicio de contraseña', 'Reset Password key': 'Restaurar Llave de la Contraseña', 'Resolve Conflict file': 'archivo Resolución de Conflicto', 'restore': 'restaurar', +'Retrieve username': 'Recuperar nombre de usuario', 'revert': 'revertir', 'Role': 'Rol', 'Rows in Table': 'Filas en la tabla', @@ -242,13 +292,14 @@ 'session expired': 'sesión expirada', 'shell': 'terminal', 'site': 'sitio', -'Size of cache:': 'Tamaño del Cache:', +'Size of cache:': 'Tamaño de la Caché:', 'some files could not be removed': 'algunos archivos no pudieron ser removidos', 'state': 'estado', 'static': 'estáticos', 'Static files': 'Archivos estáticos', 'Statistics': 'Estadísticas', 'Stylesheet': 'Hoja de estilo', +'Submit': 'Enviar', 'submit': 'enviar', 'Support': 'Soporte', 'Sure you want to delete this object?': '¿Está seguro que desea eliminar este objeto?', @@ -271,10 +322,11 @@ 'There are no views': 'No hay vistas', 'these files are served without processing, your images go here': 'estos archivos son servidos sin procesar, sus imágenes van aquí', 'This App': 'Esta Aplicación', +'This email already has an account': 'Este correo electrónico ya tiene una cuenta', 'This is a copy of the scaffolding application': 'Esta es una copia de la aplicación de andamiaje', 'This is the %(filename)s template': 'Esta es la plantilla %(filename)s', 'Ticket': 'Tiquete', -'Time in Cache (h:m:s)': 'Tiempo en Cache (h:m:s)', +'Time in Cache (h:m:s)': 'Tiempo en Caché (h:m:s)', 'Timestamp': 'Marca de tiempo', 'to previous version.': 'a la versión previa.', 'translation strings for the application': 'cadenas de carácteres de traducción para la aplicación', @@ -297,22 +349,38 @@ 'Upload existing application': 'Suba esta aplicación', 'upload file:': 'suba archivo:', 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, y ~(...) para NOT, para crear consultas más complejas.', +'User %(id)s is impersonating %(other_id)s': 'El usuario %(id)s está suplantando %(other_id)s', +'User %(id)s Logged-in': 'El usuario %(id)s inició la sesión', +'User %(id)s Logged-out': 'El usuario %(id)s finalizó la sesión', +'User %(id)s Password changed': 'Contraseña del usuario %(id)s cambiada', +'User %(id)s Password reset': 'Contraseña del usuario %(id)s reiniciada', +'User %(id)s Profile updated': 'Actualizado el perfil del usuario %(id)s', +'User %(id)s Registered': 'Usuario %(id)s Registrado', +'User %(id)s Username retrieved': 'Se ha recuperado el nombre de usuario del usuario %(id)s', +'User Id': 'Id de Usuario', 'User ID': 'ID de Usuario', +'Username': 'Nombre de usuario', +'Username retrieve': 'Recuperar nombre de usuario', +'value already in database or empty': 'el valor ya existe en la base de datos o está vacío', +'value not in database': 'el valor no está en la base de datos', +'Verify Password': 'Verificar Contraseña', 'versioning': 'versiones', -'Videos': 'Videos', +'Videos': 'Vídeos', 'View': 'Vista', 'view': 'vista', -'views': 'vistas', 'Views': 'Vistas', +'views': 'vistas', 'web2py is up to date': 'web2py está actualizado', 'web2py Recent Tweets': 'Tweets Recientes de web2py', 'Welcome': 'Bienvenido', 'Welcome %s': 'Bienvenido %s', -'Welcome to web2py': '¡Bienvenido a web2py!', -'Welcome to web2py!': '¡Bienvenido to web2py!', +'Welcome to web2py': 'Bienvenido a web2py', +'Welcome to web2py!': '¡Bienvenido a web2py!', 'Which called the function %s located in the file %s': 'La cual llamó la función %s localizada en el archivo %s', +'Working...': 'Trabajando...', 'YES': 'SÍ', 'You are successfully running web2py': 'Usted está ejecutando web2py exitosamente', 'You can modify this application and adapt it to your needs': 'Usted puede modificar esta aplicación y adaptarla a sus necesidades', 'You visited the url %s': 'Usted visitó la url %s', +'Your username is: %(username)s': 'Su nombre de usuario es: %(username)s', } diff --git a/gluon/languages.py b/gluon/languages.py index ab2843e0..16c30f62 100644 --- a/gluon/languages.py +++ b/gluon/languages.py @@ -296,7 +296,7 @@ def write_plural_dict(filename, contents): return try: fp = LockedFile(filename, 'w') - fp.write('#!/usr/bin/env python\n{\n# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],\n') + fp.write('# coding: utf-8\n{\n# "singular form (0)": ["first plural form (1)", "second plural form (2)", ...],\n') # coding: utf8\n{\n') for key in sorted(contents, lambda x, y: cmp(unicode(x, 'utf-8').lower(), unicode(y, 'utf-8').lower())): forms = '[' + ','.join([repr(Utf8(form)) @@ -320,7 +320,7 @@ def write_dict(filename, contents): if not settings.global_settings.web2py_runtime_gae: logging.warning('Unable to write to file %s' % filename) return - fp.write('# coding: utf8\n{\n') + fp.write('# coding: utf-8\n{\n') for key in sorted(contents, lambda x, y: cmp(unicode(x, 'utf-8').lower(), unicode(y, 'utf-8').lower())): fp.write('%s: %s,\n' % (repr(Utf8(key)), repr(Utf8(contents[key])))) fp.write('}\n')