Repository: web2py/web2py

Issue:
LOAD(ajax=True) is missing a translation
When I call `{{=LOAD('default','page.load', ajax=True)}}` in a view, it displays the text "loading..." while the component is being loaded. On my version of web2py (Version 2.14.6-stable+timestamp.2016.05.10.00.21.47, on OS X), the string 'loading...' is not translated into different languages, e.g. if I visit the page with a browser set to default to french.


Discussion:

Resolving patch:
diff --git a/applications/admin/languages/fr.py b/applications/admin/languages/fr.py
--- a/applications/admin/languages/fr.py
+++ b/applications/admin/languages/fr.py
@@ -21,18 +21,19 @@
 '**%(items)s** items, **%(bytes)s** %%{byte(bytes)}': '**%(items)s** items, **%(bytes)s** %%{byte(bytes)}',
 '**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
 '?': '?',
+'@markmin\x01An error occured, please [[reload %s]] the page': 'An error occured, please [[reload %s]] the page',
 '@markmin\x01Searching: **%s** %%{file}': 'Cherche: **%s** fichiers',
 '``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
 'A new version of web2py is available: %s': 'Une nouvelle version de web2py est disponible: %s ',
 'A new version of web2py is available: Version 1.68.2 (2009-10-21 09:59:29)\n': 'Une nouvelle version de web2py est disponible: Version 1.68.2 (2009-10-21 09:59:29)\r\n',
 'Abort': 'Abort',
-'About': 'à propos',
-'About application': "A propos de l'application",
+'About': 'À propos',
+'About application': "À propos de l'application",
 'Accept Terms': 'Termes acceptés',
 'Add breakpoint': 'Ajouter une interruption',
 'additional code for your application': 'code supplémentaire pour votre application',
 'Additional code for your application': 'Code additionnel pour votre application',
-'Admin design page': 'Admin design page',
+'Admin design page': 'Page de conception admin',
 'admin disabled because no admin password': 'admin désactivée car aucun mot de passe admin',
 'admin disabled because not supported on google app engine': 'admin désactivée car non prise en charge sur Google Apps engine',
 'admin disabled because too many invalid login attempts': 'admin disabled because too many invalid login attempts',
@@ -41,7 +42,7 @@
 'Admin language': "Language de l'admin",
 'Admin versioning page': 'Admin versioning page',
 'administrative interface': "interface d'administration",
-'Administrator Password:': 'Mot de passe Administrateur:',
+'Administrator Password:': "Mot de passe de l'administrateur:",
 'An error occured, please [[reload %s]] the page': 'Une erreur c’est produite, s’il vous plait [[reload %s]] la page',
 'and rename it (required):': 'et renommez-la (obligatoire):',
 'and rename it:': 'et renommez-le:',
@@ -57,14 +58,14 @@
 'application is compiled and cannot be designed': "l'application est compilée et ne peut être modifiée",
 'Application name:': "Nom de l'application:",
 'Application updated via git pull': 'Application updated via git pull',
-'are not used': 'are not used',
-'are not used yet': 'are not used yet',
+'are not used': 'ne sont pas utilisé',
+'are not used yet': 'ne sont pas encore utilisé',
 'Are you sure you want to delete file "%s"?': 'Êtes-vous sûr de vouloir supprimer le fichier «%s»?',
 'Are you sure you want to delete plugin "%s"?': 'Êtes-vous sûr de vouloir supprimer le plugin "%s"?',
 'Are you sure you want to delete this object?': 'Êtes-vous sûr de vouloir supprimer cet objet?',
 'Are you sure you want to uninstall application "%s"?': "Êtes-vous sûr de vouloir désinstaller l'application «%s»?",
 'Are you sure you want to upgrade web2py now?': 'Êtes-vous sûr de vouloir mettre à jour web2py maintenant?',
-'Are you sure?': 'Etes vous sûr?',
+'Are you sure?': 'Êtes vous sûr?',
 'arguments': 'arguments',
 'at char %s': 'at char %s',
 'at line %s': 'at line %s',
@@ -73,13 +74,13 @@
 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: les tests ne sont pas thread-safe DONC NE PAS EFFECTUER DES TESTS MULTIPLES SIMULTANÉMENT.',
 'ATTENTION: you cannot edit the running application!': "ATTENTION: vous ne pouvez pas modifier l'application qui tourne!",
 'Autocomplete Python Code': 'Autocomplete Python Code',
-'Available databases and tables': 'Bases de données et tables disponible',
+'Available databases and tables': 'Bases de données et tables disponibles',
 'Available Databases and Tables': 'Available Databases and Tables',
 'back': 'retour',
 'Back to the plugins list': 'Retour à la liste de plugins',
 'Back to wizard': 'Back to wizard',
 'Basics': 'Basics',
-'Begin': 'Begin',
+'Begin': 'Début',
 'breakpoint': 'breakpoint',
 'Breakpoints': 'Breakpoints',
 'breakpoints': 'breakpoints',
@@ -92,7 +93,7 @@
 'Cache Keys': 'Cache Keys',
 'cache, errors and sessions cleaned': 'cache, erreurs et sessions nettoyés',
 'can be a git repo': 'can be a git repo',
-'Cancel': 'Retour',
+'Cancel': 'Annuler',
 'Cannot be empty': 'Ne peut pas être vide',
 'Cannot compile: there are errors in your app.        Debug it, correct errors and try again.': 'Ne peut pas compiler: il y a des erreurs dans votre application. corriger les erreurs et essayez à nouveau.',
 'Cannot compile: there are errors in your app:': 'Ne peut pas compiler: il y a des erreurs dans votre application:',
@@ -102,60 +103,60 @@
 'Change admin password': 'Changer le mot de passe admin',
 'change editor settings': 'change editor settings',
 'Changelog': 'Changelog',
-'check all': 'tout vérifier ',
+'check all': 'tout sélectionner',
 'Check for upgrades': 'Vérifier les mises à jour',
 'Check to delete': 'Cocher pour supprimer',
 'Checking for upgrades...': 'Vérification des mises à jour ... ',
 'Clean': 'nettoyer',
-'Clear': 'Clear',
-'Clear CACHE?': 'Clear CACHE?',
-'Clear DISK': 'Clear DISK',
-'Clear RAM': 'Clear RAM',
+'Clear': 'Effacer',
+'Clear CACHE?': 'Effacer le CACHE?',
+'Clear DISK': 'Effacer le DISQUE',
+'Clear RAM': 'Effacer la RAM',
 'Click row to expand traceback': 'Click row to expand traceback',
 'Click row to view a ticket': 'Click row to view a ticket',
 'click to check for upgrades': 'Cliquez pour vérifier les mises jour',
 'code': 'code',
 'Code listing': 'Code listing',
 'collapse/expand all': 'tout réduire/agrandir',
-'Command': 'Command',
-'Comment:': 'Comment:',
-'Commit': 'Commit',
-'Commit form': 'Commit form',
-'Committed files': 'Committed files',
+'Command': 'Commande',
+'Comment:': 'Commentaire:',
+'Commit': 'Valider',
+'Commit form': 'Valider le formulaire',
+'Committed files': 'Fichiers validés',
 'Compile': 'compiler',
 'Compile (all or nothing)': 'Compile (all or nothing)',
 'Compile (skip failed views)': 'Compile (skip failed views)',
 'compiled application removed': 'application compilée enlevée',
 'Condition': 'Condition',
