From a274f04a1a57534a78f9076d596e84fb52d03dc9 Mon Sep 17 00:00:00 2001 From: Benjamin Renard Date: Wed, 22 Mar 2023 18:17:57 +0100 Subject: [PATCH] Add simple time tracking system to permit to display page computing time --- locales/fr_FR.UTF8.js | 2 +- locales/fr_FR.UTF8/LC_MESSAGES/EESYPHP.mo | Bin 13863 -> 14331 bytes locales/fr_FR.UTF8/LC_MESSAGES/EESYPHP.po | 423 ++++++++++++---------- locales/messages.pot | 375 +++++++++++-------- src/App.php | 5 +- src/Db.php | 9 +- src/Tpl.php | 43 +++ src/functions.php | 38 ++ static/css/app.css | 11 +- templates/empty.tpl | 15 + 10 files changed, 565 insertions(+), 356 deletions(-) diff --git a/locales/fr_FR.UTF8.js b/locales/fr_FR.UTF8.js index 6e74da5..dd05079 100644 --- a/locales/fr_FR.UTF8.js +++ b/locales/fr_FR.UTF8.js @@ -1 +1 @@ -translations_data = {"messages":{"Create a new project using EesyPHP framework":"Cr\u00e9er un nouveau projet utilisant le framework EesyPHP","This command could be used to easily build the structure of a new project using the EesyPHP framework.":"Cette commande peut-\u00eatre utilis\u00e9e pour construire facilement la structure d'un nouveau projet utilisant le framework EesyPHP.","Start the PHP built-in HTTP server to serve the application":"D\u00e9marrer le service HTTP int\u00e9gr\u00e9 \u00e0 PHP pour servir l'application","This command could be used to start the PHP built-in HTTP server to serve the application.":"Cette commande peut-\u00eatre utilis\u00e9e pour d\u00e9marrer le service HTTP int\u00e9gr\u00e9 \u00e0 PHP pour servir l'application.","The CLI command '%s' already exists.":"La commande CLI '%s' n'existe pas.","The CLI command '%s' handler is not callable !":"La fonction impl\u00e9mentant la commande CLI '%s' n'est pas ex\u00e9cutable !","Usage: %s [-h] [-qd] command\n":"Utilisation: %s [-h] [-qd] commande\n"," -h Show this message\n":" -h Affiche ce message\n"," -q \/ -d Quiet\/Debug mode\n":" -q \/ -d Mode silencieux\/debug\n"," --trace Trace mode (the most verbose)\n":" --trace Mode trace (le plus verbeux)\n"," -l \/ --log-file Overwrite log file specified in configuration\n":" -l \/ --log-file Red\u00e9finir le fichier de journalisation \u00e0 utiliser \u00e0 la place de celui d\u00e9fini dans la configuration\n"," -C \/ --console Enable log on console\n":" -C \/ --console Activer la journalisation dans la console\n"," command Command to run\n":" command La commande \u00e0 ex\u00e9cuter\n","Available commands:\n":"Commandes disponibles:\n","Only one command could be executed !":"Une seul commande peut-\u00eatre ex\u00e9cut\u00e9e !","Invalid parameter \"%s\".\nNote: Command's parameter\/argument must be place after the command.":"Param\u00e8tre \"%s\" invalide.\nNote : Les param\u00e8tres\/arguments de la requ\u00eate doivent \u00eatre plac\u00e9s apr\u00e8s celle-ci.","An exception occured running command %s":"Une exception est survenue en ex\u00e9cutant la commande %s","This command only accept one argument: the listen address in format \"host:port\" or \":port\" (= 0.0.0.0:port).":"Cette commande n'accepte qu'un seul param\u00e8tre : l'adresse d'\u00e9coute au format \"h\u00f4te:port\" ou \":port\" (= 0.0.0.0:port).","Invalid listen address specify. Must be in formart host:port (or :port).":"Adresse d'\u00e9coute sp\u00e9cifi\u00e9e invalide. Elle doit \u00eatre au format h\u00f4te:port (ou :port).","Invalid listen host specified. Must be an IPv4 or IPv6 address.":"H\u00f4te d'\u00e9coute sp\u00e9cifi\u00e9 invalide. Il doit s'agir d'une adresse IPv4 ou IPv6.","Invalid listen port specified. Must be a positive integer between 1 and 65535.":"Port d'\u00e9coute sp\u00e9cifi\u00e9 invalide. Il doit s'agir d'un entier positif entre 1 et 65535.","Can't invoke bash. Can't ask password prompt.":"Impossible d'utiliser bash. Impossible de demander \u00e0 l'utilisateur de saisir un mot de passe.","Please enter password:":"Merci de saisir le mot de passe :","Unable to connect to the database.":"Impossible de se connecter \u00e0 la base de donn\u00e9es.","Invalid username or password.":"Nom d'utilisateur ou mot de passe invalide.","Sign in":"Connexion","Authentication required":"Authentification requise","Access denied":"Acc\u00e8s interdit","You must login to access this page.":"Vous devez vous connecter pour acc\u00e9der \u00e0 cette page.","<\/hr>

Mail initialy intended for %s.<\/small><\/p>":"<\/hr>

Email initialement destin\u00e9 \u00e0 %s.<\/small><\/p>","\n\n\nMail initialy intended for %s.":"\n\n\nMail originalement destin\u00e9 \u00e0 %s.","

%s: %s<\/small><\/p>":"

%s: %s<\/small><\/p>","\n%s: %s":"\n%s: %s","No template specified.":"Aucun template sp\u00e9cifi\u00e9.","An error occurred while displaying this page.":"Une erreur est survenue en affichant cette page.","Bad request":"Mauvaise requ\u00eate","Invalid request.":"Requ\u00eate invalide.","You have to be authenticated to access to this page.":"Vous devez \u00eatre authentifi\u00e9 pour acc\u00e9der \u00e0 cette page.","You do not have access to this application. If you think this is an error, please contact support.":"Vous n'avez pas acc\u00e8s \u00e0 cette application. Si vous pensez qu'il s'agit d'une erreur, merci de prendre contact avec le support.","Whoops ! Page not found":"Oups ! Page introuvable","The requested page can not be found.":"La page demand\u00e9e est introuvable.","Error":"Erreur","An unknown error occurred. If problem persist, please contact support.":"Une erreur inconnue est survenue. Si le probl\u00e8me persiste, merci de prendre contact avec le support.","Unable to determine the requested page. If the problem persists, please contact support.":"Impossible de d\u00e9terminer la page demand\u00e9e. Si le probl\u00e8me persiste, merci de prendre contact avec le support.","Unable to determine the requested page (loop detected). If the problem persists, please contact support.":"Impossible de d\u00e9terminer la page demand\u00e9e (boucle d\u00e9tect\u00e9e). Si le probl\u00e8me persiste, merci de prendre contact avec le support.","This request cannot be processed.":"Cette requ\u00eate ne peut \u00eatre trait\u00e9e.","Authentication required but fail to authenticate you.":"Authentification requise mais impossible pour vous authentifier.","This request could not be processed correctly.":"Cette requ\u00eate n'a put \u00eatre trait\u00e9e correctement.","Hello world !":"Bonjour tout le monde !","Extract messages that need to be translated":"Extraire les messages devant \u00eatre traduit","This command could be used to generate\/update locales\/messages.pot file.":"Cette commande peut-\u00eatre utilis\u00e9e pour g\u00e9n\u00e9rer\/mettre \u00e0 jour le fichier locales\/messages.pot.","Update messages in translation PO lang files":"Mettre \u00e0 jour les messages dans les fichiers de traduction PO existants","This command could be used to init\/update PO files in locales\/*\/LC_MESSAGES directories.":"Cette commande peut-\u00eatre utilis\u00e9e pour initialiser\/mettre \u00e0 jour les fichiers PO dans les dossiers locales\/*\/LC_MESSAGES.","Compile messages from existing translation PO lang files to corresponding MO files and JS catalogs":"Compiler les messages depuis les fichiers PO de traduction existants vers les fichiers MO et les catalogues JS correspondant","This command could be used to compile PO files in locales\/*\/LC_MESSAGES directories to MO files and as JS catalogs in locales directory.":"Cette commande peut-\u00eatre utilis\u00e9e pour compiler les fichiers PO dans les dossiers locales\/*\/LC_MESSAGES and les catalogues JS dans le dossier locales.","Fail to list EesyPHP PHP files.":"Une erreur est survenue en listant les fichiers PHP d'EesyPHP.","Fail to extract messages from EesyPHP PHP files using xgettext.":"Une erreur est survenue en extrayant les messages depuis les fichiers PHP d'EesyPHP en utilisant xgettext.","Fail to list application PHP files.":"Une erreur est survenue en listant les fichiers PHP de l'application.","Fail to extract messages from PHP files using xgettext.":"Impossible d'extraire les messages depuis les fichiers PHP en utilisant xgettext.","Fail to list JS files in the directory of static files '%s'.":"Une erreur est survenue en listant les fichiers JS dans le dossier des fichiers statiques '%s'.","Fail to extract messages from JS files in the directory of static files '%s' using xgettext.":"Une erreur est survenue en extrayant les messages depuis les fichiers JS du dossier des fichiers statiques '%s' en utilisant xgettext.","Fail to extract messages from templates directory '%s' using tsmarty2c.php script.":"Impossible d'extraire les messages depuis le dossier de templates '%s' en utilisant le script tsmarty2c.php.","Fail to merge messages using msgcat.":"Impossible de fusionner les messages en utilisant msgcat.","Compendium file %s not found.":"Fichier compendium %s introuvable.","POT file not found (%s). Please run extract_messages first.":"Fichier POT introuvable (%s). Merci de lancer la commande extract_messages pour commencer.","Lang directory '%s' found":"Dossier de langue '%s' trouv\u00e9","LC_MESSAGES directory not found in lang '%s' directory, ignore it.":"Le dossier LC_MESSAGES est introuvable dans le dossier de langue '%s', on l'ignore.","Fail to init messages in %s PO file using msginit (%s).":"Impossible d'initialiser les messages dans le fichier PO %s en utilisant msginit (%s).","Fail to update messages in %s PO file using msgmerge (%s).":"Impossible de mettre \u00e0 jour les messages dans les fichiers PO %s en utilisant msgmerge (%s).","PO file not found in lang '%s' directory, ignore it.":"Le fichier PO est introuvable dans le dossier de langue '%s', on l'ignore.","Fail to open root lang directory (%s).":"Impossible d'ouvrir le dossier racine des langues (%s).","Lang alias symlink found: %s -> %s":"Lien symbolique d'alias de langue trouv\u00e9 : %s -> %s","JS catalog symlink for %s -> %s created (%s)":"Lien symbolique de catalogue JS pour %s -> %s cr\u00e9\u00e9 (%s)","Fail to create JS catalog symlink for %s -> %s (%s)":"Impossible de cr\u00e9er le lien symbolique de catalogue JS pour %s -> %s (%s)","JS catalog symlink for %s -> %s already exist (%s)":"Le lien symbolique du catalogue JS pour %s -> %s existe d\u00e9j\u00e0 (%s)","JS catalog file for %s already exist, but it's not a symlink to %s (%s)":"Le catalogue JS pour %s existe, mais il ne s'agit par d'un lien symbolique vers %s (%s)","Fail to compile messages from %s PO file as MO file using msgfmt (%s).":"Impossible de compiler les messages depuis le fichier PO %s en tant que fichier MO en utilisant msgfmt (%s).","Include core translated messages from %s PO file":"Inclusion des messages traduits (core) depuis le fichier PO %s","Core PO file %s not found: can not include its translated messages in resulting JSON catalog.":"Le fichier PO core %s est introuvable : impossible d'inclure ses messages traduits dans le catalogue JSON r\u00e9sultant.","Fail to open %s JS catalog file in write mode (%s).":"Impossible d'ouvrir le catalogue JS %s en mode \u00e9criture (%s).","Fail to write %s JS catalog in file (%s).":"Impossible d'\u00e9crire le fichier du catalogue JS %s (%s).","%s JS catalog writed (%s).":"Catalogue JS %s cr\u00e9\u00e9 (%s).","Hello world!":"Salut tout le monde !","Disconnected":"D\u00e9connect\u00e9","You are now disconnected.":"Vous \u00eates maintenant d\u00e9connect\u00e9.","Confirmation":"Confirmation","Do you confirm?":"Confirmez-vous ?","Cancel":"Annuler","Validate":"Valider","OK":"OK","Question":"Question","Please enter your answer below:":"Merci de saisir vos r\u00e9ponses ci-dessous :","Please wait":"Merci de patienter","Please wait while your request is being processed.":"Merci de patienter pendant le traitement de votre requ\u00eate.","Are you sure?":"\u00cates-vous sure ?","Oops...":"Oups...","A fatal error has occurred and it is preventing this application from working properly. Please try again later or contact support.":"Une erreur fatale est survenue et celle-ci emp\u00eache cette application de fonctionner correctement. Merci de r\u00e9essayer ult\u00e9rieurement ou de prendre contact avec le service support.","Error: %1":"Erreur : %1","Back":"Retour","Hello, world!":"Bonjour tout le monde !","This is the default page of a new app using EesyPHP framework. Register your own templates directory and create a homepage.tpl<\/em> file to overwrite it. You could also overwrite the URL handler for the root of the web application.":"Il s'agit de la page par d\u00e9faut d'une nouvelle application utilisant le framework EesyPHP. Configurez votre propre dossier de templates et cr\u00e9er le fichier homepage.tpl<\/em> pour l'\u00e9craser. Vous pouvez \u00e9galement \u00e9craser le gestionnaire de l'URL racine de l'application web.","Sign out":"D\u00e9connexion","Log in":"Connexion","Username":"Nom d'utilisateur","Password":"Mot de passe","Submit":"Envoyer","Logout":"D\u00e9connexion","Connection":"Connexion","Authentication required but force_authentication function is not defined.":"Authentification requise mais la fonction force_authentication n'est pas d\u00e9finie."},"locale":"fr_FR.UTF8","domain":"EESYPHP","plural_expr":"(n > 1)"}; \ No newline at end of file +translations_data = {"messages":{"No template specified.":"Aucun template sp\u00e9cifi\u00e9.","An error occurred while displaying this page.":"Une erreur est survenue en affichant cette page.","Unkwown":"Inconnu","Unable to connect to the database.":"Impossible de se connecter \u00e0 la base de donn\u00e9es.","Invalid username or password.":"Nom d'utilisateur ou mot de passe invalide.","Sign in":"Connexion","Authentication required":"Authentification requise","Access denied":"Acc\u00e8s interdit","You must login to access this page.":"Vous devez vous connecter pour acc\u00e9der \u00e0 cette page.","Bad request":"Mauvaise requ\u00eate","Invalid request.":"Requ\u00eate invalide.","You have to be authenticated to access to this page.":"Vous devez \u00eatre authentifi\u00e9 pour acc\u00e9der \u00e0 cette page.","You do not have access to this application. If you think this is an error, please contact support.":"Vous n'avez pas acc\u00e8s \u00e0 cette application. Si vous pensez qu'il s'agit d'une erreur, merci de prendre contact avec le support.","Whoops ! Page not found":"Oups ! Page introuvable","The requested page can not be found.":"La page demand\u00e9e est introuvable.","Error":"Erreur","An unknown error occurred. If problem persist, please contact support.":"Une erreur inconnue est survenue. Si le probl\u00e8me persiste, merci de prendre contact avec le support.","Unable to determine the requested page. If the problem persists, please contact support.":"Impossible de d\u00e9terminer la page demand\u00e9e. Si le probl\u00e8me persiste, merci de prendre contact avec le support.","Unable to determine the requested page (loop detected). If the problem persists, please contact support.":"Impossible de d\u00e9terminer la page demand\u00e9e (boucle d\u00e9tect\u00e9e). Si le probl\u00e8me persiste, merci de prendre contact avec le support.","This request cannot be processed.":"Cette requ\u00eate ne peut \u00eatre trait\u00e9e.","Authentication required but fail to authenticate you.":"Authentification requise mais impossible pour vous authentifier.","This request could not be processed correctly.":"Cette requ\u00eate n'a put \u00eatre trait\u00e9e correctement.","Create a new project using EesyPHP framework":"Cr\u00e9er un nouveau projet utilisant le framework EesyPHP","This command could be used to easily build the structure of a new project using the EesyPHP framework.":"Cette commande peut-\u00eatre utilis\u00e9e pour construire facilement la structure d'un nouveau projet utilisant le framework EesyPHP.","Start the PHP built-in HTTP server to serve the application":"D\u00e9marrer le service HTTP int\u00e9gr\u00e9 \u00e0 PHP pour servir l'application","This command could be used to start the PHP built-in HTTP server to serve the application.":"Cette commande peut-\u00eatre utilis\u00e9e pour d\u00e9marrer le service HTTP int\u00e9gr\u00e9 \u00e0 PHP pour servir l'application.","The CLI command '%s' already exists.":"La commande CLI '%s' n'existe pas.","The CLI command '%s' handler is not callable !":"La fonction impl\u00e9mentant la commande CLI '%s' n'est pas ex\u00e9cutable !","Usage: %s [-h] [-qd] command\n":"Utilisation: %s [-h] [-qd] commande\n"," -h Show this message\n":" -h Affiche ce message\n"," -q \/ -d Quiet\/Debug mode\n":" -q \/ -d Mode silencieux\/debug\n"," --trace Trace mode (the most verbose)\n":" --trace Mode trace (le plus verbeux)\n"," -l \/ --log-file Overwrite log file specified in configuration\n":" -l \/ --log-file Red\u00e9finir le fichier de journalisation \u00e0 utiliser \u00e0 la place de celui d\u00e9fini dans la configuration\n"," -C \/ --console Enable log on console\n":" -C \/ --console Activer la journalisation dans la console\n"," command Command to run\n":" command La commande \u00e0 ex\u00e9cuter\n","Available commands:\n":"Commandes disponibles:\n","Only one command could be executed !":"Une seul commande peut-\u00eatre ex\u00e9cut\u00e9e !","Invalid parameter \"%s\".\nNote: Command's parameter\/argument must be place after the command.":"Param\u00e8tre \"%s\" invalide.\nNote : Les param\u00e8tres\/arguments de la requ\u00eate doivent \u00eatre plac\u00e9s apr\u00e8s celle-ci.","An exception occured running command %s":"Une exception est survenue en ex\u00e9cutant la commande %s","This command only accept one argument: the listen address in format \"host:port\" or \":port\" (= 0.0.0.0:port).":"Cette commande n'accepte qu'un seul param\u00e8tre : l'adresse d'\u00e9coute au format \"h\u00f4te:port\" ou \":port\" (= 0.0.0.0:port).","Invalid listen address specify. Must be in formart host:port (or :port).":"Adresse d'\u00e9coute sp\u00e9cifi\u00e9e invalide. Elle doit \u00eatre au format h\u00f4te:port (ou :port).","Invalid listen host specified. Must be an IPv4 or IPv6 address.":"H\u00f4te d'\u00e9coute sp\u00e9cifi\u00e9 invalide. Il doit s'agir d'une adresse IPv4 ou IPv6.","Invalid listen port specified. Must be a positive integer between 1 and 65535.":"Port d'\u00e9coute sp\u00e9cifi\u00e9 invalide. Il doit s'agir d'un entier positif entre 1 et 65535.","Can't invoke bash. Can't ask password prompt.":"Impossible d'utiliser bash. Impossible de demander \u00e0 l'utilisateur de saisir un mot de passe.","Please enter password:":"Merci de saisir le mot de passe :","d":"j","h":"h","m":"m","s":"s","ms":"ms","ns":"ns","Less than 1%s":"Moins de 1%s","Hello world !":"Bonjour tout le monde !","Hello world!":"Salut tout le monde !","Disconnected":"D\u00e9connect\u00e9","You are now disconnected.":"Vous \u00eates maintenant d\u00e9connect\u00e9.","Extract messages that need to be translated":"Extraire les messages devant \u00eatre traduit","This command could be used to generate\/update locales\/messages.pot file.":"Cette commande peut-\u00eatre utilis\u00e9e pour g\u00e9n\u00e9rer\/mettre \u00e0 jour le fichier locales\/messages.pot.","Update messages in translation PO lang files":"Mettre \u00e0 jour les messages dans les fichiers de traduction PO existants","This command could be used to init\/update PO files in locales\/*\/LC_MESSAGES directories.":"Cette commande peut-\u00eatre utilis\u00e9e pour initialiser\/mettre \u00e0 jour les fichiers PO dans les dossiers locales\/*\/LC_MESSAGES.","Compile messages from existing translation PO lang files to corresponding MO files and JS catalogs":"Compiler les messages depuis les fichiers PO de traduction existants vers les fichiers MO et les catalogues JS correspondant","This command could be used to compile PO files in locales\/*\/LC_MESSAGES directories to MO files and as JS catalogs in locales directory.":"Cette commande peut-\u00eatre utilis\u00e9e pour compiler les fichiers PO dans les dossiers locales\/*\/LC_MESSAGES and les catalogues JS dans le dossier locales.","Fail to list EesyPHP PHP files.":"Une erreur est survenue en listant les fichiers PHP d'EesyPHP.","Fail to extract messages from EesyPHP PHP files using xgettext.":"Une erreur est survenue en extrayant les messages depuis les fichiers PHP d'EesyPHP en utilisant xgettext.","Fail to list application PHP files.":"Une erreur est survenue en listant les fichiers PHP de l'application.","Fail to extract messages from PHP files using xgettext.":"Impossible d'extraire les messages depuis les fichiers PHP en utilisant xgettext.","Fail to list JS files in the directory of static files '%s'.":"Une erreur est survenue en listant les fichiers JS dans le dossier des fichiers statiques '%s'.","Fail to extract messages from JS files in the directory of static files '%s' using xgettext.":"Une erreur est survenue en extrayant les messages depuis les fichiers JS du dossier des fichiers statiques '%s' en utilisant xgettext.","Fail to extract messages from templates directory '%s' using tsmarty2c.php script.":"Impossible d'extraire les messages depuis le dossier de templates '%s' en utilisant le script tsmarty2c.php.","Fail to merge messages using msgcat.":"Impossible de fusionner les messages en utilisant msgcat.","Compendium file %s not found.":"Fichier compendium %s introuvable.","POT file not found (%s). Please run extract_messages first.":"Fichier POT introuvable (%s). Merci de lancer la commande extract_messages pour commencer.","Lang directory '%s' found":"Dossier de langue '%s' trouv\u00e9","LC_MESSAGES directory not found in lang '%s' directory, ignore it.":"Le dossier LC_MESSAGES est introuvable dans le dossier de langue '%s', on l'ignore.","Fail to init messages in %s PO file using msginit (%s).":"Impossible d'initialiser les messages dans le fichier PO %s en utilisant msginit (%s).","Fail to update messages in %s PO file using msgmerge (%s).":"Impossible de mettre \u00e0 jour les messages dans les fichiers PO %s en utilisant msgmerge (%s).","PO file not found in lang '%s' directory, ignore it.":"Le fichier PO est introuvable dans le dossier de langue '%s', on l'ignore.","Fail to open root lang directory (%s).":"Impossible d'ouvrir le dossier racine des langues (%s).","Lang alias symlink found: %s -> %s":"Lien symbolique d'alias de langue trouv\u00e9 : %s -> %s","JS catalog symlink for %s -> %s created (%s)":"Lien symbolique de catalogue JS pour %s -> %s cr\u00e9\u00e9 (%s)","Fail to create JS catalog symlink for %s -> %s (%s)":"Impossible de cr\u00e9er le lien symbolique de catalogue JS pour %s -> %s (%s)","JS catalog symlink for %s -> %s already exist (%s)":"Le lien symbolique du catalogue JS pour %s -> %s existe d\u00e9j\u00e0 (%s)","JS catalog file for %s already exist, but it's not a symlink to %s (%s)":"Le catalogue JS pour %s existe, mais il ne s'agit par d'un lien symbolique vers %s (%s)","Fail to compile messages from %s PO file as MO file using msgfmt (%s).":"Impossible de compiler les messages depuis le fichier PO %s en tant que fichier MO en utilisant msgfmt (%s).","Include core translated messages from %s PO file":"Inclusion des messages traduits (core) depuis le fichier PO %s","Core PO file %s not found: can not include its translated messages in resulting JSON catalog.":"Le fichier PO core %s est introuvable : impossible d'inclure ses messages traduits dans le catalogue JSON r\u00e9sultant.","Fail to open %s JS catalog file in write mode (%s).":"Impossible d'ouvrir le catalogue JS %s en mode \u00e9criture (%s).","Fail to write %s JS catalog in file (%s).":"Impossible d'\u00e9crire le fichier du catalogue JS %s (%s).","%s JS catalog writed (%s).":"Catalogue JS %s cr\u00e9\u00e9 (%s).","<\/hr>

Mail initialy intended for %s.<\/small><\/p>":"<\/hr>

Email initialement destin\u00e9 \u00e0 %s.<\/small><\/p>","\n\n\nMail initialy intended for %s.":"\n\n\nMail originalement destin\u00e9 \u00e0 %s.","

%s: %s<\/small><\/p>":"

%s: %s<\/small><\/p>","\n%s: %s":"\n%s: %s","Confirmation":"Confirmation","Do you confirm?":"Confirmez-vous ?","Cancel":"Annuler","Validate":"Valider","OK":"OK","Question":"Question","Please enter your answer below:":"Merci de saisir vos r\u00e9ponses ci-dessous :","Please wait":"Merci de patienter","Please wait while your request is being processed.":"Merci de patienter pendant le traitement de votre requ\u00eate.","Are you sure?":"\u00cates-vous sure ?","Username":"Nom d'utilisateur","Password":"Mot de passe","Submit":"Envoyer","Oops...":"Oups...","A fatal error has occurred and it is preventing this application from working properly. Please try again later or contact support.":"Une erreur fatale est survenue et celle-ci emp\u00eache cette application de fonctionner correctement. Merci de r\u00e9essayer ult\u00e9rieurement ou de prendre contact avec le service support.","Error: %1":"Erreur : %1","Back":"Retour","Sign out":"D\u00e9connexion","Log in":"Connexion","Loading time:":"Temps de chargement :","Page: %1":"Page : %1","Database: %1":"Base de donn\u00e9es : %1","Templating: ":"Mod\u00e8le : ","Total: ":"Total : ","Hello, world!":"Bonjour tout le monde !","This is the default page of a new app using EesyPHP framework. Register your own templates directory and create a homepage.tpl<\/em> file to overwrite it. You could also overwrite the URL handler for the root of the web application.":"Il s'agit de la page par d\u00e9faut d'une nouvelle application utilisant le framework EesyPHP. Configurez votre propre dossier de templates et cr\u00e9er le fichier homepage.tpl<\/em> pour l'\u00e9craser. Vous pouvez \u00e9galement \u00e9craser le gestionnaire de l'URL racine de l'application web.","Logout":"D\u00e9connexion","Connection":"Connexion","Authentication required but force_authentication function is not defined.":"Authentification requise mais la fonction force_authentication n'est pas d\u00e9finie."},"locale":"fr_FR.UTF8","domain":"EESYPHP","plural_expr":"(n > 1)"}; \ No newline at end of file diff --git a/locales/fr_FR.UTF8/LC_MESSAGES/EESYPHP.mo b/locales/fr_FR.UTF8/LC_MESSAGES/EESYPHP.mo index 8d34c311a06e256925839250bb0f975a9c985bad..2929023cdc6b6ce9325d0d1f7fac994d54b9255c 100644 GIT binary patch delta 2912 zcmY+_S!`5Q9LMo9&>h;cl|m^nEwmI$%Tl(s>|hJ+v@AtX_Gx>W7CJM?3`Vpfs5CIj^AP-731RD%Q(ct%Y=aT42|MNNL-nsXl`Jex} zJ=5|u80i@lchu1K5ZT0?zQ%lr#}oOW6{HxGgX2+$s&OjT;RHO0`FH^r;`f+`Bl;OL z1{Yu!T3CwvP|x`c+l`5sTXa%6u(rQ3Mc9Pn@Exqc%c%45d}QKaoQ{P!1icuCyO3L% zRxH8}Ou&mc5-(vr{)pVt%t5C{eBj{9ODNe=xsEmA!TGO8} z7sqB8GaM^X6Yx3)QK^0vhvEV3gYTn$&ISuZC`A@( zO&KbAkA;xDi$^RBQlZVApb_`!) zd>7YZDL=Ob-^Sn2MJa1HJV4zreMD>`b5R+pz$R=)-RHV>G42OK+`e#Fy zO(fSe<9zM^b~^gy-Ke#@jr!s}+=zdm*1C?LPuHx&z1W6Yq;0 zCUs)$h2+LHj6JvrPoXAqAL}rebyO|w!cq7UM*7qFhK?q13zP8yQsCwZ_Q64vI+HaS zsHK>PRalAIC2yg99qN8hkmWXUlVUZLkDBNTEXPJv^?xvl{OiJV9MFYPT#R3!9u!X{ zrC=&*?T29nmOJBie3$WQR3_(A()D;5RU!r?E+VPM54DSFG-eWdh#sIu676+YEvTvL)oKV$UP~B> z<6}9Ywwu^Qtk8g_wVh9_C)B(|C845RLJTDq6Cr{Zo&C=R?6p=lU(tX@IoRngKx)z6 z4J(lrvA0YxHn8`xy1exM*HRg&K886*wImA(t*I*fdDBuh5idFiST*}4rr{c5715Vy zA=Cn@8Wofp#cryJ3_@#~OQ?lon9aD0XeKBV`(LZJ>GL*(P6M%wP?c*3sEr}&i3CE$ zthSWcst(V$cR(7Z>wwe7JMKWeZh05k&EnHdj3c%Y+Q(`GVwl;u+UffppEH@x0%8mC zGSNts@(!{0`e5`B@r0U>7*6!jfTrr!&e%xQ5+kD{lP|>e^M<|k-jG%1&YKdwnz}zB z%L;|u;U;guJtZ$>JV9?`bHL{gH~X!!&gvmo5`6YoJ5w@x`dR+%E#5Gv%iPhQGX};b zt_p^|EoJV`$HRX~2yELO+#QJC&hofY8(CAo@rO(xWI~&lbHx#yZ6j?rBsJJ2M zj~>kaIw4~r^Kduv7Yqct&sib2J*nC;&ysR$g3W=D&S_Gsc(6TaX!7pxS$-=Jc9%sx z6J4(4FQq-Z0tVUq9exBd9pY&+FE=yF3FxI$D$P_6I_W)0}VWHXEZqN M6Ia^S|IXC>3yqXb<^TWy delta 2457 zcmX}tdrZ}39LMqR;U*jqP_Bsx1c8Vka#0aQLjwa*E}66+Ha_gL?n=s2l!-MHs_sG_J&#unQ01T~tOIDV$w+30v_2_G3dT`TvE^wN$st-{mni;g_f< ze~5>05hbh%UPNW+J5&mz(%c2-1uaJAwhC0nns6`np)zt4bt*zR0vR3(-A6~qrIy+B z!~?hzhp`IBF%R$H35;Fh9=kCtWITaPVYhKTDz6$>;RLp!ig`h%TO(PxnsGDkN8cD7 z>cwV}Bv=TCeIur!o}?X>@*&jsPGBdVM=kgsDpSAWNlam&;(QH<@e1mODLl5WZ$}kj zJ2J1&2I!~;hHx3afZCf6untq%*k0_$Gk6o5a0hAA_r~#AOw4sN)`xo-zmHF$m-JO& zBUa%UYC)6eoPWkNNL|@S!SQv}AI_j^Af2pHOMIBDhEgTiq zzTjAR2^}pS&YmV>3DrR_p{GeDINr|xfHow%PMWo~8wfQ$J!^B`4a!Kh(x~FnzNu;7 zbS~ARi7s_$yvXKSBE5*Yk^4VE!)*kab~3OI4-snYmQzpK$^%3^kx8iO{?7k?$w_kF zR^b}ZR2!<;t%SB^DZzWlc>{v;4v$0?SrU;zP|MapG!bfzL^IJt93KBv%h zJk(lOf8V@4WGFvn~YNM%1aP3yyU{{%<-(&f5@GFQLj+J)I|s zHNkzc%?+U`0w?n7=0NPM~aY zoyUJJy?Orep2LIthmQ7)6hYvA`ea04D(BzGtM>~%frmxOo\n" +"Last-Translator: Benjamin Renard \n" "Language-Team: \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" @@ -12,6 +12,108 @@ msgstr "" "X-Generator: Poedit 2.4.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#: Tpl.php:437 +msgid "No template specified." +msgstr "Aucun template spécifié." + +#: Tpl.php:471 +msgid "An error occurred while displaying this page." +msgstr "Une erreur est survenue en affichant cette page." + +#: Tpl.php:871 +msgid "Unkwown" +msgstr "Inconnu" + +#: Db.php:80 +msgid "Unable to connect to the database." +msgstr "Impossible de se connecter à la base de données." + +#: Auth/Form.php:41 +msgid "Invalid username or password." +msgstr "Nom d'utilisateur ou mot de passe invalide." + +#: Auth/Form.php:74 +msgid "Sign in" +msgstr "Connexion" + +#: Auth/Http.php:37 Url.php:181 +msgid "Authentication required" +msgstr "Authentification requise" + +#: Auth/Http.php:124 Auth/Http.php:127 Url.php:185 +msgid "Access denied" +msgstr "Accès interdit" + +#: Auth/Http.php:128 Auth/Http.php:132 +msgid "You must login to access this page." +msgstr "Vous devez vous connecter pour accéder à cette page." + +#: Url.php:177 +msgid "Bad request" +msgstr "Mauvaise requête" + +#: Url.php:178 +msgid "Invalid request." +msgstr "Requête invalide." + +#: Url.php:182 +msgid "You have to be authenticated to access to this page." +msgstr "Vous devez être authentifié pour accéder à cette page." + +#: Url.php:186 +msgid "" +"You do not have access to this application. If you think this is an error, " +"please contact support." +msgstr "" +"Vous n'avez pas accès à cette application. Si vous pensez qu'il s'agit d'une " +"erreur, merci de prendre contact avec le support." + +#: Url.php:189 +msgid "Whoops ! Page not found" +msgstr "Oups ! Page introuvable" + +#: Url.php:190 +msgid "The requested page can not be found." +msgstr "La page demandée est introuvable." + +#: Url.php:198 +msgid "Error" +msgstr "Erreur" + +#: Url.php:199 +msgid "An unknown error occurred. If problem persist, please contact support." +msgstr "" +"Une erreur inconnue est survenue. Si le problème persiste, merci de prendre " +"contact avec le support." + +#: Url.php:262 +msgid "" +"Unable to determine the requested page. If the problem persists, please " +"contact support." +msgstr "" +"Impossible de déterminer la page demandée. Si le problème persiste, merci de " +"prendre contact avec le support." + +#: Url.php:416 +msgid "" +"Unable to determine the requested page (loop detected). If the problem " +"persists, please contact support." +msgstr "" +"Impossible de déterminer la page demandée (boucle détectée). Si le problème " +"persiste, merci de prendre contact avec le support." + +#: Url.php:446 +msgid "This request cannot be processed." +msgstr "Cette requête ne peut être traitée." + +#: Url.php:456 +msgid "Authentication required but fail to authenticate you." +msgstr "Authentification requise mais impossible pour vous authentifier." + +#: Url.php:475 +msgid "This request could not be processed correctly." +msgstr "Cette requête n'a put être traitée correctement." + #: Cli.php:44 msgid "Create a new project using EesyPHP framework" msgstr "Créer un nouveau projet utilisant le framework EesyPHP" @@ -138,140 +240,51 @@ msgstr "" msgid "Please enter password:" msgstr "Merci de saisir le mot de passe :" -#: Db.php:74 -msgid "Unable to connect to the database." -msgstr "Impossible de se connecter à la base de données." +#: functions.php:304 +msgid "d" +msgstr "j" -#: Auth/Form.php:41 -msgid "Invalid username or password." -msgstr "Nom d'utilisateur ou mot de passe invalide." +#: functions.php:305 +msgid "h" +msgstr "h" -#: Auth/Form.php:74 -msgid "Sign in" -msgstr "Connexion" +#: functions.php:306 +msgid "m" +msgstr "m" -#: Auth/Http.php:37 Url.php:181 -msgid "Authentication required" -msgstr "Authentification requise" +#: functions.php:307 +msgid "s" +msgstr "s" -#: Auth/Http.php:124 Auth/Http.php:127 Url.php:185 -msgid "Access denied" -msgstr "Accès interdit" +#: functions.php:308 +msgid "ms" +msgstr "ms" -#: Auth/Http.php:128 Auth/Http.php:132 -msgid "You must login to access this page." -msgstr "Vous devez vous connecter pour accéder à cette page." +#: functions.php:309 +msgid "ns" +msgstr "ns" -#: Email.php:101 +#: functions.php:327 #, php-format -msgid "

Mail initialy intended for %s.

" -msgstr "

Email initialement destiné à %s.

" +msgid "Less than 1%s" +msgstr "Moins de 1%s" -#: Email.php:102 -#, php-format -msgid "" -"\n" -"\n" -"\n" -"Mail initialy intended for %s." -msgstr "" -"\n" -"\n" -"\n" -"Mail originalement destiné à %s." - -#: Email.php:139 -#, php-format -msgid "

%s: %s

" -msgstr "

%s: %s

" - -#: Email.php:140 -#, php-format -msgid "" -"\n" -"%s: %s" -msgstr "" -"\n" -"%s: %s" - -#: Tpl.php:421 -msgid "No template specified." -msgstr "Aucun template spécifié." - -#: Tpl.php:454 -msgid "An error occurred while displaying this page." -msgstr "Une erreur est survenue en affichant cette page." - -#: Url.php:177 -msgid "Bad request" -msgstr "Mauvaise requête" - -#: Url.php:178 -msgid "Invalid request." -msgstr "Requête invalide." - -#: Url.php:182 -msgid "You have to be authenticated to access to this page." -msgstr "Vous devez être authentifié pour accéder à cette page." - -#: Url.php:186 -msgid "" -"You do not have access to this application. If you think this is an error, " -"please contact support." -msgstr "" -"Vous n'avez pas accès à cette application. Si vous pensez qu'il s'agit d'une " -"erreur, merci de prendre contact avec le support." - -#: Url.php:189 -msgid "Whoops ! Page not found" -msgstr "Oups ! Page introuvable" - -#: Url.php:190 -msgid "The requested page can not be found." -msgstr "La page demandée est introuvable." - -#: Url.php:198 -msgid "Error" -msgstr "Erreur" - -#: Url.php:199 -msgid "An unknown error occurred. If problem persist, please contact support." -msgstr "" -"Une erreur inconnue est survenue. Si le problème persiste, merci de prendre " -"contact avec le support." - -#: Url.php:262 -msgid "" -"Unable to determine the requested page. If the problem persists, please " -"contact support." -msgstr "" -"Impossible de déterminer la page demandée. Si le problème persiste, merci de " -"prendre contact avec le support." - -#: Url.php:416 -msgid "" -"Unable to determine the requested page (loop detected). If the problem " -"persists, please contact support." -msgstr "" -"Impossible de déterminer la page demandée (boucle détectée). Si le problème " -"persiste, merci de prendre contact avec le support." - -#: Url.php:446 -msgid "This request cannot be processed." -msgstr "Cette requête ne peut être traitée." - -#: Url.php:456 -msgid "Authentication required but fail to authenticate you." -msgstr "Authentification requise mais impossible pour vous authentifier." - -#: Url.php:475 -msgid "This request could not be processed correctly." -msgstr "Cette requête n'a put être traitée correctement." - -#: I18n.php:118 App.php:238 +#: App.php:241 I18n.php:118 msgid "Hello world !" msgstr "Bonjour tout le monde !" +#: App.php:243 +msgid "Hello world!" +msgstr "Salut tout le monde !" + +#: App.php:254 +msgid "Disconnected" +msgstr "Déconnecté" + +#: App.php:256 +msgid "You are now disconnected." +msgstr "Vous êtes maintenant déconnecté." + #: I18n.php:138 msgid "Extract messages that need to be translated" msgstr "Extraire les messages devant être traduit" @@ -312,34 +325,34 @@ msgstr "" "Cette commande peut-être utilisée pour compiler les fichiers PO dans les " "dossiers locales/*/LC_MESSAGES and les catalogues JS dans le dossier locales." -#: I18n.php:356 +#: I18n.php:347 msgid "Fail to list EesyPHP PHP files." msgstr "Une erreur est survenue en listant les fichiers PHP d'EesyPHP." -#: I18n.php:376 +#: I18n.php:367 msgid "Fail to extract messages from EesyPHP PHP files using xgettext." msgstr "" "Une erreur est survenue en extrayant les messages depuis les fichiers PHP " "d'EesyPHP en utilisant xgettext." -#: I18n.php:393 +#: I18n.php:384 msgid "Fail to list application PHP files." msgstr "Une erreur est survenue en listant les fichiers PHP de l'application." -#: I18n.php:413 +#: I18n.php:404 msgid "Fail to extract messages from PHP files using xgettext." msgstr "" "Impossible d'extraire les messages depuis les fichiers PHP en utilisant " "xgettext." -#: I18n.php:429 +#: I18n.php:420 #, php-format msgid "Fail to list JS files in the directory of static files '%s'." msgstr "" "Une erreur est survenue en listant les fichiers JS dans le dossier des " "fichiers statiques '%s'." -#: I18n.php:451 +#: I18n.php:442 #, php-format msgid "" "Fail to extract messages from JS files in the directory of static files '%s' " @@ -348,7 +361,7 @@ msgstr "" "Une erreur est survenue en extrayant les messages depuis les fichiers JS du " "dossier des fichiers statiques '%s' en utilisant xgettext." -#: I18n.php:473 +#: I18n.php:464 #, php-format msgid "" "Fail to extract messages from templates directory '%s' using tsmarty2c.php " @@ -357,100 +370,100 @@ msgstr "" "Impossible d'extraire les messages depuis le dossier de templates '%s' en " "utilisant le script tsmarty2c.php." -#: I18n.php:509 +#: I18n.php:500 msgid "Fail to merge messages using msgcat." msgstr "Impossible de fusionner les messages en utilisant msgcat." -#: I18n.php:523 +#: I18n.php:514 #, php-format msgid "Compendium file %s not found." msgstr "Fichier compendium %s introuvable." -#: I18n.php:534 +#: I18n.php:525 #, php-format msgid "POT file not found (%s). Please run extract_messages first." msgstr "" "Fichier POT introuvable (%s). Merci de lancer la commande extract_messages " "pour commencer." -#: I18n.php:546 I18n.php:656 +#: I18n.php:537 I18n.php:647 #, php-format msgid "Lang directory '%s' found" msgstr "Dossier de langue '%s' trouvé" -#: I18n.php:552 I18n.php:662 +#: I18n.php:543 I18n.php:653 #, php-format msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it." msgstr "" "Le dossier LC_MESSAGES est introuvable dans le dossier de langue '%s', on " "l'ignore." -#: I18n.php:567 +#: I18n.php:558 #, php-format msgid "Fail to init messages in %s PO file using msginit (%s)." msgstr "" "Impossible d'initialiser les messages dans le fichier PO %s en utilisant " "msginit (%s)." -#: I18n.php:585 +#: I18n.php:576 #, php-format msgid "Fail to update messages in %s PO file using msgmerge (%s)." msgstr "" "Impossible de mettre à jour les messages dans les fichiers PO %s en " "utilisant msgmerge (%s)." -#: I18n.php:591 I18n.php:670 +#: I18n.php:582 I18n.php:661 #, php-format msgid "PO file not found in lang '%s' directory, ignore it." msgstr "" "Le fichier PO est introuvable dans le dossier de langue '%s', on l'ignore." -#: I18n.php:598 I18n.php:725 +#: I18n.php:589 I18n.php:716 #, php-format msgid "Fail to open root lang directory (%s)." msgstr "Impossible d'ouvrir le dossier racine des langues (%s)." -#: I18n.php:626 +#: I18n.php:617 #, php-format msgid "Lang alias symlink found: %s -> %s" msgstr "Lien symbolique d'alias de langue trouvé : %s -> %s" -#: I18n.php:633 +#: I18n.php:624 #, php-format msgid "JS catalog symlink for %s -> %s created (%s)" msgstr "Lien symbolique de catalogue JS pour %s -> %s créé (%s)" -#: I18n.php:637 +#: I18n.php:628 #, php-format msgid "Fail to create JS catalog symlink for %s -> %s (%s)" msgstr "" "Impossible de créer le lien symbolique de catalogue JS pour %s -> %s (%s)" -#: I18n.php:643 +#: I18n.php:634 #, php-format msgid "JS catalog symlink for %s -> %s already exist (%s)" msgstr "Le lien symbolique du catalogue JS pour %s -> %s existe déjà (%s)" -#: I18n.php:648 +#: I18n.php:639 #, php-format msgid "JS catalog file for %s already exist, but it's not a symlink to %s (%s)" msgstr "" "Le catalogue JS pour %s existe, mais il ne s'agit par d'un lien symbolique " "vers %s (%s)" -#: I18n.php:683 +#: I18n.php:674 #, php-format msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)." msgstr "" "Impossible de compiler les messages depuis le fichier PO %s en tant que " "fichier MO en utilisant msgfmt (%s)." -#: I18n.php:695 +#: I18n.php:686 #, php-format msgid "Include core translated messages from %s PO file" msgstr "Inclusion des messages traduits (core) depuis le fichier PO %s" -#: I18n.php:702 +#: I18n.php:693 #, php-format msgid "" "Core PO file %s not found: can not include its translated messages in " @@ -459,32 +472,52 @@ msgstr "" "Le fichier PO core %s est introuvable : impossible d'inclure ses messages " "traduits dans le catalogue JSON résultant." -#: I18n.php:708 +#: I18n.php:699 #, php-format msgid "Fail to open %s JS catalog file in write mode (%s)." msgstr "Impossible d'ouvrir le catalogue JS %s en mode écriture (%s)." -#: I18n.php:713 +#: I18n.php:704 #, php-format msgid "Fail to write %s JS catalog in file (%s)." msgstr "Impossible d'écrire le fichier du catalogue JS %s (%s)." -#: I18n.php:718 +#: I18n.php:709 #, php-format msgid "%s JS catalog writed (%s)." msgstr "Catalogue JS %s créé (%s)." -#: App.php:240 -msgid "Hello world!" -msgstr "Salut tout le monde !" +#: Email.php:101 +#, php-format +msgid "

Mail initialy intended for %s.

" +msgstr "

Email initialement destiné à %s.

" -#: App.php:251 -msgid "Disconnected" -msgstr "Déconnecté" +#: Email.php:102 +#, php-format +msgid "" +"\n" +"\n" +"\n" +"Mail initialy intended for %s." +msgstr "" +"\n" +"\n" +"\n" +"Mail originalement destiné à %s." -#: App.php:253 -msgid "You are now disconnected." -msgstr "Vous êtes maintenant déconnecté." +#: Email.php:139 +#, php-format +msgid "

%s: %s

" +msgstr "

%s: %s

" + +#: Email.php:140 +#, php-format +msgid "" +"\n" +"%s: %s" +msgstr "" +"\n" +"%s: %s" #: static/js/myconfirm.js:4 static/js/myconfirm.js:187 #: static/js/myconfirm.js:216 @@ -527,11 +560,23 @@ msgstr "Merci de patienter pendant le traitement de votre requête." msgid "Are you sure?" msgstr "Êtes-vous sure ?" -#: templates/fatal_error.tpl:3 +#: templates/login.tpl:19 templates/login.tpl:20 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: templates/login.tpl:24 templates/login.tpl:25 +msgid "Password" +msgstr "Mot de passe" + +#: templates/login.tpl:29 +msgid "Submit" +msgstr "Envoyer" + +#: templates/fatal_error.tpl:7 msgid "Oops..." msgstr "Oups..." -#: templates/fatal_error.tpl:5 +#: templates/fatal_error.tpl:10 msgid "" "A fatal error has occurred and it is preventing this application from " "working properly. Please try again later or contact support." @@ -540,14 +585,42 @@ msgstr "" "fonctionner correctement. Merci de réessayer ultérieurement ou de prendre " "contact avec le service support." -#: templates/fatal_error.tpl:7 +#: templates/fatal_error.tpl:13 msgid "Error: %1" msgstr "Erreur : %1" -#: templates/fatal_error.tpl:9 +#: templates/fatal_error.tpl:17 msgid "Back" msgstr "Retour" +#: templates/empty.tpl:72 +msgid "Sign out" +msgstr "Déconnexion" + +#: templates/empty.tpl:82 +msgid "Log in" +msgstr "Connexion" + +#: templates/empty.tpl:117 +msgid "Loading time:" +msgstr "Temps de chargement :" + +#: templates/empty.tpl:118 +msgid "Page: %1" +msgstr "Page : %1" + +#: templates/empty.tpl:119 +msgid "Database: %1" +msgstr "Base de données : %1" + +#: templates/empty.tpl:120 +msgid "Templating: " +msgstr "Modèle : " + +#: templates/empty.tpl:121 +msgid "Total: " +msgstr "Total : " + #: templates/homepage.tpl:6 msgid "Hello, world!" msgstr "Bonjour tout le monde !" @@ -564,26 +637,6 @@ msgstr "" "fichier homepage.tpl pour l'écraser. Vous pouvez également écraser " "le gestionnaire de l'URL racine de l'application web." -#: templates/empty.tpl:72 -msgid "Sign out" -msgstr "Déconnexion" - -#: templates/empty.tpl:81 -msgid "Log in" -msgstr "Connexion" - -#: templates/login.tpl:19 templates/login.tpl:20 -msgid "Username" -msgstr "Nom d'utilisateur" - -#: templates/login.tpl:24 templates/login.tpl:25 -msgid "Password" -msgstr "Mot de passe" - -#: templates/login.tpl:29 -msgid "Submit" -msgstr "Envoyer" - #~ msgid "Logout" #~ msgstr "Déconnexion" diff --git a/locales/messages.pot b/locales/messages.pot index 8754c11..2b00dca 100644 --- a/locales/messages.pot +++ b/locales/messages.pot @@ -1,11 +1,105 @@ msgid "" msgstr "" -"POT-Creation-Date: 2023-03-11 11:52+0100\n" -"PO-Revision-Date: 2023-03-11 11:52+0100\n" +"POT-Creation-Date: 2023-03-22 18:21+0100\n" +"PO-Revision-Date: 2023-03-22 18:21+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: Tpl.php:437 +msgid "No template specified." +msgstr "" + +#: Tpl.php:471 +msgid "An error occurred while displaying this page." +msgstr "" + +#: Tpl.php:871 +msgid "Unkwown" +msgstr "" + +#: Db.php:80 +msgid "Unable to connect to the database." +msgstr "" + +#: Auth/Form.php:41 +msgid "Invalid username or password." +msgstr "" + +#: Auth/Form.php:74 +msgid "Sign in" +msgstr "" + +#: Auth/Http.php:37 Url.php:181 +msgid "Authentication required" +msgstr "" + +#: Auth/Http.php:124 Auth/Http.php:127 Url.php:185 +msgid "Access denied" +msgstr "" + +#: Auth/Http.php:128 Auth/Http.php:132 +msgid "You must login to access this page." +msgstr "" + +#: Url.php:177 +msgid "Bad request" +msgstr "" + +#: Url.php:178 +msgid "Invalid request." +msgstr "" + +#: Url.php:182 +msgid "You have to be authenticated to access to this page." +msgstr "" + +#: Url.php:186 +msgid "" +"You do not have access to this application. If you think this is an error, " +"please contact support." +msgstr "" + +#: Url.php:189 +msgid "Whoops ! Page not found" +msgstr "" + +#: Url.php:190 +msgid "The requested page can not be found." +msgstr "" + +#: Url.php:198 +msgid "Error" +msgstr "" + +#: Url.php:199 +msgid "An unknown error occurred. If problem persist, please contact support." +msgstr "" + +#: Url.php:262 +msgid "" +"Unable to determine the requested page. If the problem persists, please " +"contact support." +msgstr "" + +#: Url.php:416 +msgid "" +"Unable to determine the requested page (loop detected). If the problem " +"persists, please contact support." +msgstr "" + +#: Url.php:446 +msgid "This request cannot be processed." +msgstr "" + +#: Url.php:456 +msgid "Authentication required but fail to authenticate you." +msgstr "" + +#: Url.php:475 +msgid "This request could not be processed correctly." +msgstr "" + #: Cli.php:44 msgid "Create a new project using EesyPHP framework" msgstr "" @@ -114,126 +208,51 @@ msgstr "" msgid "Please enter password:" msgstr "" -#: Db.php:74 -msgid "Unable to connect to the database." +#: functions.php:304 +msgid "d" msgstr "" -#: Auth/Form.php:41 -msgid "Invalid username or password." +#: functions.php:305 +msgid "h" msgstr "" -#: Auth/Form.php:74 -msgid "Sign in" +#: functions.php:306 +msgid "m" msgstr "" -#: Auth/Http.php:37 Url.php:181 -msgid "Authentication required" +#: functions.php:307 +msgid "s" msgstr "" -#: Auth/Http.php:124 Auth/Http.php:127 Url.php:185 -msgid "Access denied" +#: functions.php:308 +msgid "ms" msgstr "" -#: Auth/Http.php:128 Auth/Http.php:132 -msgid "You must login to access this page." +#: functions.php:309 +msgid "ns" msgstr "" -#: Email.php:101 +#: functions.php:327 #, php-format -msgid "

Mail initialy intended for %s.

" +msgid "Less than 1%s" msgstr "" -#: Email.php:102 -#, php-format -msgid "" -"\n" -"\n" -"\n" -"Mail initialy intended for %s." -msgstr "" - -#: Email.php:139 -#, php-format -msgid "

%s: %s

" -msgstr "" - -#: Email.php:140 -#, php-format -msgid "" -"\n" -"%s: %s" -msgstr "" - -#: Tpl.php:421 -msgid "No template specified." -msgstr "" - -#: Tpl.php:454 -msgid "An error occurred while displaying this page." -msgstr "" - -#: Url.php:177 -msgid "Bad request" -msgstr "" - -#: Url.php:178 -msgid "Invalid request." -msgstr "" - -#: Url.php:182 -msgid "You have to be authenticated to access to this page." -msgstr "" - -#: Url.php:186 -msgid "" -"You do not have access to this application. If you think this is an error, " -"please contact support." -msgstr "" - -#: Url.php:189 -msgid "Whoops ! Page not found" -msgstr "" - -#: Url.php:190 -msgid "The requested page can not be found." -msgstr "" - -#: Url.php:198 -msgid "Error" -msgstr "" - -#: Url.php:199 -msgid "An unknown error occurred. If problem persist, please contact support." -msgstr "" - -#: Url.php:262 -msgid "" -"Unable to determine the requested page. If the problem persists, please " -"contact support." -msgstr "" - -#: Url.php:416 -msgid "" -"Unable to determine the requested page (loop detected). If the problem " -"persists, please contact support." -msgstr "" - -#: Url.php:446 -msgid "This request cannot be processed." -msgstr "" - -#: Url.php:456 -msgid "Authentication required but fail to authenticate you." -msgstr "" - -#: Url.php:475 -msgid "This request could not be processed correctly." -msgstr "" - -#: I18n.php:118 App.php:238 +#: App.php:241 I18n.php:118 msgid "Hello world !" msgstr "" +#: App.php:243 +msgid "Hello world!" +msgstr "" + +#: App.php:254 +msgid "Disconnected" +msgstr "" + +#: App.php:256 +msgid "You are now disconnected." +msgstr "" + #: I18n.php:138 msgid "Extract messages that need to be translated" msgstr "" @@ -265,152 +284,166 @@ msgid "" "directories to MO files and as JS catalogs in locales directory." msgstr "" -#: I18n.php:356 +#: I18n.php:347 msgid "Fail to list EesyPHP PHP files." msgstr "" -#: I18n.php:376 +#: I18n.php:367 msgid "Fail to extract messages from EesyPHP PHP files using xgettext." msgstr "" -#: I18n.php:393 +#: I18n.php:384 msgid "Fail to list application PHP files." msgstr "" -#: I18n.php:413 +#: I18n.php:404 msgid "Fail to extract messages from PHP files using xgettext." msgstr "" -#: I18n.php:429 +#: I18n.php:420 #, php-format msgid "Fail to list JS files in the directory of static files '%s'." msgstr "" -#: I18n.php:451 +#: I18n.php:442 #, php-format msgid "" "Fail to extract messages from JS files in the directory of static files '%s' " "using xgettext." msgstr "" -#: I18n.php:473 +#: I18n.php:464 #, php-format msgid "" "Fail to extract messages from templates directory '%s' using tsmarty2c.php " "script." msgstr "" -#: I18n.php:509 +#: I18n.php:500 msgid "Fail to merge messages using msgcat." msgstr "" -#: I18n.php:523 +#: I18n.php:514 #, php-format msgid "Compendium file %s not found." msgstr "" -#: I18n.php:534 +#: I18n.php:525 #, php-format msgid "POT file not found (%s). Please run extract_messages first." msgstr "" -#: I18n.php:546 I18n.php:656 +#: I18n.php:537 I18n.php:647 #, php-format msgid "Lang directory '%s' found" msgstr "" -#: I18n.php:552 I18n.php:662 +#: I18n.php:543 I18n.php:653 #, php-format msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it." msgstr "" -#: I18n.php:567 +#: I18n.php:558 #, php-format msgid "Fail to init messages in %s PO file using msginit (%s)." msgstr "" -#: I18n.php:585 +#: I18n.php:576 #, php-format msgid "Fail to update messages in %s PO file using msgmerge (%s)." msgstr "" -#: I18n.php:591 I18n.php:670 +#: I18n.php:582 I18n.php:661 #, php-format msgid "PO file not found in lang '%s' directory, ignore it." msgstr "" -#: I18n.php:598 I18n.php:725 +#: I18n.php:589 I18n.php:716 #, php-format msgid "Fail to open root lang directory (%s)." msgstr "" -#: I18n.php:626 +#: I18n.php:617 #, php-format msgid "Lang alias symlink found: %s -> %s" msgstr "" -#: I18n.php:633 +#: I18n.php:624 #, php-format msgid "JS catalog symlink for %s -> %s created (%s)" msgstr "" -#: I18n.php:637 +#: I18n.php:628 #, php-format msgid "Fail to create JS catalog symlink for %s -> %s (%s)" msgstr "" -#: I18n.php:643 +#: I18n.php:634 #, php-format msgid "JS catalog symlink for %s -> %s already exist (%s)" msgstr "" -#: I18n.php:648 +#: I18n.php:639 #, php-format msgid "JS catalog file for %s already exist, but it's not a symlink to %s (%s)" msgstr "" -#: I18n.php:683 +#: I18n.php:674 #, php-format msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)." msgstr "" -#: I18n.php:695 +#: I18n.php:686 #, php-format msgid "Include core translated messages from %s PO file" msgstr "" -#: I18n.php:702 +#: I18n.php:693 #, php-format msgid "" "Core PO file %s not found: can not include its translated messages in " "resulting JSON catalog." msgstr "" -#: I18n.php:708 +#: I18n.php:699 #, php-format msgid "Fail to open %s JS catalog file in write mode (%s)." msgstr "" -#: I18n.php:713 +#: I18n.php:704 #, php-format msgid "Fail to write %s JS catalog in file (%s)." msgstr "" -#: I18n.php:718 +#: I18n.php:709 #, php-format msgid "%s JS catalog writed (%s)." msgstr "" -#: App.php:240 -msgid "Hello world!" +#: Email.php:101 +#, php-format +msgid "

Mail initialy intended for %s.

" msgstr "" -#: App.php:251 -msgid "Disconnected" +#: Email.php:102 +#, php-format +msgid "" +"\n" +"\n" +"\n" +"Mail initialy intended for %s." msgstr "" -#: App.php:253 -msgid "You are now disconnected." +#: Email.php:139 +#, php-format +msgid "

%s: %s

" +msgstr "" + +#: Email.php:140 +#, php-format +msgid "" +"\n" +"%s: %s" msgstr "" #: static/js/myconfirm.js:4 static/js/myconfirm.js:187 @@ -454,24 +487,64 @@ msgstr "" msgid "Are you sure?" msgstr "" -#: templates/fatal_error.tpl:3 +#: templates/login.tpl:19 templates/login.tpl:20 +msgid "Username" +msgstr "" + +#: templates/login.tpl:24 templates/login.tpl:25 +msgid "Password" +msgstr "" + +#: templates/login.tpl:29 +msgid "Submit" +msgstr "" + +#: templates/fatal_error.tpl:7 msgid "Oops..." msgstr "" -#: templates/fatal_error.tpl:5 +#: templates/fatal_error.tpl:10 msgid "" "A fatal error has occurred and it is preventing this application from " "working properly. Please try again later or contact support." msgstr "" -#: templates/fatal_error.tpl:7 +#: templates/fatal_error.tpl:13 msgid "Error: %1" msgstr "" -#: templates/fatal_error.tpl:9 +#: templates/fatal_error.tpl:17 msgid "Back" msgstr "" +#: templates/empty.tpl:72 +msgid "Sign out" +msgstr "" + +#: templates/empty.tpl:82 +msgid "Log in" +msgstr "" + +#: templates/empty.tpl:117 +msgid "Loading time:" +msgstr "" + +#: templates/empty.tpl:118 +msgid "Page: %1" +msgstr "" + +#: templates/empty.tpl:119 +msgid "Database: %1" +msgstr "" + +#: templates/empty.tpl:120 +msgid "Templating: " +msgstr "" + +#: templates/empty.tpl:121 +msgid "Total: " +msgstr "" + #: templates/homepage.tpl:6 msgid "Hello, world!" msgstr "" @@ -483,23 +556,3 @@ msgid "" "it. You could also overwrite the URL handler for the root of the web " "application." msgstr "" - -#: templates/empty.tpl:72 -msgid "Sign out" -msgstr "" - -#: templates/empty.tpl:81 -msgid "Log in" -msgstr "" - -#: templates/login.tpl:19 templates/login.tpl:20 -msgid "Username" -msgstr "" - -#: templates/login.tpl:24 templates/login.tpl:25 -msgid "Password" -msgstr "" - -#: templates/login.tpl:29 -msgid "Submit" -msgstr "" diff --git a/src/App.php b/src/App.php index 55648ea..27d6fa1 100644 --- a/src/App.php +++ b/src/App.php @@ -8,7 +8,9 @@ class App { * Options * @var array */ - protected static $options = array(); + protected static $options = array( + 'init_time' => null, + ); /** * Root directory path @@ -24,6 +26,7 @@ class App { * @return void */ public static function init($config_file, $options=null, $root_directory_path=null) { + Config::register_extra_variable('init_time', hrtime(true)); if (is_array($options)) self :: $options = $options; if (is_null($root_directory_path)) { diff --git a/src/Db.php b/src/Db.php index 39c847a..9cc0949 100644 --- a/src/Db.php +++ b/src/Db.php @@ -38,6 +38,12 @@ class Db { */ protected $locale_time = null; + /** + * Keep trace of total queries times (in ns) + * @var int; + */ + public static $total_query_time = 0; + /** * Connect to database and return FluentPDO Query object * @param string $dsn Database DSN @@ -65,7 +71,7 @@ class Db { $this -> fpdo = new Query($this -> pdo); // Register the debug query handler to log it - $this -> fpdo -> debug = array('\\EesyPHP\\Db', 'debug_query'); + $this -> fpdo -> debug = array(self :: class, 'debug_query'); Log :: trace("DB connection established (DSN: '%s')", $dsn); } @@ -81,6 +87,7 @@ class Db { * @return void */ public static function debug_query($q) { + self :: $total_query_time += intval(ceil($q->getExecutionTime() * 1000000000)); $msg = "# DB query"; if ($q->getResult()) $msg .= sprintf( diff --git a/src/Tpl.php b/src/Tpl.php index 685c8f1..8bfd219 100644 --- a/src/Tpl.php +++ b/src/Tpl.php @@ -75,6 +75,14 @@ class Tpl { */ private static $mime_type_detector = null; + /** + * Keep trace of Smarty start displaying page time + * @see display() + * @see smarty_computing_time() + * @var int + */ + private static $start_time = null; + /** * Initialization * @return void @@ -180,6 +188,10 @@ class Tpl { self :: register_static_directory($path); } self :: register_function('var_dump', array('EesyPHP\\Tpl', 'smarty_var_dump')); + self :: register_function( + 'smarty_computing_time', array('EesyPHP\\Tpl', 'smarty_computing_time')); + self :: register_function( + 'smarty_total_computing_time', array('EesyPHP\\Tpl', 'smarty_total_computing_time')); self :: register_class('App', '\\EesyPHP\\App'); } @@ -407,6 +419,10 @@ class Tpl { Tpl :: assign( 'upload_max_filesize', App::get('upload_max_filesize', null, 'int')); + + $init_time = App::get('init_time'); + Tpl :: assign('compute_time', $init_time?format_duration(hrtime(true)-$init_time, 'ns', 'ms'):null); + Tpl :: assign('db_time', Db :: $total_query_time?format_duration(Db :: $total_query_time, 'ns', 'ms'):null); } /** @@ -444,6 +460,7 @@ class Tpl { try { Hook :: trigger('before_displaying_template'); self :: define_common_variables($pagetitle); + self :: $start_time = hrtime(true); self :: $smarty->display("Tpl:$template"); } catch (Exception $e) { @@ -828,4 +845,30 @@ class Tpl { if (!isset($params['data'])) return; var_dump($params['data']); } + + /** + * Compute Smarty computing time + * @param array $params Parameters from template file + * @param Smarty $smarty The smarty object + * @return void + */ + public static function smarty_computing_time($params, $smarty) { + echo format_duration(hrtime(true) - self :: $start_time, 'ns', 'ms'); + } + + /** + * Compute total page computing time + * @param array $params Parameters from template file + * @param Smarty $smarty The smarty object + * @return void + */ + public static function smarty_total_computing_time($params, $smarty) { + $init_time = App::get('init_time'); + if ($init_time) { + echo format_duration(hrtime(true) - $init_time, 'ns', 'ms'); + } + else { + echo _('Unkwown'); + } + } } diff --git a/src/functions.php b/src/functions.php index 5159cb1..c8ace34 100644 --- a/src/functions.php +++ b/src/functions.php @@ -290,4 +290,42 @@ function check_ajax_request($session_key=null) { function ___($msg) { return $msg; } + +/** + * Format duration + * @param int|float $value The duration to format + * @param string|null $unit The unit of provide value (optional, default: 's') + * @param string|null $precision Minimal precision to displayed (optional, default: 's') + * @param string|null $separator The separator between time block (optional, default: null = one space) + * @return string|false The formated duration as string, or false in case of error + */ +function format_duration($value, $unit=null, $precision=null, $separator=null) { + $units = array( + ___('d') => 86400000000000, + ___('h') => 3600000000000, + ___('m') => 60000000000, + ___('s') => 1000000000, + ___('ms') => 1000000, + ___('ns') => 1, + ); + if (!$unit) $unit = 's'; + if (!array_key_exists($unit, $units)) return false; + if (!$precision) $precision = 's'; + if (!array_key_exists($precision, $units)) return false; + if ($value == 0) return "0".I18n :: _($precision); + $value = $value * $units[$unit]; + $result = array(); + foreach ($units as $unit => $factor) { + if ($value >= $factor) { + $vunit = floor($value/$factor); + $value = $value - ($vunit * $factor); + $result[] = $vunit._($unit); + } + if ($unit == $precision) break; + } + // 0 ? + if (empty($result)) return I18n :: _('Less than 1%s', I18n :: _($precision)); + return implode(is_null($separator)?' ':strval($separator), $result); +} + # vim: tabstop=2 shiftwidth=2 softtabstop=2 expandtab diff --git a/static/css/app.css b/static/css/app.css index 0f986ea..2f6c7a5 100644 --- a/static/css/app.css +++ b/static/css/app.css @@ -14,15 +14,12 @@ a.navbar-brand img { height: 27px; } -#footer { - border-top: 1px solid #333; - margin-top: 1em; - padding-top: 1em; +footer { + font-size: 0.9em; } -#footer p { - font-size: 0.8em; - text-align: center; +footer div.compute-times { + font-size: 0.6em; } /* diff --git a/templates/empty.tpl b/templates/empty.tpl index 33b305d..f48495a 100644 --- a/templates/empty.tpl +++ b/templates/empty.tpl @@ -107,10 +107,25 @@ {/block}