Handle PWA updates

This commit is contained in:
Benjamin Renard 2024-09-22 19:39:08 +02:00
parent 476587a970
commit fcd1bdff58
Signed by: bn8
GPG key ID: 3E2E1CE1907115BC
6 changed files with 283 additions and 197 deletions

File diff suppressed because one or more lines are too long

View file

@ -1,8 +1,8 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"POT-Creation-Date: 2024-09-22 16:25+0000\n" "POT-Creation-Date: 2024-09-22 17:37+0000\n"
"PO-Revision-Date: 2024-09-22 18:26+0200\n" "PO-Revision-Date: 2024-09-22 19:37+0200\n"
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n" "Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: fr\n" "Language: fr\n"
@ -44,7 +44,7 @@ msgstr "Annuler"
msgid "You have to enter the name of the suitcase!" msgid "You have to enter the name of the suitcase!"
msgstr "Vous devez saisir le nom de la valise !" msgstr "Vous devez saisir le nom de la valise !"
#: static/main.js:96 static/main.js:143 static/main.js:200 #: static/main.js:96 static/main.js:147 static/main.js:204
msgid "A suitcase exist with this name exist in the trash." msgid "A suitcase exist with this name exist in the trash."
msgstr "Une valise portant ce nom existe déjà dans la corbeille." msgstr "Une valise portant ce nom existe déjà dans la corbeille."
@ -52,184 +52,184 @@ msgstr "Une valise portant ce nom existe déjà dans la corbeille."
msgid "This suitcase already exist!" msgid "This suitcase already exist!"
msgstr "Cette valise existe déjà !" msgstr "Cette valise existe déjà !"
#: static/main.js:135 #: static/main.js:136
msgid "You have to enter the new name of the suitcase!" msgid "You have to enter the new name of the suitcase!"
msgstr "Vous devez saisir le nouveau nom de la valise !" msgstr "Vous devez saisir le nouveau nom de la valise !"
#: static/main.js:149 static/main.js:206 #: static/main.js:153 static/main.js:210
msgid "A suitcase with this name already exist!" msgid "A suitcase with this name already exist!"
msgstr "Une valise portant ce nom existe déjà !" msgstr "Une valise portant ce nom existe déjà !"
#: static/main.js:164 #: static/main.js:168
msgid "An error occurred renaming this suitcase." msgid "An error occurred renaming this suitcase."
msgstr "Une erreur est survenue en renommant cette valise." msgstr "Une erreur est survenue en renommant cette valise."
#: static/main.js:193 #: static/main.js:197
msgid "You have to enter the new suitcase name." msgid "You have to enter the new suitcase name."
msgstr "Vous devez saisir le nom de la nouvelle valise." msgstr "Vous devez saisir le nom de la nouvelle valise."
#: static/main.js:219 #: static/main.js:223
msgid "An error occurred copying the suitcase." msgid "An error occurred copying the suitcase."
msgstr "Une erreur est survenue en copiant cette valise." msgstr "Une erreur est survenue en copiant cette valise."
#: static/main.js:240 #: static/main.js:244
#, javascript-format #, javascript-format
msgid "Reset the %s suitcase" msgid "Reset the %s suitcase"
msgstr "Réinitialiser la valise %s" msgstr "Réinitialiser la valise %s"
#: static/main.js:241 #: static/main.js:245
#, javascript-format #, javascript-format
msgid "Are-you sure you want to reset the suitcase %s?" msgid "Are-you sure you want to reset the suitcase %s?"
msgstr "Êtes-vous sûre de vouloir réinitialiser la valise %s ?" msgstr "Êtes-vous sûre de vouloir réinitialiser la valise %s ?"
#: static/main.js:260 #: static/main.js:264
#, javascript-format #, javascript-format
msgid "Delete the %s suitcase" msgid "Delete the %s suitcase"
msgstr "Supprimer la valise %s" msgstr "Supprimer la valise %s"
#: static/main.js:261 #: static/main.js:265
#, javascript-format #, javascript-format
msgid "Are-you sure you want to delete the suitcase %s?" msgid "Are-you sure you want to delete the suitcase %s?"
msgstr "Êtes-vous sûre de vouloir supprimer la valise %s ?" msgstr "Êtes-vous sûre de vouloir supprimer la valise %s ?"
#: static/main.js:278 #: static/main.js:282
#, javascript-format #, javascript-format
msgid "Restaure the %s suitcase" msgid "Restaure the %s suitcase"
msgstr "Restaurer la valise %s" msgstr "Restaurer la valise %s"
#: static/main.js:279 #: static/main.js:283
#, javascript-format #, javascript-format
msgid "Are-you sure you want to restaure the suitcase %s?" msgid "Are-you sure you want to restaure the suitcase %s?"
msgstr "Êtes-vous sûre de vouloir restaurer la valise %s ?" msgstr "Êtes-vous sûre de vouloir restaurer la valise %s ?"
#: static/main.js:311 #: static/main.js:315
msgid "You have to enter the category name!" msgid "You have to enter the category name!"
msgstr "Vous devez saisir le nom de la catégorie !" msgstr "Vous devez saisir le nom de la catégorie !"
#: static/main.js:320 static/main.js:378 #: static/main.js:324 static/main.js:382
msgid "A category with this name already exist in the trash!" msgid "A category with this name already exist in the trash!"
msgstr "Une catégorie portant ce nom existe déjà dans la corbeille !" msgstr "Une catégorie portant ce nom existe déjà dans la corbeille !"
#: static/main.js:326 #: static/main.js:330
msgid "A category with this name already exist!" msgid "A category with this name already exist!"
msgstr "Une catégorie portant ce nom existe déjà !" msgstr "Une catégorie portant ce nom existe déjà !"
#: static/main.js:366 #: static/main.js:370
msgid "You have to enter the new name of the category!" msgid "You have to enter the new name of the category!"
msgstr "Vous devez saisir le nouveau nom de la catégorie !" msgstr "Vous devez saisir le nouveau nom de la catégorie !"
#: static/main.js:383 #: static/main.js:387
msgid "A category with this name already!" msgid "A category with this name already!"
msgstr "Une catégorie portant ce nom existe déjà !" msgstr "Une catégorie portant ce nom existe déjà !"
#: static/main.js:414 #: static/main.js:418
#, javascript-format #, javascript-format
msgid "Delete the category %s" msgid "Delete the category %s"
msgstr "Supprimer la catégorie %s" msgstr "Supprimer la catégorie %s"
#: static/main.js:415 #: static/main.js:419
#, javascript-format #, javascript-format
msgid "Are-you sure you want to delete the category %s?" msgid "Are-you sure you want to delete the category %s?"
msgstr "Êtes-vous sûre de vouloir supprimer la catégorie %s ?" msgstr "Êtes-vous sûre de vouloir supprimer la catégorie %s ?"
#: static/main.js:433 #: static/main.js:437
#, javascript-format #, javascript-format
msgid "Restore the category %s" msgid "Restore the category %s"
msgstr "Restaurer la catégorie %s" msgstr "Restaurer la catégorie %s"
#: static/main.js:434 #: static/main.js:438
#, javascript-format #, javascript-format
msgid "Are-you sure you want to restore the category %s?" msgid "Are-you sure you want to restore the category %s?"
msgstr "Êtes-vous sûre de vouloir restaurer la catégorie %s ?" msgstr "Êtes-vous sûre de vouloir restaurer la catégorie %s ?"
#: static/main.js:497 #: static/main.js:501
msgid "Tow elements can't have the same name!" msgid "Tow elements can't have the same name!"
msgstr "Deux éléments ne peuvent pas porter le même nom !" msgstr "Deux éléments ne peuvent pas porter le même nom !"
#: static/main.js:505 #: static/main.js:509
#, javascript-format #, javascript-format
msgid "The element '%s' already exist!" msgid "The element '%s' already exist!"
msgstr "Un élément portant le nom '%s' existe déjà !" msgstr "Un élément portant le nom '%s' existe déjà !"
#: static/main.js:528 #: static/main.js:532
msgid "You have to enter at least one element name!" msgid "You have to enter at least one element name!"
msgstr "Vous devez saisir au moins un nom d'élément !" msgstr "Vous devez saisir au moins un nom d'élément !"
#: static/main.js:561 #: static/main.js:565
msgid "Another?" msgid "Another?"
msgstr "Un autre ?" msgstr "Un autre ?"
#: static/main.js:566 #: static/main.js:570
msgid "Nb" msgid "Nb"
msgstr "Nb" msgstr "Nb"
#: static/main.js:593 #: static/main.js:597
msgid "You have to enter the new element name!" msgid "You have to enter the new element name!"
msgstr "Vous devez saisir le nom du nouvel élément !" msgstr "Vous devez saisir le nom du nouvel élément !"
#: static/main.js:609 #: static/main.js:613
msgid "An element with this name already exist in the trash!" msgid "An element with this name already exist in the trash!"
msgstr "Un élément portant ce nom existe déjà dans la corbeille !" msgstr "Un élément portant ce nom existe déjà dans la corbeille !"
#: static/main.js:615 #: static/main.js:619
msgid "An element with this name already exist!" msgid "An element with this name already exist!"
msgstr "Un élément portant ce nom existe déjà !" msgstr "Un élément portant ce nom existe déjà !"
#: static/main.js:659 #: static/main.js:663
#, javascript-format #, javascript-format
msgid "Delete the element %s" msgid "Delete the element %s"
msgstr "Supprimer l'élément %s" msgstr "Supprimer l'élément %s"
#: static/main.js:660 #: static/main.js:664
#, javascript-format #, javascript-format
msgid "Are-you sure you want to delete the element %s?" msgid "Are-you sure you want to delete the element %s?"
msgstr "Êtes-vous sûre de vouloir supprimer l'élément %s ?" msgstr "Êtes-vous sûre de vouloir supprimer l'élément %s ?"
#: static/main.js:681 #: static/main.js:685
#, javascript-format #, javascript-format
msgid "Restore the element %s" msgid "Restore the element %s"
msgstr "Restaurer l'élément %s" msgstr "Restaurer l'élément %s"
#: static/main.js:682 #: static/main.js:686
#, javascript-format #, javascript-format
msgid "Are-you sure you want to restore the element %s?" msgid "Are-you sure you want to restore the element %s?"
msgstr "Êtes-vous sûre de vouloir restaurer l'élément %s ?" msgstr "Êtes-vous sûre de vouloir restaurer l'élément %s ?"
#: static/main.js:785 #: static/main.js:789
msgid "Add an element" msgid "Add an element"
msgstr "Ajouter un élément" msgstr "Ajouter un élément"
#: static/main.js:823 static/main.js:963 #: static/main.js:827 static/main.js:967
msgid "Trash" msgid "Trash"
msgstr "Corbeille" msgstr "Corbeille"
#: static/main.js:836 #: static/main.js:840
msgid "The trash is empty." msgid "The trash is empty."
msgstr "La corbeille est vide." msgstr "La corbeille est vide."
#: static/main.js:924 #: static/main.js:928
msgid "Your suitcases" msgid "Your suitcases"
msgstr "Vos valises" msgstr "Vos valises"
#: static/main.js:995 #: static/main.js:999
msgid "No suitcase in the trash." msgid "No suitcase in the trash."
msgstr "Aucune valise dans la corbeille." msgstr "Aucune valise dans la corbeille."
#: static/main.js:1050 #: static/main.js:1054
msgid "Delete all local data" msgid "Delete all local data"
msgstr "Purger les données locales" msgstr "Purger les données locales"
#: static/main.js:1051 #: static/main.js:1055
msgid "Are-you sure you want to delete all local data (irreversible action)?" msgid "Are-you sure you want to delete all local data (irreversible action)?"
msgstr "" msgstr ""
"Êtes-vous sûre de vouloir supprimer toutes les données locales (action " "Êtes-vous sûre de vouloir supprimer toutes les données locales (action "
"irréversible) ?" "irréversible) ?"
#: static/main.js:1068 #: static/main.js:1072
msgid "Loading example data" msgid "Loading example data"
msgstr "Charger les données d'exemple" msgstr "Charger les données d'exemple"
#: static/main.js:1070 #: static/main.js:1074
msgid "" msgid ""
"Are-you sure you want to load example data in place of your own local data " "Are-you sure you want to load example data in place of your own local data "
"(irreversible action)?" "(irreversible action)?"
@ -237,15 +237,15 @@ msgstr ""
"Êtes-vous sûre de vouloir charger les données d'exemple à la place de vos " "Êtes-vous sûre de vouloir charger les données d'exemple à la place de vos "
"données locales (action irréversible) ?" "données locales (action irréversible) ?"
#: static/main.js:1120 #: static/main.js:1124
msgid "Failed to decode JSON file." msgid "Failed to decode JSON file."
msgstr "Impossible de décoder le fichier JSON." msgstr "Impossible de décoder le fichier JSON."
#: static/main.js:1125 #: static/main.js:1129
msgid "Import from file" msgid "Import from file"
msgstr "Import depuis un fichier" msgstr "Import depuis un fichier"
#: static/main.js:1127 #: static/main.js:1131
msgid "" msgid ""
"Are-you sure you want to overwrite your local data with the data from this " "Are-you sure you want to overwrite your local data with the data from this "
"file (irreversible action)?" "file (irreversible action)?"
@ -253,98 +253,113 @@ msgstr ""
"Êtes-vous sûre de vouloir écraser vos données locales par celles issues de " "Êtes-vous sûre de vouloir écraser vos données locales par celles issues de "
"ce fichier (action irréversible) ?" "ce fichier (action irréversible) ?"
#: static/main.js:1134 #: static/main.js:1138
msgid "The file has been imported successfully." msgid "The file has been imported successfully."
msgstr "Le fichier as bien été importé." msgstr "Le fichier as bien été importé."
#: static/main.js:1141 #: static/main.js:1145
msgid "An error occurred loading this file. Restoring previous data..." msgid "An error occurred loading this file. Restoring previous data..."
msgstr "" msgstr ""
"Une erreur est survenue en chargeant ce fichier. Restauration des données " "Une erreur est survenue en chargeant ce fichier. Restauration des données "
"précédentes..." "précédentes..."
#: static/main.js:1148 static/main.js:1315 #: static/main.js:1152 static/main.js:1319
msgid "Previous data has been restored successfully." msgid "Previous data has been restored successfully."
msgstr "Les données précédentes ont bien été restaurées." msgstr "Les données précédentes ont bien été restaurées."
#: static/main.js:1154 static/main.js:1321 #: static/main.js:1158 static/main.js:1325
msgid "An error occurred restoring previous data." msgid "An error occurred restoring previous data."
msgstr "Une erreur est survenue en restaurant les données précédentes." msgstr "Une erreur est survenue en restaurant les données précédentes."
#: static/main.js:1200 #: static/main.js:1204
msgid "You have to enter your username and password!" msgid "You have to enter your username and password!"
msgstr "Vous devez saisir votre nom d'utilisateur et votre mot de passe !" msgstr "Vous devez saisir votre nom d'utilisateur et votre mot de passe !"
#: static/main.js:1218 #: static/main.js:1222
msgid "Connected." msgid "Connected."
msgstr "Connecté." msgstr "Connecté."
#: static/main.js:1226 #: static/main.js:1230
msgid "An error occurred logging in. Please try again later." msgid "An error occurred logging in. Please try again later."
msgstr "" msgstr ""
"Une erreur est survenue durant la connexion. Merci de réessayer " "Une erreur est survenue durant la connexion. Merci de réessayer "
"ultérieurement." "ultérieurement."
#: static/main.js:1247 #: static/main.js:1251
msgid "Logout" msgid "Logout"
msgstr "Déconnexion" msgstr "Déconnexion"
#: static/main.js:1248 #: static/main.js:1252
msgid "Do you really want to log out?" msgid "Do you really want to log out?"
msgstr "Voulez-vous vraiment vous déconnecter ?" msgstr "Voulez-vous vraiment vous déconnecter ?"
#: static/main.js:1259 #: static/main.js:1263
msgid "Logged out" msgid "Logged out"
msgstr "Déconnecté" msgstr "Déconnecté"
#: static/main.js:1262 static/main.js:1270 #: static/main.js:1266 static/main.js:1274
msgid "An error occurred logging you out. Please try again later." msgid "An error occurred logging you out. Please try again later."
msgstr "" msgstr ""
"Une erreur est survenue durant la déconnexion. Merci de réessayer " "Une erreur est survenue durant la déconnexion. Merci de réessayer "
"ultérieurement." "ultérieurement."
#: static/main.js:1303 #: static/main.js:1307
msgid "Data synchronized." msgid "Data synchronized."
msgstr "Données synchronisées." msgstr "Données synchronisées."
#: static/main.js:1308 #: static/main.js:1312
msgid "" msgid ""
"An error occurred loading data from the server. Restoring previous data..." "An error occurred loading data from the server. Restoring previous data..."
msgstr "" msgstr ""
"Une erreur est survenue en chargeant les données depuis le serveur. " "Une erreur est survenue en chargeant les données depuis le serveur. "
"Restauration des données précédentes..." "Restauration des données précédentes..."
#: static/main.js:1331 static/main.js:1353 #: static/main.js:1335 static/main.js:1357
msgid "An error occurred synchronizing your data. Please try again later." msgid "An error occurred synchronizing your data. Please try again later."
msgstr "" msgstr ""
"Une erreur est survenue durant la synchronisation de vos données. Merci de " "Une erreur est survenue durant la synchronisation de vos données. Merci de "
"réessayer ultérieurement." "réessayer ultérieurement."
#: static/main.js:1345 #: static/main.js:1349
msgid "Your session appears to have expired, please re-authenticate." msgid "Your session appears to have expired, please re-authenticate."
msgstr "Votre session semble avoir expirée, merci de vous réidentifier." msgstr "Votre session semble avoir expirée, merci de vous réidentifier."
#: static/main.js:1372 #: static/main.js:1376
msgid "You must sign in before you can sync your data." msgid "You must sign in before you can sync your data."
msgstr "Vous devez vous connecter avant de synchroniser vos données." msgstr "Vous devez vous connecter avant de synchroniser vos données."
#: static/main.js:1386 #: static/main.js:1391
msgid "Synchronize your suitcases from server" msgid "Synchronize your suitcases from server"
msgstr "Synchronisation de vos valises avec les serveurs" msgstr "Synchronisation de vos valises avec les serveurs"
#: static/main.js:1387 #: static/main.js:1392
msgid "Are-you sure you want to synchronize your suitcases from server?" msgid "Are-you sure you want to synchronize your suitcases from server?"
msgstr "Êtes-vous sûre de vouloir synchroniser vos valises avec le serveur ?" msgstr "Êtes-vous sûre de vouloir synchroniser vos valises avec le serveur ?"
#: static/main.js:1450 #: static/main.js:1455
msgid "An example of a suitcase?" msgid "An example of a suitcase?"
msgstr "Un exemple de valise ?" msgstr "Un exemple de valise ?"
#: static/main.js:1451 #: static/main.js:1456
msgid "Would you like to load a sample suitcase to get started?" msgid "Would you like to load a sample suitcase to get started?"
msgstr "Voulez-vous chargeant un exemple de valise pour commencer ?" msgstr "Voulez-vous chargeant un exemple de valise pour commencer ?"
#: static/main.js:1468 #: static/main.js:1475
msgid "Update available"
msgstr "Mise à jour disponible"
#: static/main.js:1476
msgid ""
"An update of the application is available. Do-you want-to update it now?"
msgstr ""
"Une mise à jour de l'application est disponible. Voulez-vous mettre à jour "
"l'application maintenant ?"
#: static/main.js:1498
msgid "No available update."
msgstr "Aucune mise à jour disponible."
#: static/main.js:1508
msgid "" msgid ""
"Your internet browser does not support local data storage. Therefore, " "Your internet browser does not support local data storage. Therefore, "
"unfortunately you cannot use this application." "unfortunately you cannot use this application."
@ -352,11 +367,11 @@ msgstr ""
"Votre navigateur internet ne semble pas supporter le stockage de données " "Votre navigateur internet ne semble pas supporter le stockage de données "
"locales. Malheureusement, vous ne pouvez donc pas utiliser cette application." "locales. Malheureusement, vous ne pouvez donc pas utiliser cette application."
#: static/main.js:1557 #: static/main.js:1597
msgid "Error loading local data" msgid "Error loading local data"
msgstr "Une erreur est survenue en chargeant les données locales" msgstr "Une erreur est survenue en chargeant les données locales"
#: static/main.js:1558 #: static/main.js:1598
msgid "An error occurred while loading local data. Should we purge it?" msgid "An error occurred while loading local data. Should we purge it?"
msgstr "" msgstr ""
"Une erreur est survenue en chargeant vos données locales. Devons-nous les " "Une erreur est survenue en chargeant vos données locales. Devons-nous les "
@ -390,22 +405,22 @@ msgstr "PC portable"
msgid "Laptop charger" msgid "Laptop charger"
msgstr "Chargeur PC portable" msgstr "Chargeur PC portable"
#: static/mysc_objects.js:294 #: static/mysc_objects.js:291
#, javascript-format #, javascript-format
msgid "An error occurred while loading the %s suitcase from the cache." msgid "An error occurred while loading the %s suitcase from the cache."
msgstr "Une erreur est survenue en chargeant la valise %s depuis le cache." msgstr "Une erreur est survenue en chargeant la valise %s depuis le cache."
#: static/mysc_objects.js:417 #: static/mysc_objects.js:414
msgid "An error occurred while loading the category list from the cache." msgid "An error occurred while loading the category list from the cache."
msgstr "" msgstr ""
"Une erreur est survenue en chargeant la liste de catégories depuis le cache." "Une erreur est survenue en chargeant la liste de catégories depuis le cache."
#: static/mysc_objects.js:565 #: static/mysc_objects.js:562
#, javascript-format #, javascript-format
msgid "An error occurred while loading the %s category from the cache." msgid "An error occurred while loading the %s category from the cache."
msgstr "Une erreur est survenue en chargeant la catégorie %s depuis le cache." msgstr "Une erreur est survenue en chargeant la catégorie %s depuis le cache."
#: static/mysc_objects.js:636 #: static/mysc_objects.js:638
msgid "Error loading your login information. Please log in again." msgid "Error loading your login information. Please log in again."
msgstr "" msgstr ""
"Erreur en chargeant vos données d'authentification. Merci de vous " "Erreur en chargeant vos données d'authentification. Merci de vous "
@ -443,7 +458,7 @@ msgstr "Utilisateur connecté :"
msgid "Extra user information:" msgid "Extra user information:"
msgstr "Informations supplémentaires de l'utilisateur :" msgstr "Informations supplémentaires de l'utilisateur :"
#: templates/index.tpl:39 templates/index.tpl:91 #: templates/index.tpl:39 templates/index.tpl:93
msgid "Add a suitcase" msgid "Add a suitcase"
msgstr "Ajouter une valise" msgstr "Ajouter une valise"
@ -459,15 +474,15 @@ msgstr "Liste des valises"
msgid "Manage the suitcase" msgid "Manage the suitcase"
msgstr "Gérer les valises" msgstr "Gérer les valises"
#: templates/index.tpl:45 templates/index.tpl:157 #: templates/index.tpl:45 templates/index.tpl:159
msgid "Add a category" msgid "Add a category"
msgstr "Ajouter une catégorie" msgstr "Ajouter une catégorie"
#: templates/index.tpl:47 templates/index.tpl:135 #: templates/index.tpl:47 templates/index.tpl:137
msgid "Rename the suitcase" msgid "Rename the suitcase"
msgstr "Renommer la valise" msgstr "Renommer la valise"
#: templates/index.tpl:48 templates/index.tpl:113 #: templates/index.tpl:48 templates/index.tpl:115
msgid "Copy the suitcase" msgid "Copy the suitcase"
msgstr "Copier la valise" msgstr "Copier la valise"
@ -511,79 +526,83 @@ msgstr "Charger les données d'exemple"
msgid "Login" msgid "Login"
msgstr "Connexion" msgstr "Connexion"
#: templates/index.tpl:96 #: templates/index.tpl:77
msgid "Update the application"
msgstr "Mettre à jour l'application"
#: templates/index.tpl:98
msgid "Suitcase name" msgid "Suitcase name"
msgstr "Nom de la valise" msgstr "Nom de la valise"
#: templates/index.tpl:102 templates/index.tpl:168 templates/index.tpl:218 #: templates/index.tpl:104 templates/index.tpl:170 templates/index.tpl:220
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: templates/index.tpl:118 #: templates/index.tpl:120
msgid "Name of the new suitcase" msgid "Name of the new suitcase"
msgstr "Nom de la nouvelle valise" msgstr "Nom de la nouvelle valise"
#: templates/index.tpl:124 #: templates/index.tpl:126
msgid "Copy" msgid "Copy"
msgstr "Copier" msgstr "Copier"
#: templates/index.tpl:140 #: templates/index.tpl:142
msgid "New suitcase name" msgid "New suitcase name"
msgstr "Nouveau nom de la valise" msgstr "Nouveau nom de la valise"
#: templates/index.tpl:146 templates/index.tpl:190 #: templates/index.tpl:148 templates/index.tpl:192
msgid "Rename" msgid "Rename"
msgstr "Renommer" msgstr "Renommer"
#: templates/index.tpl:162 #: templates/index.tpl:164
msgid "Category name" msgid "Category name"
msgstr "Nom de la catégorie" msgstr "Nom de la catégorie"
#: templates/index.tpl:179 #: templates/index.tpl:181
msgid "Rename the category" msgid "Rename the category"
msgstr "Renommer la catégorie" msgstr "Renommer la catégorie"
#: templates/index.tpl:184 #: templates/index.tpl:186
msgid "New category's name" msgid "New category's name"
msgstr "Nouveau nom de la catégorie" msgstr "Nouveau nom de la catégorie"
#: templates/index.tpl:207 templates/index.tpl:234 #: templates/index.tpl:209 templates/index.tpl:236
msgid "Element name" msgid "Element name"
msgstr "Nom de l'élément" msgstr "Nom de l'élément"
#: templates/index.tpl:229 #: templates/index.tpl:231
msgid "Edit the element" msgid "Edit the element"
msgstr "Modifier l'élément" msgstr "Modifier l'élément"
#: templates/index.tpl:241 #: templates/index.tpl:243
msgid "Modify" msgid "Modify"
msgstr "Modifier" msgstr "Modifier"
#: templates/index.tpl:252 templates/index.tpl:257 #: templates/index.tpl:254 templates/index.tpl:259
msgid "Loading..." msgid "Loading..."
msgstr "Chargement..." msgstr "Chargement..."
#: templates/index.tpl:271 #: templates/index.tpl:273
msgid "Connection" msgid "Connection"
msgstr "Connexion" msgstr "Connexion"
#: templates/index.tpl:276 #: templates/index.tpl:278
msgid "Username" msgid "Username"
msgstr "Nom d'utilisateur" msgstr "Nom d'utilisateur"
#: templates/index.tpl:277 #: templates/index.tpl:279
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
#: templates/index.tpl:283 templates/index.tpl:326 #: templates/index.tpl:285 templates/index.tpl:328
msgid "Connect" msgid "Connect"
msgstr "Connexion" msgstr "Connexion"
#: templates/index.tpl:295 #: templates/index.tpl:297
msgid "Welcome" msgid "Welcome"
msgstr "Bienvenu" msgstr "Bienvenu"
#: templates/index.tpl:298 #: templates/index.tpl:300
msgid "" msgid ""
"<p>\n" "<p>\n"
" This application allows you to manage lists of things not to " " This application allows you to manage lists of things not to "
@ -652,6 +671,6 @@ msgstr ""
"commencer à utiliser l'application.\n" "commencer à utiliser l'application.\n"
"</p>" "</p>"
#: templates/index.tpl:327 #: templates/index.tpl:329
msgid "Anonymous usage" msgid "Anonymous usage"
msgstr "Utilisation annonyme" msgstr "Utilisation annonyme"