-'continue': 'continue',
+'continue': 'continuer',
 'Controllers': 'Contrôleurs',
 'controllers': 'contrôleurs',
-'Count': 'Count',
+'Count': 'Compte',
 'Create': 'Créer',
 'create file with filename:': 'créer un fichier avec nom de fichier:',
 'create new application:': 'créer une nouvelle application:',
 'Create new simple application': 'Créer une nouvelle application',
 'Create/Upload': 'Create/Upload',
 'created by': 'créé par',
-'Created by:': 'Created by:',
-'Created On': 'Created On',
-'Created on:': 'Created on:',
+'Created by:': 'Créé par:',
+'Created On': 'Créé le',
+'Created on:': 'Créé le:',
 'crontab': 'crontab',
 'Current request': 'Requête actuelle',
 'Current response': 'Réponse actuelle',
 'Current session': 'Session en cours',
 'currently running': 'tourne actuellement',
 'currently saved or': 'actuellement enregistré ou',
-'data uploaded': 'données chargées',
-'Database': 'Database',
+'data uploaded': 'données téléversées',
+'Database': 'Base de données',
 'database': 'base de données',
 'Database %s select': 'Database %s select',
-'database %s select': 'base de données  %s sélectionner',
-'Database administration': 'Database administration',
+'database %s select': 'base de données %s sélectionner',
+'Database administration': 'Administration base de données',
 'database administration': 'administration base de données',
 'Database Administration (appadmin)': 'Database Administration (appadmin)',
 'Date and Time': 'Date et heure',
-'db': 'bdd',
+'db': 'bd',
 'Debug': 'Debug',
 'defines tables': 'définit les tables',
 'Delete': 'Supprimer',
@@ -165,7 +166,7 @@
 'Delete this file (you will be asked to confirm deletion)': 'Supprimer ce fichier (on vous demandera de confirmer la suppression)',
 'Delete:': 'Supprimer:',
 'deleted after first hit': 'deleted after first hit',
-'Demo': 'Demo',
+'Demo': 'Démo',
 'Deploy': 'Déployer',
 'Deploy on Google App Engine': 'Déployer sur Google App Engine',
 'Deploy to OpenShift': 'Deploy to OpenShift',
@@ -176,22 +177,22 @@
 'Description:': 'Description:',
 'design': 'conception',
 'Detailed traceback description': 'Detailed traceback description',
-'details': 'details',
+'details': 'détails',
 'direction: ltr': 'direction: ltr',
 'directory not found': 'directory not found',
-'Disable': 'Disable',
-'Disabled': 'Disabled',
+'Disable': 'Désactiver',
+'Disabled': 'Désactivé',
 'disabled in demo mode': 'disabled in demo mode',
 'disabled in GAE mode': 'disabled in GAE mode',
 'disabled in multi user mode': 'disabled in multi user mode',
-'DISK': 'DISK',
+'DISK': 'DISQUE',
 'Disk Cache Keys': 'Disk Cache Keys',
-'Disk Cleared': 'Disk Cleared',
+'Disk Cleared': 'Disque effacé',
 'DISK contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'DISK contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
 'Display line numbers': 'Display line numbers',
 'DO NOT use the "Pack compiled" feature.': 'DO NOT use the "Pack compiled" feature.',
-'docs': 'docs',
-'Docs': 'Docs',
+'docs': 'documents',
+'Docs': 'Documents',
 'done!': 'fait!',
 'Downgrade': 'Downgrade',
 'Download .w2p': 'Download .w2p',
@@ -201,43 +202,43 @@
 'download plugins': 'télécharger plugins',
 'Download plugins from repository': 'Download plugins from repository',
 'EDIT': 'MODIFIER',
-'Edit': 'modifier',
-'edit all': 'edit all',
+'Edit': 'Modifier',
+'edit all': 'tout modifier',
 'Edit application': "Modifier l'application",
 'edit controller': 'modifier contrôleur',
-'edit controller:': 'edit controller:',
-'Edit current record': 'Modifier cette entrée',
-'edit views:': 'modifier vues:',
-'Editing %s': 'Editing %s',
+'edit controller:': 'modifier le contrôleur:',
+'Edit current record': 'Modifier cet enregistrement',
+'edit views:': 'modifier les vues:',
+'Editing %s': 'Modifier %s',
 'Editing file': 'Modifier le fichier',
 'Editing file "%s"': 'Modifier le fichier "% s" ',
 'Editing Language file': 'Modifier le fichier de langue',
-'Editing Plural Forms File': 'Editing Plural Forms File',
-'Editor': 'Editor',
-'Email Address': 'Email Address',
-'Enable': 'Enable',
+'Editing Plural Forms File': 'Modifier le fichier du formulaire pluriel',
+'Editor': 'Éditeur',
+'Email Address': 'Adresse courriel',
+'Enable': 'Activer',
 'Enable Close-Tag': 'Enable Close-Tag',
 'Enable Code Folding': 'Enable Code Folding',
 'Enterprise Web Framework': 'Enterprise Web Framework',
 'Error': 'Error',
 'Error logs for "%(app)s"': 'Journal d\'erreurs pour "%(app)s"',
 'Error snapshot': 'Error snapshot',
-'Error ticket': 'Error ticket',
-'Errors': 'erreurs',
+'Error ticket': "Billet d'erreur",
+'Errors': 'Erreurs',
 'Exception %(extype)s: %(exvalue)s': 'Exception %(extype)s: %(exvalue)s',
 'Exception %s': 'Exception %s',
 'Exception instance attributes': "Attributs d'instance Exception",
 'Exit Fullscreen': 'Exit Fullscreen',
 'Expand Abbreviation (html files only)': 'Expand Abbreviation (html files only)',
 'export as csv file': 'export au format CSV',
-'Exports:': 'Exports:',
+'Exports:': 'Exportions:',
 'exposes': 'expose',
 'exposes:': 'expose:',
 'extends': 'étend',
 'failed to compile file because:': 'failed to compile file because:',
 'failed to reload module': 'impossible de recharger le module',
 'failed to reload module because:': 'impossible de recharger le module car:',
-'File': 'File',
+'File': 'Fichier',
 'file "%(filename)s" created': 'fichier "%(filename)s" créé',
 'file "%(filename)s" deleted': 'fichier "%(filename)s" supprimé',
 'file "%(filename)s" uploaded': 'fichier "%(filename)s" chargé',
@@ -247,19 +248,19 @@
 'file not found': 'file not found',
 'file saved on %(time)s': 'fichier enregistré le %(time)s',
 'file saved on %s': 'fichier enregistré le %s',
-'filename': 'filename',
-'Filename': 'Filename',
-'Files added': 'Files added',
+'filename': 'nom de fichier',
+'Filename': 'Nom de fichier',
+'Files added': 'Fichiers ajoutés',
 'filter': 'filtre',
