aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/contactsmanager.php
blob: 282854123771b62c2057aa05533e1657c6ea79ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?php
/**
 * @author Bart Visscher <bartv@thisnet.nl>
 * @author Joas Schilling <nickvergessen@owncloud.com>
 * @author Morris Jobke <hey@morrisjobke.de>
 * @author Robin McCorkell <rmccorkell@karoshi.org.uk>
 * @author Thomas Müller <thomas.mueller@tmit.eu>
 * @author Tobia De Koninck <tobia@ledfan.be>
 *
 * @copyright Copyright (c) 2015, ownCloud, Inc.
 * @license AGPL-3.0
 *
 * This code is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License, version 3,
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 *
 */

namespace OC {

	class ContactsManager implements \OCP\Contacts\IManager {

		/**
		 * This function is used to search and find contacts within the users address books.
		 * In case $pattern is empty all contacts will be returned.
		 *
		 * @param string $pattern which should match within the $searchProperties
		 * @param array $searchProperties defines the properties within the query pattern should match
		 * @param array $options - for future use. One should always have options!
		 * @return array an array of contacts which are arrays of key-value-pairs
		 */
		public function search($pattern, $searchProperties = array(), $options = array()) {
			$this->loadAddressBooks();
			$result = array();
			foreach($this->addressBooks as $addressBook) {
				$r = $addressBook->search($pattern, $searchProperties, $options);
				$contacts = array();
				foreach($r as $c){
					$c['addressbook-key'] = $addressBook->getKey();
					$contacts[] = $c;
				}
				$result = array_merge($result, $contacts);
			}

			return $result;
		}

		/**
		 * This function can be used to delete the contact identified by the given id
		 *
		 * @param object $id the unique identifier to a contact
		 * @param string $addressBookKey identifier of the address book in which the contact shall be deleted
		 * @return bool successful or not
		 */
		public function delete($id, $addressBookKey) {
			$addressBook = $this->getAddressBook($addressBookKey);
			if (!$addressBook) {
				return null;
			}

			if ($addressBook->getPermissions() & \OCP\Constants::PERMISSION_DELETE) {
				return $addressBook->delete($id);
			}

			return null;
		}

		/**
		 * This function is used to create a new contact if 'id' is not given or not present.
		 * Otherwise the contact will be updated by replacing the entire data set.
		 *
		 * @param array $properties this array if key-value-pairs defines a contact
		 * @param string $addressBookKey identifier of the address book in which the contact shall be created or updated
		 * @return array representing the contact just created or updated
		 */
		public function createOrUpdate($properties, $addressBookKey) {
			$addressBook = $this->getAddressBook($addressBookKey);
			if (!$addressBook) {
				return null;
			}

			if ($addressBook->getPermissions() & \OCP\Constants::PERMISSION_CREATE) {
				return $addressBook->createOrUpdate($properties);
			}

			return null;
		}

		/**
		 * Check if contacts are available (e.g. contacts app enabled)
		 *
		 * @return bool true if enabled, false if not
		 */
		public function isEnabled() {
			return !empty($this->addressBooks) || !empty($this->addressBookLoaders);
		}

		/**
		 * @param \OCP\IAddressBook $addressBook
		 */
		public function registerAddressBook(\OCP\IAddressBook $addressBook) {
			$this->addressBooks[$addressBook->getKey()] = $addressBook;
		}

		/**
		 * @param \OCP\IAddressBook $addressBook
		 */
		public function unregisterAddressBook(\OCP\IAddressBook $addressBook) {
			unset($this->addressBooks[$addressBook->getKey()]);
		}

		/**
		 * @return array
		 */
		public function getAddressBooks() {
			$this->loadAddressBooks();
			$result = array();
			foreach($this->addressBooks as $addressBook) {
				$result[$addressBook->getKey()] = $addressBook->getDisplayName();
			}

			return $result;
		}

		/**
		 * removes all registered address book instances
		 */
		public function clear() {
			$this->addressBooks = array();
			$this->addressBookLoaders = array();
		}

		/**
		 * @var \OCP\IAddressBook[] which holds all registered address books
		 */
		private $addressBooks = array();

		/**
		 * @var \Closure[] to call to load/register address books
		 */
		private $addressBookLoaders = array();

		/**
		 * In order to improve lazy loading a closure can be registered which will be called in case
		 * address books are actually requested
		 *
		 * @param \Closure $callable
		 */
		public function register(\Closure $callable)
		{
			$this->addressBookLoaders[] = $callable;
		}

