Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/languages
diff options
context:
space:
mode:
Diffstat (limited to 'languages')
-rw-r--r--languages/es-es.py248
-rw-r--r--languages/fr-ca.py106
-rw-r--r--languages/fr-fr.py95
-rw-r--r--languages/hi-hi.py82
-rw-r--r--languages/hu-hu.py93
-rw-r--r--languages/hu.py93
-rw-r--r--languages/it-it.py75
-rw-r--r--languages/it.py107
-rw-r--r--languages/pl-pl.py81
-rw-r--r--languages/pl.py104
-rw-r--r--languages/pt-br.py78
-rw-r--r--languages/pt-pt.py76
-rw-r--r--languages/pt.py76
-rw-r--r--languages/ru-ru.py87
14 files changed, 1401 insertions, 0 deletions
diff --git a/languages/es-es.py b/languages/es-es.py
new file mode 100644
index 0000000..62ea53b
--- /dev/null
+++ b/languages/es-es.py
@@ -0,0 +1,248 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresi\xc3\xb3n opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s filas eliminadas',
+'%s rows updated': '%s filas actualizadas',
+'(something like "it-it")': '(algo como "it-it")',
+'A new version of web2py is available': 'Hay una nueva versi\xc3\xb3n de web2py disponible',
+'A new version of web2py is available: %s': 'Hay una nueva versi\xc3\xb3n de web2py disponible: %s',
+'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesi\xc3\xb3n requiere una conexi\xc3\xb3n segura (HTTPS) o localhost.',
+'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENCION: NO EJECUTE VARIAS PRUEBAS SIMULTANEAMENTE, NO SON THREAD SAFE.',
+'ATTENTION: you cannot edit the running application!': 'ATENCION: no puede modificar la aplicaci\xc3\xb3n que se ejecuta!',
+'About': 'Acerca de',
+'About application': 'Acerca de la aplicaci\xc3\xb3n',
+'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',
+'Administrator Password:': 'Contrase\xc3\xb1a del Administrador:',
+'Are you sure you want to delete file "%s"?': '\xc2\xbfEst\xc3\xa1 seguro que desea eliminar el archivo "%s"?',
+'Are you sure you want to uninstall application "%s"': '\xc2\xbfEst\xc3\xa1 seguro que desea desinstalar la aplicaci\xc3\xb3n "%s"',
+'Are you sure you want to uninstall application "%s"?': '\xc2\xbfEst\xc3\xa1 seguro que desea desinstalar la aplicaci\xc3\xb3n "%s"?',
+'Authentication': 'Autenticaci\xc3\xb3n',
+'Available databases and tables': 'Bases de datos y tablas disponibles',
+'Cannot be empty': 'No puede estar vac\xc3\xado',
+'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicaci\xc3\xb3n. Depure, corrija errores y vuelva a intentarlo.',
+'Change Password': 'Cambie Contrase\xc3\xb1a',
+'Check to delete': 'Marque para eliminar',
+'Client IP': 'IP del Cliente',
+'Controller': 'Controlador',
+'Controllers': 'Controladores',
+'Copyright': 'Derechos de autor',
+'Create new application': 'Cree una nueva aplicaci\xc3\xb3n',
+'Current request': 'Solicitud en curso',
+'Current response': 'Respuesta en curso',
+'Current session': 'Sesi\xc3\xb3n en curso',
+'DB Model': 'Modelo "db"',
+'DESIGN': 'DISE\xc3\x91O',
+'Database': 'Base de datos',
+'Date and Time': 'Fecha y Hora',
+'Delete': 'Elimine',
+'Delete:': 'Elimine:',
+'Deploy on Google App Engine': 'Instale en Google App Engine',
+'Description': 'Descripci\xc3\xb3n',
+'Design for': 'Dise\xc3\xb1o para',
+'E-mail': 'Correo electr\xc3\xb3nico',
+'EDIT': 'EDITAR',
+'Edit': 'Editar',
+'Edit Profile': 'Editar Perfil',
+'Edit This App': 'Edite esta App',
+'Edit application': 'Editar aplicaci\xc3\xb3n',
+'Edit current record': 'Edite el registro actual',
+'Editing file': 'Editando archivo',
+'Editing file "%s"': 'Editando archivo "%s"',
+'Error logs for "%(app)s"': 'Bit\xc3\xa1cora de errores en "%(app)s"',
+'First name': 'Nombre',
+'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].',
+'Group ID': 'ID de Grupo',
+'Hello World': 'Hola Mundo',
+'Import/Export': 'Importar/Exportar',
+'Index': 'Indice',
+'Installed applications': 'Aplicaciones instaladas',
+'Internal State': 'Estado Interno',
+'Invalid Query': 'Consulta inv\xc3\xa1lida',
+'Invalid action': 'Acci\xc3\xb3n inv\xc3\xa1lida',
+'Invalid email': 'Correo inv\xc3\xa1lido',
+'Language files (static strings) updated': 'Archivos de lenguaje (cadenas est\xc3\xa1ticas) actualizados',
+'Languages': 'Lenguajes',
+'Last name': 'Apellido',
+'Last saved on:': 'Guardado en:',
+'Layout': 'Layout',
+'License for': 'Licencia para',
+'Login': 'Inicio de sesi\xc3\xb3n',
+'Login to the Administrative Interface': 'Inicio de sesi\xc3\xb3n para la Interfaz Administrativa',
+'Logout': 'Fin de sesi\xc3\xb3n',
+'Lost Password': 'Contrase\xc3\xb1a perdida',
+'Main Menu': 'Men\xc3\xba principal',
+'Menu Model': 'Modelo "menu"',
+'Models': 'Modelos',
+'Modules': 'M\xc3\xb3dulos',
+'NO': 'NO',
+'Name': 'Nombre',
+'New Record': 'Registro nuevo',
+'No databases in this application': 'No hay bases de datos en esta aplicaci\xc3\xb3n',
+'Origin': 'Origen',
+'Original/Translation': 'Original/Traducci\xc3\xb3n',
+'Password': 'Contrase\xc3\xb1a',
+'Peeking at file': 'Visualizando archivo',
+'Powered by': 'Este sitio usa',
+'Query:': 'Consulta:',
+'Record ID': 'ID de Registro',
+'Register': 'Registrese',
+'Registration key': 'Contrase\xc3\xb1a de Registro',
+'Resolve Conflict file': 'archivo Resoluci\xc3\xb3n de Conflicto',
+'Role': 'Rol',
+'Rows in table': 'Filas en la tabla',
+'Rows selected': 'Filas seleccionadas',
+'Saved file hash:': 'Hash del archivo guardado:',
+'Static files': 'Archivos est\xc3\xa1ticos',
+'Stylesheet': 'Hoja de estilo',
+'Sure you want to delete this object?': '\xc2\xbfEst\xc3\xa1 seguro que desea eliminar este objeto?',
+'Table name': 'Nombre de la tabla',
+'Testing application': 'Probando aplicaci\xc3\xb3n',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "consulta" es una condici\xc3\xb3n como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.',
+'There are no controllers': 'No hay controladores',
+'There are no models': 'No hay modelos',
+'There are no modules': 'No hay m\xc3\xb3dulos',
+'There are no static files': 'No hay archivos est\xc3\xa1ticos',
+'There are no translators, only default language is supported': 'No hay traductores, s\xc3\xb3lo el lenguaje por defecto es soportado',
+'There are no views': 'No hay vistas',
+'This is the %(filename)s template': 'Esta es la plantilla %(filename)s',
+'Ticket': 'Tiquete',
+'Timestamp': 'Timestamp',
+'Unable to check for upgrades': 'No es posible verificar la existencia de actualizaciones',
+'Unable to download': 'No es posible la descarga',
+'Unable to download app': 'No es posible descarga la aplicaci\xc3\xb3n',
+'Update:': 'Actualice:',
+'Upload existing application': 'Suba esta aplicaci\xc3\xb3n',
+'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\xc3\xa1s complejas.',
+'User ID': 'ID de Usuario',
+'View': 'Vista',
+'Views': 'Vistas',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Bienvenido a web2py',
+'YES': 'SI',
+'about': 'acerca de',
+'additional code for your application': 'c\xc3\xb3digo adicional para su aplicaci\xc3\xb3n',
+'admin disabled because no admin password': ' por falta de contrase\xc3\xb1a',
+'admin disabled because not supported on google apps 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\xc3\xb1a',
+'and rename it (required):': 'y renombrela (requerido):',
+'and rename it:': ' y renombrelo:',
+'appadmin': 'appadmin',
+'appadmin is disabled because insecure channel': 'admin deshabilitado, el canal no es seguro',
+'application "%s" uninstalled': 'aplicaci\xc3\xb3n "%s" desinstalada',
+'application compiled': 'aplicaci\xc3\xb3n compilada',
+'application is compiled and cannot be designed': 'la aplicaci\xc3\xb3n est\xc3\xa1 compilada y no puede ser modificada',
+'cache': 'cache',
+'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados',
+'cannot create file': 'no es posible crear archivo',
+'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"',
+'change password': 'change password',
+'check all': 'marcar todos',
+'clean': 'limpiar',
+'click here for online examples': 'haga clic aqu\xc3\xad para ver ejemplos en l\xc3\xadnea',
+'click here for the administrative interface': 'haga clic aqu\xc3\xad para usar la interfaz administrativa',
+'click to check for upgrades': 'haga clic para buscar actualizaciones',
+'compile': 'compilar',
+'compiled application removed': 'aplicaci\xc3\xb3n compilada removida',
+'controllers': 'controladores',
+'create file with filename:': 'cree archivo con nombre:',
+'create new application:': 'nombre de la nueva aplicaci\xc3\xb3n:',
+'crontab': 'crontab',
+'currently saved or': 'actualmente guardado o',
+'customize me!': 'Adaptame!',
+'data uploaded': 'datos subidos',
+'database': 'base de datos',
+'database %s select': 'selecci\xc3\xb3n en base de datos %s',
+'database administration': 'administraci\xc3\xb3n base de datos',
+'db': 'db',
+'defines tables': 'define tablas',
+'delete': 'eliminar',
+'delete all checked': 'eliminar marcados',
+'design': 'modificar',
+'done!': 'listo!',
+'edit': 'editar',
+'edit controller': 'editar controlador',
+'edit profile': 'edit profile',
+'errors': 'errores',
+'export as csv file': 'exportar como archivo CSV',
+'exposes': 'expone',
+'extends': 'extiende',
+'failed to reload module': 'recarga del m\xc3\xb3dulo ha fallado',
+'file "%(filename)s" created': 'archivo "%(filename)s" creado',
+'file "%(filename)s" deleted': 'archivo "%(filename)s" eliminado',
+'file "%(filename)s" uploaded': 'archivo "%(filename)s" subido',
+'file "%(filename)s" was not deleted': 'archivo "%(filename)s" no fu\xc3\xa9 eliminado',
+'file "%s" of %s restored': 'archivo "%s" de %s restaurado',
+'file changed on disk': 'archivo modificado en el disco',
+'file does not exist': 'archivo no existe',
+'file saved on %(time)s': 'archivo guardado %(time)s',
+'file saved on %s': 'archivo guardado %s',
+'help': 'ayuda',
+'htmledit': 'htmledit',
+'includes': 'incluye',
+'insert new': 'inserte nuevo',
+'insert new %s': 'inserte nuevo %s',
+'internal error': 'error interno',
+'invalid password': 'contrase\xc3\xb1a inv\xc3\xa1lida',
+'invalid request': 'solicitud inv\xc3\xa1lida',
+'invalid ticket': 'tiquete inv\xc3\xa1lido',
+'language file "%(filename)s" created/updated': 'archivo de lenguaje "%(filename)s" creado/actualizado',
+'languages': 'lenguajes',
+'languages updated': 'lenguajes actualizados',
+'loading...': 'cargando...',
+'login': 'inicio de sesi\xc3\xb3n',
+'logout': 'fin de sesi\xc3\xb3n',
+'merge': 'combinar',
+'models': 'modelos',
+'modules': 'm\xc3\xb3dulos',
+'new application "%s" created': 'nueva aplicaci\xc3\xb3n "%s" creada',
+'new record inserted': 'nuevo registro insertado',
+'next 100 rows': '100 filas siguientes',
+'or import from csv file': 'o importar desde archivo CSV',
+'or provide application url:': 'o provea URL de la aplicaci\xc3\xb3n:',
+'pack all': 'empaquetar todo',
+'pack compiled': 'empaquete compiladas',
+'previous 100 rows': '100 filas anteriores',
+'record': 'record',
+'record does not exist': 'el registro no existe',
+'record id': 'id de registro',
+'register': 'register',
+'remove compiled': 'eliminar compiladas',
+'restore': 'restaurar',
+'revert': 'revertir',
+'save': 'guardar',
+'selected': 'seleccionado(s)',
+'session expired': 'sesi\xc3\xb3n expirada',
+'shell': 'shell',
+'site': 'sitio',
+'some files could not be removed': 'algunos archivos no pudieron ser removidos',
+'state': 'estado',
+'static': 'est\xc3\xa1ticos',
+'table': 'tabla',
+'test': 'probar',
+'the application logic, each URL path is mapped in one exposed function in the controller': 'la l\xc3\xb3gica de la aplicaci\xc3\xb3n, cada ruta URL se mapea en una funci\xc3\xb3n expuesta en el controlador',
+'the data representation, define database tables and sets': 'la representaci\xc3\xb3n de datos, define tablas y conjuntos de base de datos',
+'the presentations layer, views are also known as templates': 'la capa de presentaci\xc3\xb3n, las vistas tambi\xc3\xa9n son llamadas plantillas',
+'these files are served without processing, your images go here': 'estos archivos son servidos sin procesar, sus im\xc3\xa1genes van aqu\xc3\xad',
+'to previous version.': 'a la versi\xc3\xb3n previa.',
+'translation strings for the application': 'cadenas de caracteres de traducci\xc3\xb3n para la aplicaci\xc3\xb3n',
+'try': 'intente',
+'try something like': 'intente algo como',
+'unable to create application "%s"': 'no es posible crear la aplicaci\xc3\xb3n "%s"',
+'unable to delete file "%(filename)s"': 'no es posible eliminar el archivo "%(filename)s"',
+'unable to parse csv file': 'no es posible analizar el archivo CSV',
+'unable to uninstall "%s"': 'no es posible instalar "%s"',
+'uncheck all': 'desmarcar todos',
+'uninstall': 'desinstalar',
+'update': 'actualizar',
+'update all languages': 'actualizar todos los lenguajes',
+'upload application:': 'subir aplicaci\xc3\xb3n:',
+'upload file:': 'suba archivo:',
+'versioning': 'versiones',
+'view': 'vista',
+'views': 'vistas',
+'web2py Recent Tweets': 'Tweets Recientes de web2py',
+'web2py is up to date': 'web2py est\xc3\xa1 actualizado',
+}
diff --git a/languages/fr-ca.py b/languages/fr-ca.py
new file mode 100644
index 0000000..459d438
--- /dev/null
+++ b/languages/fr-ca.py
@@ -0,0 +1,106 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s rang\xc3\xa9es effac\xc3\xa9es',
+'%s rows updated': '%s rang\xc3\xa9es mises \xc3\xa0 jour',
+'Authentication': 'Authentication',
+'Available databases and tables': 'Bases de donn\xc3\xa9es et des tableaux disponibles',
+'Cannot be empty': 'Ne peut pas \xc3\xaatre vide',
+'Check to delete': 'Cliquez pour supprimer',
+'Check to delete:': 'Cliquez pour supprimer:',
+'Client IP': 'IP client',
+'Controller': 'Contr\xc3\xb4leur',
+'Copyright': 'Copyright',
+'Current request': 'Demande actuelle',
+'Current response': 'R\xc3\xa9ponse actuelle',
+'Current session': 'Session en cours',
+'DB Model': 'Mod\xc3\xa8le DB',
+'Database': 'Base de donn\xc3\xa9es',
+'Delete:': 'Supprimer:',
+'Description': 'Description',
+'E-mail': 'Courriel',
+'Edit': '\xc3\x89diter',
+'Edit This App': 'Modifier cette application',
+'Edit current record': "Modifier l'enregistrement courant",
+'First name': 'Pr\xc3\xa9nom',
+'Function disabled': 'Function disabled',
+'Group ID': 'Groupe ID',
+'Hello World': 'Bonjour tout le monde',
+'Import/Export': 'Importer/Exporter',
+'Index': 'Index',
+'Internal State': '\xc3\x89tat interne',
+'Invalid Query': 'Requ\xc3\xaate Invalide',
+'Invalid email': 'Courriel invalide',
+'Last name': 'Nom',
+'Layout': 'Mise en page',
+'Login': 'Connectez-vous',
+'Lost Password': 'Mot de passe perdu',
+'Main Menu': 'Menu principal',
+'Menu Model': 'Menu mod\xc3\xa8le',
+'Name': 'Nom',
+'New Record': 'Nouvel enregistrement',
+'No databases in this application': "Cette application n'a pas de bases de donn\xc3\xa9es",
+'Origin': 'Origine',
+'Password': 'Mot de passe',
+"Password fields don't match": 'Les mots de passe ne correspondent pas',
+'Powered by': 'Powered par',
+'Query:': 'Requ\xc3\xaate:',
+'Record ID': 'Record ID',
+'Register': "S'inscrire",
+'Registration key': "Cl\xc3\xa9 d'enregistrement",
+'Remember me (for 30 days)': 'Se souvenir de moi (pendant 30 jours)',
+'Request reset password': 'Demande de r\xc3\xa9initialiser le mot cl\xc3\xa9',
+'Reset Password key': 'R\xc3\xa9initialiser le mot cl\xc3\xa9',
+'Role': 'R\xc3\xb4le',
+'Rows in table': 'Lignes du tableau',
+'Rows selected': 'Lignes s\xc3\xa9lectionn\xc3\xa9es',
+'Stylesheet': 'Feuille de style',
+'Submit': 'Soumettre',
+'Sure you want to delete this object?': 'Souhaitez-vous vraiment effacer cet objet ?',
+'Table name': 'Nom du tableau',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Mise \xc3\xa0 jour:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User %(id)s Logged-in': 'Utilisateur %(id)s connect\xc3\xa9',
+'User %(id)s Registered': 'Utilisateur %(id)s enregistr\xc3\xa9',
+'User ID': 'ID utilisateur',
+'Verify Password': 'V\xc3\xa9rifiez le mot de passe',
+'View': 'Pr\xc3\xa9sentation',
+'Welcome %s': 'Bienvenue %s',
+'Welcome to web2py': 'Bienvenue sur web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'changer le mot de passe',
+'click here for online examples': 'cliquez ici pour voir des exemples enligne',
+'click here for the administrative interface': "cliquez ici pour aller\xc3\xa0 l'interface d'administration",
+'customize me!': 'me personnaliser!',
+'data uploaded': 'donn\xc3\xa9es t\xc3\xa9l\xc3\xa9charg\xc3\xa9es',
+'database': 'base de donn\xc3\xa9es',
+'database %s select': 'base de donn\xc3\xa9es %s s\xc3\xa9lectionner',
+'db': 'db',
+'design': 'design',
+'done!': 'fait!',
+'edit profile': 'modifier le profil',
+'export as csv file': 'exporter sous forme de fichier csv',
+'insert new': 'ins\xc3\xa9rer un nouveau',
+'insert new %s': 'ins\xc3\xa9rer un nouveau %s',
+'invalid request': 'demande non valide',
+'login': 'connectez-vous',
+'logout': 'd\xc3\xa9connectez-vous',
+'lost password': 'mot de passe perdu',
+'new record inserted': 'nouvel enregistrement ins\xc3\xa9r\xc3\xa9',
+'next 100 rows': '100 prochaines lignes',
+'or import from csv file': "ou importer d'un fichier CSV",
+'previous 100 rows': '100 lignes pr\xc3\xa9c\xc3\xa9dentes',
+'record': 'enregistrement',
+'record does not exist': "l'archive n'existe pas",
+'record id': "id d'enregistrement",
+'register': "s'inscrire",
+'selected': 's\xc3\xa9lectionn\xc3\xa9',
+'state': '\xc3\xa9tat',
+'table': 'tableau',
+'unable to parse csv file': "incapable d'analyser le fichier cvs",
+}
diff --git a/languages/fr-fr.py b/languages/fr-fr.py
new file mode 100644
index 0000000..6d6773a
--- /dev/null
+++ b/languages/fr-fr.py
@@ -0,0 +1,95 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s rang\xc3\xa9es effac\xc3\xa9es',
+'%s rows updated': '%s rang\xc3\xa9es mises \xc3\xa0 jour',
+'Authentication': 'Authentication',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'First name': 'First name',
+'Group ID': 'Group ID',
+'Hello World': 'Bonjour Monde',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Requ\xc3\xaate Invalide',
+'Invalid email': 'Invalid email',
+'Last name': 'Last name',
+'Layout': 'Layout',
+'Login': 'Login',
+'Lost Password': 'Lost Password',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'Name': 'Name',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Origin': 'Origin',
+'Password': 'Password',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Record ID': 'Record ID',
+'Register': 'Register',
+'Registration key': 'Registration key',
+'Role': 'Role',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Souhaitez vous vraiment effacercet objet?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User ID': 'User ID',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Bienvenue sur web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'cliquez ici pour voir des exemples enligne',
+'click here for the administrative interface': "cliquez ici pour aller\xc3\xa0 l'interface d'administration",
+'customize me!': 'customize me!',
+'data uploaded': 'donn\xc3\xa9es t\xc3\xa9l\xc3\xa9charg\xc3\xa9es',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'design',
+'done!': 'fait!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'requ\xc3\xaate invalide',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nouvelle archive ins\xc3\xa9r\xc3\xa9e',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': "l'archive n'existe pas",
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': '\xc3\xa9tat',
+'table': 'table',
+'unable to parse csv file': "incapable d'analyser le fichier cvs",
+}
diff --git a/languages/hi-hi.py b/languages/hi-hi.py
new file mode 100644
index 0000000..bf00509
--- /dev/null
+++ b/languages/hi-hi.py
@@ -0,0 +1,82 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\x8f\xe0\xa4\x81',
+'%s rows updated': '%s \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x85\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xa4\xe0\xa4\xa8',
+'Available databases and tables': '\xe0\xa4\x89\xe0\xa4\xaa\xe0\xa4\xb2\xe0\xa4\xac\xe0\xa5\x8d\xe0\xa4\xa7 \xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\x94\xe0\xa4\xb0 \xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe',
+'Cannot be empty': '\xe0\xa4\x96\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x80 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x8b \xe0\xa4\xb8\xe0\xa4\x95\xe0\xa4\xa4\xe0\xa4\xbe',
+'Change Password': '\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xac\xe0\xa4\xa6\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'Check to delete': '\xe0\xa4\xb9\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x82',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa7',
+'Current response': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe',
+'Current session': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xb8\xe0\xa5\x87\xe0\xa4\xb6\xe0\xa4\xa8',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': '\xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\xbe:',
+'Edit': 'Edit',
+'Edit Profile': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'Edit This App': 'Edit This App',
+'Edit current record': '\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8 \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82 ',
+'Hello World': 'Hello World',
+'Hello from MyApp': 'Hello from MyApp',
+'Import/Export': '\xe0\xa4\x86\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4 / \xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'Index': 'Index',
+'Internal State': '\xe0\xa4\x86\xe0\xa4\x82\xe0\xa4\xa4\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa5\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa4\xbf',
+'Invalid Query': '\xe0\xa4\x85\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xaf \xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xa8',
+'Layout': 'Layout',
+'Login': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x87\xe0\xa4\xa8',
+'Logout': '\xe0\xa4\xb2\xe0\xa5\x89\xe0\xa4\x97 \xe0\xa4\x86\xe0\xa4\x89\xe0\xa4\x9f',
+'Lost Password': '\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\x96\xe0\xa5\x8b \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa4\xbe',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1',
+'No databases in this application': '\xe0\xa4\x87\xe0\xa4\xb8 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xaf\xe0\xa5\x8b\xe0\xa4\x97 \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x95\xe0\xa5\x8b\xe0\xa4\x88 \xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82',
+'Powered by': 'Powered by',
+'Query:': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xa8:',
+'Register': '\xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x9c\xe0\xa5\x80\xe0\xa4\x95\xe0\xa5\x83\xe0\xa4\xa4 (\xe0\xa4\xb0\xe0\xa4\x9c\xe0\xa4\xbf\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa4\xb0) \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa4\xbe ',
+'Rows in table': '\xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 ',
+'Rows selected': '\xe0\xa4\x9a\xe0\xa4\xaf\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xa4 (\xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa5\x87) \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81 ',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': '\xe0\xa4\xb8\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\x9a\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82 \xe0\xa4\x95\xe0\xa4\xbf \xe0\xa4\x86\xe0\xa4\xaa \xe0\xa4\x87\xe0\xa4\xb8 \xe0\xa4\xb5\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa5\x81 \xe0\xa4\x95\xe0\xa5\x8b \xe0\xa4\xb9\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\xb9\xe0\xa4\xa4\xe0\xa5\x87 \xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': '\xe0\xa4\x85\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xa4\xe0\xa4\xa8 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa4\xbe:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': '\xe0\xa4\xb5\xe0\xa5\x87\xe0\xa4\xac\xe0\xa5\xa8\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\x87 (web2py) \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x86\xe0\xa4\xaa\xe0\xa4\x95\xe0\xa4\xbe \xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xa4 \xe0\xa4\xb9\xe0\xa5\x88',
+'appadmin is disabled because insecure channel': '\xe0\xa4\x85\xe0\xa4\xaa \xe0\xa4\x86\xe0\xa4\xa1\xe0\xa4\xae\xe0\xa4\xbf\xe0\xa4\xa8 (appadmin) \xe0\xa4\x85\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xae \xe0\xa4\xb9\xe0\xa5\x88 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa5\x8b\xe0\xa4\x82\xe0\xa4\x95\xe0\xa4\xbf \xe0\xa4\x85\xe0\xa4\xb8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xbf\xe0\xa4\xa4 \xe0\xa4\x9a\xe0\xa5\x88\xe0\xa4\xa8\xe0\xa4\xb2',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': '\xe0\xa4\x91\xe0\xa4\xa8\xe0\xa4\xb2\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xa8 \xe0\xa4\x89\xe0\xa4\xa6\xe0\xa4\xbe\xe0\xa4\xb9\xe0\xa4\xb0\xe0\xa4\xa3 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\xaf\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'click here for the administrative interface': '\xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa4\xbe\xe0\xa4\xb8\xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x87\xe0\xa4\x82\xe0\xa4\x9f\xe0\xa4\xb0\xe0\xa4\xab\xe0\xa5\x87\xe0\xa4\xb8 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x8f \xe0\xa4\xaf\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\x81 \xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'customize me!': '\xe0\xa4\xae\xe0\xa5\x81\xe0\xa4\x9d\xe0\xa5\x87 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\x95\xe0\xa5\x82\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\xa4 (\xe0\xa4\x95\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\x9f\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\x9c\xe0\xa4\xbc) \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82!',
+'data uploaded': '\xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\x9f\xe0\xa4\xbe \xe0\xa4\x85\xe0\xa4\xaa\xe0\xa4\xb2\xe0\xa5\x8b\xe0\xa4\xa1 \xe0\xa4\xb8\xe0\xa4\xae\xe0\xa5\x8d\xe0\xa4\xaa\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xa8 ',
+'database': '\xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8',
+'database %s select': '\xe0\xa4\xa1\xe0\xa5\x87\xe0\xa4\x9f\xe0\xa4\xbe\xe0\xa4\xac\xe0\xa5\x87\xe0\xa4\xb8 %s \xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa5\x80 \xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\x88',
+'db': 'db',
+'design': '\xe0\xa4\xb0\xe0\xa4\x9a\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x82',
+'done!': '\xe0\xa4\xb9\xe0\xa5\x8b \xe0\xa4\x97\xe0\xa4\xaf\xe0\xa4\xbe!',
+'edit profile': 'edit profile',
+'export as csv file': 'csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xb0\xe0\xa5\x82\xe0\xa4\xaa \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\xa8\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'insert new': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'insert new %s': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe %s \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa5\x87\xe0\xa4\x82',
+'invalid request': '\xe0\xa4\x85\xe0\xa4\xb5\xe0\xa5\x88\xe0\xa4\xa7 \xe0\xa4\x85\xe0\xa4\xa8\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa5\x8b\xe0\xa4\xa7',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': '\xe0\xa4\xa8\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xa1\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbe',
+'next 100 rows': '\xe0\xa4\x85\xe0\xa4\x97\xe0\xa4\xb2\xe0\xa5\x87 100 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81',
+'or import from csv file': '\xe0\xa4\xaf\xe0\xa4\xbe csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xb8\xe0\xa5\x87 \xe0\xa4\x86\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\xa4',
+'previous 100 rows': '\xe0\xa4\xaa\xe0\xa4\xbf\xe0\xa4\x9b\xe0\xa4\xb2\xe0\xa5\x87 100 \xe0\xa4\xaa\xe0\xa4\x82\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe\xe0\xa4\x81',
+'record': 'record',
+'record does not exist': '\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xae\xe0\xa5\x8c\xe0\xa4\x9c\xe0\xa5\x82\xe0\xa4\xa6 \xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82 \xe0\xa4\xb9\xe0\xa5\x88',
+'record id': '\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa1 \xe0\xa4\xaa\xe0\xa4\xb9\xe0\xa4\x9a\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa4\x95\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa4\xe0\xa4\xbe (\xe0\xa4\x86\xe0\xa4\x88\xe0\xa4\xa1\xe0\xa5\x80)',
+'register': 'register',
+'selected': '\xe0\xa4\x9a\xe0\xa5\x81\xe0\xa4\xa8\xe0\xa4\xbe \xe0\xa4\xb9\xe0\xa5\x81\xe0\xa4\x86',
+'state': '\xe0\xa4\xb8\xe0\xa5\x8d\xe0\xa4\xa5\xe0\xa4\xbf\xe0\xa4\xa4\xe0\xa4\xbf',
+'table': '\xe0\xa4\xa4\xe0\xa4\xbe\xe0\xa4\xb2\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe',
+'unable to parse csv file': 'csv \xe0\xa4\xab\xe0\xa4\xbc\xe0\xa4\xbe\xe0\xa4\x87\xe0\xa4\xb2 \xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xb8 \xe0\xa4\x95\xe0\xa4\xb0\xe0\xa4\xa8\xe0\xa5\x87 \xe0\xa4\xae\xe0\xa5\x87\xe0\xa4\x82 \xe0\xa4\x85\xe0\xa4\xb8\xe0\xa4\xae\xe0\xa4\xb0\xe0\xa5\x8d\xe0\xa4\xa5',
+}
diff --git a/languages/hu-hu.py b/languages/hu-hu.py
new file mode 100644
index 0000000..bbeb991
--- /dev/null
+++ b/languages/hu-hu.py
@@ -0,0 +1,93 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y.%m.%d.',
+'%Y-%m-%d %H:%M:%S': '%Y.%m.%d. %H:%M:%S',
+'%s rows deleted': '%s sorok t\xc3\xb6rl\xc5\x91dtek',
+'%s rows updated': '%s sorok friss\xc3\xadt\xc5\x91dtek',
+'Available databases and tables': 'El\xc3\xa9rhet\xc5\x91 adatb\xc3\xa1zisok \xc3\xa9s t\xc3\xa1bl\xc3\xa1k',
+'Cannot be empty': 'Nem lehet \xc3\xbcres',
+'Check to delete': 'T\xc3\xb6rl\xc3\xa9shez v\xc3\xa1laszd ki',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Jelenlegi lek\xc3\xa9rdez\xc3\xa9s',
+'Current response': 'Jelenlegi v\xc3\xa1lasz',
+'Current session': 'Jelenlegi folyamat',
+'DB Model': 'DB Model',
+'Database': 'Adatb\xc3\xa1zis',
+'Delete:': 'T\xc3\xb6r\xc3\xb6l:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Szerkeszt',
+'Edit This App': 'Alkalmaz\xc3\xa1st szerkeszt',
+'Edit current record': 'Aktu\xc3\xa1lis bejegyz\xc3\xa9s szerkeszt\xc3\xa9se',
+'First name': 'First name',
+'Group ID': 'Group ID',
+'Hello World': 'Hello Vil\xc3\xa1g',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Hib\xc3\xa1s lek\xc3\xa9rdez\xc3\xa9s',
+'Invalid email': 'Invalid email',
+'Last name': 'Last name',
+'Layout': 'Szerkezet',
+'Main Menu': 'F\xc5\x91men\xc3\xbc',
+'Menu Model': 'Men\xc3\xbc model',
+'Name': 'Name',
+'New Record': '\xc3\x9aj bejegyz\xc3\xa9s',
+'No databases in this application': 'Nincs adatb\xc3\xa1zis ebben az alkalmaz\xc3\xa1sban',
+'Origin': 'Origin',
+'Password': 'Password',
+'Powered by': 'Powered by',
+'Query:': 'Lek\xc3\xa9rdez\xc3\xa9s:',
+'Record ID': 'Record ID',
+'Registration key': 'Registration key',
+'Reset Password key': 'Reset Password key',
+'Role': 'Role',
+'Rows in table': 'Sorok a t\xc3\xa1bl\xc3\xa1ban',
+'Rows selected': 'Kiv\xc3\xa1lasztott sorok',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Biztos t\xc3\xb6rli ezt az objektumot?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Friss\xc3\xadt:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User ID': 'User ID',
+'View': 'N\xc3\xa9zet',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Isten hozott a web2py-ban',
+'appadmin is disabled because insecure channel': 'az appadmin a biztons\xc3\xa1gtalan csatorna miatt letiltva',
+'cache': 'gyors\xc3\xadt\xc3\xb3t\xc3\xa1r',
+'change password': 'jelsz\xc3\xb3 megv\xc3\xa1ltoztat\xc3\xa1sa',
+'click here for online examples': 'online p\xc3\xa9ld\xc3\xa1k\xc3\xa9rt kattints ide',
+'click here for the administrative interface': 'az adminisztr\xc3\xa1ci\xc3\xb3s fel\xc3\xbclet\xc3\xa9rt kattints ide',
+'customize me!': 'v\xc3\xa1ltoztass meg!',
+'data uploaded': 'adat felt\xc3\xb6ltve',
+'database': 'adatb\xc3\xa1zis',
+'database %s select': 'adatb\xc3\xa1zis %s kiv\xc3\xa1laszt\xc3\xa1s',
+'db': 'db',
+'design': 'design',
+'done!': 'k\xc3\xa9sz!',
+'edit profile': 'profil szerkeszt\xc3\xa9se',
+'export as csv file': 'export\xc3\xa1l csv f\xc3\xa1jlba',
+'insert new': '\xc3\xbaj beilleszt\xc3\xa9se',
+'insert new %s': '\xc3\xbaj beilleszt\xc3\xa9se %s',
+'invalid request': 'hib\xc3\xa1s k\xc3\xa9r\xc3\xa9s',
+'login': 'bel\xc3\xa9p',
+'logout': 'kil\xc3\xa9p',
+'lost password': 'elveszett jelsz\xc3\xb3',
+'new record inserted': '\xc3\xbaj bejegyz\xc3\xa9s felv\xc3\xa9ve',
+'next 100 rows': 'k\xc3\xb6vetkez\xc5\x91 100 sor',
+'or import from csv file': 'vagy bet\xc3\xb6lt\xc3\xa9s csv f\xc3\xa1jlb\xc3\xb3l',
+'previous 100 rows': 'el\xc5\x91z\xc5\x91 100 sor',
+'record': 'bejegyz\xc3\xa9s',
+'record does not exist': 'bejegyz\xc3\xa9s nem l\xc3\xa9tezik',
+'record id': 'bejegyz\xc3\xa9s id',
+'register': 'regisztr\xc3\xa1ci\xc3\xb3',
+'selected': 'kiv\xc3\xa1lasztott',
+'state': '\xc3\xa1llapot',
+'table': 't\xc3\xa1bla',
+'unable to parse csv file': 'nem lehet a csv f\xc3\xa1jlt beolvasni',
+}
diff --git a/languages/hu.py b/languages/hu.py
new file mode 100644
index 0000000..bbeb991
--- /dev/null
+++ b/languages/hu.py
@@ -0,0 +1,93 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y.%m.%d.',
+'%Y-%m-%d %H:%M:%S': '%Y.%m.%d. %H:%M:%S',
+'%s rows deleted': '%s sorok t\xc3\xb6rl\xc5\x91dtek',
+'%s rows updated': '%s sorok friss\xc3\xadt\xc5\x91dtek',
+'Available databases and tables': 'El\xc3\xa9rhet\xc5\x91 adatb\xc3\xa1zisok \xc3\xa9s t\xc3\xa1bl\xc3\xa1k',
+'Cannot be empty': 'Nem lehet \xc3\xbcres',
+'Check to delete': 'T\xc3\xb6rl\xc3\xa9shez v\xc3\xa1laszd ki',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Jelenlegi lek\xc3\xa9rdez\xc3\xa9s',
+'Current response': 'Jelenlegi v\xc3\xa1lasz',
+'Current session': 'Jelenlegi folyamat',
+'DB Model': 'DB Model',
+'Database': 'Adatb\xc3\xa1zis',
+'Delete:': 'T\xc3\xb6r\xc3\xb6l:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Szerkeszt',
+'Edit This App': 'Alkalmaz\xc3\xa1st szerkeszt',
+'Edit current record': 'Aktu\xc3\xa1lis bejegyz\xc3\xa9s szerkeszt\xc3\xa9se',
+'First name': 'First name',
+'Group ID': 'Group ID',
+'Hello World': 'Hello Vil\xc3\xa1g',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Hib\xc3\xa1s lek\xc3\xa9rdez\xc3\xa9s',
+'Invalid email': 'Invalid email',
+'Last name': 'Last name',
+'Layout': 'Szerkezet',
+'Main Menu': 'F\xc5\x91men\xc3\xbc',
+'Menu Model': 'Men\xc3\xbc model',
+'Name': 'Name',
+'New Record': '\xc3\x9aj bejegyz\xc3\xa9s',
+'No databases in this application': 'Nincs adatb\xc3\xa1zis ebben az alkalmaz\xc3\xa1sban',
+'Origin': 'Origin',
+'Password': 'Password',
+'Powered by': 'Powered by',
+'Query:': 'Lek\xc3\xa9rdez\xc3\xa9s:',
+'Record ID': 'Record ID',
+'Registration key': 'Registration key',
+'Reset Password key': 'Reset Password key',
+'Role': 'Role',
+'Rows in table': 'Sorok a t\xc3\xa1bl\xc3\xa1ban',
+'Rows selected': 'Kiv\xc3\xa1lasztott sorok',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Biztos t\xc3\xb6rli ezt az objektumot?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Friss\xc3\xadt:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User ID': 'User ID',
+'View': 'N\xc3\xa9zet',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Isten hozott a web2py-ban',
+'appadmin is disabled because insecure channel': 'az appadmin a biztons\xc3\xa1gtalan csatorna miatt letiltva',
+'cache': 'gyors\xc3\xadt\xc3\xb3t\xc3\xa1r',
+'change password': 'jelsz\xc3\xb3 megv\xc3\xa1ltoztat\xc3\xa1sa',
+'click here for online examples': 'online p\xc3\xa9ld\xc3\xa1k\xc3\xa9rt kattints ide',
+'click here for the administrative interface': 'az adminisztr\xc3\xa1ci\xc3\xb3s fel\xc3\xbclet\xc3\xa9rt kattints ide',
+'customize me!': 'v\xc3\xa1ltoztass meg!',
+'data uploaded': 'adat felt\xc3\xb6ltve',
+'database': 'adatb\xc3\xa1zis',
+'database %s select': 'adatb\xc3\xa1zis %s kiv\xc3\xa1laszt\xc3\xa1s',
+'db': 'db',
+'design': 'design',
+'done!': 'k\xc3\xa9sz!',
+'edit profile': 'profil szerkeszt\xc3\xa9se',
+'export as csv file': 'export\xc3\xa1l csv f\xc3\xa1jlba',
+'insert new': '\xc3\xbaj beilleszt\xc3\xa9se',
+'insert new %s': '\xc3\xbaj beilleszt\xc3\xa9se %s',
+'invalid request': 'hib\xc3\xa1s k\xc3\xa9r\xc3\xa9s',
+'login': 'bel\xc3\xa9p',
+'logout': 'kil\xc3\xa9p',
+'lost password': 'elveszett jelsz\xc3\xb3',
+'new record inserted': '\xc3\xbaj bejegyz\xc3\xa9s felv\xc3\xa9ve',
+'next 100 rows': 'k\xc3\xb6vetkez\xc5\x91 100 sor',
+'or import from csv file': 'vagy bet\xc3\xb6lt\xc3\xa9s csv f\xc3\xa1jlb\xc3\xb3l',
+'previous 100 rows': 'el\xc5\x91z\xc5\x91 100 sor',
+'record': 'bejegyz\xc3\xa9s',
+'record does not exist': 'bejegyz\xc3\xa9s nem l\xc3\xa9tezik',
+'record id': 'bejegyz\xc3\xa9s id',
+'register': 'regisztr\xc3\xa1ci\xc3\xb3',
+'selected': 'kiv\xc3\xa1lasztott',
+'state': '\xc3\xa1llapot',
+'table': 't\xc3\xa1bla',
+'unable to parse csv file': 'nem lehet a csv f\xc3\xa1jlt beolvasni',
+}
diff --git a/languages/it-it.py b/languages/it-it.py
new file mode 100644
index 0000000..136c29d
--- /dev/null
+++ b/languages/it-it.py
@@ -0,0 +1,75 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s records cancellati',
+'%s rows updated': '*** %s records modificati',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'Hello World': 'Salve Mondo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Query invalida',
+'Layout': 'Layout',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Sicuro che vuoi cancellare questo oggetto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Ciao da wek2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'clicca per vedere gli esempi',
+'click here for the administrative interface': "clicca per l'interfaccia administrativa",
+'customize me!': 'customize me!',
+'data uploaded': 'dati caricati',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'progetta',
+'done!': 'fatto!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'richiesta invalida!',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nuovo record inserito',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'il record non esiste',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'stato',
+'table': 'table',
+'unable to parse csv file': 'non so leggere questo csv file',
+}
diff --git a/languages/it.py b/languages/it.py
new file mode 100644
index 0000000..888a556
--- /dev/null
+++ b/languages/it.py
@@ -0,0 +1,107 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s records cancellati',
+'%s rows updated': '*** %s records modificati',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Check to delete:': 'Check to delete:',
+'Client IP': 'Client IP',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Description': 'Description',
+'E-mail': 'E-mail',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'First name': 'First name',
+'Group %(group_id)s created': 'Group %(group_id)s created',
+'Group ID': 'Group ID',
+'Group uniquely assigned to user %(id)s': 'Group uniquely assigned to user %(id)s',
+'Hello World': 'Salve Mondo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Query invalida',
+'Invalid email': 'Invalid email',
+'Invalid login': 'Invalid login',
+'Last name': 'Last name',
+'Layout': 'Layout',
+'Logged in': 'Logged in',
+'Logged out': 'Logged out',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'Name': 'Name',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Origin': 'Origin',
+'Password': 'Password',
+"Password fields don't match": "Password fields don't match",
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Record ID': 'Record ID',
+'Registration key': 'Registration key',
+'Registration successful': 'Registration successful',
+'Remember me (for 30 days)': 'Remember me (for 30 days)',
+'Reset Password key': 'Reset Password key',
+'Role': 'Role',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Submit': 'Submit',
+'Sure you want to delete this object?': 'Sicuro che vuoi cancellare questo oggetto?',
+'Table name': 'Table name',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Timestamp': 'Timestamp',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'User %(id)s Logged-in': 'User %(id)s Logged-in',
+'User %(id)s Logged-out': 'User %(id)s Logged-out',
+'User %(id)s Registered': 'User %(id)s Registered',
+'User ID': 'User ID',
+'Verify Password': 'Verify Password',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Ciao da wek2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'clicca per vedere gli esempi',
+'click here for the administrative interface': "clicca per l'interfaccia administrativa",
+'customize me!': 'customize me!',
+'data uploaded': 'dati caricati',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'db',
+'design': 'progetta',
+'done!': 'fatto!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'richiesta invalida!',
+'login': 'login',
+'logout': 'logout',
+'lost password': 'lost password',
+'new record inserted': 'nuovo record inserito',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'il record non esiste',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'stato',
+'table': 'table',
+'unable to parse csv file': 'non so leggere questo csv file',
+}
diff --git a/languages/pl-pl.py b/languages/pl-pl.py
new file mode 100644
index 0000000..6f890a0
--- /dev/null
+++ b/languages/pl-pl.py
@@ -0,0 +1,81 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyra\xc5\xbceniem postaci "pole1=\'nowawarto\xc5\x9b\xc4\x87\'". Nie mo\xc5\xbcesz uaktualni\xc4\x87 lub usun\xc4\x85\xc4\x87 wynik\xc3\xb3w z JOIN:',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': 'Wierszy usuni\xc4\x99tych: %s',
+'%s rows updated': 'Wierszy uaktualnionych: %s',
+'Available databases and tables': 'Dost\xc4\x99pne bazy danych i tabele',
+'Cannot be empty': 'Nie mo\xc5\xbce by\xc4\x87 puste',
+'Change Password': 'Change Password',
+'Check to delete': 'Zaznacz aby usun\xc4\x85\xc4\x87',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Aktualne \xc5\xbc\xc4\x85danie',
+'Current response': 'Aktualna odpowied\xc5\xba',
+'Current session': 'Aktualna sesja',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Usu\xc5\x84:',
+'Edit': 'Edit',
+'Edit Profile': 'Edit Profile',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edytuj aktualny rekord',
+'Hello World': 'Witaj \xc5\x9awiecie',
+'Import/Export': 'Importuj/eksportuj',
+'Index': 'Index',
+'Internal State': 'Stan wewn\xc4\x99trzny',
+'Invalid Query': 'B\xc5\x82\xc4\x99dne zapytanie',
+'Layout': 'Layout',
+'Login': 'Zaloguj',
+'Logout': 'Logout',
+'Lost Password': 'Przypomnij has\xc5\x82o',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'Nowy rekord',
+'No databases in this application': 'Brak baz danych w tej aplikacji',
+'Powered by': 'Powered by',
+'Query:': 'Zapytanie:',
+'Register': 'Zarejestruj',
+'Rows in table': 'Wiersze w tabeli',
+'Rows selected': 'Wybrane wiersze',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Czy na pewno chcesz usun\xc4\x85\xc4\x87 ten obiekt?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'warto\xc5\x9b\xc4\x87\'". Takie co\xc5\x9b jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.',
+'Update:': 'Uaktualnij:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'U\xc5\xbcyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...) jako NOT do tworzenia bardziej skomplikowanych zapyta\xc5\x84.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Witaj w web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Kliknij aby przej\xc5\x9b\xc4\x87 do interaktywnych przyk\xc5\x82ad\xc3\xb3w',
+'click here for the administrative interface': 'Kliknij aby przej\xc5\x9b\xc4\x87 do panelu administracyjnego',
+'customize me!': 'dostosuj mnie!',
+'data uploaded': 'dane wys\xc5\x82ane',
+'database': 'baza danych',
+'database %s select': 'wyb\xc3\xb3r z bazy danych %s',
+'db': 'baza danych',
+'design': 'projektuj',
+'done!': 'zrobione!',
+'edit profile': 'edit profile',
+'export as csv file': 'eksportuj jako plik csv',
+'insert new': 'wstaw nowy rekord tabeli',
+'insert new %s': 'wstaw nowy rekord do tabeli %s',
+'invalid request': 'B\xc5\x82\xc4\x99dne \xc5\xbc\xc4\x85danie',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nowy rekord zosta\xc5\x82 wstawiony',
+'next 100 rows': 'nast\xc4\x99pne 100 wierszy',
+'or import from csv file': 'lub zaimportuj z pliku csv',
+'previous 100 rows': 'poprzednie 100 wierszy',
+'record': 'record',
+'record does not exist': 'rekord nie istnieje',
+'record id': 'id rekordu',
+'register': 'register',
+'selected': 'wybranych',
+'state': 'stan',
+'table': 'tabela',
+'unable to parse csv file': 'nie mo\xc5\xbcna sparsowa\xc4\x87 pliku csv',
+}
diff --git a/languages/pl.py b/languages/pl.py
new file mode 100644
index 0000000..d035d98
--- /dev/null
+++ b/languages/pl.py
@@ -0,0 +1,104 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"Uaktualnij" jest dodatkowym wyra\xc5\xbceniem postaci "pole1=\'nowawarto\xc5\x9b\xc4\x87\'". Nie mo\xc5\xbcesz uaktualni\xc4\x87 lub usun\xc4\x85\xc4\x87 wynik\xc3\xb3w z JOIN:',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': 'Wierszy usuni\xc4\x99tych: %s',
+'%s rows updated': 'Wierszy uaktualnionych: %s',
+'Authentication': 'Uwierzytelnienie',
+'Available databases and tables': 'Dost\xc4\x99pne bazy danych i tabele',
+'Cannot be empty': 'Nie mo\xc5\xbce by\xc4\x87 puste',
+'Change Password': 'Zmie\xc5\x84 has\xc5\x82o',
+'Check to delete': 'Zaznacz aby usun\xc4\x85\xc4\x87',
+'Check to delete:': 'Zaznacz aby usun\xc4\x85\xc4\x87:',
+'Client IP': 'IP klienta',
+'Controller': 'Kontroler',
+'Copyright': 'Copyright',
+'Current request': 'Aktualne \xc5\xbc\xc4\x85danie',
+'Current response': 'Aktualna odpowied\xc5\xba',
+'Current session': 'Aktualna sesja',
+'DB Model': 'Model bazy danych',
+'Database': 'Baza danych',
+'Delete:': 'Usu\xc5\x84:',
+'Description': 'Opis',
+'E-mail': 'Adres e-mail',
+'Edit': 'Edycja',
+'Edit Profile': 'Edytuj profil',
+'Edit This App': 'Edytuj t\xc4\x99 aplikacj\xc4\x99',
+'Edit current record': 'Edytuj obecny rekord',
+'First name': 'Imi\xc4\x99',
+'Function disabled': 'Funkcja wy\xc5\x82\xc4\x85czona',
+'Group ID': 'ID grupy',
+'Hello World': 'Witaj \xc5\x9awiecie',
+'Import/Export': 'Importuj/eksportuj',
+'Index': 'Indeks',
+'Internal State': 'Stan wewn\xc4\x99trzny',
+'Invalid Query': 'B\xc5\x82\xc4\x99dne zapytanie',
+'Invalid email': 'B\xc5\x82\xc4\x99dny adres email',
+'Last name': 'Nazwisko',
+'Layout': 'Uk\xc5\x82ad',
+'Login': 'Zaloguj',
+'Logout': 'Wyloguj',
+'Lost Password': 'Przypomnij has\xc5\x82o',
+'Main Menu': 'Menu g\xc5\x82\xc3\xb3wne',
+'Menu Model': 'Model menu',
+'Name': 'Nazwa',
+'New Record': 'Nowy rekord',
+'No databases in this application': 'Brak baz danych w tej aplikacji',
+'Origin': '\xc5\xb9r\xc3\xb3d\xc5\x82o',
+'Password': 'Has\xc5\x82o',
+"Password fields don't match": 'Pola has\xc5\x82a nie s\xc4\x85 zgodne ze sob\xc4\x85',
+'Powered by': 'Zasilane przez',
+'Query:': 'Zapytanie:',
+'Record ID': 'ID rekordu',
+'Register': 'Zarejestruj',
+'Registration key': 'Klucz rejestracji',
+'Role': 'Rola',
+'Rows in table': 'Wiersze w tabeli',
+'Rows selected': 'Wybrane wiersze',
+'Stylesheet': 'Arkusz styl\xc3\xb3w',
+'Submit': 'Wy\xc5\x9blij',
+'Sure you want to delete this object?': 'Czy na pewno chcesz usun\xc4\x85\xc4\x87 ten obiekt?',
+'Table name': 'Nazwa tabeli',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Zapytanie" jest warunkiem postaci "db.tabela1.pole1==\'warto\xc5\x9b\xc4\x87\'". Takie co\xc5\x9b jak "db.tabela1.pole1==db.tabela2.pole2" oznacza SQL JOIN.',
+'Timestamp': 'Znacznik czasu',
+'Update:': 'Uaktualnij:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'U\xc5\xbcyj (...)&(...) jako AND, (...)|(...) jako OR oraz ~(...) jako NOT do tworzenia bardziej skomplikowanych zapyta\xc5\x84.',
+'User %(id)s Registered': 'U\xc5\xbcytkownik %(id)s zosta\xc5\x82 zarejestrowany',
+'User ID': 'ID u\xc5\xbcytkownika',
+'Verify Password': 'Potwierd\xc5\xba has\xc5\x82o',
+'View': 'Widok',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Witaj w web2py',
+'appadmin is disabled because insecure channel': 'administracja aplikacji wy\xc5\x82\xc4\x85czona z powodu braku bezpiecznego po\xc5\x82\xc4\x85czenia',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Kliknij aby przej\xc5\x9b\xc4\x87 do interaktywnych przyk\xc5\x82ad\xc3\xb3w',
+'click here for the administrative interface': 'Kliknij aby przej\xc5\x9b\xc4\x87 do panelu administracyjnego',
+'customize me!': 'dostosuj mnie!',
+'data uploaded': 'dane wys\xc5\x82ane',
+'database': 'baza danych',
+'database %s select': 'wyb\xc3\xb3r z bazy danych %s',
+'db': 'baza danych',
+'design': 'projektuj',
+'done!': 'zrobione!',
+'edit profile': 'edit profile',
+'export as csv file': 'eksportuj jako plik csv',
+'insert new': 'wstaw nowy rekord tabeli',
+'insert new %s': 'wstaw nowy rekord do tabeli %s',
+'invalid request': 'B\xc5\x82\xc4\x99dne \xc5\xbc\xc4\x85danie',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'nowy rekord zosta\xc5\x82 wstawiony',
+'next 100 rows': 'nast\xc4\x99pne 100 wierszy',
+'or import from csv file': 'lub zaimportuj z pliku csv',
+'previous 100 rows': 'poprzednie 100 wierszy',
+'record': 'rekord',
+'record does not exist': 'rekord nie istnieje',
+'record id': 'id rekordu',
+'register': 'register',
+'selected': 'wybranych',
+'state': 'stan',
+'table': 'tabela',
+'unable to parse csv file': 'nie mo\xc5\xbcna sparsowa\xc4\x87 pliku csv',
+}
diff --git a/languages/pt-br.py b/languages/pt-br.py
new file mode 100644
index 0000000..135e9ed
--- /dev/null
+++ b/languages/pt-br.py
@@ -0,0 +1,78 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" \xc3\xa9 uma express\xc3\xa3o opcional como "campo1=\'novovalor\'". Voc\xc3\xaa n\xc3\xa3o pode atualizar ou apagar os resultados de um JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s linhas apagadas',
+'%s rows updated': '%s linhas atualizadas',
+'Available databases and tables': 'Bancos de dados e tabelas dispon\xc3\xadveis',
+'Cannot be empty': 'N\xc3\xa3o pode ser vazio',
+'Check to delete': 'Marque para apagar',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Requisi\xc3\xa7\xc3\xa3o atual',
+'Current response': 'Resposta atual',
+'Current session': 'Sess\xc3\xa3o atual',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Apagar:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Editar o registro atual',
+'Hello World': 'Ol\xc3\xa1 Mundo',
+'Import/Export': 'Importar/Exportar',
+'Index': 'Index',
+'Internal State': 'Estado Interno',
+'Invalid Query': 'Consulta Inv\xc3\xa1lida',
+'Layout': 'Layout',
+'Login': 'Autentique-se',
+'Lost Password': 'Esqueceu sua senha?',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'Novo Registro',
+'No databases in this application': 'Sem bancos de dados nesta aplica\xc3\xa7\xc3\xa3o',
+'Powered by': 'Powered by',
+'Query:': 'Consulta:',
+'Register': 'Registre-se',
+'Rows in table': 'Linhas na tabela',
+'Rows selected': 'Linhas selecionadas',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Est\xc3\xa1 certo(a) que deseja apagar esse objeto ?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'Uma "consulta" \xc3\xa9 uma condi\xc3\xa7\xc3\xa3o como "db.tabela1.campo1==\'valor\'". Express\xc3\xb5es como "db.tabela1.campo1==db.tabela2.campo2" resultam em um JOIN SQL.',
+'Update:': 'Atualizar:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, e ~(...) para NOT para construir consultas mais complexas.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': 'Bem vindo ao web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'clique aqui para ver alguns exemplos',
+'click here for the administrative interface': 'clique aqui para acessar a interface administrativa',
+'customize me!': 'Personalize-me!',
+'data uploaded': 'dados enviados',
+'database': 'banco de dados',
+'database %s select': 'Selecionar banco de dados %s',
+'db': 'db',
+'design': 'design',
+'done!': 'conclu\xc3\xaddo!',
+'edit profile': 'edit profile',
+'export as csv file': 'exportar como um arquivo csv',
+'insert new': 'inserir novo',
+'insert new %s': 'inserir novo %s',
+'invalid request': 'requisi\xc3\xa7\xc3\xa3o inv\xc3\xa1lida',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'novo registro inserido',
+'next 100 rows': 'pr\xc3\xb3ximas 100 linhas',
+'or import from csv file': 'ou importar de um arquivo csv',
+'previous 100 rows': '100 linhas anteriores',
+'record': 'record',
+'record does not exist': 'registro n\xc3\xa3o existe',
+'record id': 'id do registro',
+'register': 'register',
+'selected': 'selecionado',
+'state': 'estado',
+'table': 'tabela',
+'unable to parse csv file': 'n\xc3\xa3o foi poss\xc3\xadvel analisar arquivo csv',
+}
diff --git a/languages/pt-pt.py b/languages/pt-pt.py
new file mode 100644
index 0000000..5a08f42
--- /dev/null
+++ b/languages/pt-pt.py
@@ -0,0 +1,76 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s linhas eliminadas',
+'%s rows updated': '%s linhas actualizadas',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'Hello World': 'Ol\xc3\xa1 Mundo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Consulta Inv\xc3\xa1lida',
+'Layout': 'Layout',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Tem a certeza que deseja eliminar este objecto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to Gluonization': 'Bem vindo ao Web2py',
+'Welcome to web2py': 'Welcome to web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Clique aqui para exemplos online',
+'click here for the administrative interface': 'Clique aqui para o painel administrativo',
+'customize me!': 'customize me!',
+'data uploaded': 'informa\xc3\xa7\xc3\xa3o enviada',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'bd',
+'design': 'design',
+'done!': 'conclu\xc3\xaddo!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'Pedido Inv\xc3\xa1lido',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'novo registo inserido',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'registo inexistente',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'estado',
+'table': 'table',
+'unable to parse csv file': 'n\xc3\xa3o foi poss\xc3\xadvel carregar ficheiro csv',
+}
diff --git a/languages/pt.py b/languages/pt.py
new file mode 100644
index 0000000..5a08f42
--- /dev/null
+++ b/languages/pt.py
@@ -0,0 +1,76 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s linhas eliminadas',
+'%s rows updated': '%s linhas actualizadas',
+'Available databases and tables': 'Available databases and tables',
+'Cannot be empty': 'Cannot be empty',
+'Check to delete': 'Check to delete',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': 'Current request',
+'Current response': 'Current response',
+'Current session': 'Current session',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': 'Delete:',
+'Edit': 'Edit',
+'Edit This App': 'Edit This App',
+'Edit current record': 'Edit current record',
+'Hello World': 'Ol\xc3\xa1 Mundo',
+'Import/Export': 'Import/Export',
+'Index': 'Index',
+'Internal State': 'Internal State',
+'Invalid Query': 'Consulta Inv\xc3\xa1lida',
+'Layout': 'Layout',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': 'New Record',
+'No databases in this application': 'No databases in this application',
+'Powered by': 'Powered by',
+'Query:': 'Query:',
+'Rows in table': 'Rows in table',
+'Rows selected': 'Rows selected',
+'Stylesheet': 'Stylesheet',
+'Sure you want to delete this object?': 'Tem a certeza que deseja eliminar este objecto?',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.',
+'Update:': 'Update:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to Gluonization': 'Bem vindo ao Web2py',
+'Welcome to web2py': 'Welcome to web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': 'Clique aqui para exemplos online',
+'click here for the administrative interface': 'Clique aqui para o painel administrativo',
+'customize me!': 'customize me!',
+'data uploaded': 'informa\xc3\xa7\xc3\xa3o enviada',
+'database': 'database',
+'database %s select': 'database %s select',
+'db': 'bd',
+'design': 'design',
+'done!': 'conclu\xc3\xaddo!',
+'edit profile': 'edit profile',
+'export as csv file': 'export as csv file',
+'insert new': 'insert new',
+'insert new %s': 'insert new %s',
+'invalid request': 'Pedido Inv\xc3\xa1lido',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': 'novo registo inserido',
+'next 100 rows': 'next 100 rows',
+'or import from csv file': 'or import from csv file',
+'previous 100 rows': 'previous 100 rows',
+'record': 'record',
+'record does not exist': 'registo inexistente',
+'record id': 'record id',
+'register': 'register',
+'selected': 'selected',
+'state': 'estado',
+'table': 'table',
+'unable to parse csv file': 'n\xc3\xa3o foi poss\xc3\xadvel carregar ficheiro csv',
+}
diff --git a/languages/ru-ru.py b/languages/ru-ru.py
new file mode 100644
index 0000000..93a516c
--- /dev/null
+++ b/languages/ru-ru.py
@@ -0,0 +1,87 @@
+# coding: utf8
+{
+'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"\xd0\x98\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd1\x8c" - \xd0\xbd\xd0\xb5\xd0\xbe\xd0\xb1\xd1\x8f\xd0\xb7\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xbd\xd0\xbe\xd0\xb5 \xd0\xb2\xd1\x8b\xd1\x80\xd0\xb0\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb0 "field1=\'\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xb5 \xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5\'". \xd0\xa0\xd0\xb5\xd0\xb7\xd1\x83\xd0\xbb\xd1\x8c\xd1\x82\xd0\xb0\xd1\x82\xd1\x8b \xd0\xbe\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 JOIN \xd0\xbd\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xb7\xd1\x8f \xd0\xb8\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd1\x8c \xd0\xb8\xd0\xbb\xd0\xb8 \xd1\x83\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c.',
+'%Y-%m-%d': '%Y-%m-%d',
+'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
+'%s rows deleted': '%s \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba \xd1\x83\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xbe',
+'%s rows updated': '%s \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba \xd0\xb8\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbe',
+'Available databases and tables': '\xd0\x91\xd0\xb0\xd0\xb7\xd1\x8b \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85 \xd0\xb8 \xd1\x82\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xb8\xd1\x86\xd1\x8b',
+'Cannot be empty': '\xd0\x9f\xd1\x83\xd1\x81\xd1\x82\xd0\xbe\xd0\xb5 \xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbd\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbf\xd1\x83\xd1\x81\xd1\x82\xd0\xb8\xd0\xbc\xd0\xbe',
+'Change Password': '\xd0\xa1\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c',
+'Check to delete': '\xd0\xa3\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c',
+'Check to delete:': '\xd0\xa3\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c:',
+'Controller': 'Controller',
+'Copyright': 'Copyright',
+'Current request': '\xd0\xa2\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd0\xb8\xd0\xb9 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81',
+'Current response': '\xd0\xa2\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd0\xb8\xd0\xb9 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82',
+'Current session': '\xd0\xa2\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd0\xb0\xd1\x8f \xd1\x81\xd0\xb5\xd1\x81\xd1\x81\xd0\xb8\xd1\x8f',
+'DB Model': 'DB Model',
+'Database': 'Database',
+'Delete:': '\xd0\xa3\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c:',
+'Edit': 'Edit',
+'Edit Profile': '\xd0\xa0\xd0\xb5\xd0\xb4\xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd0\xbf\xd1\x80\xd0\xbe\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb',
+'Edit This App': 'Edit This App',
+'Edit current record': '\xd0\xa0\xd0\xb5\xd0\xb4\xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd1\x82\xd0\xb5\xd0\xba\xd1\x83\xd1\x89\xd1\x83\xd1\x8e \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c',
+'Hello World': '\xd0\x97\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb1\xd0\xbe\xd1\x82\xd0\xb0\xd0\xbb\xd0\xbe!',
+'Import/Export': '\xd0\x98\xd0\xbc\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82/\xd1\x8d\xd0\xba\xd1\x81\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82',
+'Index': 'Index',
+'Internal State': '\xd0\x92\xd0\xbd\xd1\x83\xd1\x82\xd1\x80\xd0\xb5\xd0\xbd\xd0\xbd\xd0\xb5 \xd1\x81\xd0\xbe\xd1\x81\xd1\x82\xd0\xbe\xd1\x8f\xd0\xbd\xd0\xb8\xd0\xb5',
+'Invalid Query': '\xd0\x9d\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81',
+'Invalid email': '\xd0\x9d\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbd\xd1\x8b\xd0\xb9 email',
+'Layout': 'Layout',
+'Login': '\xd0\x92\xd1\x85\xd0\xbe\xd0\xb4',
+'Logout': '\xd0\x92\xd1\x8b\xd1\x85\xd0\xbe\xd0\xb4',
+'Lost Password': '\xd0\x97\xd0\xb0\xd0\xb1\xd1\x8b\xd0\xbb\xd0\xb8 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c?',
+'Main Menu': 'Main Menu',
+'Menu Model': 'Menu Model',
+'New Record': '\xd0\x9d\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x8f \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c',
+'No databases in this application': '\xd0\x92 \xd0\xbf\xd1\x80\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb8 \xd0\xbd\xd0\xb5\xd1\x82 \xd0\xb1\xd0\xb0\xd0\xb7 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85',
+"Password fields don't match": '\xd0\x9f\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb8 \xd0\xbd\xd0\xb5 \xd1\x81\xd0\xbe\xd0\xb2\xd0\xbf\xd0\xb0\xd0\xb4\xd0\xb0\xd1\x8e\xd1\x82',
+'Powered by': 'Powered by',
+'Query:': '\xd0\x97\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81:',
+'Register': '\xd0\x97\xd0\xb0\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb8\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c\xd1\x81\xd1\x8f',
+'Rows in table': '\xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba \xd0\xb2 \xd1\x82\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xb8\xd1\x86\xd0\xb5',
+'Rows selected': '\xd0\x92\xd1\x8b\xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xbe \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba',
+'Stylesheet': 'Stylesheet',
+'Submit': '\xd0\x9e\xd1\x82\xd0\xbf\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c',
+'Sure you want to delete this object?': '\xd0\x9f\xd0\xbe\xd0\xb4\xd1\x82\xd0\xb2\xd0\xb5\xd1\x80\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb5 \xd1\x83\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xbe\xd0\xb1\xd1\x8a\xd0\xb5\xd0\xba\xd1\x82\xd0\xb0',
+'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"\xd0\x97\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81" - \xd1\x8d\xd1\x82\xd0\xbe \xd1\x83\xd1\x81\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb8\xd0\xb5 \xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb0 "db.table1.field1==\'\xd0\xb7\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5\'". \xd0\x92\xd1\x8b\xd1\x80\xd0\xb0\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb0 "db.table1.field1==db.table2.field2" \xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb8\xd1\x80\xd1\x83\xd0\xb5\xd1\x82 SQL JOIN.',
+'Update:': '\xd0\x98\xd0\xb7\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x82\xd1\x8c:',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': '\xd0\x94\xd0\xbb\xd1\x8f \xd0\xbf\xd0\xbe\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd1\x81\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xbd\xd1\x8b\xd1\x85 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81\xd0\xbe\xd0\xb2 \xd0\xb8\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd1\x83\xd0\xb9\xd1\x82\xd0\xb5 \xd0\xbe\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0\xd1\x82\xd0\xbe\xd1\x80\xd1\x8b "\xd0\x98": (...)&(...), "\xd0\x98\xd0\x9b\xd0\x98": (...)|(...), "\xd0\x9d\xd0\x95": ~(...).',
+'User %(id)s Registered': '\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c %(id)s \xd0\xb7\xd0\xb0\xd1\x80\xd0\xb5\xd0\xb3\xd0\xb8\xd1\x81\xd1\x82\xd1\x80\xd0\xb8\xd1\x80\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd',
+'Verify Password': '\xd0\x9f\xd0\xbe\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xb8\xd1\x82\xd0\xb5 \xd0\xbf\xd0\xb0\xd1\x80\xd0\xbe\xd0\xbb\xd1\x8c',
+'View': 'View',
+'Welcome %s': 'Welcome %s',
+'Welcome to web2py': '\xd0\x94\xd0\xbe\xd0\xb1\xd1\x80\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xb6\xd0\xb0\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb2 web2py',
+'appadmin is disabled because insecure channel': 'appadmin is disabled because insecure channel',
+'cache': 'cache',
+'change password': 'change password',
+'click here for online examples': '\xd0\xbf\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80\xd1\x8b \xd0\xbe\xd0\xbd-\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd',
+'click here for the administrative interface': '\xd0\xb0\xd0\xb4\xd0\xbc\xd0\xb8\xd0\xbd\xd0\xb8\xd1\x81\xd1\x82\xd1\x80\xd0\xb0\xd1\x82\xd0\xb8\xd0\xb2\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd1\x84\xd0\xb5\xd0\xb9\xd1\x81',
+'customize me!': '\xd0\xbd\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd1\x82\xd0\xb5 \xd0\xb2\xd0\xbd\xd0\xb5\xd1\x88\xd0\xbd\xd0\xb8\xd0\xb9 \xd0\xb2\xd0\xb8\xd0\xb4!',
+'data uploaded': '\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xb7\xd0\xb0\xd0\xb3\xd1\x80\xd1\x83\xd0\xb6\xd0\xb5\xd0\xbd\xd1\x8b',
+'database': '\xd0\xb1\xd0\xb0\xd0\xb7\xd0\xb0 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85',
+'database %s select': '\xd0\xb2\xd1\x8b\xd0\xb1\xd0\xbe\xd1\x80 \xd0\xb1\xd0\xb0\xd0\xb7\xd1\x8b \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85 %s',
+'db': '\xd0\x91\xd0\x94',
+'design': '\xd0\xb4\xd0\xb8\xd0\xb7\xd0\xb0\xd0\xb9\xd0\xbd',
+'done!': '\xd0\xb3\xd0\xbe\xd1\x82\xd0\xbe\xd0\xb2\xd0\xbe!',
+'edit profile': 'edit profile',
+'export as csv file': '\xd1\x8d\xd0\xba\xd1\x81\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82 \xd0\xb2 csv-\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb',
+'insert new': '\xd0\xb4\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c',
+'insert new %s': '\xd0\xb4\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c %s',
+'invalid request': '\xd0\xbd\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81',
+'login': 'login',
+'logout': 'logout',
+'new record inserted': '\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x8f \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c \xd0\xb4\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb0',
+'next 100 rows': '\xd1\x81\xd0\xbb\xd0\xb5\xd0\xb4\xd1\x83\xd1\x8e\xd1\x89\xd0\xb8\xd0\xb5 100 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba',
+'or import from csv file': '\xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xb8\xd0\xbc\xd0\xbf\xd0\xbe\xd1\x80\xd1\x82 \xd0\xb8\xd0\xb7 csv-\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb\xd0\xb0',
+'previous 100 rows': '\xd0\xbf\xd1\x80\xd0\xb5\xd0\xb4\xd1\x8b\xd0\xb4\xd1\x83\xd1\x89\xd0\xb8\xd0\xb5 100 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba',
+'record': 'record',
+'record does not exist': '\xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8c \xd0\xbd\xd0\xb5 \xd0\xbd\xd0\xb0\xd0\xb9\xd0\xb4\xd0\xb5\xd0\xbd\xd0\xb0',
+'record id': 'id \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd0\xb8',
+'register': 'register',
+'selected': '\xd0\xb2\xd1\x8b\xd0\xb1\xd1\x80\xd0\xb0\xd0\xbd\xd0\xbe',
+'state': '\xd1\x81\xd0\xbe\xd1\x81\xd1\x82\xd0\xbe\xd1\x8f\xd0\xbd\xd0\xb8\xd0\xb5',
+'table': '\xd1\x82\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xb8\xd1\x86\xd0\xb0',
+'unable to parse csv file': '\xd0\xbd\xd0\xb5\xd1\x87\xd0\xb8\xd1\x82\xd0\xb0\xd0\xb5\xd0\xbc\xd1\x8b\xd0\xb9 csv-\xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb',
+}