-'Find Next': 'Find Next',
-'Find Previous': 'Find Previous',
-'Form has errors': 'Form has errors',
+'Find Next': 'Trouver les suivants',
+'Find Previous': 'Trouver les précédents',
+'Form has errors': 'Le formulaire comporte des erreurs',
 'Frames': 'Frames',
 'Functions with no doctests will result in [passed] tests.': 'Des fonctions sans doctests entraîneront des tests [passed] .',
 'GAE Email': 'GAE Email',
 'GAE Output': 'GAE Output',
-'GAE Password': 'GAE Password',
-'Generate': 'Generate',
+'GAE Password': 'Mot de passe GAE',
+'Generate': 'Générer',
 'Git Pull': 'Git Pull',
 'Git Push': 'Git Push',
 'Globals##debug': 'Globals##debug',
@@ -267,15 +268,15 @@
 'Google App Engine Deployment Interface': 'Google App Engine Deployment Interface',
 'Google Application Id': 'Google Application Id',
 'Goto': 'Goto',
-'graph model': 'graph model',
-'Graph Model': 'Graph Model',
+'graph model': 'représentation graphique du modèle',
+'Graph Model': 'Représentation graphique du modèle',
 'Help': 'aide',
-'here': 'here',
+'here': 'ici',
 'Hide/Show Translated strings': 'Hide/Show Translated strings',
 'Highlight current line': 'Highlight current line',
 'Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})': 'Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})',
 'Hits': 'Hits',
-'Home': 'Home',
+'Home': 'Accueil',
 'honored only if the expression evaluates to true': 'honored only if the expression evaluates to true',
 'htmledit': 'edition html',
 'If start the downgrade, be patient, it may take a while to rollback': 'If start the downgrade, be patient, it may take a while to rollback',
@@ -283,7 +284,7 @@
 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\n\t\tA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\n\t\tA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': "Si le rapport ci-dessus contient un numéro de ticket, cela indique une défaillance dans l'exécution du contrôleur, avant toute tentative d'exécuter les doctests. Cela est généralement dû à une erreur d'indentation ou une erreur à l'extérieur du code de la fonction.\r\nUn titre vert indique que tous les tests (si définis) sont passés. Dans ce cas, les résultats des essais ne sont pas affichées.",
 'if your application uses a database other than sqlite you will then have to configure its DAL in pythonanywhere.': 'if your application uses a database other than sqlite you will then have to configure its DAL in pythonanywhere.',
-'import': 'import',
+'import': 'importer',
 'Import/Export': 'Importer/Exporter',
 'In development, use the default Rocket webserver that is currently supported by this debugger.': 'In development, use the default Rocket webserver that is currently supported by this debugger.',
 'includes': 'inclus',
@@ -311,14 +312,14 @@
 'Invalid request': 'Invalid request',
 'invalid table names (auth_* tables already defined)': 'invalid table names (auth_* tables already defined)',
 'invalid ticket': 'ticket non valide',
-'Key': 'Key',
+'Key': 'Clé',
 'Keyboard shortcuts': 'Keyboard shortcuts',
 'kill process': 'kill process',
 'language file "%(filename)s" created/updated': 'fichier de langue "%(filename)s" créé/mis à jour',
 'Language files (static strings) updated': 'Fichiers de langue (chaînes statiques) mis à jour ',
 'languages': 'langues',
 'Languages': 'Langues',
-'Last Revision': 'Last Revision',
+'Last Revision': 'Dernière révision',
 'Last saved on:': 'Dernière sauvegarde le:',
 'License for': 'Licence pour',
 'License:': 'License:',
@@ -326,8 +327,8 @@
 'Line number': 'Line number',
 'lists by exception': 'lists by exception',
 'lists by ticket': 'lists by ticket',
-'Loading...': 'Loading...',
-'loading...': 'Chargement ...',
+'Loading...': 'Chargement...',
+'loading...': 'chargement ...',
 'Local Apps': 'Local Apps',
 'locals': 'locals',
 'Locals##debug': 'Locals##debug',
@@ -337,7 +338,7 @@
 'Login to the Administrative Interface': "Se connecter à l'interface d'administration",
 'Login/Register': 'Login/Register',
 'Logout': 'déconnexion',
-'lost password': 'lost password',
+'lost password': 'mot de passe perdu',
 'Main Menu': 'Main Menu',
 'Manage': 'Manage',
 'Manage %(action)s': 'Manage %(action)s',
@@ -350,7 +351,7 @@
 'merge': 'fusionner',
 'Models': 'Modèles',
 'models': 'modèles',
-'Modified On': 'Modified On',
+'Modified On': 'Modifié le',
 'Modules': 'Modules',
 'modules': 'modules',
 'Multi User Mode': 'Multi User Mode',
@@ -363,8 +364,8 @@
 'New Record': 'Nouvelle Entrée',
 'new record inserted': 'nouvelle entrée insérée',
 'New simple application': 'Nouvelle application simple',
-'next': 'next',
-'next %s rows': 'next %s rows',
+'next': 'suivant',
+'next %s rows': '%s lignes suivantes',
 'next 100 rows': '100 lignes suivantes',
 'NO': 'NON',
 'no changes': 'no changes',
@@ -374,8 +375,8 @@
 'no package selected': 'no package selected',
 'no permission to uninstall "%s"': 'no permission to uninstall "%s"',
 'Node:': 'Node:',
-'Not Authorized': 'Not Authorized',
-'Not supported': 'Not supported',
+'Not Authorized': 'Pas autorisé',
+'Not supported': 'Pas supporté',
 'Note: If you receive an error with github status code of 128, ensure the system and account you are deploying from has a cooresponding ssh key configured in the openshift account.': 'Note: If you receive an error with github status code of 128, ensure the system and account you are deploying from has a cooresponding ssh key configured in the openshift account.',
 'Number of entries: **%s**': 'Number of entries: **%s**',
 "On production, you'll have to configure your webserver to use one process and multiple threads to use this debugger.": "On production, you'll have to configure your webserver to use one process and multiple threads to use this debugger.",
@@ -402,14 +403,14 @@
 'Peeking at file': 'Jeter un oeil au fichier',
 'Permission': 'Permission',
 'Permissions': 'Permissions',
-'Please': 'Please',
+'Please': 'SVP',
 'Please wait, giving pythonanywhere a moment...': 'Please wait, giving pythonanywhere a moment...',
 'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" supprimé',
 'Plugin "%s" in application': 'Plugin "%s" dans l\'application',
 'plugin not specified': 'plugin not specified',
 'Plugin page': 'Plugin page',
-'plugins': 'plugins',
-'Plugins': 'Plugins',
+'plugins': 'plugiciels',
+'Plugins': 'Plugiciels',
 'Plural Form #%s': 'Plural Form #%s',
 'Plural-Forms:': 'Plural-Forms:',
 'Powered by': 'Propulsé par',
@@ -423,7 +424,7 @@
 'Pull': 'Pull',
 'Pull failed, certain files could not be checked out. Check logs for details.': 'Pull failed, certain files could not be checked out. Check logs for details.',
 'Pull is not possible because you have unmerged files. Fix them up in the work tree, and then try again.': 'Pull is not possible because you have unmerged files. Fix them up in the work tree, and then try again.',