View file

@ -1,7 +1,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"POT-Creation-Date: 2024-09-22 16:25+0000\n" "POT-Creation-Date: 2024-09-22 17:37+0000\n"
"PO-Revision-Date: 2024-09-22 16:25+0000\n" "PO-Revision-Date: 2024-09-22 17:37+0000\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@ -38,7 +38,7 @@ msgstr ""
msgid "You have to enter the name of the suitcase!" msgid "You have to enter the name of the suitcase!"
msgstr "" msgstr ""
#: static/main.js:96 static/main.js:143 static/main.js:200 #: static/main.js:96 static/main.js:147 static/main.js:204
msgid "A suitcase exist with this name exist in the trash." msgid "A suitcase exist with this name exist in the trash."
msgstr "" msgstr ""
@ -46,293 +46,306 @@ msgstr ""
msgid "This suitcase already exist!" msgid "This suitcase already exist!"
msgstr "" msgstr ""
#: static/main.js:135 #: static/main.js:136
msgid "You have to enter the new name of the suitcase!" msgid "You have to enter the new name of the suitcase!"
msgstr "" msgstr ""
#: static/main.js:149 static/main.js:206 #: static/main.js:153 static/main.js:210
msgid "A suitcase with this name already exist!" msgid "A suitcase with this name already exist!"
msgstr "" msgstr ""
#: static/main.js:164 #: static/main.js:168
msgid "An error occurred renaming this suitcase." msgid "An error occurred renaming this suitcase."
msgstr "" msgstr ""
#: static/main.js:193 #: static/main.js:197
msgid "You have to enter the new suitcase name." msgid "You have to enter the new suitcase name."
msgstr "" msgstr ""
#: static/main.js:219 #: static/main.js:223
msgid "An error occurred copying the suitcase." msgid "An error occurred copying the suitcase."
msgstr "" msgstr ""
#: static/main.js:240 #: static/main.js:244
#, javascript-format #, javascript-format
msgid "Reset the %s suitcase" msgid "Reset the %s suitcase"
msgstr "" msgstr ""
#: static/main.js:241 #: static/main.js:245
#, javascript-format #, javascript-format
msgid "Are-you sure you want to reset the suitcase %s?" msgid "Are-you sure you want to reset the suitcase %s?"
msgstr "" msgstr ""
#: static/main.js:260 #: static/main.js:264
#, javascript-format #, javascript-format
msgid "Delete the %s suitcase" msgid "Delete the %s suitcase"
msgstr "" msgstr ""
#: static/main.js:261 #: static/main.js:265
#, javascript-format #, javascript-format
msgid "Are-you sure you want to delete the suitcase %s?" msgid "Are-you sure you want to delete the suitcase %s?"
msgstr "" msgstr ""
#: static/main.js:278 #: static/main.js:282
#, javascript-format #, javascript-format
msgid "Restaure the %s suitcase" msgid "Restaure the %s suitcase"
msgstr "" msgstr ""
#: static/main.js:279 #: static/main.js:283
#, javascript-format #, javascript-format
msgid "Are-you sure you want to restaure the suitcase %s?" msgid "Are-you sure you want to restaure the suitcase %s?"
msgstr "" msgstr ""
#: static/main.js:311 #: static/main.js:315
msgid "You have to enter the category name!" msgid "You have to enter the category name!"
msgstr "" msgstr ""
#: static/main.js:320 static/main.js:378 #: static/main.js:324 static/main.js:382
msgid "A category with this name already exist in the trash!" msgid "A category with this name already exist in the trash!"
msgstr "" msgstr ""
#: static/main.js:326 #: static/main.js:330
msgid "A category with this name already exist!" msgid "A category with this name already exist!"
msgstr "" msgstr ""
#: static/main.js:366 #: static/main.js:370
msgid "You have to enter the new name of the category!" msgid "You have to enter the new name of the category!"
msgstr "" msgstr ""
#: static/main.js:383 #: static/main.js:387
msgid "A category with this name already!" msgid "A category with this name already!"
msgstr "" msgstr ""
#: static/main.js:414 #: static/main.js:418
#, javascript-format #, javascript-format
msgid "Delete the category %s" msgid "Delete the category %s"
msgstr "" msgstr ""
#: static/main.js:415 #: static/main.js:419
#, javascript-format #, javascript-format
msgid "Are-you sure you want to delete the category %s?" msgid "Are-you sure you want to delete the category %s?"
msgstr "" msgstr ""
#: static/main.js:433 #: static/main.js:437
#, javascript-format #, javascript-format
msgid "Restore the category %s" msgid "Restore the category %s"
msgstr "" msgstr ""
#: static/main.js:434 #: static/main.js:438
#, javascript-format #, javascript-format
msgid "Are-you sure you want to restore the category %s?" msgid "Are-you sure you want to restore the category %s?"
msgstr "" msgstr ""
#: static/main.js:497 #: static/main.js:501
msgid "Tow elements can't have the same name!" msgid "Tow elements can't have the same name!"
msgstr "" msgstr ""
#: static/main.js:505 #: static/main.js:509
#, javascript-format #, javascript-format
msgid "The element '%s' already exist!" msgid "The element '%s' already exist!"
msgstr "" msgstr ""
#: static/main.js:528 #: static/main.js:532
msgid "You have to enter at least one element name!" msgid "You have to enter at least one element name!"
msgstr "" msgstr ""
#: static/main.js:561 #: static/main.js:565
msgid "Another?" msgid "Another?"
msgstr "" msgstr ""
#: static/main.js:566 #: static/main.js:570
msgid "Nb" msgid "Nb"
msgstr "" msgstr ""
#: static/main.js:593 #: static/main.js:597
msgid "You have to enter the new element name!" msgid "You have to enter the new element name!"
msgstr "" msgstr ""
#: static/main.js:609 #: static/main.js:613
msgid "An element with this name already exist in the trash!" msgid "An element with this name already exist in the trash!"
msgstr "" msgstr ""
#: static/main.js:615 #: static/main.js:619
msgid "An element with this name already exist!" msgid "An element with this name already exist!"
msgstr "" msgstr ""
#: static/main.js:659 #: static/main.js:663
#, javascript-format #, javascript-format
msgid "Delete the element %s" msgid "Delete the element %s"
msgstr "" msgstr ""
#: static/main.js:660 #: static/main.js:664
#, javascript-format #, javascript-format
msgid "Are-you sure you want to delete the element %s?" msgid "Are-you sure you want to delete the element %s?"
msgstr "" msgstr ""
#: static/main.js:681 #: static/main.js:685
#, javascript-format #, javascript-format
msgid "Restore the element %s" msgid "Restore the element %s"
msgstr "" msgstr ""
#: static/main.js:682 #: static/main.js:686
#, javascript-format #, javascript-format
msgid "Are-you sure you want to restore the element %s?" msgid "Are-you sure you want to restore the element %s?"
msgstr "" msgstr ""
#: static/main.js:785 #: static/main.js:789
msgid "Add an element" msgid "Add an element"
msgstr "" msgstr ""
#: static/main.js:823 static/main.js:963 #: static/main.js:827 static/main.js:967
msgid "Trash" msgid "Trash"
msgstr "" msgstr ""
#: static/main.js:836 #: static/main.js:840
msgid "The trash is empty." msgid "The trash is empty."
msgstr "" msgstr ""
#: static/main.js:924 #: static/main.js:928
msgid "Your suitcases" msgid "Your suitcases"
msgstr "" msgstr ""
#: static/main.js:995 #: static/main.js:999
msgid "No suitcase in the trash." msgid "No suitcase in the trash."
msgstr "" msgstr ""
#: static/main.js:1050 #: static/main.js:1054
msgid "Delete all local data" msgid "Delete all local data"
msgstr "" msgstr ""
#: static/main.js:1051 #: static/main.js:1055
msgid "Are-you sure you want to delete all local data (irreversible action)?" msgid "Are-you sure you want to delete all local data (irreversible action)?"
msgstr "" msgstr ""
#: static/main.js:1068 #: static/main.js:1072
msgid "Loading example data" msgid "Loading example data"
msgstr "" msgstr ""
#: static/main.js:1070 #: static/main.js:1074
msgid "" msgid ""
"Are-you sure you want to load example data in place of your own local data " "Are-you sure you want to load example data in place of your own local data "
"(irreversible action)?" "(irreversible action)?"
msgstr "" msgstr ""
#: static/main.js:1120 #: static/main.js:1124
msgid "Failed to decode JSON file." msgid "Failed to decode JSON file."
msgstr "" msgstr ""
#: static/main.js:1125 #: static/main.js:1129
msgid "Import from file" msgid "Import from file"
msgstr "" msgstr ""
#: static/main.js:1127 #: static/main.js:1131
msgid "" msgid ""
"Are-you sure you want to overwrite your local data with the data from this " "Are-you sure you want to overwrite your local data with the data from this "
"file (irreversible action)?" "file (irreversible action)?"
msgstr "" msgstr ""
#: static/main.js:1134 #: static/main.js:1138
msgid "The file has been imported successfully." msgid "The file has been imported successfully."
msgstr "" msgstr ""
#: static/main.js:1141 #: static/main.js:1145
msgid "An error occurred loading this file. Restoring previous data..." msgid "An error occurred loading this file. Restoring previous data..."
msgstr "" msgstr ""
#: static/main.js:1148 static/main.js:1315 #: static/main.js:1152 static/main.js:1319
msgid "Previous data has been restored successfully." msgid "Previous data has been restored successfully."
msgstr "" msgstr ""
#: static/main.js:1154 static/main.js:1321 #: static/main.js:1158 static/main.js:1325
msgid "An error occurred restoring previous data." msgid "An error occurred restoring previous data."
msgstr "" msgstr ""
#: static/main.js:1200 #: static/main.js:1204
msgid "You have to enter your username and password!" msgid "You have to enter your username and password!"
msgstr "" msgstr ""
#: static/main.js:1218 #: static/main.js:1222
msgid "Connected." msgid "Connected."
msgstr "" msgstr ""
#: static/main.js:1226 #: static/main.js:1230
msgid "An error occurred logging in. Please try again later." msgid "An error occurred logging in. Please try again later."
msgstr "" msgstr ""
#: static/main.js:1247 #: static/main.js:1251
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
#: static/main.js:1248 #: static/main.js:1252
msgid "Do you really want to log out?" msgid "Do you really want to log out?"
msgstr "" msgstr ""
#: static/main.js:1259 #: static/main.js:1263
msgid "Logged out" msgid "Logged out"
msgstr "" msgstr ""
#: static/main.js:1262 static/main.js:1270 #: static/main.js:1266 static/main.js:1274
msgid "An error occurred logging you out. Please try again later." msgid "An error occurred logging you out. Please try again later."
msgstr "" msgstr ""
#: static/main.js:1303 #: static/main.js:1307
msgid "Data synchronized." msgid "Data synchronized."
msgstr "" msgstr ""
#: static/main.js:1308 #: static/main.js:1312
msgid "" msgid ""
"An error occurred loading data from the server. Restoring previous data..." "An error occurred loading data from the server. Restoring previous data..."
msgstr "" msgstr ""
#: static/main.js:1331 static/main.js:1353 #: static/main.js:1335 static/main.js:1357
msgid "An error occurred synchronizing your data. Please try again later." msgid "An error occurred synchronizing your data. Please try again later."
msgstr "" msgstr ""
#: static/main.js:1345 #: static/main.js:1349
msgid "Your session appears to have expired, please re-authenticate." msgid "Your session appears to have expired, please re-authenticate."
msgstr "" msgstr ""
#: static/main.js:1372 #: static/main.js:1376
msgid "You must sign in before you can sync your data." msgid "You must sign in before you can sync your data."
msgstr "" msgstr ""
#: static/main.js:1386 #: static/main.js:1391
msgid "Synchronize your suitcases from server" msgid "Synchronize your suitcases from server"
msgstr "" msgstr ""
#: static/main.js:1387 #: static/main.js:1392
msgid "Are-you sure you want to synchronize your suitcases from server?" msgid "Are-you sure you want to synchronize your suitcases from server?"
msgstr "" msgstr ""
#: static/main.js:1450 #: static/main.js:1455
msgid "An example of a suitcase?" msgid "An example of a suitcase?"
msgstr "" msgstr ""
#: static/main.js:1451 #: static/main.js:1456
msgid "Would you like to load a sample suitcase to get started?" msgid "Would you like to load a sample suitcase to get started?"
msgstr "" msgstr ""
#: static/main.js:1468 #: static/main.js:1475
msgid "Update available"
msgstr ""
#: static/main.js:1476
msgid ""
"An update of the application is available. Do-you want-to update it now?"
msgstr ""
#: static/main.js:1498
msgid "No available update."
msgstr ""
#: static/main.js:1508
msgid "" msgid ""
"Your internet browser does not support local data storage. Therefore, " "Your internet browser does not support local data storage. Therefore, "
"unfortunately you cannot use this application." "unfortunately you cannot use this application."
msgstr "" msgstr ""
#: static/main.js:1557 #: static/main.js:1597
msgid "Error loading local data" msgid "Error loading local data"
msgstr "" msgstr ""
#: static/main.js:1558 #: static/main.js:1598
msgid "An error occurred while loading local data. Should we purge it?" msgid "An error occurred while loading local data. Should we purge it?"
msgstr "" msgstr ""
@ -364,21 +377,21 @@ msgstr ""
msgid "Laptop charger" msgid "Laptop charger"
msgstr "" msgstr ""
#: static/mysc_objects.js:294 #: static/mysc_objects.js:291
#, javascript-format #, javascript-format
msgid "An error occurred while loading the %s suitcase from the cache." msgid "An error occurred while loading the %s suitcase from the cache."
msgstr "" msgstr ""
#: static/mysc_objects.js:417 #: static/mysc_objects.js:414
msgid "An error occurred while loading the category list from the cache." msgid "An error occurred while loading the category list from the cache."
msgstr "" msgstr ""
#: static/mysc_objects.js:565 #: static/mysc_objects.js:562
#, javascript-format #, javascript-format
msgid "An error occurred while loading the %s category from the cache." msgid "An error occurred while loading the %s category from the cache."
msgstr "" msgstr ""
#: static/mysc_objects.js:636 #: static/mysc_objects.js:638
msgid "Error loading your login information. Please log in again." msgid "Error loading your login information. Please log in again."
msgstr "" msgstr ""
@ -412,7 +425,7 @@ msgstr ""
msgid "Extra user information:" msgid "Extra user information:"
msgstr "" msgstr ""
#: templates/index.tpl:39 templates/index.tpl:91 #: templates/index.tpl:39 templates/index.tpl:93
msgid "Add a suitcase" msgid "Add a suitcase"
msgstr "" msgstr ""
@ -428,15 +441,15 @@ msgstr ""
msgid "Manage the suitcase" msgid "Manage the suitcase"
msgstr "" msgstr ""
#: templates/index.tpl:45 templates/index.tpl:157 #: templates/index.tpl:45 templates/index.tpl:159
msgid "Add a category" msgid "Add a category"
msgstr "" msgstr ""
#: templates/index.tpl:47 templates/index.tpl:135 #: templates/index.tpl:47 templates/index.tpl:137
msgid "Rename the suitcase" msgid "Rename the suitcase"
msgstr "" msgstr ""
#: templates/index.tpl:48 templates/index.tpl:113 #: templates/index.tpl:48 templates/index.tpl:115
msgid "Copy the suitcase" msgid "Copy the suitcase"
msgstr "" msgstr ""
@ -480,79 +493,83 @@ msgstr ""
msgid "Login" msgid "Login"
msgstr "" msgstr ""
#: templates/index.tpl:96 #: templates/index.tpl:77
msgid "Update the application"
msgstr ""
#: templates/index.tpl:98
msgid "Suitcase name" msgid "Suitcase name"
msgstr "" msgstr ""
#: templates/index.tpl:102 templates/index.tpl:168 templates/index.tpl:218 #: templates/index.tpl:104 templates/index.tpl:170 templates/index.tpl:220
msgid "Add" msgid "Add"
msgstr "" msgstr ""
#: templates/index.tpl:118 #: templates/index.tpl:120
msgid "Name of the new suitcase" msgid "Name of the new suitcase"
msgstr "" msgstr ""
#: templates/index.tpl:124 #: templates/index.tpl:126
msgid "Copy" msgid "Copy"
msgstr "" msgstr ""
#: templates/index.tpl:140 #: templates/index.tpl:142
msgid "New suitcase name" msgid "New suitcase name"
msgstr "" msgstr ""
#: templates/index.tpl:146 templates/index.tpl:190 #: templates/index.tpl:148 templates/index.tpl:192
msgid "Rename" msgid "Rename"
msgstr "" msgstr ""
#: templates/index.tpl:162 #: templates/index.tpl:164
msgid "Category name" msgid "Category name"
msgstr "" msgstr ""
#: templates/index.tpl:179 #: templates/index.tpl:181
msgid "Rename the category" msgid "Rename the category"
msgstr "" msgstr ""
#: templates/index.tpl:184 #: templates/index.tpl:186
msgid "New category's name" msgid "New category's name"
msgstr "" msgstr ""
#: templates/index.tpl:207 templates/index.tpl:234 #: templates/index.tpl:209 templates/index.tpl:236
msgid "Element name" msgid "Element name"
msgstr "" msgstr ""
#: templates/index.tpl:229 #: templates/index.tpl:231
msgid "Edit the element" msgid "Edit the element"
msgstr "" msgstr ""
#: templates/index.tpl:241 #: templates/index.tpl:243
msgid "Modify" msgid "Modify"
msgstr "" msgstr ""
#: templates/index.tpl:252 templates/index.tpl:257 #: templates/index.tpl:254 templates/index.tpl:259
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
#: templates/index.tpl:271 #: templates/index.tpl:273
msgid "Connection" msgid "Connection"
msgstr "" msgstr ""
#: templates/index.tpl:276 #: templates/index.tpl:278
msgid "Username" msgid "Username"
msgstr "" msgstr ""
#: templates/index.tpl:277 #: templates/index.tpl:279
msgid "Password" msgid "Password"
msgstr "" msgstr ""
#: templates/index.tpl:283 templates/index.tpl:326 #: templates/index.tpl:285 templates/index.tpl:328
msgid "Connect" msgid "Connect"
msgstr "" msgstr ""
#: templates/index.tpl:295 #: templates/index.tpl:297
msgid "Welcome" msgid "Welcome"
msgstr "" msgstr ""
#: templates/index.tpl:298 #: templates/index.tpl:300
msgid "" msgid ""
"<p>\n" "<p>\n"
" This application allows you to manage lists of things not to " " This application allows you to manage lists of things not to "
@ -592,6 +609,6 @@ msgid ""
" </p>" " </p>"
msgstr "" msgstr ""
#: templates/index.tpl:327 #: templates/index.tpl:329
msgid "Anonymous usage" msgid "Anonymous usage"
msgstr "" msgstr ""