		/**
		 * Get (and load when needed) the address book for $key
		 *
		 * @param string $addressBookKey
		 * @return \OCP\IAddressBook
		 */
		protected function getAddressBook($addressBookKey)
		{
			$this->loadAddressBooks();
			if (!array_key_exists($addressBookKey, $this->addressBooks)) {
				return null;
			}

			return $this->addressBooks[$addressBookKey];
		}

		/**
		 * Load all address books registered with 'register'
		 */
		protected function loadAddressBooks()
		{
			foreach($this->addressBookLoaders as $callable) {
				$callable($this);
			}
			$this->addressBookLoaders = array();
		}
	}
}
quot;, "Unknown filetype" : "Type de fichier inconnu", "Invalid image" : "Image non valable", "Avatar image is not square" : "L'image d'avatar n'est pas carré", "View profile" : "Voir le profil", "today" : "aujourd'hui", "tomorrow" : "demain", "yesterday" : "hier", "_in %n day_::_in %n days_" : ["dans %n jour","dans %n jours","dans %n jours"], "_%n day ago_::_%n days ago_" : ["il y a %n jour","il y a %n jours","il y a %n jours"], "next month" : "mois suivant", "last month" : "le mois dernier", "_in %n month_::_in %n months_" : ["dans %n mois","dans %n mois","dans %n mois"], "_%n month ago_::_%n months ago_" : ["Il y a %n mois","Il y a %n mois","Il y a %n mois"], "next year" : "année suivante", "last year" : "l'année dernière", "_in %n year_::_in %n years_" : ["dans %n an","dans %n ans","dans %n ans"], "_%n year ago_::_%n years ago_" : ["il y a %n an","il y a %n ans","il y a %n ans"], "_in %n hour_::_in %n hours_" : ["dans %n heure","dans %n heures","dans %n heures"], "_%n hour ago_::_%n hours ago_" : ["Il y a %n heure","Il y a %n heures","Il y a %n heures"], "_in %n minute_::_in %n minutes_" : ["dans %n minute","dans %n minutes","dans %n minutes"], "_%n minute ago_::_%n minutes ago_" : ["il y a %n minute","il y a %n minutes","il y a %n minutes"], "in a few seconds" : "dans quelques secondes", "seconds ago" : "il y a quelques secondes", "Empty file" : "Fichier vide", "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Le module avec l'ID: %s n'existe pas. Merci de l'activer dans les paramètres d'applications ou de contacter votre administrateur.", "File already exists" : "Le fichier existe déjà", "Invalid path" : "Chemin incorrect", "Failed to create file from template" : "Impossible de créer le fichier à partir du modèle", "Templates" : "Modèles", "File name is a reserved word" : "Ce nom de fichier est un mot réservé", "File name contains at least one invalid character" : "Le nom de fichier contient un (des) caractère(s) non valide(s)", "File name is too long" : "Nom de fichier trop long", "Dot files are not allowed" : "Le nom de fichier ne peut pas commencer par un point", "Empty filename is not allowed" : "Le nom de fichier ne peut pas être vide", "App \"%s\" cannot be installed because appinfo file cannot be read." : "L'application \"%s\" ne peut pas être installée car le fichier appinfo ne peut pas être lu.", "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'application \"%s\" ne peut être installée car elle n'est pas compatible avec cette version du serveur", "__language_name__" : "Français", "This is an automatically sent email, please do not reply." : "Ceci est un e-mail envoyé automatiquement, veuillez ne pas y répondre.", "Help" : "Aide", "Appearance and accessibility" : "Apparence et accessibilité", "Apps" : "Applications", "Personal settings" : "Paramètres personnels", "Settings" : "Paramètres", "Log out" : "Se déconnecter", "Users" : "Utilisateurs", "Email" : "E-mail", "Mail %s" : "Courrier %s", "Phone" : "Téléphone", "Call %s" : "Appel %s", "Twitter" : "Twitter", "View %s on Twitter" : "Voir %s sur Twitter", "Website" : "Site web", "Visit %s" : "Visiter %s", "Address" : "Adresse", "Profile picture" : "Photo de profil", "About" : "À propos", "Full name" : "Nom complet", "Headline" : "Titre", "Organisation" : "Organisme", "Role" : "Rôle", "Unknown user" : "Utilisateur inconnu", "Additional settings" : "Paramètres supplémentaires", "MySQL username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base MySQL non valide(s)", "You need to enter details of an existing account." : "Vous devez indiquer les détails d'un compte existant.", "Oracle connection could not be established" : "La connexion Oracle ne peut être établie", "Oracle username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base Oracle non valide(s)", "PostgreSQL username and/or password not valid" : "Nom d'utilisateur et/ou mot de passe de la base PostgreSQL non valide(s)", "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X n'est pas pris en charge et %s ne fonctionnera pas correctement sur cette plate-forme. Son utilisation est à vos risques et périls !", "For the best results, please consider using a GNU/Linux server instead." : "Pour obtenir les meilleurs résultats, vous devriez utiliser un serveur GNU/Linux.", "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Il semble que cette instance %s fonctionne sur un environnement PHP 32-bit et open_basedir a été configuré dans php.ini. Cela engendre des problèmes avec les fichiers de taille supérieure à 4 Go et est donc fortement déconseillé.", "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Veuillez supprimer la configuration open_basedir de votre php.ini ou utiliser une version PHP 64-bit.", "Set an admin username." : "Spécifiez un nom d'utilisateur pour l'administrateur.", "Set an admin password." : "Spécifiez un mot de passe pour l'administrateur.", "Cannot create or write into the data directory %s" : "Impossible de créer ou d'écrire dans le répertoire des données %s", "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Le service de partage %s doit implémenter l'interface OCP\\Share_Backend", "Sharing backend %s not found" : "Service de partage %s non trouvé", "Sharing backend for %s not found" : "Le service de partage pour %s est introuvable", "%1$s shared »%2$s« with you and wants to add:" : "%1$s a partagé « %2$s » avec vous et souhaite ajouter :", "%1$s shared »%2$s« with you and wants to add" : "%1$s a partagé « %2$s » avec vous et souhaite ajouter", "»%s« added a note to a file shared with you" : "%s a ajouté une note à un fichier partagé avec vous", "Open »%s«" : "Ouvrir « %s »", "%1$s via %2$s" : "%1$s via %2$s", "You are not allowed to share %s" : "Vous n'êtes pas autorisé à partager %s", "Cannot increase permissions of %s" : "Impossible d'augmenter les permissions de %s", "Files cannot be shared with delete permissions" : "Les fichiers ne peuvent pas être partagés avec les autorisations de suppression", "Files cannot be shared with create permissions" : "Les fichiers ne peuvent pas être partagés avec les autorisations de création", "Expiration date is in the past" : "La date d'expiration est dans le passé", "_Cannot set expiration date more than %n day in the future_::_Cannot set expiration date more than %n days in the future_" : ["Impossible de définir la date d'expiration à dans plus de %s jour","Impossible de définir la date d'expiration à dans plus de %s jours","Impossible de définir la date d'expiration à dans plus de %s jours"], "Sharing is only allowed with group members" : "Le partage n'est que possible qu'avec les membres du groupe", "Sharing %s failed, because this item is already shared with user %s" : "Impossible de partager %s car il est déjà partagé avec l'utilisateur %s", "%1$s shared »%2$s« with you" : "%1$s a partagé « %2$s » avec vous", "%1$s shared »%2$s« with you." : "%1$s a partagé « %2$s » avec vous.", "Click the button below to open it." : "Cliquez sur le bouton ci-dessous pour l'ouvrir", "The requested share does not exist anymore" : "Le partage demandé n'existe plus", "Could not find category \"%s\"" : "Impossible de trouver la catégorie \"%s\"", "Sunday" : "Dimanche", "Monday" : "Lundi", "Tuesday" : "Mardi", "Wednesday" : "Mercredi", "Thursday" : "Jeudi", "Friday" : "Vendredi", "Saturday" : "Samedi", "Sun." : "Dim.", "Mon." : "Lun.", "Tue." : "Mar.", "Wed." : "Mer.", "Thu." : "Jeu.", "Fri." : "Ven.", "Sat." : "Sam.", "Su" : "Di", "Mo" : "Lu", "Tu" : "Ma", "We" : "Me", "Th" : "Je", "Fr" : "Ve", "Sa" : "Sa", "January" : "Janvier", "February" : "Février", "March" : "Mars", "April" : "Avril", "May" : "Mai", "June" : "Juin", "July" : "Juillet", "August" : "Août", "September" : "Septembre", "October" : "Octobre", "November" : "Novembre", "December" : "Décembre", "Jan." : "Jan.", "Feb." : "Fév.", "Mar." : "Mars", "Apr." : "Avr.", "May." : "Mai", "Jun." : "Juin", "Jul." : "Juil.", "Aug." : "Août", "Sep." : "Sep.", "Oct." : "Oct.", "Nov." : "Nov.", "Dec." : "Déc.", "The user limit has been reached and the user was not created." : "Le nombre maximum d'utilisateurs a été atteint, l'utilisateur n'a pas pu être créé.", "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Seuls les caractères suivants sont autorisés dans un nom d'utilisateur : \"a-z\", \"A-Z\", \"0-9\", \"_@-\" et \".\" (le point)", "A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi", "Username contains whitespace at the beginning or at the end" : "Le nom d'utilisateur contient des espaces au début ou à la fin", "Username must not consist of dots only" : "Le nom d'utilisateur ne doit pas être composé uniquement de points", "Username is invalid because files already exist for this user" : "Ce nom d'utilisateur n'est pas valide car des fichiers existent déjà pour cet utilisateur", "A valid password must be provided" : "Un mot de passe valide doit être saisi", "The username is already being used" : "Ce nom d'utilisateur est déjà utilisé", "Could not create user" : "Impossible de créer l'utilisateur", "User disabled" : "Utilisateur désactivé", "Login canceled by app" : "L'authentification a été annulé par l'application", "App \"%1$s\" cannot be installed because the following dependencies are not fulfilled: %2$s" : "L'application \"%1$s\" ne peut pas être installée à cause des dépendances suivantes non satisfaites : %2$s", "a safe home for all your data" : "un lieu sûr pour toutes vos données", "File is currently busy, please try again later" : "Le fichier est actuellement utilisé, veuillez réessayer plus tard", "Cannot download file" : "Impossible de télécharger le fichier", "Application is not enabled" : "L'application n'est pas activée", "Authentication error" : "Erreur d'authentification", "Token expired. Please reload page." : "La session a expiré. Veuillez recharger la page.", "No database drivers (sqlite, mysql, or postgresql) installed." : "Aucun pilote de base de données n’est installé (sqlite, mysql ou postgresql).", "Cannot write into \"config\" directory." : "Impossible d’écrire dans le répertoire \"config\".", "This can usually be fixed by giving the web server write access to the config directory. See %s" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire \"config\". Voir %s", "Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "Ou, si vous préférez conserver le fichier config.php en lecture seule, définissez l'option \"config_is_read_only\" sur true. Voir %s", "Cannot write into \"apps\" directory." : "Impossible d'écrire dans le répertoire \"apps\".", "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire des applications ou en désactivant le magasin d'applications dans le fichier de configuration.", "Cannot create \"data\" directory." : "Impossible de créer le dossier \"data\".", "This can usually be fixed by giving the web server write access to the root directory. See %s" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire racine. Voir %s", "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "Le problème de permissions peut généralement être résolu en donnant au serveur web un accès en écriture au répertoire racine. Voir %s.", "Your data directory is not writable." : "Votre répertoire des données n'est pas accessible en écriture.", "Setting locale to %s failed." : "Échec de la spécification des paramètres régionaux à %s.", "Please install one of these locales on your system and restart your web server." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.", "PHP module %s not installed." : "Le module PHP %s n’est pas installé.", "Please ask your server administrator to install the module." : "Veuillez demander à votre administrateur d’installer le module.", "PHP setting \"%s\" is not set to \"%s\"." : "Le paramètre PHP \"%s\" n'est pas \"%s\".", "Adjusting this setting in php.ini will make Nextcloud run again" : "Ajuster ce paramètre dans php.ini fera fonctionner Nextcould à nouveau", "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> est défini à <code>%s</code> alors que la valeur <code>0</code> est attendue.", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Pour corriger ce problème définissez <code>mbstring.func_overload</code> à <code>0</code> dans votre php.ini.", "libxml2 2.7.0 is at least required. Currently %s is installed." : "libxml2 2.7.0 au moins est requis. Actuellement %s est installé.", "To fix this issue update your libxml2 version and restart your web server." : "Pour régler ce problème, mettez à jour votre version de libxml2 et redémarrez votre serveur web.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP semble configuré de manière à supprimer les blocs PHPdoc du code. Cela rendra plusieurs applications de base inaccessibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La raison est probablement l'utilisation d'un cache / accélérateur tel que Zend OPcache ou eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Les modules PHP ont été installés mais sont toujours indiqués comme manquants ?", "Please ask your server administrator to restart the web server." : "Veuillez demander à votre administrateur serveur de redémarrer le serveur web.", "The required %s config variable is not configured in the config.php file." : "La valeur de configuration requise %s n'est pas configurée dans votre fichier config.php.", "Please ask your server administrator to check the Nextcloud configuration." : "Veuillez demander à votre administrateur serveur de vérifier la configuration de Nextcloud.", "PostgreSQL >= 9 required." : "PostgreSQL >= 9 requis.", "Please upgrade your database version." : "Veuillez mettre à jour votre gestionnaire de base de données.", "Your data directory is readable by other users." : "Votre répertoire est lisible par d'autres utilisateurs.", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Veuillez changer les permissions du répertoire en mode 0770 afin que son contenu ne puisse pas être listé par les autres utilisateurs.", "Your data directory must be an absolute path." : "Le chemin de votre répertoire doit être un chemin absolu.", "Check the value of \"datadirectory\" in your configuration." : "Verifiez la valeur de \"datadirectory\" dans votre configuration.", "Your data directory is invalid." : "Votre répertoire des données n'est pas valide.", "Ensure there is a file called \".ocdata\" in the root of the data directory." : "Assurez-vous que le répertoire de données contient un fichier \".ocdata\" à sa racine.", "Action \"%s\" not supported or implemented." : "Action \"%s\" non supportée ou implémentée.", "Authentication failed, wrong token or provider ID given" : "Échec de l'authentification, jeton erroné ou identification du fournisseur donnée", "Parameters missing in order to complete the request. Missing Parameters: \"%s\"" : "Paramètres manquants pour compléter la requête. Paramètres manquants : \"%s\"", "ID \"%1$s\" already used by cloud federation provider \"%2$s\"" : "L'identifiant \"%1$s\" est déjà utilisé par le fournisseur de cloud \"%2$s\"", "Cloud Federation Provider with ID: \"%s\" does not exist." : "Le fournisseur de cloud avec l'identifiant \"%s\" n'existe pas.", "Could not obtain lock type %d on \"%s\"." : "Impossible d'obtenir le verrouillage de type %d sur \"%s\".", "Storage unauthorized. %s" : "Espace de stockage non autorisé. %s", "Storage incomplete configuration. %s" : "Configuration de l'espace de stockage incomplète. %s", "Storage connection error. %s" : "Erreur de connexion à l'espace stockage. %s", "Storage is temporarily not available" : "Le support de stockage est temporairement indisponible", "Storage connection timeout. %s" : "Le délai d'attente pour la connexion à l'espace de stockage a été dépassé. %s", "This can usually be fixed by giving the webserver write access to the config directory." : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire de configuration.", "%s enter the database username and name." : "%s entrez le nom d'utilisateur et le nom de la base de données.", "%s enter the database username." : "%s entrez le nom d'utilisateur de la base de données.", "%s enter the database name." : "%s entrez le nom de la base de données.", "%s you may not use dots in the database name" : "%s vous ne pouvez pas utiliser de points dans le nom de la base de données", "Cannot read file" : "Impossible de lire le fichier", "Cannot write into \"config\" directory" : "Impossible d’écrire dans le répertoire \"config\"", "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire \"config\". Voir %s", "Cannot write into \"apps\" directory" : "Impossible d’écrire dans le répertoire \"apps\"", "This can usually be fixed by giving the webserver write access to the apps directory or disabling the App Store in the config file." : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire des applications ou en désactivant le magasin d'applications dans le fichier de configuration.", "Cannot create \"data\" directory" : "Impossible de créer le dossier \"data\"", "This can usually be fixed by giving the webserver write access to the root directory. See %s" : "Ce problème est généralement résolu en donnant au serveur web un accès en écriture au répertoire racine. Voir %s", "Permissions can usually be fixed by giving the webserver write access to the root directory. See %s." : "Le problème de permissions peut généralement être résolu en donnant au serveur web un accès en écriture au répertoire racine. Voir %s.", "Setting locale to %s failed" : "Echec de la spécification des paramètres régionaux à %s", "Please install one of these locales on your system and restart your webserver." : "Veuillez installer l'un de ces paramètres régionaux sur votre système et redémarrer votre serveur web.", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload est à \"%s\" alors que la valeur \"0\" est attendue", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Pour corriger ce problème mettez <code>mbstring.func_overload</code> à <code>0</code> dans votre php.ini", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 requis", "Please upgrade your database version" : "Veuillez mettre à jour votre gestionnaire de base de données", "Your data directory is readable by other users" : "Votre répertoire est lisible par les autres utilisateurs", "Your data directory must be an absolute path" : "Le chemin de votre répertoire doit être un lien absolu", "Check the value of \"datadirectory\" in your configuration" : "Verifiez la valeur de \"datadirectory\" dans votre configuration", "Your data directory is invalid" : "Votre répertoire n'est pas valide" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");