-'Push': 'Push',
+'Push': 'Pousser',
 'Push failed, there are unmerged entries in the cache. Resolve merge issues manually and try again.': 'Push failed, there are unmerged entries in the cache. Resolve merge issues manually and try again.',
 'pygraphviz library not found': 'pygraphviz library not found',
 'PythonAnywhere Apps': 'PythonAnywhere Apps',
@@ -433,9 +434,9 @@
 'RAM Cache Keys': 'RAM Cache Keys',
 'Ram Cleared': 'Ram Cleared',
 'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
-'Rapid Search': 'Rapid Search',
-'Record': 'Record',
-'record': 'entrée',
+'Rapid Search': 'Recherche rapide',
+'Record': 'Enregistrement',
+'record': 'enregistrement',
 'record does not exist': "l'entrée n'existe pas",
 'record id': 'id entrée',
 'Record id': 'Record id',
@@ -444,24 +445,24 @@
 'Reload routes': 'Reload routes',
 'Remove compiled': 'retirer compilé',
 'Removed Breakpoint on %s at line %s': 'Removed Breakpoint on %s at line %s',
-'Replace': 'Replace',
-'Replace All': 'Replace All',
+'Replace': 'Remplacer',
+'Replace All': 'Tout remplacer',
 'Repository (%s)': 'Repository (%s)',
 'request': 'request',
 'requires distutils, but not installed': 'requires distutils, but not installed',
 'requires python-git, but not installed': 'requires python-git, but not installed',
 'Resolve Conflict file': 'Résoudre les conflits de fichiers',
 'response': 'response',
-'restart': 'restart',
+'restart': 'redémarrer',
 'restore': 'restaurer',
-'return': 'return',
-'Revert': 'Revert',
-'revert': 'revenir',
+'return': 'retour',
+'Revert': "Revenir vers l'arrière",
+'revert': "revenir vers l'arrière",
 'reverted to revision %s': 'reverted to revision %s',
-'Revision %s': 'Revision %s',
-'Revision:': 'Revision:',
-'Role': 'Role',
-'Roles': 'Roles',
+'Revision %s': 'Révision %s',
+'Revision:': 'Révision:',
+'Role': 'Rôle',
+'Roles': 'Rôles',
 'Rows in Table': 'Rows in Table',
 'Rows in table': 'Lignes de la table',
 'Rows selected': 'Lignes sélectionnées',
@@ -470,15 +471,15 @@
 'Run tests in this file': 'Run tests in this file',
 "Run tests in this file (to run all files, you may also use the button labelled 'test')": "Lancer les tests dans ce fichier (pour lancer tous les fichiers, vous pouvez également utiliser le bouton nommé 'test')",
 'Running on %s': 'Running on %s',
-'Save': 'Enregistrer',
-'save': 'sauver',
-'Save file:': 'Save file:',
-'Save file: %s': 'Save file: %s',
-'Save model as...': 'Save model as...',
-'Save via Ajax': 'Save via Ajax',
+'Save': 'Sauvegarder',
+'save': 'sauvegarder',
+'Save file:': 'Sauvegarder le fichier:',
+'Save file: %s': 'Sauvegarder le fichier : %s',
+'Save model as...': 'Sauvegarder le modèle sous...',
+'Save via Ajax': 'Sauvegarder via Ajax',
 'Saved file hash:': 'Hash du Fichier enregistré:',
-'Screenshot %s': 'Screenshot %s',
-'Search': 'Search',
+'Screenshot %s': "Capture d'écran %s",
+'Search': 'Rechercher',
 'Searching: **%s** %%{file}': 'Searching: **%s** %%{file}',
 'Select Files to Package': 'Select Files to Package',
 'selected': 'sélectionnés',
@@ -491,34 +492,34 @@
 'Showing %s to %s of %s %s found': 'Showing %s to %s of %s %s found',
 'Singular Form': 'Singular Form',
 'Site': 'Site',
-'Size of cache:': 'Size of cache:',
+'Size of cache:': 'Taille de la mémoire cache:',
 'skip to generate': 'skip to generate',
 'some files could not be removed': 'certains fichiers ne peuvent pas être supprimés',
 'Something went wrong please wait a few minutes before retrying': 'Something went wrong please wait a few minutes before retrying',
 'Sorry, could not find mercurial installed': 'Sorry, could not find mercurial installed',
 'source : db': 'source : db',
-'source : filesystem': 'source : filesystem',
-'Start a new app': 'Start a new app',
-'Start searching': 'Start searching',
+'source : filesystem': 'source : système de fichier',
+'Start a new app': 'Commencer une nouvelle application',
+'Start searching': 'Débuté la recherche',
 'Start wizard': "Démarrer l'assistant",
 'state': 'état',
-'Static': 'Static',
-'static': 'statiques',
+'Static': 'Statique',
+'static': 'statique',
 'Static files': 'Fichiers statiques',
 'Statistics': 'Statistics',
 'Step': 'Step',
 'step': 'step',
-'stop': 'stop',
+'stop': 'arrêt',
 'submit': 'envoyer',
-'Submit': 'Submit',
-'successful': 'successful',
-'Sure you want to delete this object?': 'Vous êtes sûr de vouloir supprimer cet objet? ',
-'switch to : db': 'switch to : db',
+'Submit': 'Envoyer',
+'successful': 'réussi',
+'Sure you want to delete this object?': 'Vous êtes sûr de vouloir supprimer cet objet?',
+'switch to : db': 'transférer dans : db',
 'switch to : filesystem': 'switch to : filesystem',
 'Tab width (# characters)': 'Tab width (# characters)',
 'table': 'table',
 'Table': 'Table',
-'Temporary': 'Temporary',
+'Temporary': 'Temporaire',
 'test': 'tester',
 'Testing application': "Test de l'application",
 'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "requête" est une condition comme "db.table1.field1==\'value\'". Quelque chose comme "db.table1.field1==db.table2.field2" aboutit à un JOIN SQL.',
@@ -530,14 +531,14 @@
 'The data representation, define database tables and sets': 'La représentation des données, définir les tables et ensembles de la base de données',
 'The presentations layer, views are also known as templates': 'Les couches de présentation, les vues sont également appelées modples',
 'the presentations layer, views are also known as templates': 'la couche de présentation, les vues sont également appelées modèles',
-'Theme': 'Theme',
+'Theme': 'Thème',
 'There are no controllers': "Il n'y a pas de contrôleurs",
 'There are no models': "Il n'y a pas de modèles",
 'There are no modules': "Il n'y a pas de modules",
 'There are no plugins': "Il n'y a pas de plugins",
-'There are no private files': 'There are no private files',
+'There are no private files': "Il n'y a pas de fichiers privés",
 'There are no static files': "Il n'y a pas de fichiers statiques",
-'There are no translators': 'There are no translators',
+'There are no translators': "Il n'y a pas de traducteurs",
 'There are no translators, only default language is supported': "Il n'y a pas de traducteurs, seule la langue par défaut est prise en charge",
 'There are no views': "Il n'y a pas de vues",
 'These files are not served, they are only available from within your app': 'These files are not served, they are only available from within your app',