View file

@ -1463,6 +1463,42 @@ propose_example_data = function () {
); );
}; };
/**************************
* Cache / Update
*************************/
_check_for_update = false;
on_update_ready = function () {
if (_check_for_update) pleaseWaitHide();
alertify.confirm(
_("Update available"),
_(
"An update of the application is available. Do-you want-to update it now?"
),
on_confirm_update,
null
);
};
on_confirm_update = function () {
window.applicationCache.swapCache();
location.reload();
};
update_app = function () {
navbar_collapse_hide();
pleaseWaitShow();
_check_for_update = true;
window.applicationCache.update();
};
on_no_update = function () {
if (!_check_for_update) return;
pleaseWaitHide();
_check_for_update = false;
alertify.notify(_("No available update."), "success", 3);
};
/********************* /*********************
* Activate * Activate
*********************/ *********************/
@ -1577,4 +1613,17 @@ $(document).ready(function () {
pleaseWaitHide(); pleaseWaitHide();
break; break;
} }
if (
!window.applicationCache ||
window.applicationCache.status == window.applicationCache.UNCACHED
) {
$("#update_app").parent().remove();
} else {
$("#update_app").bind("click", update_app);
window.applicationCache.addEventListener("updateready", on_update_ready);
window.applicationCache.addEventListener("noupdate", on_no_update);
if (window.applicationCache.status === window.applicationCache.UPDATEREADY)
on_update_ready();
}
}); });

View file

@ -73,6 +73,7 @@
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a id='login' href='#'><span class='glyphicon glyphicon-loging'></span> {t}Login{/t}</a></li> <li><a id='login' href='#'><span class='glyphicon glyphicon-loging'></span> {t}Login{/t}</a></li>
<li><a id='logout' href='#'><span class='glyphicon glyphicon-logout'></span> {t}Logout{/t}</a></li> <li><a id='logout' href='#'><span class='glyphicon glyphicon-logout'></span> {t}Logout{/t}</a></li>
<li><a id='update_app' href='#'><span class='glyphicon glyphicon-refresh'></span> {t}Update the application{/t}</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>