aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArthurHoaro <arthur@hoa.ro>2020-12-16 16:01:32 +0100
committerGitHub <noreply@github.com>2020-12-16 16:01:32 +0100
commitb1d78519a8dd8b43698f76c61d9967ca542a1660 (patch)
tree3e43804b25098126c77afe1986b1ddbd9b0aeb94
parent3d5f05052f7f2d26d8c26daed8b23aff360efcb2 (diff)
parent8a6b7e96b7176e03238bbb1bcaa4c8b0c25e6358 (diff)
downloadShaarli-b1d78519a8dd8b43698f76c61d9967ca542a1660.tar.gz
Shaarli-b1d78519a8dd8b43698f76c61d9967ca542a1660.tar.zst
Shaarli-b1d78519a8dd8b43698f76c61d9967ca542a1660.zip
Merge pull request #1652 from ArthurHoaro/fix/failing-mutex
Fix: soft fail if the mutex is not working
-rw-r--r--application/bookmark/BookmarkIO.php22
-rw-r--r--application/front/controller/admin/ServerController.php7
-rw-r--r--application/front/controller/visitor/InstallController.php7
-rw-r--r--application/helper/ApplicationUtils.php16
-rw-r--r--inc/languages/fr/LC_MESSAGES/shaarli.po186
5 files changed, 145 insertions, 93 deletions
diff --git a/application/bookmark/BookmarkIO.php b/application/bookmark/BookmarkIO.php
index c78dbe41..8439d470 100644
--- a/application/bookmark/BookmarkIO.php
+++ b/application/bookmark/BookmarkIO.php
@@ -4,6 +4,7 @@ declare(strict_types=1);
4 4
5namespace Shaarli\Bookmark; 5namespace Shaarli\Bookmark;
6 6
7use malkusch\lock\exception\LockAcquireException;
7use malkusch\lock\mutex\Mutex; 8use malkusch\lock\mutex\Mutex;
8use malkusch\lock\mutex\NoMutex; 9use malkusch\lock\mutex\NoMutex;
9use Shaarli\Bookmark\Exception\DatastoreNotInitializedException; 10use Shaarli\Bookmark\Exception\DatastoreNotInitializedException;
@@ -80,7 +81,7 @@ class BookmarkIO
80 } 81 }
81 82
82 $content = null; 83 $content = null;
83 $this->mutex->synchronized(function () use (&$content) { 84 $this->synchronized(function () use (&$content) {
84 $content = file_get_contents($this->datastore); 85 $content = file_get_contents($this->datastore);
85 }); 86 });
86 87
@@ -119,11 +120,28 @@ class BookmarkIO
119 120
120 $data = self::$phpPrefix . base64_encode(gzdeflate(serialize($links))) . self::$phpSuffix; 121 $data = self::$phpPrefix . base64_encode(gzdeflate(serialize($links))) . self::$phpSuffix;
121 122
122 $this->mutex->synchronized(function () use ($data) { 123 $this->synchronized(function () use ($data) {
123 file_put_contents( 124 file_put_contents(
124 $this->datastore, 125 $this->datastore,
125 $data 126 $data
126 ); 127 );
127 }); 128 });
128 } 129 }
130
131 /**
132 * Wrapper applying mutex to provided function.
133 * If the lock can't be acquired (e.g. some shared hosting provider), we execute the function without mutex.
134 *
135 * @see https://github.com/shaarli/Shaarli/issues/1650
136 *
137 * @param callable $function
138 */
139 protected function synchronized(callable $function): void
140 {
141 try {
142 $this->mutex->synchronized($function);
143 } catch (LockAcquireException $exception) {
144 $function();
145 }
146 }
129} 147}
diff --git a/application/front/controller/admin/ServerController.php b/application/front/controller/admin/ServerController.php
index fabeaf2f..4b74f4a9 100644
--- a/application/front/controller/admin/ServerController.php
+++ b/application/front/controller/admin/ServerController.php
@@ -39,11 +39,16 @@ class ServerController extends ShaarliAdminController
39 $currentVersion = $currentVersion === 'dev' ? $currentVersion : 'v' . $currentVersion; 39 $currentVersion = $currentVersion === 'dev' ? $currentVersion : 'v' . $currentVersion;
40 $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION)); 40 $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION));
41 41
42 $permissions = array_merge(
43 ApplicationUtils::checkResourcePermissions($this->container->conf),
44 ApplicationUtils::checkDatastoreMutex()
45 );
46
42 $this->assignView('php_version', PHP_VERSION); 47 $this->assignView('php_version', PHP_VERSION);
43 $this->assignView('php_eol', format_date($phpEol, false)); 48 $this->assignView('php_eol', format_date($phpEol, false));
44 $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable()); 49 $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable());
45 $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement()); 50 $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement());
46 $this->assignView('permissions', ApplicationUtils::checkResourcePermissions($this->container->conf)); 51 $this->assignView('permissions', $permissions);
47 $this->assignView('release_url', $releaseUrl); 52 $this->assignView('release_url', $releaseUrl);
48 $this->assignView('latest_version', $latestVersion); 53 $this->assignView('latest_version', $latestVersion);
49 $this->assignView('current_version', $currentVersion); 54 $this->assignView('current_version', $currentVersion);
diff --git a/application/front/controller/visitor/InstallController.php b/application/front/controller/visitor/InstallController.php
index bf965929..418d4a49 100644
--- a/application/front/controller/visitor/InstallController.php
+++ b/application/front/controller/visitor/InstallController.php
@@ -56,11 +56,16 @@ class InstallController extends ShaarliVisitorController
56 56
57 $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION)); 57 $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION));
58 58
59 $permissions = array_merge(
60 ApplicationUtils::checkResourcePermissions($this->container->conf),
61 ApplicationUtils::checkDatastoreMutex()
62 );
63
59 $this->assignView('php_version', PHP_VERSION); 64 $this->assignView('php_version', PHP_VERSION);
60 $this->assignView('php_eol', format_date($phpEol, false)); 65 $this->assignView('php_eol', format_date($phpEol, false));
61 $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable()); 66 $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable());
62 $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement()); 67 $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement());
63 $this->assignView('permissions', ApplicationUtils::checkResourcePermissions($this->container->conf)); 68 $this->assignView('permissions', $permissions);
64 69
65 $this->assignView('pagetitle', t('Install Shaarli')); 70 $this->assignView('pagetitle', t('Install Shaarli'));
66 71
diff --git a/application/helper/ApplicationUtils.php b/application/helper/ApplicationUtils.php
index 212dd8e2..a6c03aae 100644
--- a/application/helper/ApplicationUtils.php
+++ b/application/helper/ApplicationUtils.php
@@ -3,6 +3,8 @@
3namespace Shaarli\Helper; 3namespace Shaarli\Helper;
4 4
5use Exception; 5use Exception;
6use malkusch\lock\exception\LockAcquireException;
7use malkusch\lock\mutex\FlockMutex;
6use Shaarli\Config\ConfigManager; 8use Shaarli\Config\ConfigManager;
7 9
8/** 10/**
@@ -252,6 +254,20 @@ class ApplicationUtils
252 return $errors; 254 return $errors;
253 } 255 }
254 256
257 public static function checkDatastoreMutex(): array
258 {
259 $mutex = new FlockMutex(fopen(SHAARLI_MUTEX_FILE, 'r'), 2);
260 try {
261 $mutex->synchronized(function () {
262 return true;
263 });
264 } catch (LockAcquireException $e) {
265 $errors[] = t('Lock can not be acquired on the datastore. You might encounter concurrent access issues.');
266 }
267
268 return $errors ?? [];
269 }
270
255 /** 271 /**
256 * Returns a salted hash representing the current Shaarli version. 272 * Returns a salted hash representing the current Shaarli version.
257 * 273 *
diff --git a/inc/languages/fr/LC_MESSAGES/shaarli.po b/inc/languages/fr/LC_MESSAGES/shaarli.po
index 26dede4e..01492af4 100644
--- a/inc/languages/fr/LC_MESSAGES/shaarli.po
+++ b/inc/languages/fr/LC_MESSAGES/shaarli.po
@@ -1,8 +1,8 @@
1msgid "" 1msgid ""
2msgstr "" 2msgstr ""
3"Project-Id-Version: Shaarli\n" 3"Project-Id-Version: Shaarli\n"
4"POT-Creation-Date: 2020-11-09 14:39+0100\n" 4"POT-Creation-Date: 2020-11-24 13:13+0100\n"
5"PO-Revision-Date: 2020-11-09 14:42+0100\n" 5"PO-Revision-Date: 2020-11-24 13:14+0100\n"
6"Last-Translator: \n" 6"Last-Translator: \n"
7"Language-Team: Shaarli\n" 7"Language-Team: Shaarli\n"
8"Language: fr_FR\n" 8"Language: fr_FR\n"
@@ -20,31 +20,31 @@ msgstr ""
20"X-Poedit-SearchPath-3: init.php\n" 20"X-Poedit-SearchPath-3: init.php\n"
21"X-Poedit-SearchPath-4: plugins\n" 21"X-Poedit-SearchPath-4: plugins\n"
22 22
23#: application/History.php:180 23#: application/History.php:181
24msgid "History file isn't readable or writable" 24msgid "History file isn't readable or writable"
25msgstr "Le fichier d'historique n'est pas accessible en lecture ou en écriture" 25msgstr "Le fichier d'historique n'est pas accessible en lecture ou en écriture"
26 26
27#: application/History.php:191 27#: application/History.php:192
28msgid "Could not parse history file" 28msgid "Could not parse history file"
29msgstr "Format incorrect pour le fichier d'historique" 29msgstr "Format incorrect pour le fichier d'historique"
30 30
31#: application/Languages.php:181 31#: application/Languages.php:184
32msgid "Automatic" 32msgid "Automatic"
33msgstr "Automatique" 33msgstr "Automatique"
34 34
35#: application/Languages.php:182 35#: application/Languages.php:185
36msgid "German" 36msgid "German"
37msgstr "Allemand" 37msgstr "Allemand"
38 38
39#: application/Languages.php:183 39#: application/Languages.php:186
40msgid "English" 40msgid "English"
41msgstr "Anglais" 41msgstr "Anglais"
42 42
43#: application/Languages.php:184 43#: application/Languages.php:187
44msgid "French" 44msgid "French"
45msgstr "Français" 45msgstr "Français"
46 46
47#: application/Languages.php:185 47#: application/Languages.php:188
48msgid "Japanese" 48msgid "Japanese"
49msgstr "Japonais" 49msgstr "Japonais"
50 50
@@ -56,46 +56,46 @@ msgstr ""
56"l'extension php-gd doit être chargée pour utiliser les miniatures. Les " 56"l'extension php-gd doit être chargée pour utiliser les miniatures. Les "
57"miniatures sont désormais désactivées. Rechargez la page." 57"miniatures sont désormais désactivées. Rechargez la page."
58 58
59#: application/Utils.php:402 59#: application/Utils.php:405
60msgid "Setting not set" 60msgid "Setting not set"
61msgstr "Paramètre non défini" 61msgstr "Paramètre non défini"
62 62
63#: application/Utils.php:409 63#: application/Utils.php:412
64msgid "Unlimited" 64msgid "Unlimited"
65msgstr "Illimité" 65msgstr "Illimité"
66 66
67#: application/Utils.php:412 67#: application/Utils.php:415
68msgid "B" 68msgid "B"
69msgstr "o" 69msgstr "o"
70 70
71#: application/Utils.php:412 71#: application/Utils.php:415
72msgid "kiB" 72msgid "kiB"
73msgstr "ko" 73msgstr "ko"
74 74
75#: application/Utils.php:412 75#: application/Utils.php:415
76msgid "MiB" 76msgid "MiB"
77msgstr "Mo" 77msgstr "Mo"
78 78
79#: application/Utils.php:412 79#: application/Utils.php:415
80msgid "GiB" 80msgid "GiB"
81msgstr "Go" 81msgstr "Go"
82 82
83#: application/bookmark/BookmarkFileService.php:183 83#: application/bookmark/BookmarkFileService.php:185
84#: application/bookmark/BookmarkFileService.php:205 84#: application/bookmark/BookmarkFileService.php:207
85#: application/bookmark/BookmarkFileService.php:227 85#: application/bookmark/BookmarkFileService.php:229
86#: application/bookmark/BookmarkFileService.php:241 86#: application/bookmark/BookmarkFileService.php:243
87msgid "You're not authorized to alter the datastore" 87msgid "You're not authorized to alter the datastore"
88msgstr "Vous n'êtes pas autorisé à modifier les données" 88msgstr "Vous n'êtes pas autorisé à modifier les données"
89 89
90#: application/bookmark/BookmarkFileService.php:208 90#: application/bookmark/BookmarkFileService.php:210
91msgid "This bookmarks already exists" 91msgid "This bookmarks already exists"
92msgstr "Ce marque-page existe déjà" 92msgstr "Ce marque-page existe déjà"
93 93
94#: application/bookmark/BookmarkInitializer.php:39 94#: application/bookmark/BookmarkInitializer.php:42
95msgid "(private bookmark with thumbnail demo)" 95msgid "(private bookmark with thumbnail demo)"
96msgstr "(marque page privé avec une miniature)" 96msgstr "(marque page privé avec une miniature)"
97 97
98#: application/bookmark/BookmarkInitializer.php:42 98#: application/bookmark/BookmarkInitializer.php:45
99msgid "" 99msgid ""
100"Shaarli will automatically pick up the thumbnail for links to a variety of " 100"Shaarli will automatically pick up the thumbnail for links to a variety of "
101"websites.\n" 101"websites.\n"
@@ -118,11 +118,11 @@ msgstr ""
118"\n" 118"\n"
119"Maintenant, vous pouvez modifier ou supprimer les shaares créés par défaut.\n" 119"Maintenant, vous pouvez modifier ou supprimer les shaares créés par défaut.\n"
120 120
121#: application/bookmark/BookmarkInitializer.php:55 121#: application/bookmark/BookmarkInitializer.php:58
122msgid "Note: Shaare descriptions" 122msgid "Note: Shaare descriptions"
123msgstr "Note : Description des Shaares" 123msgstr "Note : Description des Shaares"
124 124
125#: application/bookmark/BookmarkInitializer.php:57 125#: application/bookmark/BookmarkInitializer.php:60
126msgid "" 126msgid ""
127"Adding a shaare without entering a URL creates a text-only \"note\" post " 127"Adding a shaare without entering a URL creates a text-only \"note\" post "
128"such as this one.\n" 128"such as this one.\n"
@@ -186,7 +186,7 @@ msgstr ""
186"| Citron | Fruit | Jaune | 30 |\n" 186"| Citron | Fruit | Jaune | 30 |\n"
187"| Carotte | Légume | Orange | 14 |\n" 187"| Carotte | Légume | Orange | 14 |\n"
188 188
189#: application/bookmark/BookmarkInitializer.php:91 189#: application/bookmark/BookmarkInitializer.php:94
190#: application/legacy/LegacyLinkDB.php:246 190#: application/legacy/LegacyLinkDB.php:246
191#: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 191#: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15
192#: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 192#: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48
@@ -198,7 +198,7 @@ msgstr ""
198"Le gestionnaire de marque-pages personnel, minimaliste, et sans base de " 198"Le gestionnaire de marque-pages personnel, minimaliste, et sans base de "
199"données" 199"données"
200 200
201#: application/bookmark/BookmarkInitializer.php:94 201#: application/bookmark/BookmarkInitializer.php:97
202msgid "" 202msgid ""
203"Welcome to Shaarli!\n" 203"Welcome to Shaarli!\n"
204"\n" 204"\n"
@@ -247,11 +247,11 @@ msgstr ""
247"issues) si vous avez une suggestion ou si vous rencontrez un problème.\n" 247"issues) si vous avez une suggestion ou si vous rencontrez un problème.\n"
248" \n" 248" \n"
249 249
250#: application/bookmark/exception/BookmarkNotFoundException.php:13 250#: application/bookmark/exception/BookmarkNotFoundException.php:14
251msgid "The link you are trying to reach does not exist or has been deleted." 251msgid "The link you are trying to reach does not exist or has been deleted."
252msgstr "Le lien que vous essayez de consulter n'existe pas ou a été supprimé." 252msgstr "Le lien que vous essayez de consulter n'existe pas ou a été supprimé."
253 253
254#: application/config/ConfigJson.php:52 application/config/ConfigPhp.php:129 254#: application/config/ConfigJson.php:52 application/config/ConfigPhp.php:131
255msgid "" 255msgid ""
256"Shaarli could not create the config file. Please make sure Shaarli has the " 256"Shaarli could not create the config file. Please make sure Shaarli has the "
257"right to write in the folder is it installed in." 257"right to write in the folder is it installed in."
@@ -259,12 +259,12 @@ msgstr ""
259"Shaarli n'a pas pu créer le fichier de configuration. Merci de vérifier que " 259"Shaarli n'a pas pu créer le fichier de configuration. Merci de vérifier que "
260"Shaarli a les droits d'écriture dans le dossier dans lequel il est installé." 260"Shaarli a les droits d'écriture dans le dossier dans lequel il est installé."
261 261
262#: application/config/ConfigManager.php:136 262#: application/config/ConfigManager.php:137
263#: application/config/ConfigManager.php:163 263#: application/config/ConfigManager.php:164
264msgid "Invalid setting key parameter. String expected, got: " 264msgid "Invalid setting key parameter. String expected, got: "
265msgstr "Clé de paramétrage invalide. Chaîne de caractères obtenue, attendu : " 265msgstr "Clé de paramétrage invalide. Chaîne de caractères obtenue, attendu : "
266 266
267#: application/config/exception/MissingFieldConfigException.php:21 267#: application/config/exception/MissingFieldConfigException.php:20
268#, php-format 268#, php-format
269msgid "Configuration value is required for %s" 269msgid "Configuration value is required for %s"
270msgstr "Le paramètre %s est obligatoire" 270msgstr "Le paramètre %s est obligatoire"
@@ -274,48 +274,48 @@ msgid "An error occurred while trying to save plugins loading order."
274msgstr "" 274msgstr ""
275"Une erreur s'est produite lors de la sauvegarde de l'ordre des extensions." 275"Une erreur s'est produite lors de la sauvegarde de l'ordre des extensions."
276 276
277#: application/config/exception/UnauthorizedConfigException.php:16 277#: application/config/exception/UnauthorizedConfigException.php:15
278msgid "You are not authorized to alter config." 278msgid "You are not authorized to alter config."
279msgstr "Vous n'êtes pas autorisé à modifier la configuration." 279msgstr "Vous n'êtes pas autorisé à modifier la configuration."
280 280
281#: application/exceptions/IOException.php:22 281#: application/exceptions/IOException.php:23
282msgid "Error accessing" 282msgid "Error accessing"
283msgstr "Une erreur s'est produite en accédant à" 283msgstr "Une erreur s'est produite en accédant à"
284 284
285#: application/feed/FeedBuilder.php:179 285#: application/feed/FeedBuilder.php:180
286msgid "Direct link" 286msgid "Direct link"
287msgstr "Liens directs" 287msgstr "Liens directs"
288 288
289#: application/feed/FeedBuilder.php:181 289#: application/feed/FeedBuilder.php:182
290#: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:103 290#: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:103
291#: tmp/dailyrss.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 291#: tmp/dailyrss.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26
292#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:179 292#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:179
293msgid "Permalink" 293msgid "Permalink"
294msgstr "Permalien" 294msgstr "Permalien"
295 295
296#: application/front/controller/admin/ConfigureController.php:54 296#: application/front/controller/admin/ConfigureController.php:56
297#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 297#: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24
298msgid "Configure" 298msgid "Configure"
299msgstr "Configurer" 299msgstr "Configurer"
300 300
301#: application/front/controller/admin/ConfigureController.php:102 301#: application/front/controller/admin/ConfigureController.php:106
302#: application/legacy/LegacyUpdater.php:537 302#: application/legacy/LegacyUpdater.php:539
303msgid "You have enabled or changed thumbnails mode." 303msgid "You have enabled or changed thumbnails mode."
304msgstr "Vous avez activé ou changé le mode de miniatures." 304msgstr "Vous avez activé ou changé le mode de miniatures."
305 305
306#: application/front/controller/admin/ConfigureController.php:103 306#: application/front/controller/admin/ConfigureController.php:108
307#: application/front/controller/admin/ServerController.php:75 307#: application/front/controller/admin/ServerController.php:76
308#: application/legacy/LegacyUpdater.php:538 308#: application/legacy/LegacyUpdater.php:540
309msgid "Please synchronize them." 309msgid "Please synchronize them."
310msgstr "Merci de les synchroniser." 310msgstr "Merci de les synchroniser."
311 311
312#: application/front/controller/admin/ConfigureController.php:113 312#: application/front/controller/admin/ConfigureController.php:119
313#: application/front/controller/visitor/InstallController.php:146 313#: application/front/controller/visitor/InstallController.php:149
314msgid "Error while writing config file after configuration update." 314msgid "Error while writing config file after configuration update."
315msgstr "" 315msgstr ""
316"Une erreur s'est produite lors de la sauvegarde du fichier de configuration." 316"Une erreur s'est produite lors de la sauvegarde du fichier de configuration."
317 317
318#: application/front/controller/admin/ConfigureController.php:122 318#: application/front/controller/admin/ConfigureController.php:128
319msgid "Configuration was saved." 319msgid "Configuration was saved."
320msgstr "La configuration a été sauvegardée." 320msgstr "La configuration a été sauvegardée."
321 321
@@ -433,7 +433,7 @@ msgstr "Administration serveur"
433msgid "Thumbnails cache has been cleared." 433msgid "Thumbnails cache has been cleared."
434msgstr "Le cache des miniatures a été vidé." 434msgstr "Le cache des miniatures a été vidé."
435 435
436#: application/front/controller/admin/ServerController.php:83 436#: application/front/controller/admin/ServerController.php:85
437msgid "Shaarli's cache folder has been cleared!" 437msgid "Shaarli's cache folder has been cleared!"
438msgstr "Le dossier de cache de Shaarli a été vidé !" 438msgstr "Le dossier de cache de Shaarli a été vidé !"
439 439
@@ -459,18 +459,18 @@ msgstr "Le lien avec l'identifiant %s n'a pas pu être trouvé."
459msgid "Invalid visibility provided." 459msgid "Invalid visibility provided."
460msgstr "Visibilité du lien non valide." 460msgstr "Visibilité du lien non valide."
461 461
462#: application/front/controller/admin/ShaarePublishController.php:171 462#: application/front/controller/admin/ShaarePublishController.php:173
463#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:171 463#: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:171
464msgid "Edit" 464msgid "Edit"
465msgstr "Modifier" 465msgstr "Modifier"
466 466
467#: application/front/controller/admin/ShaarePublishController.php:174 467#: application/front/controller/admin/ShaarePublishController.php:176
468#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 468#: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28
469#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:28 469#: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:28
470msgid "Shaare" 470msgid "Shaare"
471msgstr "Shaare" 471msgstr "Shaare"
472 472
473#: application/front/controller/admin/ShaarePublishController.php:205 473#: application/front/controller/admin/ShaarePublishController.php:208
474msgid "Note: " 474msgid "Note: "
475msgstr "Note : " 475msgstr "Note : "
476 476
@@ -485,7 +485,7 @@ msgstr "Mise à jour des miniatures"
485msgid "Tools" 485msgid "Tools"
486msgstr "Outils" 486msgstr "Outils"
487 487
488#: application/front/controller/visitor/BookmarkListController.php:120 488#: application/front/controller/visitor/BookmarkListController.php:121
489msgid "Search: " 489msgid "Search: "
490msgstr "Recherche : " 490msgstr "Recherche : "
491 491
@@ -535,12 +535,12 @@ msgstr "Une erreur inattendue s'est produite."
535msgid "Requested page could not be found." 535msgid "Requested page could not be found."
536msgstr "La page demandée n'a pas pu être trouvée." 536msgstr "La page demandée n'a pas pu être trouvée."
537 537
538#: application/front/controller/visitor/InstallController.php:64 538#: application/front/controller/visitor/InstallController.php:65
539#: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 539#: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22
540msgid "Install Shaarli" 540msgid "Install Shaarli"
541msgstr "Installation de Shaarli" 541msgstr "Installation de Shaarli"
542 542
543#: application/front/controller/visitor/InstallController.php:83 543#: application/front/controller/visitor/InstallController.php:85
544#, php-format 544#, php-format
545msgid "" 545msgid ""
546"<pre>Sessions do not seem to work correctly on your server.<br>Make sure the " 546"<pre>Sessions do not seem to work correctly on your server.<br>Make sure the "
@@ -559,14 +559,14 @@ msgstr ""
559"des cookies. Nous vous recommandons d'accéder à votre serveur depuis son " 559"des cookies. Nous vous recommandons d'accéder à votre serveur depuis son "
560"adresse IP ou un <em>Fully Qualified Domain Name</em>.<br>" 560"adresse IP ou un <em>Fully Qualified Domain Name</em>.<br>"
561 561
562#: application/front/controller/visitor/InstallController.php:154 562#: application/front/controller/visitor/InstallController.php:157
563msgid "" 563msgid ""
564"Shaarli is now configured. Please login and start shaaring your bookmarks!" 564"Shaarli is now configured. Please login and start shaaring your bookmarks!"
565msgstr "" 565msgstr ""
566"Shaarli est maintenant configuré. Vous pouvez vous connecter et commencez à " 566"Shaarli est maintenant configuré. Vous pouvez vous connecter et commencez à "
567"shaare vos liens !" 567"shaare vos liens !"
568 568
569#: application/front/controller/visitor/InstallController.php:168 569#: application/front/controller/visitor/InstallController.php:171
570msgid "Insufficient permissions:" 570msgid "Insufficient permissions:"
571msgstr "Permissions insuffisantes :" 571msgstr "Permissions insuffisantes :"
572 572
@@ -580,7 +580,7 @@ msgstr "Permissions insuffisantes :"
580msgid "Login" 580msgid "Login"
581msgstr "Connexion" 581msgstr "Connexion"
582 582
583#: application/front/controller/visitor/LoginController.php:77 583#: application/front/controller/visitor/LoginController.php:78
584msgid "Wrong login/password." 584msgid "Wrong login/password."
585msgstr "Nom d'utilisateur ou mot de passe incorrect(s)." 585msgstr "Nom d'utilisateur ou mot de passe incorrect(s)."
586 586
@@ -620,7 +620,7 @@ msgstr ""
620msgid "Wrong token." 620msgid "Wrong token."
621msgstr "Jeton invalide." 621msgstr "Jeton invalide."
622 622
623#: application/helper/ApplicationUtils.php:162 623#: application/helper/ApplicationUtils.php:165
624#, php-format 624#, php-format
625msgid "" 625msgid ""
626"Your PHP version is obsolete! Shaarli requires at least PHP %s, and thus " 626"Your PHP version is obsolete! Shaarli requires at least PHP %s, and thus "
@@ -631,52 +631,60 @@ msgstr ""
631"peut donc pas fonctionner. Votre version de PHP a des failles de sécurités " 631"peut donc pas fonctionner. Votre version de PHP a des failles de sécurités "
632"connues et devrait être mise à jour au plus tôt." 632"connues et devrait être mise à jour au plus tôt."
633 633
634#: application/helper/ApplicationUtils.php:195 634#: application/helper/ApplicationUtils.php:200
635#: application/helper/ApplicationUtils.php:215 635#: application/helper/ApplicationUtils.php:220
636msgid "directory is not readable" 636msgid "directory is not readable"
637msgstr "le répertoire n'est pas accessible en lecture" 637msgstr "le répertoire n'est pas accessible en lecture"
638 638
639#: application/helper/ApplicationUtils.php:218 639#: application/helper/ApplicationUtils.php:223
640msgid "directory is not writable" 640msgid "directory is not writable"
641msgstr "le répertoire n'est pas accessible en écriture" 641msgstr "le répertoire n'est pas accessible en écriture"
642 642
643#: application/helper/ApplicationUtils.php:240 643#: application/helper/ApplicationUtils.php:247
644msgid "file is not readable" 644msgid "file is not readable"
645msgstr "le fichier n'est pas accessible en lecture" 645msgstr "le fichier n'est pas accessible en lecture"
646 646
647#: application/helper/ApplicationUtils.php:243 647#: application/helper/ApplicationUtils.php:250
648msgid "file is not writable" 648msgid "file is not writable"
649msgstr "le fichier n'est pas accessible en écriture" 649msgstr "le fichier n'est pas accessible en écriture"
650 650
651#: application/helper/ApplicationUtils.php:277 651#: application/helper/ApplicationUtils.php:260
652msgid ""
653"Lock can not be acquired on the datastore. You might encounter concurrent "
654"access issues."
655msgstr ""
656"Le fichier datastore ne peut pas être verrouillé. Vous pourriez rencontrer "
657"des problèmes d'accès concurrents."
658
659#: application/helper/ApplicationUtils.php:293
652msgid "Configuration parsing" 660msgid "Configuration parsing"
653msgstr "Chargement de la configuration" 661msgstr "Chargement de la configuration"
654 662
655#: application/helper/ApplicationUtils.php:278 663#: application/helper/ApplicationUtils.php:294
656msgid "Slim Framework (routing, etc.)" 664msgid "Slim Framework (routing, etc.)"
657msgstr "Slim Framwork (routage, etc.)" 665msgstr "Slim Framwork (routage, etc.)"
658 666
659#: application/helper/ApplicationUtils.php:279 667#: application/helper/ApplicationUtils.php:295
660msgid "Multibyte (Unicode) string support" 668msgid "Multibyte (Unicode) string support"
661msgstr "Support des chaînes de caractère multibytes (Unicode)" 669msgstr "Support des chaînes de caractère multibytes (Unicode)"
662 670
663#: application/helper/ApplicationUtils.php:280 671#: application/helper/ApplicationUtils.php:296
664msgid "Required to use thumbnails" 672msgid "Required to use thumbnails"
665msgstr "Obligatoire pour utiliser les miniatures" 673msgstr "Obligatoire pour utiliser les miniatures"
666 674
667#: application/helper/ApplicationUtils.php:281 675#: application/helper/ApplicationUtils.php:297
668msgid "Localized text sorting (e.g. e->è->f)" 676msgid "Localized text sorting (e.g. e->è->f)"
669msgstr "Tri des textes traduits (ex : e->è->f)" 677msgstr "Tri des textes traduits (ex : e->è->f)"
670 678
671#: application/helper/ApplicationUtils.php:282 679#: application/helper/ApplicationUtils.php:298
672msgid "Better retrieval of bookmark metadata and thumbnail" 680msgid "Better retrieval of bookmark metadata and thumbnail"
673msgstr "Meilleure récupération des meta-données des marque-pages et minatures" 681msgstr "Meilleure récupération des meta-données des marque-pages et minatures"
674 682
675#: application/helper/ApplicationUtils.php:283 683#: application/helper/ApplicationUtils.php:299
676msgid "Use the translation system in gettext mode" 684msgid "Use the translation system in gettext mode"
677msgstr "Utiliser le système de traduction en mode gettext" 685msgstr "Utiliser le système de traduction en mode gettext"
678 686
679#: application/helper/ApplicationUtils.php:284 687#: application/helper/ApplicationUtils.php:300
680msgid "Login using LDAP server" 688msgid "Login using LDAP server"
681msgstr "Authentification via un serveur LDAP" 689msgstr "Authentification via un serveur LDAP"
682 690
@@ -750,7 +758,7 @@ msgstr ""
750msgid "Couldn't retrieve updater class methods." 758msgid "Couldn't retrieve updater class methods."
751msgstr "Impossible de récupérer les méthodes de la classe Updater." 759msgstr "Impossible de récupérer les méthodes de la classe Updater."
752 760
753#: application/legacy/LegacyUpdater.php:538 761#: application/legacy/LegacyUpdater.php:540
754msgid "<a href=\"./admin/thumbnails\">" 762msgid "<a href=\"./admin/thumbnails\">"
755msgstr "<a href=\"./admin/thumbnails\">" 763msgstr "<a href=\"./admin/thumbnails\">"
756 764
@@ -776,11 +784,11 @@ msgstr ""
776"a été importé avec succès en %d secondes : %d liens importés, %d liens " 784"a été importé avec succès en %d secondes : %d liens importés, %d liens "
777"écrasés, %d liens ignorés." 785"écrasés, %d liens ignorés."
778 786
779#: application/plugin/PluginManager.php:124 787#: application/plugin/PluginManager.php:125
780msgid " [plugin incompatibility]: " 788msgid " [plugin incompatibility]: "
781msgstr " [incompatibilité de l'extension] : " 789msgstr " [incompatibilité de l'extension] : "
782 790
783#: application/plugin/exception/PluginFileNotFoundException.php:21 791#: application/plugin/exception/PluginFileNotFoundException.php:22
784#, php-format 792#, php-format
785msgid "Plugin \"%s\" files not found." 793msgid "Plugin \"%s\" files not found."
786msgstr "Les fichiers de l'extension \"%s\" sont introuvables." 794msgstr "Les fichiers de l'extension \"%s\" sont introuvables."
@@ -794,7 +802,7 @@ msgstr "Impossible de purger %s : le répertoire n'existe pas"
794msgid "An error occurred while running the update " 802msgid "An error occurred while running the update "
795msgstr "Une erreur s'est produite lors de l'exécution de la mise à jour " 803msgstr "Une erreur s'est produite lors de l'exécution de la mise à jour "
796 804
797#: index.php:80 805#: index.php:81
798msgid "Shared bookmarks on " 806msgid "Shared bookmarks on "
799msgstr "Liens partagés sur " 807msgstr "Liens partagés sur "
800 808
@@ -811,11 +819,11 @@ msgstr "Shaare"
811msgid "Adds the addlink input on the linklist page." 819msgid "Adds the addlink input on the linklist page."
812msgstr "Ajoute le formulaire d'ajout de liens sur la page principale." 820msgstr "Ajoute le formulaire d'ajout de liens sur la page principale."
813 821
814#: plugins/archiveorg/archiveorg.php:28 822#: plugins/archiveorg/archiveorg.php:29
815msgid "View on archive.org" 823msgid "View on archive.org"
816msgstr "Voir sur archive.org" 824msgstr "Voir sur archive.org"
817 825
818#: plugins/archiveorg/archiveorg.php:41 826#: plugins/archiveorg/archiveorg.php:42
819msgid "For each link, add an Archive.org icon." 827msgid "For each link, add an Archive.org icon."
820msgstr "Pour chaque lien, ajoute une icône pour Archive.org." 828msgstr "Pour chaque lien, ajoute une icône pour Archive.org."
821 829
@@ -845,7 +853,7 @@ msgstr "Couleur de fond (gris léger)"
845msgid "Dark main color (e.g. visited links)" 853msgid "Dark main color (e.g. visited links)"
846msgstr "Couleur principale sombre (ex : les liens visités)" 854msgstr "Couleur principale sombre (ex : les liens visités)"
847 855
848#: plugins/demo_plugin/demo_plugin.php:477 856#: plugins/demo_plugin/demo_plugin.php:478
849msgid "" 857msgid ""
850"A demo plugin covering all use cases for template designers and plugin " 858"A demo plugin covering all use cases for template designers and plugin "
851"developers." 859"developers."
@@ -853,11 +861,11 @@ msgstr ""
853"Une extension de démonstration couvrant tous les cas d'utilisation pour les " 861"Une extension de démonstration couvrant tous les cas d'utilisation pour les "
854"designers de thèmes et les développeurs d'extensions." 862"designers de thèmes et les développeurs d'extensions."
855 863
856#: plugins/demo_plugin/demo_plugin.php:478 864#: plugins/demo_plugin/demo_plugin.php:479
857msgid "This is a parameter dedicated to the demo plugin. It'll be suffixed." 865msgid "This is a parameter dedicated to the demo plugin. It'll be suffixed."
858msgstr "Ceci est un paramètre dédié au plugin de démo. Il sera suffixé." 866msgstr "Ceci est un paramètre dédié au plugin de démo. Il sera suffixé."
859 867
860#: plugins/demo_plugin/demo_plugin.php:479 868#: plugins/demo_plugin/demo_plugin.php:480
861msgid "Other demo parameter" 869msgid "Other demo parameter"
862msgstr "Un autre paramètre de démo" 870msgstr "Un autre paramètre de démo"
863 871
@@ -879,7 +887,7 @@ msgstr ""
879msgid "Isso server URL (without 'http://')" 887msgid "Isso server URL (without 'http://')"
880msgstr "URL du serveur Isso (sans 'http://')" 888msgstr "URL du serveur Isso (sans 'http://')"
881 889
882#: plugins/piwik/piwik.php:23 890#: plugins/piwik/piwik.php:24
883msgid "" 891msgid ""
884"Piwik plugin error: Please define PIWIK_URL and PIWIK_SITEID in the plugin " 892"Piwik plugin error: Please define PIWIK_URL and PIWIK_SITEID in the plugin "
885"administration page." 893"administration page."
@@ -887,27 +895,27 @@ msgstr ""
887"Erreur de l'extension Piwik : Merci de définir les paramètres PIWIK_URL et " 895"Erreur de l'extension Piwik : Merci de définir les paramètres PIWIK_URL et "
888"PIWIK_SITEID dans la page d'administration des extensions." 896"PIWIK_SITEID dans la page d'administration des extensions."
889 897
890#: plugins/piwik/piwik.php:72 898#: plugins/piwik/piwik.php:73
891msgid "A plugin that adds Piwik tracking code to Shaarli pages." 899msgid "A plugin that adds Piwik tracking code to Shaarli pages."
892msgstr "Ajoute le code de traçage de Piwik sur les pages de Shaarli." 900msgstr "Ajoute le code de traçage de Piwik sur les pages de Shaarli."
893 901
894#: plugins/piwik/piwik.php:73 902#: plugins/piwik/piwik.php:74
895msgid "Piwik URL" 903msgid "Piwik URL"
896msgstr "URL de Piwik" 904msgstr "URL de Piwik"
897 905
898#: plugins/piwik/piwik.php:74 906#: plugins/piwik/piwik.php:75
899msgid "Piwik site ID" 907msgid "Piwik site ID"
900msgstr "Site ID de Piwik" 908msgstr "Site ID de Piwik"
901 909
902#: plugins/playvideos/playvideos.php:25 910#: plugins/playvideos/playvideos.php:26
903msgid "Video player" 911msgid "Video player"
904msgstr "Lecteur vidéo" 912msgstr "Lecteur vidéo"
905 913
906#: plugins/playvideos/playvideos.php:28 914#: plugins/playvideos/playvideos.php:29
907msgid "Play Videos" 915msgid "Play Videos"
908msgstr "Jouer les vidéos" 916msgstr "Jouer les vidéos"
909 917
910#: plugins/playvideos/playvideos.php:59 918#: plugins/playvideos/playvideos.php:60
911msgid "Add a button in the toolbar allowing to watch all videos." 919msgid "Add a button in the toolbar allowing to watch all videos."
912msgstr "" 920msgstr ""
913"Ajoute un bouton dans la barre de menu pour regarder toutes les vidéos." 921"Ajoute un bouton dans la barre de menu pour regarder toutes les vidéos."
@@ -935,11 +943,11 @@ msgstr "Mauvaise réponse du hub %s"
935msgid "Enable PubSubHubbub feed publishing." 943msgid "Enable PubSubHubbub feed publishing."
936msgstr "Active la publication de flux vers PubSubHubbub." 944msgstr "Active la publication de flux vers PubSubHubbub."
937 945
938#: plugins/qrcode/qrcode.php:73 plugins/wallabag/wallabag.php:71 946#: plugins/qrcode/qrcode.php:74 plugins/wallabag/wallabag.php:72
939msgid "For each link, add a QRCode icon." 947msgid "For each link, add a QRCode icon."
940msgstr "Pour chaque lien, ajouter une icône de QRCode." 948msgstr "Pour chaque lien, ajouter une icône de QRCode."
941 949
942#: plugins/wallabag/wallabag.php:21 950#: plugins/wallabag/wallabag.php:22
943msgid "" 951msgid ""
944"Wallabag plugin error: Please define the \"WALLABAG_URL\" setting in the " 952"Wallabag plugin error: Please define the \"WALLABAG_URL\" setting in the "
945"plugin administration page." 953"plugin administration page."
@@ -947,15 +955,15 @@ msgstr ""
947"Erreur de l'extension Wallabag : Merci de définir le paramètre « " 955"Erreur de l'extension Wallabag : Merci de définir le paramètre « "
948"WALLABAG_URL » dans la page d'administration des extensions." 956"WALLABAG_URL » dans la page d'administration des extensions."
949 957
950#: plugins/wallabag/wallabag.php:48 958#: plugins/wallabag/wallabag.php:49
951msgid "Save to wallabag" 959msgid "Save to wallabag"
952msgstr "Sauvegarder dans Wallabag" 960msgstr "Sauvegarder dans Wallabag"
953 961
954#: plugins/wallabag/wallabag.php:72 962#: plugins/wallabag/wallabag.php:73
955msgid "Wallabag API URL" 963msgid "Wallabag API URL"
956msgstr "URL de l'API Wallabag" 964msgstr "URL de l'API Wallabag"
957 965
958#: plugins/wallabag/wallabag.php:73 966#: plugins/wallabag/wallabag.php:74
959msgid "Wallabag API version (1 or 2)" 967msgid "Wallabag API version (1 or 2)"
960msgstr "Version de l'API Wallabag (1 ou 2)" 968msgstr "Version de l'API Wallabag (1 ou 2)"
961 969