@@ -552,9 +553,9 @@
 'this page to see if a breakpoint was hit and debug interaction is required.': 'this page to see if a breakpoint was hit and debug interaction is required.',
 'This will pull changes from the remote repo for application "%s"?': 'This will pull changes from the remote repo for application "%s"?',
 'This will push changes to the remote repo for application "%s".': 'This will push changes to the remote repo for application "%s".',
-'Ticket': 'Ticket',
-'Ticket ID': 'Ticket ID',
-'Ticket Missing': 'Ticket Missing',
+'Ticket': 'Billet',
+'Ticket ID': 'Identifiant du Billet',
+'Ticket Missing': 'Billet manquant',
 'Time in Cache (h:m:s)': 'Time in Cache (h:m:s)',
 'TM': 'MD',
 'to  previous version.': 'à la version précédente.',
@@ -569,8 +570,8 @@
 'Translation strings for the application': "Chaînes de traduction pour l'application",
 'try': 'essayer',
 'try something like': 'essayez quelque chose comme',
-'Try the mobile interface': 'Try the mobile interface',
-'try view': 'try view',
+'Try the mobile interface': "Essayer l'interface pour mobile",
+'try view': 'essayer la vue',
 'Type PDB debugger command in here and hit Return (Enter) to execute it.': 'Type PDB debugger command in here and hit Return (Enter) to execute it.',
 'Type some Python code in here and hit Return (Enter) to execute it.': 'Type some Python code in here and hit Return (Enter) to execute it.',
 'Unable to check for upgrades': 'Impossible de vérifier les mises à jour',
@@ -595,25 +596,25 @@
 'update': 'mettre à jour',
 'update all languages': 'mettre à jour toutes les langues',
 'Update:': 'Mise à jour:',
-'Upgrade': 'Upgrade',
+'Upgrade': 'Mese à jour de version',
 'upgrade now': 'mettre à jour maintenant',
-'upgrade now to %s': 'upgrade now to %s',
+'upgrade now to %s': 'mettre à jour maintenant à %s',
 'upgrade web2py now': 'mettre à jour web2py maintenant',
-'upload': 'charger',
-'Upload': 'Upload',
+'upload': 'téléversé',
+'Upload': 'Téléversé',
 'Upload & install packed application': "Charger & installer l'application empaquetée",
-'Upload a package:': 'Charger un paquet:',
-'Upload and install packed application': 'Upload and install packed application',
-'upload application:': "charger l'application:",
-'Upload existing application': 'Charger une application existante',
-'upload file:': 'charger le fichier:',
+'Upload a package:': 'Téléverser un paquet:',
+'Upload and install packed application': 'Téléversement et installation du paquet applicatif',
+'upload application:': "téléverser l'application:",
+'Upload existing application': 'Téléverser une application existante',
+'upload file:': 'téléverser le fichier:',
 'upload plugin file:': 'charger fichier plugin:',
 'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Utilisez (...)&(...) pour AND, (...)|(...) pour OR, et ~(...) pour NOT afin de construire des requêtes plus complexes. ',
 'Use an url:': 'Utiliser une url:',
 'user': 'utilisateur',
-'User': 'User',
-'Username': 'Username',
-'Users': 'Users',
+'User': 'Utilisateur',
+'Username': "Nom d'utilisateur",
+'Users': 'Utilisateurs',
 'Using the shell may lock the database to other users of this app.': 'Using the shell may lock the database to other users of this app.',
 'variables': 'variables',
 'Version': 'Version',
@@ -625,9 +626,9 @@
 'Warning!': 'Warning!',
 'WARNING:': 'WARNING:',
 'WARNING: The following views could not be compiled:': 'WARNING: The following views could not be compiled:',
-'Web Framework': 'Framework Web',
-'web2py Admin Password': 'web2py Admin Password',
-'web2py apps to deploy': 'web2py apps to deploy',
+'Web Framework': 'Cadre Web',
+'web2py Admin Password': 'Mot de passe admin web2py',
+'web2py apps to deploy': 'applications web2py à deployer',
 'web2py Debugger': 'web2py Debugger',
 'web2py downgrade': 'web2py downgrade',
 'web2py is up to date': 'web2py est à jour',
@@ -635,10 +636,10 @@
 'web2py Recent Tweets': 'Tweets récents sur web2py ',
 'web2py upgrade': 'web2py upgrade',
 'web2py upgraded; please restart it': 'web2py mis à jour; veuillez le redémarrer',
-'Working...': 'Working...',
+'Working...': 'Travail en cours...',
 'WSGI reference name': 'WSGI reference name',
 'YES': 'OUI',
-'Yes': 'Yes',
+'Yes': 'Oui',
 'You can also set and remove breakpoint in the edit window, using the Toggle Breakpoint button': 'You can also set and remove breakpoint in the edit window, using the Toggle Breakpoint button',
 'You can inspect variables using the console below': 'You can inspect variables using the console below',
 'You have one more login attempt before you are locked out': 'You have one more login attempt before you are locked out',
diff --git a/applications/welcome/languages/fr-ca.py b/applications/welcome/languages/fr-ca.py
--- a/applications/welcome/languages/fr-ca.py
+++ b/applications/welcome/languages/fr-ca.py
@@ -3,8 +3,8 @@
 '!langcode!': 'fr-ca',
 '!langname!': 'Français (Canadien)',
 '"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"update" est une expression optionnelle comme "champ1=\'nouvellevaleur\'". Vous ne pouvez mettre à jour ou supprimer les résultats d\'un JOIN',
-'%s %%{row} deleted': '%s rangées supprimées',
-'%s %%{row} updated': '%s rangées mises à jour',
+'%s %%{row} deleted': '%s lignes supprimées',
+'%s %%{row} updated': '%s lignes mises à jour',
 '%s selected': '%s sélectionné',
 '%Y-%m-%d': '%Y-%m-%d',
 '%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
@@ -13,12 +13,13 @@
 '**%(items)s** items, **%(bytes)s** %%{byte(bytes)}': '**%(items)s** items, **%(bytes)s** %%{byte(bytes)}',
 '**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
 '?': '?',
+'@markmin\x01An error occured, please [[reload %s]] the page': 'An error occured, please [[reload %s]] the page',
 '``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
 'about': 'à propos',
 'About': 'À propos',
 'Access Control': "Contrôle d'accès",
 'admin': 'admin',
-'Administrative Interface': 'Administrative Interface',
+'Administrative Interface': "Interface d'administration",
 'Administrative interface': "Interface d'administration",
 'Ajax Recipes': 'Recettes Ajax',
 'An error occured, please [[reload %s]] the page': 'An error occured, please [[reload %s]] the page',
@@ -37,37 +38,39 @@
 'change password': 'changer le mot de passe',
 'Check to delete': 'Cliquez pour supprimer',
 'Check to delete:': 'Cliquez pour supprimer:',
-'Clear CACHE?': 'Clear CACHE?',
-'Clear DISK': 'Clear DISK',
-'Clear RAM': 'Clear RAM',
+'Clear CACHE?': 'Vider le CACHE?',
+'Clear DISK': 'Vider le DISQUE',
+'Clear RAM': 'Vider la RAM',
 'Client IP': 'IP client',
 'Community': 'Communauté',
-'Components and Plugins': 'Components and Plugins',
+'Components and Plugins': 'Composants et Plugiciels',
 'Config.ini': 'Config.ini',
 'Controller': 'Contrôleur',
 'Copyright': "Droit d'auteur",
+'Created By': 'Créé par',
+'Created On': 'Créé le',
 'Current request': 'Demande actuelle',
 'Current response': 'Réponse actuelle',
 'Current session': 'Session en cours',
 'customize me!': 'personnalisez-moi!',
 'data uploaded': 'données téléchargées',
 'Database': 'base de données',
-'Database %s select': 'base de données %s select',
+'Database %s select': 'base de données %s selectionnée',
 'Database Administration (appadmin)': 'Database Administration (appadmin)',
 'db': 'db',
-'DB Model': 'Modèle DB',
+'DB Model': 'Modèle BD',
 'Delete:': 'Supprimer:',
 'Demo': 'Démo',
-'Deployment Recipes': 'Recettes de déploiement ',
-'Description': 'Descriptif',
+'Deployment Recipes': 'Recettes de déploiement',
+'Description': 'Description',
 'design': 'design',
 'Design': 'Design',
-'DISK': 'DISK',
+'DISK': 'DISQUE',
 'Disk Cache Keys': 'Disk Cache Keys',
-'Disk Cleared': 'Disk Cleared',
+'Disk Cleared': 'Disque vidé',
 'DISK contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'DISK contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
 'Documentation': 'Documentation',
-"Don't know what to do?": "Don't know what to do?",
+"Don't know what to do?": 'Vous ne savez pas quoi faire?',
 'done!': 'fait!',
 'Download': 'Téléchargement',
 'E-mail': 'Courriel',
@@ -75,26 +78,27 @@
 'Edit current record': "Modifier l'enregistrement courant",
 'edit profile': 'modifier le profil',
 'Edit This App': 'Modifier cette application',
-'Email and SMS': 'Email and SMS',
+'Email and SMS': 'Courriel et texto',
+'Enter an integer between %(min)g and %(max)g': 'Enter an integer between %(min)g and %(max)g',
 'enter an integer between %(min)g and %(max)g': 'entrer un entier compris entre %(min)g et %(max)g',
 'Errors': 'Erreurs',
 'export as csv file': 'exporter sous forme de fichier csv',
-'FAQ': 'faq',
+'FAQ': 'FAQ',
 'First name': 'Prénom',
 'Forms and Validators': 'Formulaires et Validateurs',
 'Free Applications': 'Applications gratuites',
 'Function disabled': 'Fonction désactivée',
-'Graph Model': 'Graph Model',
+'Graph Model': 'Représentation graphique du modèle',
 'Group %(group_id)s created': '%(group_id)s groupe créé',
-'Group ID': 'Groupe ID',
+'Group ID': 'ID du groupe',
 'Group uniquely assigned to user %(id)s': "Groupe unique attribué à l'utilisateur %(id)s",
 'Groups': 'Groupes',
 'Hello World': 'Bonjour le monde',
-'Helping web2py': 'Helping web2py',
+'Helping web2py': 'Aider web2py',
 'Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})': 'Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})',
 'Home': 'Accueil',
 'How did you get here?': 'How did you get here?',
-'import': 'import',
+'import': 'importer',
 'Import/Export': 'Importer/Exporter',
 'Index': 'Index',
 'insert new': 'insérer un nouveau',
@@ -104,40 +108,47 @@
 'Invalid email': 'Courriel invalide',
 'Invalid Query': 'Requête Invalide',
 'invalid request': 'requête invalide',
-'Key': 'Key',
+'Is Active': 'Est actif',
+'Key': 'Clé',
 'Last name': 'Nom',
 'Layout': 'Mise en page',
-'Layout Plugins': 'Layout Plugins',
-'Layouts': 'layouts',
+'Layout Plugins': 'Plugins de mise en page',
+'Layouts': 'Mises en page',
 'Live chat': 'Clavardage en direct',
-'Live Chat': 'Live Chat',
-'Log In': 'Log In',
+'Live Chat': 'Clavardage en direct',
+'Loading...': 'Chargement...',
+'loading...': 'chargement...',
+'Log In': 'Connexion',
 'Logged in': 'Connecté',
-'login': 'connectez-vous',
-'Login': 'Connectez-vous',
-'logout': 'déconnectez-vous',
+'login': 'connexion',
+'Login': 'Connexion',
+'logout': 'déconnexion',
 'lost password': 'mot de passe perdu',
 'Lost Password': 'Mot de passe perdu',
+'Lost password?': 'Mot de passe perdu?',
 'lost password?': 'mot de passe perdu?',
 'Main Menu': 'Menu principal',
 'Manage %(action)s': 'Manage %(action)s',
 'Manage Access Control': 'Manage Access Control',
-'Manage Cache': 'Manage Cache',
+'Manage Cache': 'Gérer le Cache',
 'Memberships': 'Memberships',
 'Menu Model': 'Menu modèle',
-'My Sites': 'My Sites',
+'Modified By': 'Modifié par',
+'Modified On': 'Modifié le',
+'My Sites': 'Mes sites',
 'Name': 'Nom',
 'New Record': 'Nouvel enregistrement',
 'new record inserted': 'nouvel enregistrement inséré',
-'next %s rows': 'next %s rows',
+'next %s rows': '%s prochaine lignes',
 'next 100 rows': '100 prochaines lignes',
 'No databases in this application': "Cette application n'a pas de bases de données",
 'Number of entries: **%s**': 'Number of entries: **%s**',
+'Object or table name': 'Objet ou nom de table',
 'Online book': 'Online book',
 'Online examples': 'Exemples en ligne',
 'or import from csv file': "ou importer d'un fichier CSV",
 'Origin': 'Origine',
-'Other Plugins': 'Other Plugins',
+'Other Plugins': 'Autres Plugiciels',
 'Other Recipes': 'Autres recettes',
 'Overview': 'Présentation',
 'password': 'mot de passe',
@@ -145,33 +156,34 @@
 "Password fields don't match": 'Les mots de passe ne correspondent pas',
 'Permission': 'Permission',
 'Permissions': 'Permissions',
-'please input your password again': "S'il vous plaît entrer votre mot de passe",
+'please input your password again': "S'il vous plaît entrer votre mot de passe à nouveau",
 'Plugins': 'Plugiciels',
 'Powered by': 'Alimenté par',
 'Preface': 'Préface',
-'previous %s rows': 'previous %s rows',
+'previous %s rows': '%s lignes précédentes',
 'previous 100 rows': '100 lignes précédentes',
-'profile': 'profile',
-'pygraphviz library not found': 'pygraphviz library not found',
+'profile': 'profil',
+'pygraphviz library not found': 'Bibliothèque pygraphviz introuvable',
 'Python': 'Python',
 'Query:': 'Requête:',
-'Quick Examples': 'Examples Rapides',
+'Quick Examples': 'Exemples Rapides',
 'RAM': 'RAM',
 'RAM Cache Keys': 'RAM Cache Keys',
-'Ram Cleared': 'Ram Cleared',
+'Ram Cleared': 'Ram vidée',
 'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
 'Readme': 'Lisez-moi',
 'Recipes': 'Recettes',
 'Record': 'enregistrement',
-'Record %(id)s created': 'Record %(id)s created',
-'Record %(id)s updated': 'Record %(id)s updated',
-'Record Created': 'Record Created',
+'Record %(id)s created': 'Enregistrement %(id)s créé',
+'Record %(id)s updated': 'Enregistrement %(id)s modifié',
+'Record Created': 'Enregistrement créé',
 'record does not exist': "l'archive n'existe pas",
-'Record ID': "ID d'enregistrement",
-'Record id': "id d'enregistrement",
-'Record Updated': 'Record Updated',
+'Record ID': "ID de l'enregistrement",
+'Record id': "id de l'enregistrement",
+'Record Updated': 'Enregistrement modifié',
 'Register': "S'inscrire",
 'register': "s'inscrire",
+'Registration identifier': "Identifiant d'inscription",
 'Registration key': "Clé d'enregistrement",
 'Registration successful': 'Inscription réussie',
 'Remember me (for 30 days)': 'Se souvenir de moi (pendant 30 jours)',
@@ -179,18 +191,18 @@
 'Reset Password key': 'Réinitialiser le mot clé',
 'Resources': 'Ressources',
 'Role': 'Rôle',
-'Roles': 'Roles',
+'Roles': 'Rôles',
 'Rows in Table': 'Lignes du tableau',
 'Rows selected': 'Lignes sélectionnées',
-'Save model as...': 'Save model as...',
+'Save model as...': 'Enregistrer le modèle sous...',
 'Semantic': 'Sémantique',
 'Services': 'Services',
-'Sign Up': 'Sign Up',
-'Size of cache:': 'Size of cache:',
+'Sign Up': "S'inscrire",
+'Size of cache:': 'Taille de la mémoire cache:',
 'state': 'état',
-'Statistics': 'Statistics',
+'Statistics': 'Statistiques',
 'Stylesheet': 'Feuille de style',
-'submit': 'submit',
+'submit': 'soumettre',
 'Submit': 'Soumettre',
 'Support': 'Soutien',
 'Sure you want to delete this object?': 'Êtes-vous sûr de vouloir supprimer cet objet?',
@@ -202,31 +214,31 @@
 'The Views': 'Les Vues',
 'This App': 'Cette Appli',
 'This is a copy of the scaffolding application': "Ceci est une copie de l'application échafaudage",
-'Time in Cache (h:m:s)': 'Time in Cache (h:m:s)',
+'Time in Cache (h:m:s)': 'Temps en Cache (h:m:s)',
 'Timestamp': 'Horodatage',
 'Traceback': 'Traceback',
 'Twitter': 'Twitter',
 'unable to parse csv file': "incapable d'analyser le fichier cvs",
 'Update:': 'Mise à jour:',
-'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Employez (...)&(...) pour AND, (...)|(...) pour OR, and ~(...)  pour NOT pour construire des requêtes plus complexes.',
-'User': 'User',
+'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...)  for NOT to build more complex queries.': 'Employez (...)&(...) pour AND, (...)|(...) pour OR, and ~(...)  pour NOT afin de construire des requêtes plus complexes.',
+'User': 'Utilisateur',
 'User %(id)s Logged-in': 'Utilisateur %(id)s connecté',
 'User %(id)s Registered': 'Utilisateur %(id)s enregistré',
 'User ID': 'ID utilisateur',
-'User Voice': 'User Voice',
-'Users': 'Users',
-'value already in database or empty': 'valeur déjà dans la base ou vide',
+'User Voice': "Voix de l'utilisateur",
+'Users': 'Utilisateurs',
+'value already in database or empty': 'valeur déjà dans la base ou inexistante',
 'Verify Password': 'Vérifiez le mot de passe',
 'Videos': 'Vidéos',
-'View': 'Présentation',
+'View': 'Vue',
 'Web2py': 'Web2py',
-'Welcome': 'Bienvenu',
+'Welcome': 'Bienvenue',
 'Welcome %s': 'Bienvenue %s',
 'Welcome to web2py': 'Bienvenue à web2py',
-'Welcome to web2py!': 'Welcome to web2py!',
+'Welcome to web2py!': 'Bienvenue à web2py!',
 'Which called the function %s located in the file %s': 'Qui a appelé la fonction %s se trouvant dans le fichier %s',
-'Working...': 'Working...',
-'You are successfully running web2py': 'Vous roulez avec succès web2py',
+'Working...': 'Traitement en cours...',
+'You are successfully running web2py': 'Vous exécutez avec succès web2py',
 'You can modify this application and adapt it to your needs': "Vous pouvez modifier cette application et l'adapter à vos besoins",
 'You visited the url %s': "Vous avez visité l'URL %s",
 }
diff --git a/applications/welcome/languages/fr.py b/applications/welcome/languages/fr.py
--- a/applications/welcome/languages/fr.py
+++ b/applications/welcome/languages/fr.py
@@ -13,7 +13,9 @@
 '**%(items)s** items, **%(bytes)s** %%{byte(bytes)}': '**%(items)s** items, **%(bytes)s** %%{byte(bytes)}',
 '**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '**not available** (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
 '?': '?',
+'@markmin\x01An error occured, please [[reload %s]] the page': 'An error occured, please [[reload %s]] the page',
 '``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)': '``**not available**``:red (requires the Python [[guppy http://pypi.python.org/pypi/guppy/ popup]] library)',
+'about': 'à propos',
 'About': 'À propos',
 'Access Control': "Contrôle d'accès",
 'admin': 'admin',
@@ -31,7 +33,7 @@
 'Cache': 'Cache',
 'Cache Cleared': 'Cache Cleared',
 'Cache contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'Cache contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
-'Cache Keys': 'Clés de cache',
+'Cache Keys': 'Cache Keys',
 'Cannot be empty': 'Ne peut pas être vide',
 'change password': 'changer le mot de passe',
 'Check to delete': 'Cliquez pour supprimer',
@@ -41,10 +43,10 @@
 'Clear RAM': 'Vider la RAM',
 'Client IP': 'IP client',
 'Community': 'Communauté',
-'Components and Plugins': 'Composants et Plugins',
+'Components and Plugins': 'Composants et Plugiciels',
 'Config.ini': 'Config.ini',
 'Controller': 'Contrôleur',
-'Copyright': 'Copyright',
+'Copyright': "Droit d'auteur",
 'Created By': 'Créé par',
 'Created On': 'Créé le',
 'Current request': 'Demande actuelle',
@@ -55,8 +57,8 @@
 'Database': 'base de données',
 'Database %s select': 'base de données %s selectionnée',
 'Database Administration (appadmin)': 'Database Administration (appadmin)',
-'db': 'bdd',
-'DB Model': 'Modèle BDD',
+'db': 'db',
+'DB Model': 'Modèle BD',
 'Delete:': 'Supprimer:',
 'Demo': 'Démo',
 'Deployment Recipes': 'Recettes de déploiement',
@@ -71,12 +73,13 @@
 "Don't know what to do?": 'Vous ne savez pas quoi faire?',
 'done!': 'fait!',
 'Download': 'Téléchargement',
-'E-mail': 'E-mail',
+'E-mail': 'Courriel',
 'Edit': 'Éditer',
 'Edit current record': "Modifier l'enregistrement courant",
 'edit profile': 'modifier le profil',
 'Edit This App': 'Modifier cette application',
-'Email and SMS': 'Email et SMS',
+'Email and SMS': 'Courriel et texto',
+'Enter an integer between %(min)g and %(max)g': 'Enter an integer between %(min)g and %(max)g',
 'enter an integer between %(min)g and %(max)g': 'entrez un entier entre %(min)g et %(max)g',
 'Errors': 'Erreurs',
 'export as csv file': 'exporter sous forme de fichier csv',
@@ -85,22 +88,24 @@
 'Forms and Validators': 'Formulaires et Validateurs',
 'Free Applications': 'Applications gratuites',
 'Function disabled': 'Fonction désactivée',
-'Graph Model': 'Graph Model',
-'Group ID': 'Groupe ID',
+'Graph Model': 'Représentation graphique du modèle',
+'Group %(group_id)s created': '%(group_id)s groupe créé',
+'Group ID': 'ID du groupe',
+'Group uniquely assigned to user %(id)s': "Groupe unique attribué à l'utilisateur %(id)s",
 'Groups': 'Groupes',
 'Hello World': 'Bonjour le monde',
-'Helping web2py': 'En train d’aider web2py',
+'Helping web2py': 'Aider web2py',
 'Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})': 'Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})',
 'Home': 'Accueil',
-'How did you get here?': 'Comment êtes-vous arrivé ici?',
-'import': 'Importer',
+'How did you get here?': 'How did you get here?',
+'import': 'importer',
 'Import/Export': 'Importer/Exporter',
 'Index': 'Index',
 'insert new': 'insérer un nouveau',
 'insert new %s': 'insérer un nouveau %s',
 'Internal State': 'État interne',
-'Introduction': 'Introduction',
-'Invalid email': 'E-mail invalide',
+'Introduction': 'Présentation',
+'Invalid email': 'Courriel invalide',
 'Invalid Query': 'Requête Invalide',
 'invalid request': 'requête invalide',
 'Is Active': 'Est actif',
@@ -109,12 +114,15 @@
 'Layout': 'Mise en page',
 'Layout Plugins': 'Plugins de mise en page',
 'Layouts': 'Mises en page',
-'Live chat': 'Chat en direct',
-'Live Chat': 'Chat en direct',
-'Log In': 'Log In',
-'login': 'connectez-vous',
-'Login': 'Connectez-vous',
-'logout': 'déconnectez-vous',
+'Live chat': 'Clavardage en direct',
+'Live Chat': 'Clavardage en direct',
+'Loading...': 'Chargement...',
+'loading...': 'chargement...',
+'Log In': 'Connexion',
+'Logged in': 'Connecté',
+'login': 'connexion',
+'Login': 'Connexion',
+'logout': 'déconnexion',
 'lost password': 'mot de passe perdu',
 'Lost Password': 'Mot de passe perdu',
 'Lost password?': 'Mot de passe perdu?',
@@ -131,7 +139,7 @@
 'Name': 'Nom',
 'New Record': 'Nouvel enregistrement',
 'new record inserted': 'nouvel enregistrement inséré',
-'next %s rows': 'next %s rows',
+'next %s rows': '%s prochaine lignes',
 'next 100 rows': '100 prochaines lignes',
 'No databases in this application': "Cette application n'a pas de bases de données",
 'Number of entries: **%s**': 'Number of entries: **%s**',
@@ -140,55 +148,63 @@
 'Online examples': 'Exemples en ligne',
 'or import from csv file': "ou importer d'un fichier CSV",
 'Origin': 'Origine',
-'Other Plugins': 'Autres Plugins',
+'Other Plugins': 'Autres Plugiciels',
 'Other Recipes': 'Autres recettes',
 'Overview': 'Présentation',
+'password': 'mot de passe',
 'Password': 'Mot de passe',
 "Password fields don't match": 'Les mots de passe ne correspondent pas',
 'Permission': 'Permission',
 'Permissions': 'Permissions',
-'Plugins': 'Plugins',
+'please input your password again': "S'il vous plaît entrer votre mot de passe à nouveau",
+'Plugins': 'Plugiciels',
 'Powered by': 'Alimenté par',
 'Preface': 'Préface',
-'previous %s rows': 'previous %s rows',
+'previous %s rows': '%s lignes précédentes',
 'previous 100 rows': '100 lignes précédentes',
+'profile': 'profil',
 'pygraphviz library not found': 'Bibliothèque pygraphviz introuvable',
 'Python': 'Python',
 'Query:': 'Requête:',
 'Quick Examples': 'Exemples Rapides',
 'RAM': 'RAM',
-'RAM Cache Keys': 'Clés de cache de la RAM',
+'RAM Cache Keys': 'RAM Cache Keys',
 'Ram Cleared': 'Ram vidée',
 'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.': 'RAM contains items up to **%(hours)02d** %%{hour(hours)} **%(min)02d** %%{minute(min)} **%(sec)02d** %%{second(sec)} old.',
 'Readme': 'Lisez-moi',
 'Recipes': 'Recettes',
 'Record': 'enregistrement',
+'Record %(id)s created': 'Enregistrement %(id)s créé',
+'Record %(id)s updated': 'Enregistrement %(id)s modifié',
+'Record Created': 'Enregistrement créé',
 'record does not exist': "l'archive n'existe pas",
-'Record ID': "ID d'enregistrement",
-'Record id': "id d'enregistrement",
+'Record ID': "ID de l'enregistrement",
+'Record id': "id de l'enregistrement",
+'Record Updated': 'Enregistrement modifié',
 'Register': "S'inscrire",
 'register': "s'inscrire",
-'Registration identifier': "Identifiant d'enregistrement",
+'Registration identifier': "Identifiant d'inscription",
 'Registration key': "Clé d'enregistrement",
+'Registration successful': 'Inscription réussie',
 'Remember me (for 30 days)': 'Se souvenir de moi (pendant 30 jours)',
 'Request reset password': 'Demande de réinitialiser le mot clé',
 'Reset Password key': 'Réinitialiser le mot clé',
 'Resources': 'Ressources',
 'Role': 'Rôle',
-'Roles': 'Roles',
+'Roles': 'Rôles',
 'Rows in Table': 'Lignes du tableau',
 'Rows selected': 'Lignes sélectionnées',
 'Save model as...': 'Enregistrer le modèle sous...',
 'Semantic': 'Sémantique',
 'Services': 'Services',
-'Sign Up': 'Sign Up',
-'Size of cache:': 'Taille du cache:',
+'Sign Up': "S'inscrire",
+'Size of cache:': 'Taille de la mémoire cache:',
 'state': 'état',
 'Statistics': 'Statistiques',
 'Stylesheet': 'Feuille de style',
 'submit': 'soumettre',
 'Submit': 'Soumettre',
-'Support': 'Support',
+'Support': 'Soutien',
 'Sure you want to delete this object?': 'Êtes-vous sûr de vouloir supprimer cet objet?',
 'Table': 'tableau',
 'Table name': 'Nom du tableau',


Test patch: