@@ -14,33 +14,33 @@ |
||
| 14 | 14 | */ |
| 15 | 15 | class Contexte |
| 16 | 16 | { |
| 17 | - /** |
|
| 18 | - * Description du squelette |
|
| 19 | - * |
|
| 20 | - * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 21 | - * |
|
| 22 | - * Peut contenir les index : |
|
| 23 | - * |
|
| 24 | - * - nom : Nom du fichier de cache |
|
| 25 | - * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 26 | - * - sourcefile : Chemin du squelette |
|
| 27 | - * - squelette : Code du squelette |
|
| 28 | - * - id_mere : Identifiant de la boucle parente |
|
| 29 | - * - documents : Pour embed et img dans les textes |
|
| 30 | - * - session : Pour un cache sessionné par auteur |
|
| 31 | - * - niv : Niveau de tabulation |
|
| 32 | - */ |
|
| 33 | - public array $descr = []; |
|
| 17 | + /** |
|
| 18 | + * Description du squelette |
|
| 19 | + * |
|
| 20 | + * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 21 | + * |
|
| 22 | + * Peut contenir les index : |
|
| 23 | + * |
|
| 24 | + * - nom : Nom du fichier de cache |
|
| 25 | + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 26 | + * - sourcefile : Chemin du squelette |
|
| 27 | + * - squelette : Code du squelette |
|
| 28 | + * - id_mere : Identifiant de la boucle parente |
|
| 29 | + * - documents : Pour embed et img dans les textes |
|
| 30 | + * - session : Pour un cache sessionné par auteur |
|
| 31 | + * - niv : Niveau de tabulation |
|
| 32 | + */ |
|
| 33 | + public array $descr = []; |
|
| 34 | 34 | |
| 35 | - /** Identifiant de la boucle */ |
|
| 36 | - public string $id_boucle = ''; |
|
| 35 | + /** Identifiant de la boucle */ |
|
| 36 | + public string $id_boucle = ''; |
|
| 37 | 37 | |
| 38 | - /** Numéro de ligne dans le code source du squelette */ |
|
| 39 | - public int $ligne = 0; |
|
| 38 | + /** Numéro de ligne dans le code source du squelette */ |
|
| 39 | + public int $ligne = 0; |
|
| 40 | 40 | |
| 41 | - /** Langue d'exécution */ |
|
| 42 | - public string $lang = ''; |
|
| 41 | + /** Langue d'exécution */ |
|
| 42 | + public string $lang = ''; |
|
| 43 | 43 | |
| 44 | - /** Résultat de la compilation: toujours une expression PHP */ |
|
| 45 | - public string $code = ''; |
|
| 44 | + /** Résultat de la compilation: toujours une expression PHP */ |
|
| 45 | + public string $code = ''; |
|
| 46 | 46 | } |
@@ -7,85 +7,85 @@ |
||
| 7 | 7 | **/ |
| 8 | 8 | class Idiome |
| 9 | 9 | { |
| 10 | - /** Type de noeud */ |
|
| 11 | - public string $type = 'idiome'; |
|
| 12 | - |
|
| 13 | - /** Clé de traduction demandée. Exemple 'item_oui' */ |
|
| 14 | - public string $nom_champ = ''; |
|
| 15 | - |
|
| 16 | - /** Module de langue où chercher la clé de traduction. Exemple 'medias' */ |
|
| 17 | - public string $module = ''; |
|
| 18 | - |
|
| 19 | - /** Arguments à passer à la chaîne */ |
|
| 20 | - public array $arg = []; |
|
| 21 | - |
|
| 22 | - /** |
|
| 23 | - * Filtres à appliquer au résultat |
|
| 24 | - * |
|
| 25 | - * |
|
| 26 | - * * FIXME: type unique. |
|
| 27 | - * @var false|array |
|
| 28 | - * - false: erreur de syntaxe |
|
| 29 | - */ |
|
| 30 | - public $param = []; |
|
| 31 | - |
|
| 32 | - /** Source des filtres (compatibilité) (?) */ |
|
| 33 | - public array $fonctions = []; |
|
| 34 | - |
|
| 35 | - /** |
|
| 36 | - * Inutilisé, propriété générique de l'AST |
|
| 37 | - * |
|
| 38 | - * @var string|array |
|
| 39 | - */ |
|
| 40 | - public $avant = ''; |
|
| 41 | - |
|
| 42 | - /** |
|
| 43 | - * Inutilisé, propriété générique de l'AST |
|
| 44 | - * |
|
| 45 | - * @var string|array |
|
| 46 | - */ |
|
| 47 | - public $apres = ''; |
|
| 48 | - |
|
| 49 | - /** Identifiant de la boucle */ |
|
| 50 | - public string $id_boucle = ''; |
|
| 51 | - |
|
| 52 | - /** |
|
| 53 | - * AST du squelette, liste de toutes les boucles |
|
| 54 | - * |
|
| 55 | - * @var Boucle[] |
|
| 56 | - */ |
|
| 57 | - public array $boucles; |
|
| 58 | - |
|
| 59 | - /** Alias de table d'application de la requête ou nom complet de la table SQL */ |
|
| 60 | - public ?string $type_requete; |
|
| 61 | - |
|
| 62 | - /** Résultat de la compilation: toujours une expression PHP */ |
|
| 63 | - public string $code = ''; |
|
| 64 | - |
|
| 65 | - /** |
|
| 66 | - * Interdire les scripts |
|
| 67 | - * |
|
| 68 | - * @see interdire_scripts() |
|
| 69 | - */ |
|
| 70 | - public bool $interdire_scripts = false; |
|
| 71 | - |
|
| 72 | - /** |
|
| 73 | - * Description du squelette |
|
| 74 | - * |
|
| 75 | - * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 76 | - * |
|
| 77 | - * Peut contenir les index : |
|
| 78 | - * - nom : Nom du fichier de cache |
|
| 79 | - * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 80 | - * - sourcefile : Chemin du squelette |
|
| 81 | - * - squelette : Code du squelette |
|
| 82 | - * - id_mere : Identifiant de la boucle parente |
|
| 83 | - * - documents : Pour embed et img dans les textes |
|
| 84 | - * - session : Pour un cache sessionné par auteur |
|
| 85 | - * - niv : Niveau de tabulation |
|
| 86 | - */ |
|
| 87 | - public array $descr = []; |
|
| 88 | - |
|
| 89 | - /** Numéro de ligne dans le code source du squelette */ |
|
| 90 | - public int $ligne = 0; |
|
| 10 | + /** Type de noeud */ |
|
| 11 | + public string $type = 'idiome'; |
|
| 12 | + |
|
| 13 | + /** Clé de traduction demandée. Exemple 'item_oui' */ |
|
| 14 | + public string $nom_champ = ''; |
|
| 15 | + |
|
| 16 | + /** Module de langue où chercher la clé de traduction. Exemple 'medias' */ |
|
| 17 | + public string $module = ''; |
|
| 18 | + |
|
| 19 | + /** Arguments à passer à la chaîne */ |
|
| 20 | + public array $arg = []; |
|
| 21 | + |
|
| 22 | + /** |
|
| 23 | + * Filtres à appliquer au résultat |
|
| 24 | + * |
|
| 25 | + * |
|
| 26 | + * * FIXME: type unique. |
|
| 27 | + * @var false|array |
|
| 28 | + * - false: erreur de syntaxe |
|
| 29 | + */ |
|
| 30 | + public $param = []; |
|
| 31 | + |
|
| 32 | + /** Source des filtres (compatibilité) (?) */ |
|
| 33 | + public array $fonctions = []; |
|
| 34 | + |
|
| 35 | + /** |
|
| 36 | + * Inutilisé, propriété générique de l'AST |
|
| 37 | + * |
|
| 38 | + * @var string|array |
|
| 39 | + */ |
|
| 40 | + public $avant = ''; |
|
| 41 | + |
|
| 42 | + /** |
|
| 43 | + * Inutilisé, propriété générique de l'AST |
|
| 44 | + * |
|
| 45 | + * @var string|array |
|
| 46 | + */ |
|
| 47 | + public $apres = ''; |
|
| 48 | + |
|
| 49 | + /** Identifiant de la boucle */ |
|
| 50 | + public string $id_boucle = ''; |
|
| 51 | + |
|
| 52 | + /** |
|
| 53 | + * AST du squelette, liste de toutes les boucles |
|
| 54 | + * |
|
| 55 | + * @var Boucle[] |
|
| 56 | + */ |
|
| 57 | + public array $boucles; |
|
| 58 | + |
|
| 59 | + /** Alias de table d'application de la requête ou nom complet de la table SQL */ |
|
| 60 | + public ?string $type_requete; |
|
| 61 | + |
|
| 62 | + /** Résultat de la compilation: toujours une expression PHP */ |
|
| 63 | + public string $code = ''; |
|
| 64 | + |
|
| 65 | + /** |
|
| 66 | + * Interdire les scripts |
|
| 67 | + * |
|
| 68 | + * @see interdire_scripts() |
|
| 69 | + */ |
|
| 70 | + public bool $interdire_scripts = false; |
|
| 71 | + |
|
| 72 | + /** |
|
| 73 | + * Description du squelette |
|
| 74 | + * |
|
| 75 | + * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 76 | + * |
|
| 77 | + * Peut contenir les index : |
|
| 78 | + * - nom : Nom du fichier de cache |
|
| 79 | + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 80 | + * - sourcefile : Chemin du squelette |
|
| 81 | + * - squelette : Code du squelette |
|
| 82 | + * - id_mere : Identifiant de la boucle parente |
|
| 83 | + * - documents : Pour embed et img dans les textes |
|
| 84 | + * - session : Pour un cache sessionné par auteur |
|
| 85 | + * - niv : Niveau de tabulation |
|
| 86 | + */ |
|
| 87 | + public array $descr = []; |
|
| 88 | + |
|
| 89 | + /** Numéro de ligne dans le code source du squelette */ |
|
| 90 | + public int $ligne = 0; |
|
| 91 | 91 | } |
@@ -7,57 +7,57 @@ |
||
| 7 | 7 | * privée ou dans un de ses sous menus |
| 8 | 8 | */ |
| 9 | 9 | class Bouton { |
| 10 | - /** L'icone à mettre dans le bouton */ |
|
| 11 | - public string $icone; |
|
| 12 | - |
|
| 13 | - /** Le nom de l'entrée d'i18n associé */ |
|
| 14 | - public string $libelle; |
|
| 15 | - |
|
| 16 | - /** @var null|string L'URL de la page (null => ?exec=nom) */ |
|
| 17 | - public $url = null; |
|
| 18 | - |
|
| 19 | - /** @var null|string|array Arguments supplementaires de l'URL */ |
|
| 20 | - public $urlArg = null; |
|
| 21 | - |
|
| 22 | - /** @var null|string URL du javascript */ |
|
| 23 | - public $url2 = null; |
|
| 24 | - |
|
| 25 | - /** @var null|string Pour ouvrir dans une fenetre a part */ |
|
| 26 | - public $target = null; |
|
| 27 | - |
|
| 28 | - /** Sous-barre de boutons / onglets */ |
|
| 29 | - public array $sousmenu = []; |
|
| 30 | - |
|
| 31 | - /** Position dans le menu */ |
|
| 32 | - public int $position = 0; |
|
| 33 | - |
|
| 34 | - /** Entrée favorite (sa position dans les favoris) ? */ |
|
| 35 | - public int $favori = 0; |
|
| 36 | - |
|
| 37 | - |
|
| 38 | - /** |
|
| 39 | - * Définit un bouton |
|
| 40 | - * |
|
| 41 | - * @param string $icone |
|
| 42 | - * L'icone à mettre dans le bouton |
|
| 43 | - * @param string $libelle |
|
| 44 | - * Le nom de l'entrée i18n associé |
|
| 45 | - * @param null|string $url |
|
| 46 | - * L'URL de la page |
|
| 47 | - * @param null|string|array $urlArg |
|
| 48 | - * Arguments supplémentaires de l'URL |
|
| 49 | - * @param null|string $url2 |
|
| 50 | - * URL du javascript |
|
| 51 | - * @param null|mixed $target |
|
| 52 | - * Pour ouvrir une fenêtre à part |
|
| 53 | - */ |
|
| 54 | - public function __construct($icone, $libelle, $url = null, $urlArg = null, $url2 = null, $target = null) { |
|
| 55 | - $this->icone = $icone; |
|
| 56 | - $this->libelle = $libelle; |
|
| 57 | - $this->url = $url; |
|
| 58 | - $this->urlArg = $urlArg; |
|
| 59 | - $this->url2 = $url2; |
|
| 60 | - $this->target = $target; |
|
| 61 | - } |
|
| 10 | + /** L'icone à mettre dans le bouton */ |
|
| 11 | + public string $icone; |
|
| 12 | + |
|
| 13 | + /** Le nom de l'entrée d'i18n associé */ |
|
| 14 | + public string $libelle; |
|
| 15 | + |
|
| 16 | + /** @var null|string L'URL de la page (null => ?exec=nom) */ |
|
| 17 | + public $url = null; |
|
| 18 | + |
|
| 19 | + /** @var null|string|array Arguments supplementaires de l'URL */ |
|
| 20 | + public $urlArg = null; |
|
| 21 | + |
|
| 22 | + /** @var null|string URL du javascript */ |
|
| 23 | + public $url2 = null; |
|
| 24 | + |
|
| 25 | + /** @var null|string Pour ouvrir dans une fenetre a part */ |
|
| 26 | + public $target = null; |
|
| 27 | + |
|
| 28 | + /** Sous-barre de boutons / onglets */ |
|
| 29 | + public array $sousmenu = []; |
|
| 30 | + |
|
| 31 | + /** Position dans le menu */ |
|
| 32 | + public int $position = 0; |
|
| 33 | + |
|
| 34 | + /** Entrée favorite (sa position dans les favoris) ? */ |
|
| 35 | + public int $favori = 0; |
|
| 36 | + |
|
| 37 | + |
|
| 38 | + /** |
|
| 39 | + * Définit un bouton |
|
| 40 | + * |
|
| 41 | + * @param string $icone |
|
| 42 | + * L'icone à mettre dans le bouton |
|
| 43 | + * @param string $libelle |
|
| 44 | + * Le nom de l'entrée i18n associé |
|
| 45 | + * @param null|string $url |
|
| 46 | + * L'URL de la page |
|
| 47 | + * @param null|string|array $urlArg |
|
| 48 | + * Arguments supplémentaires de l'URL |
|
| 49 | + * @param null|string $url2 |
|
| 50 | + * URL du javascript |
|
| 51 | + * @param null|mixed $target |
|
| 52 | + * Pour ouvrir une fenêtre à part |
|
| 53 | + */ |
|
| 54 | + public function __construct($icone, $libelle, $url = null, $urlArg = null, $url2 = null, $target = null) { |
|
| 55 | + $this->icone = $icone; |
|
| 56 | + $this->libelle = $libelle; |
|
| 57 | + $this->url = $url; |
|
| 58 | + $this->urlArg = $urlArg; |
|
| 59 | + $this->url2 = $url2; |
|
| 60 | + $this->target = $target; |
|
| 61 | + } |
|
| 62 | 62 | } |
| 63 | 63 | |
@@ -3,16 +3,16 @@ |
||
| 3 | 3 | namespace Spip\I18n; |
| 4 | 4 | |
| 5 | 5 | class Description { |
| 6 | - /** @var string code de langue (hors module) */ |
|
| 7 | - public $code; |
|
| 8 | - /** @var string nom du module de langue */ |
|
| 9 | - public $module; |
|
| 10 | - /** @var string langue de la traduction */ |
|
| 11 | - public $langue; |
|
| 12 | - /** @var string traduction */ |
|
| 13 | - public $texte; |
|
| 14 | - /** @var string var mode particulier appliqué ? */ |
|
| 15 | - public $mode; |
|
| 16 | - /** @var bool Corrections des textes appliqué ? */ |
|
| 17 | - public $corrections = false; |
|
| 6 | + /** @var string code de langue (hors module) */ |
|
| 7 | + public $code; |
|
| 8 | + /** @var string nom du module de langue */ |
|
| 9 | + public $module; |
|
| 10 | + /** @var string langue de la traduction */ |
|
| 11 | + public $langue; |
|
| 12 | + /** @var string traduction */ |
|
| 13 | + public $texte; |
|
| 14 | + /** @var string var mode particulier appliqué ? */ |
|
| 15 | + public $mode; |
|
| 16 | + /** @var bool Corrections des textes appliqué ? */ |
|
| 17 | + public $corrections = false; |
|
| 18 | 18 | } |
@@ -12,60 +12,60 @@ |
||
| 12 | 12 | */ |
| 13 | 13 | class Factory |
| 14 | 14 | { |
| 15 | - public static function create($iterateur, $command, $info = null) { |
|
| 16 | - $iter = null; |
|
| 17 | - // cas des SI {si expression} analises tres tot |
|
| 18 | - // pour eviter le chargement de tout iterateur |
|
| 19 | - if (isset($command['si'])) { |
|
| 20 | - foreach ($command['si'] as $si) { |
|
| 21 | - if (!$si) { |
|
| 22 | - // $command pour boucle SQL peut generer des erreurs de compilation |
|
| 23 | - // s'il est transmis alors qu'on est dans un iterateur vide |
|
| 24 | - return new Decorator(new EmptyIterator(), [], $info); |
|
| 25 | - } |
|
| 26 | - } |
|
| 27 | - } |
|
| 15 | + public static function create($iterateur, $command, $info = null) { |
|
| 16 | + $iter = null; |
|
| 17 | + // cas des SI {si expression} analises tres tot |
|
| 18 | + // pour eviter le chargement de tout iterateur |
|
| 19 | + if (isset($command['si'])) { |
|
| 20 | + foreach ($command['si'] as $si) { |
|
| 21 | + if (!$si) { |
|
| 22 | + // $command pour boucle SQL peut generer des erreurs de compilation |
|
| 23 | + // s'il est transmis alors qu'on est dans un iterateur vide |
|
| 24 | + return new Decorator(new EmptyIterator(), [], $info); |
|
| 25 | + } |
|
| 26 | + } |
|
| 27 | + } |
|
| 28 | 28 | |
| 29 | - // chercher un iterateur PHP existant (par exemple dans SPL) |
|
| 30 | - // (il faudrait passer l'argument ->sql_serveur |
|
| 31 | - // pour etre certain qu'on est sur un "php:") |
|
| 32 | - if (class_exists($iterateur)) { |
|
| 33 | - $a = $command['args'] ?? []; |
|
| 29 | + // chercher un iterateur PHP existant (par exemple dans SPL) |
|
| 30 | + // (il faudrait passer l'argument ->sql_serveur |
|
| 31 | + // pour etre certain qu'on est sur un "php:") |
|
| 32 | + if (class_exists($iterateur)) { |
|
| 33 | + $a = $command['args'] ?? []; |
|
| 34 | 34 | |
| 35 | - // permettre de passer un Iterateur directement {args #ITERATEUR} : |
|
| 36 | - // si on recoit deja un iterateur en argument, on l'utilise |
|
| 37 | - if ((is_countable($a) ? count($a) : 0) == 1 and is_object($a[0]) and is_subclass_of($a[0], \Iterator::class)) { |
|
| 38 | - $iter = $a[0]; |
|
| 39 | - } else { |
|
| 40 | - // sinon, on cree un iterateur du type donne |
|
| 41 | - // arguments de creation de l'iterateur... |
|
| 42 | - try { |
|
| 43 | - $iter = $iterateur(...$a); |
|
| 44 | - } catch (Exception $e) { |
|
| 45 | - spip_log("Erreur de chargement de l'iterateur {$iterateur}"); |
|
| 46 | - spip_log($e->getMessage()); |
|
| 47 | - $iter = new EmptyIterator(); |
|
| 48 | - } |
|
| 49 | - } |
|
| 50 | - } else { |
|
| 51 | - // chercher la classe d'iterateur Iterateur/XXX |
|
| 52 | - // definie dans le fichier src/Compilateur/Iterateur/xxx.php |
|
| 53 | - // FIXME: déclarer quelque part les iterateurs supplémentaires |
|
| 54 | - $class = __NAMESPACE__ . '\\' . ucfirst(strtolower($iterateur)); |
|
| 55 | - if (!class_exists($class)) { |
|
| 56 | - // historique |
|
| 57 | - // Chercher IterateurXXX |
|
| 58 | - include_spip('iterateur/' . $iterateur); |
|
| 59 | - $class = 'Iterateur' . $iterateur; |
|
| 60 | - if (!class_exists($class)) { |
|
| 61 | - exit("Iterateur {$iterateur} non trouvé"); |
|
| 62 | - // si l'iterateur n'existe pas, on se rabat sur le generique |
|
| 63 | - // $iter = new EmptyIterator(); |
|
| 64 | - } |
|
| 65 | - } |
|
| 66 | - $iter = new $class($command, $info); |
|
| 67 | - } |
|
| 35 | + // permettre de passer un Iterateur directement {args #ITERATEUR} : |
|
| 36 | + // si on recoit deja un iterateur en argument, on l'utilise |
|
| 37 | + if ((is_countable($a) ? count($a) : 0) == 1 and is_object($a[0]) and is_subclass_of($a[0], \Iterator::class)) { |
|
| 38 | + $iter = $a[0]; |
|
| 39 | + } else { |
|
| 40 | + // sinon, on cree un iterateur du type donne |
|
| 41 | + // arguments de creation de l'iterateur... |
|
| 42 | + try { |
|
| 43 | + $iter = $iterateur(...$a); |
|
| 44 | + } catch (Exception $e) { |
|
| 45 | + spip_log("Erreur de chargement de l'iterateur {$iterateur}"); |
|
| 46 | + spip_log($e->getMessage()); |
|
| 47 | + $iter = new EmptyIterator(); |
|
| 48 | + } |
|
| 49 | + } |
|
| 50 | + } else { |
|
| 51 | + // chercher la classe d'iterateur Iterateur/XXX |
|
| 52 | + // definie dans le fichier src/Compilateur/Iterateur/xxx.php |
|
| 53 | + // FIXME: déclarer quelque part les iterateurs supplémentaires |
|
| 54 | + $class = __NAMESPACE__ . '\\' . ucfirst(strtolower($iterateur)); |
|
| 55 | + if (!class_exists($class)) { |
|
| 56 | + // historique |
|
| 57 | + // Chercher IterateurXXX |
|
| 58 | + include_spip('iterateur/' . $iterateur); |
|
| 59 | + $class = 'Iterateur' . $iterateur; |
|
| 60 | + if (!class_exists($class)) { |
|
| 61 | + exit("Iterateur {$iterateur} non trouvé"); |
|
| 62 | + // si l'iterateur n'existe pas, on se rabat sur le generique |
|
| 63 | + // $iter = new EmptyIterator(); |
|
| 64 | + } |
|
| 65 | + } |
|
| 66 | + $iter = new $class($command, $info); |
|
| 67 | + } |
|
| 68 | 68 | |
| 69 | - return new Decorator($iter, $command, $info); |
|
| 70 | - } |
|
| 69 | + return new Decorator($iter, $command, $info); |
|
| 70 | + } |
|
| 71 | 71 | } |
@@ -51,12 +51,12 @@ |
||
| 51 | 51 | // chercher la classe d'iterateur Iterateur/XXX |
| 52 | 52 | // definie dans le fichier src/Compilateur/Iterateur/xxx.php |
| 53 | 53 | // FIXME: déclarer quelque part les iterateurs supplémentaires |
| 54 | - $class = __NAMESPACE__ . '\\' . ucfirst(strtolower($iterateur)); |
|
| 54 | + $class = __NAMESPACE__.'\\'.ucfirst(strtolower($iterateur)); |
|
| 55 | 55 | if (!class_exists($class)) { |
| 56 | 56 | // historique |
| 57 | 57 | // Chercher IterateurXXX |
| 58 | - include_spip('iterateur/' . $iterateur); |
|
| 59 | - $class = 'Iterateur' . $iterateur; |
|
| 58 | + include_spip('iterateur/'.$iterateur); |
|
| 59 | + $class = 'Iterateur'.$iterateur; |
|
| 60 | 60 | if (!class_exists($class)) { |
| 61 | 61 | exit("Iterateur {$iterateur} non trouvé"); |
| 62 | 62 | // si l'iterateur n'existe pas, on se rabat sur le generique |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Affichage |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | /** |
@@ -25,7 +25,7 @@ discard block |
||
| 25 | 25 | * @return string Code HTML |
| 26 | 26 | */ |
| 27 | 27 | function debut_grand_cadre() { |
| 28 | - return "\n<div class = 'table_page'>\n"; |
|
| 28 | + return "\n<div class = 'table_page'>\n"; |
|
| 29 | 29 | } |
| 30 | 30 | |
| 31 | 31 | /** |
@@ -34,7 +34,7 @@ discard block |
||
| 34 | 34 | * @return string Code HTML |
| 35 | 35 | */ |
| 36 | 36 | function fin_grand_cadre() { |
| 37 | - return "\n</div>"; |
|
| 37 | + return "\n</div>"; |
|
| 38 | 38 | } |
| 39 | 39 | |
| 40 | 40 | // Debut de la colonne de gauche |
@@ -49,7 +49,7 @@ discard block |
||
| 49 | 49 | * @return string Code HTML |
| 50 | 50 | */ |
| 51 | 51 | function debut_gauche() { |
| 52 | - return "<div id = 'conteneur' class = ''>\n<div id = 'navigation' class = 'lat' role = 'contentinfo'>\n"; |
|
| 52 | + return "<div id = 'conteneur' class = ''>\n<div id = 'navigation' class = 'lat' role = 'contentinfo'>\n"; |
|
| 53 | 53 | } |
| 54 | 54 | |
| 55 | 55 | /** |
@@ -58,7 +58,7 @@ discard block |
||
| 58 | 58 | * @return string Code HTML |
| 59 | 59 | */ |
| 60 | 60 | function fin_gauche() { |
| 61 | - return "</div></div><br class = 'nettoyeur' />"; |
|
| 61 | + return "</div></div><br class = 'nettoyeur' />"; |
|
| 62 | 62 | } |
| 63 | 63 | |
| 64 | 64 | /** |
@@ -67,13 +67,13 @@ discard block |
||
| 67 | 67 | * @return string Code HTML |
| 68 | 68 | */ |
| 69 | 69 | function creer_colonne_droite() { |
| 70 | - static $deja_colonne_droite; |
|
| 71 | - if ($deja_colonne_droite) { |
|
| 72 | - return ''; |
|
| 73 | - } |
|
| 74 | - $deja_colonne_droite = true; |
|
| 70 | + static $deja_colonne_droite; |
|
| 71 | + if ($deja_colonne_droite) { |
|
| 72 | + return ''; |
|
| 73 | + } |
|
| 74 | + $deja_colonne_droite = true; |
|
| 75 | 75 | |
| 76 | - return "\n</div><div id='extra' class='lat' role='complementary'>"; |
|
| 76 | + return "\n</div><div id='extra' class='lat' role='complementary'>"; |
|
| 77 | 77 | } |
| 78 | 78 | |
| 79 | 79 | /** |
@@ -82,10 +82,10 @@ discard block |
||
| 82 | 82 | * @return string Code HTML |
| 83 | 83 | */ |
| 84 | 84 | function debut_droite() { |
| 85 | - return liste_objets_bloques(_request('exec')) |
|
| 86 | - . creer_colonne_droite() |
|
| 87 | - . '</div>' |
|
| 88 | - . "\n<div id='contenu'>"; |
|
| 85 | + return liste_objets_bloques(_request('exec')) |
|
| 86 | + . creer_colonne_droite() |
|
| 87 | + . '</div>' |
|
| 88 | + . "\n<div id='contenu'>"; |
|
| 89 | 89 | } |
| 90 | 90 | |
| 91 | 91 | /** |
@@ -107,32 +107,32 @@ discard block |
||
| 107 | 107 | * Code HTML |
| 108 | 108 | **/ |
| 109 | 109 | function liste_objets_bloques($exec, $contexte = [], $auteur = null): string { |
| 110 | - $res = ''; |
|
| 111 | - include_spip('inc/config'); |
|
| 112 | - if (lire_config('articles_modif', 'non') !== 'non') { |
|
| 113 | - include_spip('inc/drapeau_edition'); |
|
| 114 | - if (is_null($auteur)) { |
|
| 115 | - $auteur = $GLOBALS['visiteur_session']; |
|
| 116 | - } |
|
| 117 | - if ( |
|
| 118 | - $en_cours = trouver_objet_exec($exec) |
|
| 119 | - and $en_cours['edition'] |
|
| 120 | - and $type = $en_cours['type'] |
|
| 121 | - and ((isset($contexte[$en_cours['id_table_objet']]) and $id = $contexte[$en_cours['id_table_objet']]) |
|
| 122 | - or $id = _request($en_cours['id_table_objet'])) |
|
| 123 | - ) { |
|
| 124 | - // marquer le fait que l'objet est ouvert en edition par toto |
|
| 125 | - // a telle date ; une alerte sera donnee aux autres redacteurs |
|
| 126 | - signale_edition($id, $auteur, $type); |
|
| 127 | - } |
|
| 128 | - |
|
| 129 | - $objets_ouverts = liste_drapeau_edition($auteur['id_auteur']); |
|
| 130 | - if (count($objets_ouverts)) { |
|
| 131 | - $res .= recuperer_fond('prive/objets/liste/objets-en-edition', [], ['ajax' => true]); |
|
| 132 | - } |
|
| 133 | - } |
|
| 134 | - |
|
| 135 | - return $res; |
|
| 110 | + $res = ''; |
|
| 111 | + include_spip('inc/config'); |
|
| 112 | + if (lire_config('articles_modif', 'non') !== 'non') { |
|
| 113 | + include_spip('inc/drapeau_edition'); |
|
| 114 | + if (is_null($auteur)) { |
|
| 115 | + $auteur = $GLOBALS['visiteur_session']; |
|
| 116 | + } |
|
| 117 | + if ( |
|
| 118 | + $en_cours = trouver_objet_exec($exec) |
|
| 119 | + and $en_cours['edition'] |
|
| 120 | + and $type = $en_cours['type'] |
|
| 121 | + and ((isset($contexte[$en_cours['id_table_objet']]) and $id = $contexte[$en_cours['id_table_objet']]) |
|
| 122 | + or $id = _request($en_cours['id_table_objet'])) |
|
| 123 | + ) { |
|
| 124 | + // marquer le fait que l'objet est ouvert en edition par toto |
|
| 125 | + // a telle date ; une alerte sera donnee aux autres redacteurs |
|
| 126 | + signale_edition($id, $auteur, $type); |
|
| 127 | + } |
|
| 128 | + |
|
| 129 | + $objets_ouverts = liste_drapeau_edition($auteur['id_auteur']); |
|
| 130 | + if (count($objets_ouverts)) { |
|
| 131 | + $res .= recuperer_fond('prive/objets/liste/objets-en-edition', [], ['ajax' => true]); |
|
| 132 | + } |
|
| 133 | + } |
|
| 134 | + |
|
| 135 | + return $res; |
|
| 136 | 136 | } |
| 137 | 137 | |
| 138 | 138 | |
@@ -146,20 +146,20 @@ discard block |
||
| 146 | 146 | * @return string Code HTML |
| 147 | 147 | **/ |
| 148 | 148 | function fin_page() { |
| 149 | - include_spip('inc/pipelines'); |
|
| 150 | - // avec &var_profile=1 on a le tableau de mesures SQL |
|
| 151 | - $debug = ((_request('exec') !== 'valider_xml') |
|
| 152 | - and ((_request('var_mode') == 'debug') |
|
| 153 | - or (isset($GLOBALS['tableau_des_temps']) and $GLOBALS['tableau_des_temps']) |
|
| 154 | - and isset($_COOKIE['spip_admin']))); |
|
| 155 | - $t = '</div><div id="pied"><div class="largeur">' |
|
| 156 | - . recuperer_fond('prive/squelettes/inclure/pied') |
|
| 157 | - . '</div>' |
|
| 158 | - . '</div></div>' // cf. div#page et div.largeur ouvertes dans conmmencer_page() |
|
| 159 | - . ($debug ? erreur_squelette() : '') |
|
| 160 | - . "</body></html>\n"; |
|
| 161 | - |
|
| 162 | - return f_queue($t); |
|
| 149 | + include_spip('inc/pipelines'); |
|
| 150 | + // avec &var_profile=1 on a le tableau de mesures SQL |
|
| 151 | + $debug = ((_request('exec') !== 'valider_xml') |
|
| 152 | + and ((_request('var_mode') == 'debug') |
|
| 153 | + or (isset($GLOBALS['tableau_des_temps']) and $GLOBALS['tableau_des_temps']) |
|
| 154 | + and isset($_COOKIE['spip_admin']))); |
|
| 155 | + $t = '</div><div id="pied"><div class="largeur">' |
|
| 156 | + . recuperer_fond('prive/squelettes/inclure/pied') |
|
| 157 | + . '</div>' |
|
| 158 | + . '</div></div>' // cf. div#page et div.largeur ouvertes dans conmmencer_page() |
|
| 159 | + . ($debug ? erreur_squelette() : '') |
|
| 160 | + . "</body></html>\n"; |
|
| 161 | + |
|
| 162 | + return f_queue($t); |
|
| 163 | 163 | } |
| 164 | 164 | |
| 165 | 165 | /** |
@@ -174,22 +174,22 @@ discard block |
||
| 174 | 174 | * @return string Code HTML |
| 175 | 175 | **/ |
| 176 | 176 | function html_tests_js() { |
| 177 | - if (_SPIP_AJAX and !defined('_TESTER_NOSCRIPT')) { |
|
| 178 | - // pour le pied de page (deja defini si on est validation XML) |
|
| 179 | - define( |
|
| 180 | - '_TESTER_NOSCRIPT', |
|
| 181 | - "<noscript>\n<div style='display:none;'><img src='" |
|
| 182 | - . generer_url_ecrire('test_ajax', 'js=-1') |
|
| 183 | - . "' width='1' height='1' alt='' /></div></noscript>\n" |
|
| 184 | - ); |
|
| 185 | - } |
|
| 186 | - |
|
| 187 | - $rejouer = ''; |
|
| 188 | - if (defined('_SESSION_REJOUER')) { |
|
| 189 | - $rejouer = (_SESSION_REJOUER === true) ? rejouer_session() : _SESSION_REJOUER; |
|
| 190 | - } |
|
| 191 | - |
|
| 192 | - return $rejouer . (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : ''); |
|
| 177 | + if (_SPIP_AJAX and !defined('_TESTER_NOSCRIPT')) { |
|
| 178 | + // pour le pied de page (deja defini si on est validation XML) |
|
| 179 | + define( |
|
| 180 | + '_TESTER_NOSCRIPT', |
|
| 181 | + "<noscript>\n<div style='display:none;'><img src='" |
|
| 182 | + . generer_url_ecrire('test_ajax', 'js=-1') |
|
| 183 | + . "' width='1' height='1' alt='' /></div></noscript>\n" |
|
| 184 | + ); |
|
| 185 | + } |
|
| 186 | + |
|
| 187 | + $rejouer = ''; |
|
| 188 | + if (defined('_SESSION_REJOUER')) { |
|
| 189 | + $rejouer = (_SESSION_REJOUER === true) ? rejouer_session() : _SESSION_REJOUER; |
|
| 190 | + } |
|
| 191 | + |
|
| 192 | + return $rejouer . (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : ''); |
|
| 193 | 193 | } |
| 194 | 194 | |
| 195 | 195 | /** |
@@ -199,25 +199,25 @@ discard block |
||
| 199 | 199 | **/ |
| 200 | 200 | function info_maj_spip() { |
| 201 | 201 | |
| 202 | - $maj = $GLOBALS['meta']['info_maj_spip'] ?? null; |
|
| 203 | - if (!$maj) { |
|
| 204 | - return ''; |
|
| 205 | - } |
|
| 202 | + $maj = $GLOBALS['meta']['info_maj_spip'] ?? null; |
|
| 203 | + if (!$maj) { |
|
| 204 | + return ''; |
|
| 205 | + } |
|
| 206 | 206 | |
| 207 | - $maj = explode('|', $maj); |
|
| 208 | - // c'est une ancienne notif, on a fait la maj depuis ! |
|
| 209 | - if ($GLOBALS['spip_version_branche'] !== reset($maj)) { |
|
| 210 | - return ''; |
|
| 211 | - } |
|
| 207 | + $maj = explode('|', $maj); |
|
| 208 | + // c'est une ancienne notif, on a fait la maj depuis ! |
|
| 209 | + if ($GLOBALS['spip_version_branche'] !== reset($maj)) { |
|
| 210 | + return ''; |
|
| 211 | + } |
|
| 212 | 212 | |
| 213 | - if (!autoriser('webmestre')) { |
|
| 214 | - return ''; |
|
| 215 | - } |
|
| 213 | + if (!autoriser('webmestre')) { |
|
| 214 | + return ''; |
|
| 215 | + } |
|
| 216 | 216 | |
| 217 | - array_shift($maj); |
|
| 218 | - $maj = implode('|', $maj); |
|
| 217 | + array_shift($maj); |
|
| 218 | + $maj = implode('|', $maj); |
|
| 219 | 219 | |
| 220 | - return "$maj<br />"; |
|
| 220 | + return "$maj<br />"; |
|
| 221 | 221 | } |
| 222 | 222 | |
| 223 | 223 | /** |
@@ -228,43 +228,43 @@ discard block |
||
| 228 | 228 | **/ |
| 229 | 229 | function info_copyright() { |
| 230 | 230 | |
| 231 | - $version = $GLOBALS['spip_version_affichee']; |
|
| 232 | - |
|
| 233 | - // |
|
| 234 | - // Mention, le cas echeant, de la revision SVN courante |
|
| 235 | - // |
|
| 236 | - if ($vcs = version_vcs_courante(_DIR_RACINE, true)) { |
|
| 237 | - if ($vcs['vcs'] === 'GIT') { |
|
| 238 | - $url = 'https://git.spip.net/spip/spip/commit/' . $vcs['commit']; |
|
| 239 | - } elseif ($vcs['vcs'] === 'SVN') { |
|
| 240 | - $url = 'https://core.spip.net/projects/spip/repository/revisions/' . $vcs['commit']; |
|
| 241 | - } else { |
|
| 242 | - $url = ''; |
|
| 243 | - } |
|
| 244 | - // affichage "GIT [master: abcdef]" |
|
| 245 | - $commit = $vcs['commit_short'] ?? $vcs['commit']; |
|
| 246 | - if ($url) { |
|
| 247 | - $commit = "<a href=\"$url\" target=\"_blank\" rel=\"noopener noreferrer\">$commit</a>"; |
|
| 248 | - } |
|
| 249 | - if ($vcs['branch']) { |
|
| 250 | - $commit = $vcs['branch'] . ': ' . $commit; |
|
| 251 | - } |
|
| 252 | - $version .= " {$vcs['vcs']} [$commit]"; |
|
| 253 | - } |
|
| 254 | - |
|
| 255 | - // et la version de l'ecran de securite |
|
| 256 | - $secu = defined('_ECRAN_SECURITE') |
|
| 257 | - ? '<br />' . _T('ecran_securite', ['version' => _ECRAN_SECURITE]) |
|
| 258 | - : ''; |
|
| 259 | - |
|
| 260 | - return _T( |
|
| 261 | - 'info_copyright', |
|
| 262 | - [ |
|
| 263 | - 'spip' => "<b>SPIP $version</b> ", |
|
| 264 | - 'lien_gpl' => '<a href="https://www.gnu.org/licenses/gpl-3.0.html">' . _T('info_copyright_gpl') . '</a>' |
|
| 265 | - ] |
|
| 266 | - ) |
|
| 267 | - . $secu; |
|
| 231 | + $version = $GLOBALS['spip_version_affichee']; |
|
| 232 | + |
|
| 233 | + // |
|
| 234 | + // Mention, le cas echeant, de la revision SVN courante |
|
| 235 | + // |
|
| 236 | + if ($vcs = version_vcs_courante(_DIR_RACINE, true)) { |
|
| 237 | + if ($vcs['vcs'] === 'GIT') { |
|
| 238 | + $url = 'https://git.spip.net/spip/spip/commit/' . $vcs['commit']; |
|
| 239 | + } elseif ($vcs['vcs'] === 'SVN') { |
|
| 240 | + $url = 'https://core.spip.net/projects/spip/repository/revisions/' . $vcs['commit']; |
|
| 241 | + } else { |
|
| 242 | + $url = ''; |
|
| 243 | + } |
|
| 244 | + // affichage "GIT [master: abcdef]" |
|
| 245 | + $commit = $vcs['commit_short'] ?? $vcs['commit']; |
|
| 246 | + if ($url) { |
|
| 247 | + $commit = "<a href=\"$url\" target=\"_blank\" rel=\"noopener noreferrer\">$commit</a>"; |
|
| 248 | + } |
|
| 249 | + if ($vcs['branch']) { |
|
| 250 | + $commit = $vcs['branch'] . ': ' . $commit; |
|
| 251 | + } |
|
| 252 | + $version .= " {$vcs['vcs']} [$commit]"; |
|
| 253 | + } |
|
| 254 | + |
|
| 255 | + // et la version de l'ecran de securite |
|
| 256 | + $secu = defined('_ECRAN_SECURITE') |
|
| 257 | + ? '<br />' . _T('ecran_securite', ['version' => _ECRAN_SECURITE]) |
|
| 258 | + : ''; |
|
| 259 | + |
|
| 260 | + return _T( |
|
| 261 | + 'info_copyright', |
|
| 262 | + [ |
|
| 263 | + 'spip' => "<b>SPIP $version</b> ", |
|
| 264 | + 'lien_gpl' => '<a href="https://www.gnu.org/licenses/gpl-3.0.html">' . _T('info_copyright_gpl') . '</a>' |
|
| 265 | + ] |
|
| 266 | + ) |
|
| 267 | + . $secu; |
|
| 268 | 268 | } |
| 269 | 269 | |
| 270 | 270 | /** |
@@ -279,17 +279,17 @@ discard block |
||
| 279 | 279 | * @return string Code HTML |
| 280 | 280 | **/ |
| 281 | 281 | function formulaire_recherche($page, $complement = '') { |
| 282 | - $recherche = _request('recherche'); |
|
| 283 | - $recherche_aff = entites_html($recherche); |
|
| 284 | - if (!strlen($recherche)) { |
|
| 285 | - $recherche_aff = _T('info_rechercher'); |
|
| 286 | - $onfocus = " onfocus=\"this.value='';\""; |
|
| 287 | - } else { |
|
| 288 | - $onfocus = ''; |
|
| 289 | - } |
|
| 290 | - |
|
| 291 | - $form = '<input type="text" size="10" value="' . $recherche_aff . '" name="recherche" class="recherche" accesskey="r"' . $onfocus . ' />'; |
|
| 292 | - $form .= "<input type='image' src='" . chemin_image('rechercher-20.png') . "' name='submit' class='submit' alt='" . _T('info_rechercher') . "' />"; |
|
| 293 | - |
|
| 294 | - return "<div class='spip_recherche'>" . generer_form_ecrire($page, $form . $complement, " method='get'") . '</div>'; |
|
| 282 | + $recherche = _request('recherche'); |
|
| 283 | + $recherche_aff = entites_html($recherche); |
|
| 284 | + if (!strlen($recherche)) { |
|
| 285 | + $recherche_aff = _T('info_rechercher'); |
|
| 286 | + $onfocus = " onfocus=\"this.value='';\""; |
|
| 287 | + } else { |
|
| 288 | + $onfocus = ''; |
|
| 289 | + } |
|
| 290 | + |
|
| 291 | + $form = '<input type="text" size="10" value="' . $recherche_aff . '" name="recherche" class="recherche" accesskey="r"' . $onfocus . ' />'; |
|
| 292 | + $form .= "<input type='image' src='" . chemin_image('rechercher-20.png') . "' name='submit' class='submit' alt='" . _T('info_rechercher') . "' />"; |
|
| 293 | + |
|
| 294 | + return "<div class='spip_recherche'>" . generer_form_ecrire($page, $form . $complement, " method='get'") . '</div>'; |
|
| 295 | 295 | } |
@@ -189,7 +189,7 @@ discard block |
||
| 189 | 189 | $rejouer = (_SESSION_REJOUER === true) ? rejouer_session() : _SESSION_REJOUER; |
| 190 | 190 | } |
| 191 | 191 | |
| 192 | - return $rejouer . (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : ''); |
|
| 192 | + return $rejouer.(defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : ''); |
|
| 193 | 193 | } |
| 194 | 194 | |
| 195 | 195 | /** |
@@ -235,9 +235,9 @@ discard block |
||
| 235 | 235 | // |
| 236 | 236 | if ($vcs = version_vcs_courante(_DIR_RACINE, true)) { |
| 237 | 237 | if ($vcs['vcs'] === 'GIT') { |
| 238 | - $url = 'https://git.spip.net/spip/spip/commit/' . $vcs['commit']; |
|
| 238 | + $url = 'https://git.spip.net/spip/spip/commit/'.$vcs['commit']; |
|
| 239 | 239 | } elseif ($vcs['vcs'] === 'SVN') { |
| 240 | - $url = 'https://core.spip.net/projects/spip/repository/revisions/' . $vcs['commit']; |
|
| 240 | + $url = 'https://core.spip.net/projects/spip/repository/revisions/'.$vcs['commit']; |
|
| 241 | 241 | } else { |
| 242 | 242 | $url = ''; |
| 243 | 243 | } |
@@ -247,21 +247,21 @@ discard block |
||
| 247 | 247 | $commit = "<a href=\"$url\" target=\"_blank\" rel=\"noopener noreferrer\">$commit</a>"; |
| 248 | 248 | } |
| 249 | 249 | if ($vcs['branch']) { |
| 250 | - $commit = $vcs['branch'] . ': ' . $commit; |
|
| 250 | + $commit = $vcs['branch'].': '.$commit; |
|
| 251 | 251 | } |
| 252 | 252 | $version .= " {$vcs['vcs']} [$commit]"; |
| 253 | 253 | } |
| 254 | 254 | |
| 255 | 255 | // et la version de l'ecran de securite |
| 256 | 256 | $secu = defined('_ECRAN_SECURITE') |
| 257 | - ? '<br />' . _T('ecran_securite', ['version' => _ECRAN_SECURITE]) |
|
| 257 | + ? '<br />'._T('ecran_securite', ['version' => _ECRAN_SECURITE]) |
|
| 258 | 258 | : ''; |
| 259 | 259 | |
| 260 | 260 | return _T( |
| 261 | 261 | 'info_copyright', |
| 262 | 262 | [ |
| 263 | 263 | 'spip' => "<b>SPIP $version</b> ", |
| 264 | - 'lien_gpl' => '<a href="https://www.gnu.org/licenses/gpl-3.0.html">' . _T('info_copyright_gpl') . '</a>' |
|
| 264 | + 'lien_gpl' => '<a href="https://www.gnu.org/licenses/gpl-3.0.html">'._T('info_copyright_gpl').'</a>' |
|
| 265 | 265 | ] |
| 266 | 266 | ) |
| 267 | 267 | . $secu; |
@@ -288,8 +288,8 @@ discard block |
||
| 288 | 288 | $onfocus = ''; |
| 289 | 289 | } |
| 290 | 290 | |
| 291 | - $form = '<input type="text" size="10" value="' . $recherche_aff . '" name="recherche" class="recherche" accesskey="r"' . $onfocus . ' />'; |
|
| 292 | - $form .= "<input type='image' src='" . chemin_image('rechercher-20.png') . "' name='submit' class='submit' alt='" . _T('info_rechercher') . "' />"; |
|
| 291 | + $form = '<input type="text" size="10" value="'.$recherche_aff.'" name="recherche" class="recherche" accesskey="r"'.$onfocus.' />'; |
|
| 292 | + $form .= "<input type='image' src='".chemin_image('rechercher-20.png')."' name='submit' class='submit' alt='"._T('info_rechercher')."' />"; |
|
| 293 | 293 | |
| 294 | - return "<div class='spip_recherche'>" . generer_form_ecrire($page, $form . $complement, " method='get'") . '</div>'; |
|
| 294 | + return "<div class='spip_recherche'>".generer_form_ecrire($page, $form.$complement, " method='get'").'</div>'; |
|
| 295 | 295 | } |
@@ -20,7 +20,7 @@ discard block |
||
| 20 | 20 | */ |
| 21 | 21 | |
| 22 | 22 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 23 | - return; |
|
| 23 | + return; |
|
| 24 | 24 | } |
| 25 | 25 | |
| 26 | 26 | // TODO: get/set_caracteres ? |
@@ -44,91 +44,91 @@ discard block |
||
| 44 | 44 | */ |
| 45 | 45 | function req_sqlite_dist($addr, $port, $login, $pass, $db = '', $prefixe = '', $sqlite_version = '') |
| 46 | 46 | { |
| 47 | - static $last_connect = []; |
|
| 48 | - |
|
| 49 | - // si provient de selectdb |
|
| 50 | - // un code pour etre sur que l'on vient de select_db() |
|
| 51 | - if (strpos($db, $code = '@selectdb@') !== false) { |
|
| 52 | - foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) { |
|
| 53 | - $$a = $last_connect[$a]; |
|
| 54 | - } |
|
| 55 | - $db = str_replace($code, '', $db); |
|
| 56 | - } |
|
| 57 | - |
|
| 58 | - /* |
|
| 47 | + static $last_connect = []; |
|
| 48 | + |
|
| 49 | + // si provient de selectdb |
|
| 50 | + // un code pour etre sur que l'on vient de select_db() |
|
| 51 | + if (strpos($db, $code = '@selectdb@') !== false) { |
|
| 52 | + foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) { |
|
| 53 | + $$a = $last_connect[$a]; |
|
| 54 | + } |
|
| 55 | + $db = str_replace($code, '', $db); |
|
| 56 | + } |
|
| 57 | + |
|
| 58 | + /* |
|
| 59 | 59 | * En sqlite, seule l'adresse du fichier est importante. |
| 60 | 60 | * Ce sera $db le nom, |
| 61 | 61 | * le path est $addr |
| 62 | 62 | * (_DIR_DB si $addr est vide) |
| 63 | 63 | */ |
| 64 | - _sqlite_init(); |
|
| 65 | - |
|
| 66 | - // determiner le dossier de la base : $addr ou _DIR_DB |
|
| 67 | - $f = _DIR_DB; |
|
| 68 | - if ($addr and str_contains($addr, '/')) { |
|
| 69 | - $f = rtrim($addr, '/') . '/'; |
|
| 70 | - } |
|
| 71 | - |
|
| 72 | - // un nom de base demande et impossible d'obtenir la base, on s'en va : |
|
| 73 | - // il faut que la base existe ou que le repertoire parent soit writable |
|
| 74 | - if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) { |
|
| 75 | - spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS); |
|
| 76 | - |
|
| 77 | - return false; |
|
| 78 | - } |
|
| 79 | - |
|
| 80 | - // charger les modules sqlite au besoin |
|
| 81 | - if (!_sqlite_charger_version($sqlite_version)) { |
|
| 82 | - spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS); |
|
| 83 | - |
|
| 84 | - return false; |
|
| 85 | - } |
|
| 86 | - |
|
| 87 | - // chargement des constantes |
|
| 88 | - // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite |
|
| 89 | - $define = 'spip_sqlite' . $sqlite_version . '_constantes'; |
|
| 90 | - $define(); |
|
| 91 | - |
|
| 92 | - $ok = false; |
|
| 93 | - if (!$db) { |
|
| 94 | - // si pas de db -> |
|
| 95 | - // base temporaire tant qu'on ne connait pas son vrai nom |
|
| 96 | - // pour tester la connexion |
|
| 97 | - $db = '_sqlite' . $sqlite_version . '_install'; |
|
| 98 | - $tmp = _DIR_DB . $db . '.sqlite'; |
|
| 99 | - $ok = $link = new \PDO("sqlite:$tmp"); |
|
| 100 | - } else { |
|
| 101 | - // Ouvrir (eventuellement creer la base) |
|
| 102 | - $ok = $link = new \PDO("sqlite:$f"); |
|
| 103 | - } |
|
| 104 | - |
|
| 105 | - if (!$ok) { |
|
| 106 | - $e = _sqlite_last_error_from_link($link); |
|
| 107 | - spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS); |
|
| 108 | - |
|
| 109 | - return false; |
|
| 110 | - } |
|
| 111 | - |
|
| 112 | - if ($link) { |
|
| 113 | - $last_connect = [ |
|
| 114 | - 'addr' => $addr, |
|
| 115 | - 'port' => $port, |
|
| 116 | - 'login' => $login, |
|
| 117 | - 'pass' => $pass, |
|
| 118 | - 'db' => $db, |
|
| 119 | - 'prefixe' => $prefixe, |
|
| 120 | - ]; |
|
| 121 | - // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion |
|
| 122 | - include_spip('req/sqlite_fonctions'); |
|
| 123 | - _sqlite_init_functions($link); |
|
| 124 | - } |
|
| 125 | - |
|
| 126 | - return [ |
|
| 127 | - 'db' => $db, |
|
| 128 | - 'prefixe' => $prefixe ? $prefixe : $db, |
|
| 129 | - 'link' => $link, |
|
| 130 | - 'total_requetes' => 0, |
|
| 131 | - ]; |
|
| 64 | + _sqlite_init(); |
|
| 65 | + |
|
| 66 | + // determiner le dossier de la base : $addr ou _DIR_DB |
|
| 67 | + $f = _DIR_DB; |
|
| 68 | + if ($addr and str_contains($addr, '/')) { |
|
| 69 | + $f = rtrim($addr, '/') . '/'; |
|
| 70 | + } |
|
| 71 | + |
|
| 72 | + // un nom de base demande et impossible d'obtenir la base, on s'en va : |
|
| 73 | + // il faut que la base existe ou que le repertoire parent soit writable |
|
| 74 | + if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) { |
|
| 75 | + spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS); |
|
| 76 | + |
|
| 77 | + return false; |
|
| 78 | + } |
|
| 79 | + |
|
| 80 | + // charger les modules sqlite au besoin |
|
| 81 | + if (!_sqlite_charger_version($sqlite_version)) { |
|
| 82 | + spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS); |
|
| 83 | + |
|
| 84 | + return false; |
|
| 85 | + } |
|
| 86 | + |
|
| 87 | + // chargement des constantes |
|
| 88 | + // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite |
|
| 89 | + $define = 'spip_sqlite' . $sqlite_version . '_constantes'; |
|
| 90 | + $define(); |
|
| 91 | + |
|
| 92 | + $ok = false; |
|
| 93 | + if (!$db) { |
|
| 94 | + // si pas de db -> |
|
| 95 | + // base temporaire tant qu'on ne connait pas son vrai nom |
|
| 96 | + // pour tester la connexion |
|
| 97 | + $db = '_sqlite' . $sqlite_version . '_install'; |
|
| 98 | + $tmp = _DIR_DB . $db . '.sqlite'; |
|
| 99 | + $ok = $link = new \PDO("sqlite:$tmp"); |
|
| 100 | + } else { |
|
| 101 | + // Ouvrir (eventuellement creer la base) |
|
| 102 | + $ok = $link = new \PDO("sqlite:$f"); |
|
| 103 | + } |
|
| 104 | + |
|
| 105 | + if (!$ok) { |
|
| 106 | + $e = _sqlite_last_error_from_link($link); |
|
| 107 | + spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS); |
|
| 108 | + |
|
| 109 | + return false; |
|
| 110 | + } |
|
| 111 | + |
|
| 112 | + if ($link) { |
|
| 113 | + $last_connect = [ |
|
| 114 | + 'addr' => $addr, |
|
| 115 | + 'port' => $port, |
|
| 116 | + 'login' => $login, |
|
| 117 | + 'pass' => $pass, |
|
| 118 | + 'db' => $db, |
|
| 119 | + 'prefixe' => $prefixe, |
|
| 120 | + ]; |
|
| 121 | + // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion |
|
| 122 | + include_spip('req/sqlite_fonctions'); |
|
| 123 | + _sqlite_init_functions($link); |
|
| 124 | + } |
|
| 125 | + |
|
| 126 | + return [ |
|
| 127 | + 'db' => $db, |
|
| 128 | + 'prefixe' => $prefixe ? $prefixe : $db, |
|
| 129 | + 'link' => $link, |
|
| 130 | + 'total_requetes' => 0, |
|
| 131 | + ]; |
|
| 132 | 132 | } |
| 133 | 133 | |
| 134 | 134 | |
@@ -148,14 +148,14 @@ discard block |
||
| 148 | 148 | */ |
| 149 | 149 | function spip_sqlite_query($query, $serveur = '', $requeter = true) |
| 150 | 150 | { |
| 151 | - #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG); |
|
| 152 | - #_sqlite_init(); // fait la premiere fois dans spip_sqlite |
|
| 153 | - $query = Sqlite::traduire_requete($query, $serveur); |
|
| 154 | - if (!$requeter) { |
|
| 155 | - return $query; |
|
| 156 | - } |
|
| 157 | - |
|
| 158 | - return Sqlite::executer_requete($query, $serveur); |
|
| 151 | + #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG); |
|
| 152 | + #_sqlite_init(); // fait la premiere fois dans spip_sqlite |
|
| 153 | + $query = Sqlite::traduire_requete($query, $serveur); |
|
| 154 | + if (!$requeter) { |
|
| 155 | + return $query; |
|
| 156 | + } |
|
| 157 | + |
|
| 158 | + return Sqlite::executer_requete($query, $serveur); |
|
| 159 | 159 | } |
| 160 | 160 | |
| 161 | 161 | |
@@ -173,11 +173,11 @@ discard block |
||
| 173 | 173 | function spip_sqlite_alter($query, $serveur = '', $requeter = true) |
| 174 | 174 | { |
| 175 | 175 | |
| 176 | - $query = spip_sqlite_query("ALTER $query", $serveur, false); |
|
| 177 | - // traduire la requete pour recuperer les bons noms de table |
|
| 178 | - $query = Sqlite::traduire_requete($query, $serveur); |
|
| 176 | + $query = spip_sqlite_query("ALTER $query", $serveur, false); |
|
| 177 | + // traduire la requete pour recuperer les bons noms de table |
|
| 178 | + $query = Sqlite::traduire_requete($query, $serveur); |
|
| 179 | 179 | |
| 180 | - /* |
|
| 180 | + /* |
|
| 181 | 181 | * la il faut faire les transformations |
| 182 | 182 | * si ALTER TABLE x (DROP|CHANGE) y |
| 183 | 183 | * |
@@ -186,251 +186,251 @@ discard block |
||
| 186 | 186 | * 3) faire chaque requete independemment |
| 187 | 187 | */ |
| 188 | 188 | |
| 189 | - // 1 |
|
| 190 | - if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) { |
|
| 191 | - $debut = $regs[1]; |
|
| 192 | - $table = $regs[3]; |
|
| 193 | - $suite = $regs[4]; |
|
| 194 | - } else { |
|
| 195 | - spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR); |
|
| 196 | - |
|
| 197 | - return false; |
|
| 198 | - } |
|
| 199 | - |
|
| 200 | - // 2 |
|
| 201 | - // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB) |
|
| 202 | - // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux |
|
| 203 | - // ou revoir l'api de sql_alter en creant un |
|
| 204 | - // sql_alter_table($table,array($actions)); |
|
| 205 | - $todo = explode(',', $suite); |
|
| 206 | - |
|
| 207 | - // on remet les morceaux dechires ensembles... que c'est laid ! |
|
| 208 | - $todo2 = []; |
|
| 209 | - $i = 0; |
|
| 210 | - $ouverte = false; |
|
| 211 | - while ($do = array_shift($todo)) { |
|
| 212 | - $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do; |
|
| 213 | - $o = (str_contains($do, '(')); |
|
| 214 | - $f = (str_contains($do, ')')); |
|
| 215 | - if ($o and !$f) { |
|
| 216 | - $ouverte = true; |
|
| 217 | - } elseif ($f) { |
|
| 218 | - $ouverte = false; |
|
| 219 | - } |
|
| 220 | - if (!$ouverte) { |
|
| 221 | - $i++; |
|
| 222 | - } |
|
| 223 | - } |
|
| 224 | - |
|
| 225 | - // 3 |
|
| 226 | - $resultats = []; |
|
| 227 | - foreach ($todo2 as $do) { |
|
| 228 | - $do = trim($do); |
|
| 229 | - if ( |
|
| 230 | - !preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP' |
|
| 231 | - . '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME' |
|
| 232 | - . '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE' |
|
| 233 | - . '|ADD COLUMN|ADD' |
|
| 234 | - . ')\s*([^\s]*)\s*(.*)?/i', $do, $matches) |
|
| 235 | - ) { |
|
| 236 | - spip_log( |
|
| 237 | - "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)", |
|
| 238 | - 'sqlite.' . _LOG_ERREUR |
|
| 239 | - ); |
|
| 240 | - |
|
| 241 | - return false; |
|
| 242 | - } |
|
| 243 | - |
|
| 244 | - $cle = strtoupper($matches[1]); |
|
| 245 | - $colonne_origine = $matches[2]; |
|
| 246 | - $colonne_destination = ''; |
|
| 247 | - |
|
| 248 | - $def = $matches[3]; |
|
| 249 | - |
|
| 250 | - // eluder une eventuelle clause before|after|first inutilisable |
|
| 251 | - $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def)); |
|
| 252 | - $defo = $defr; // garder la def d'origine pour certains cas |
|
| 253 | - // remplacer les definitions venant de mysql |
|
| 254 | - $defr = _sqlite_remplacements_definitions_table($defr); |
|
| 255 | - |
|
| 256 | - // reinjecter dans le do |
|
| 257 | - $do = str_replace($def, $defr, $do); |
|
| 258 | - $def = $defr; |
|
| 259 | - |
|
| 260 | - switch ($cle) { |
|
| 261 | - // suppression d'un index |
|
| 262 | - case 'DROP KEY': |
|
| 263 | - case 'DROP INDEX': |
|
| 264 | - $nom_index = $colonne_origine; |
|
| 265 | - spip_sqlite_drop_index($nom_index, $table, $serveur); |
|
| 266 | - break; |
|
| 267 | - |
|
| 268 | - // suppression d'une pk |
|
| 269 | - case 'DROP PRIMARY KEY': |
|
| 270 | - if ( |
|
| 271 | - !_sqlite_modifier_table( |
|
| 272 | - $table, |
|
| 273 | - $colonne_origine, |
|
| 274 | - ['key' => ['PRIMARY KEY' => '']], |
|
| 275 | - $serveur |
|
| 276 | - ) |
|
| 277 | - ) { |
|
| 278 | - return false; |
|
| 279 | - } |
|
| 280 | - break; |
|
| 281 | - // suppression d'une colonne |
|
| 282 | - case 'DROP COLUMN': |
|
| 283 | - case 'DROP': |
|
| 284 | - if ( |
|
| 285 | - !_sqlite_modifier_table( |
|
| 286 | - $table, |
|
| 287 | - [$colonne_origine => ''], |
|
| 288 | - [], |
|
| 289 | - $serveur |
|
| 290 | - ) |
|
| 291 | - ) { |
|
| 292 | - return false; |
|
| 293 | - } |
|
| 294 | - break; |
|
| 295 | - |
|
| 296 | - case 'CHANGE COLUMN': |
|
| 297 | - case 'CHANGE': |
|
| 298 | - // recuperer le nom de la future colonne |
|
| 299 | - // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 300 | - // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 301 | - $def = trim($defo); |
|
| 302 | - $colonne_destination = substr($def, 0, strpos($def, ' ')); |
|
| 303 | - $def = substr($def, strlen($colonne_destination) + 1); |
|
| 304 | - |
|
| 305 | - if ( |
|
| 306 | - !_sqlite_modifier_table( |
|
| 307 | - $table, |
|
| 308 | - [$colonne_origine => $colonne_destination], |
|
| 309 | - ['field' => [$colonne_destination => $def]], |
|
| 310 | - $serveur |
|
| 311 | - ) |
|
| 312 | - ) { |
|
| 313 | - return false; |
|
| 314 | - } |
|
| 315 | - break; |
|
| 316 | - |
|
| 317 | - case 'MODIFY': |
|
| 318 | - // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 319 | - // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 320 | - if ( |
|
| 321 | - !_sqlite_modifier_table( |
|
| 322 | - $table, |
|
| 323 | - $colonne_origine, |
|
| 324 | - ['field' => [$colonne_origine => $defo]], |
|
| 325 | - $serveur |
|
| 326 | - ) |
|
| 327 | - ) { |
|
| 328 | - return false; |
|
| 329 | - } |
|
| 330 | - break; |
|
| 331 | - |
|
| 332 | - // pas geres en sqlite2 |
|
| 333 | - case 'RENAME': |
|
| 334 | - $do = 'RENAME TO' . substr($do, 6); |
|
| 335 | - case 'RENAME TO': |
|
| 336 | - if (!Sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 337 | - spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 338 | - |
|
| 339 | - return false; |
|
| 340 | - } |
|
| 341 | - break; |
|
| 342 | - |
|
| 343 | - // ajout d'une pk |
|
| 344 | - case 'ADD PRIMARY KEY': |
|
| 345 | - $pk = trim(substr($do, 16)); |
|
| 346 | - $pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk; |
|
| 347 | - if ( |
|
| 348 | - !_sqlite_modifier_table( |
|
| 349 | - $table, |
|
| 350 | - $colonne_origine, |
|
| 351 | - ['key' => ['PRIMARY KEY' => $pk]], |
|
| 352 | - $serveur |
|
| 353 | - ) |
|
| 354 | - ) { |
|
| 355 | - return false; |
|
| 356 | - } |
|
| 357 | - break; |
|
| 358 | - // ajout d'un index |
|
| 359 | - case 'ADD UNIQUE KEY': |
|
| 360 | - case 'ADD UNIQUE': |
|
| 361 | - $unique = true; |
|
| 362 | - case 'ADD INDEX': |
|
| 363 | - case 'ADD KEY': |
|
| 364 | - if (!isset($unique)) { |
|
| 365 | - $unique = false; |
|
| 366 | - } |
|
| 367 | - // peut etre "(colonne)" ou "nom_index (colonnes)" |
|
| 368 | - // bug potentiel si qqn met "(colonne, colonne)" |
|
| 369 | - // |
|
| 370 | - // nom_index (colonnes) |
|
| 371 | - if ($def) { |
|
| 372 | - $colonnes = substr($def, 1, -1); |
|
| 373 | - $nom_index = $colonne_origine; |
|
| 374 | - } else { |
|
| 375 | - // (colonne) |
|
| 376 | - if ($colonne_origine[0] == '(') { |
|
| 377 | - $colonnes = substr($colonne_origine, 1, -1); |
|
| 378 | - if (str_contains(',', $colonnes)) { |
|
| 379 | - spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes' |
|
| 380 | - . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR); |
|
| 381 | - break; |
|
| 382 | - } else { |
|
| 383 | - $nom_index = $colonnes; |
|
| 384 | - } |
|
| 385 | - } // nom_index |
|
| 386 | - else { |
|
| 387 | - $nom_index = $colonnes = $colonne_origine; |
|
| 388 | - } |
|
| 389 | - } |
|
| 390 | - spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur); |
|
| 391 | - break; |
|
| 392 | - |
|
| 393 | - // pas geres en sqlite2 |
|
| 394 | - case 'ADD COLUMN': |
|
| 395 | - $do = 'ADD' . substr($do, 10); |
|
| 396 | - case 'ADD': |
|
| 397 | - default: |
|
| 398 | - if (!preg_match(',primary\s+key,i', $do)) { |
|
| 399 | - if (!Sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 400 | - spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 401 | - |
|
| 402 | - return false; |
|
| 403 | - } |
|
| 404 | - break; |
|
| 405 | - } |
|
| 406 | - // ou si la colonne est aussi primary key |
|
| 407 | - // cas du add id_truc int primary key |
|
| 408 | - // ajout d'une colonne qui passe en primary key directe |
|
| 409 | - else { |
|
| 410 | - $def = trim(substr($do, 3)); |
|
| 411 | - $colonne_ajoutee = substr($def, 0, strpos($def, ' ')); |
|
| 412 | - $def = substr($def, strlen($colonne_ajoutee) + 1); |
|
| 413 | - $opts = []; |
|
| 414 | - if (preg_match(',primary\s+key,i', $def)) { |
|
| 415 | - $opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee]; |
|
| 416 | - $def = preg_replace(',primary\s+key,i', '', $def); |
|
| 417 | - } |
|
| 418 | - $opts['field'] = [$colonne_ajoutee => $def]; |
|
| 419 | - if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) { |
|
| 420 | - spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 421 | - |
|
| 422 | - return false; |
|
| 423 | - } |
|
| 424 | - } |
|
| 425 | - break; |
|
| 426 | - } |
|
| 427 | - // tout est bon, ouf ! |
|
| 428 | - spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO); |
|
| 429 | - } |
|
| 430 | - |
|
| 431 | - spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO); |
|
| 432 | - |
|
| 433 | - return true; |
|
| 189 | + // 1 |
|
| 190 | + if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) { |
|
| 191 | + $debut = $regs[1]; |
|
| 192 | + $table = $regs[3]; |
|
| 193 | + $suite = $regs[4]; |
|
| 194 | + } else { |
|
| 195 | + spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR); |
|
| 196 | + |
|
| 197 | + return false; |
|
| 198 | + } |
|
| 199 | + |
|
| 200 | + // 2 |
|
| 201 | + // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB) |
|
| 202 | + // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux |
|
| 203 | + // ou revoir l'api de sql_alter en creant un |
|
| 204 | + // sql_alter_table($table,array($actions)); |
|
| 205 | + $todo = explode(',', $suite); |
|
| 206 | + |
|
| 207 | + // on remet les morceaux dechires ensembles... que c'est laid ! |
|
| 208 | + $todo2 = []; |
|
| 209 | + $i = 0; |
|
| 210 | + $ouverte = false; |
|
| 211 | + while ($do = array_shift($todo)) { |
|
| 212 | + $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do; |
|
| 213 | + $o = (str_contains($do, '(')); |
|
| 214 | + $f = (str_contains($do, ')')); |
|
| 215 | + if ($o and !$f) { |
|
| 216 | + $ouverte = true; |
|
| 217 | + } elseif ($f) { |
|
| 218 | + $ouverte = false; |
|
| 219 | + } |
|
| 220 | + if (!$ouverte) { |
|
| 221 | + $i++; |
|
| 222 | + } |
|
| 223 | + } |
|
| 224 | + |
|
| 225 | + // 3 |
|
| 226 | + $resultats = []; |
|
| 227 | + foreach ($todo2 as $do) { |
|
| 228 | + $do = trim($do); |
|
| 229 | + if ( |
|
| 230 | + !preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP' |
|
| 231 | + . '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME' |
|
| 232 | + . '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE' |
|
| 233 | + . '|ADD COLUMN|ADD' |
|
| 234 | + . ')\s*([^\s]*)\s*(.*)?/i', $do, $matches) |
|
| 235 | + ) { |
|
| 236 | + spip_log( |
|
| 237 | + "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)", |
|
| 238 | + 'sqlite.' . _LOG_ERREUR |
|
| 239 | + ); |
|
| 240 | + |
|
| 241 | + return false; |
|
| 242 | + } |
|
| 243 | + |
|
| 244 | + $cle = strtoupper($matches[1]); |
|
| 245 | + $colonne_origine = $matches[2]; |
|
| 246 | + $colonne_destination = ''; |
|
| 247 | + |
|
| 248 | + $def = $matches[3]; |
|
| 249 | + |
|
| 250 | + // eluder une eventuelle clause before|after|first inutilisable |
|
| 251 | + $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def)); |
|
| 252 | + $defo = $defr; // garder la def d'origine pour certains cas |
|
| 253 | + // remplacer les definitions venant de mysql |
|
| 254 | + $defr = _sqlite_remplacements_definitions_table($defr); |
|
| 255 | + |
|
| 256 | + // reinjecter dans le do |
|
| 257 | + $do = str_replace($def, $defr, $do); |
|
| 258 | + $def = $defr; |
|
| 259 | + |
|
| 260 | + switch ($cle) { |
|
| 261 | + // suppression d'un index |
|
| 262 | + case 'DROP KEY': |
|
| 263 | + case 'DROP INDEX': |
|
| 264 | + $nom_index = $colonne_origine; |
|
| 265 | + spip_sqlite_drop_index($nom_index, $table, $serveur); |
|
| 266 | + break; |
|
| 267 | + |
|
| 268 | + // suppression d'une pk |
|
| 269 | + case 'DROP PRIMARY KEY': |
|
| 270 | + if ( |
|
| 271 | + !_sqlite_modifier_table( |
|
| 272 | + $table, |
|
| 273 | + $colonne_origine, |
|
| 274 | + ['key' => ['PRIMARY KEY' => '']], |
|
| 275 | + $serveur |
|
| 276 | + ) |
|
| 277 | + ) { |
|
| 278 | + return false; |
|
| 279 | + } |
|
| 280 | + break; |
|
| 281 | + // suppression d'une colonne |
|
| 282 | + case 'DROP COLUMN': |
|
| 283 | + case 'DROP': |
|
| 284 | + if ( |
|
| 285 | + !_sqlite_modifier_table( |
|
| 286 | + $table, |
|
| 287 | + [$colonne_origine => ''], |
|
| 288 | + [], |
|
| 289 | + $serveur |
|
| 290 | + ) |
|
| 291 | + ) { |
|
| 292 | + return false; |
|
| 293 | + } |
|
| 294 | + break; |
|
| 295 | + |
|
| 296 | + case 'CHANGE COLUMN': |
|
| 297 | + case 'CHANGE': |
|
| 298 | + // recuperer le nom de la future colonne |
|
| 299 | + // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 300 | + // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 301 | + $def = trim($defo); |
|
| 302 | + $colonne_destination = substr($def, 0, strpos($def, ' ')); |
|
| 303 | + $def = substr($def, strlen($colonne_destination) + 1); |
|
| 304 | + |
|
| 305 | + if ( |
|
| 306 | + !_sqlite_modifier_table( |
|
| 307 | + $table, |
|
| 308 | + [$colonne_origine => $colonne_destination], |
|
| 309 | + ['field' => [$colonne_destination => $def]], |
|
| 310 | + $serveur |
|
| 311 | + ) |
|
| 312 | + ) { |
|
| 313 | + return false; |
|
| 314 | + } |
|
| 315 | + break; |
|
| 316 | + |
|
| 317 | + case 'MODIFY': |
|
| 318 | + // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 319 | + // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 320 | + if ( |
|
| 321 | + !_sqlite_modifier_table( |
|
| 322 | + $table, |
|
| 323 | + $colonne_origine, |
|
| 324 | + ['field' => [$colonne_origine => $defo]], |
|
| 325 | + $serveur |
|
| 326 | + ) |
|
| 327 | + ) { |
|
| 328 | + return false; |
|
| 329 | + } |
|
| 330 | + break; |
|
| 331 | + |
|
| 332 | + // pas geres en sqlite2 |
|
| 333 | + case 'RENAME': |
|
| 334 | + $do = 'RENAME TO' . substr($do, 6); |
|
| 335 | + case 'RENAME TO': |
|
| 336 | + if (!Sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 337 | + spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 338 | + |
|
| 339 | + return false; |
|
| 340 | + } |
|
| 341 | + break; |
|
| 342 | + |
|
| 343 | + // ajout d'une pk |
|
| 344 | + case 'ADD PRIMARY KEY': |
|
| 345 | + $pk = trim(substr($do, 16)); |
|
| 346 | + $pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk; |
|
| 347 | + if ( |
|
| 348 | + !_sqlite_modifier_table( |
|
| 349 | + $table, |
|
| 350 | + $colonne_origine, |
|
| 351 | + ['key' => ['PRIMARY KEY' => $pk]], |
|
| 352 | + $serveur |
|
| 353 | + ) |
|
| 354 | + ) { |
|
| 355 | + return false; |
|
| 356 | + } |
|
| 357 | + break; |
|
| 358 | + // ajout d'un index |
|
| 359 | + case 'ADD UNIQUE KEY': |
|
| 360 | + case 'ADD UNIQUE': |
|
| 361 | + $unique = true; |
|
| 362 | + case 'ADD INDEX': |
|
| 363 | + case 'ADD KEY': |
|
| 364 | + if (!isset($unique)) { |
|
| 365 | + $unique = false; |
|
| 366 | + } |
|
| 367 | + // peut etre "(colonne)" ou "nom_index (colonnes)" |
|
| 368 | + // bug potentiel si qqn met "(colonne, colonne)" |
|
| 369 | + // |
|
| 370 | + // nom_index (colonnes) |
|
| 371 | + if ($def) { |
|
| 372 | + $colonnes = substr($def, 1, -1); |
|
| 373 | + $nom_index = $colonne_origine; |
|
| 374 | + } else { |
|
| 375 | + // (colonne) |
|
| 376 | + if ($colonne_origine[0] == '(') { |
|
| 377 | + $colonnes = substr($colonne_origine, 1, -1); |
|
| 378 | + if (str_contains(',', $colonnes)) { |
|
| 379 | + spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes' |
|
| 380 | + . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR); |
|
| 381 | + break; |
|
| 382 | + } else { |
|
| 383 | + $nom_index = $colonnes; |
|
| 384 | + } |
|
| 385 | + } // nom_index |
|
| 386 | + else { |
|
| 387 | + $nom_index = $colonnes = $colonne_origine; |
|
| 388 | + } |
|
| 389 | + } |
|
| 390 | + spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur); |
|
| 391 | + break; |
|
| 392 | + |
|
| 393 | + // pas geres en sqlite2 |
|
| 394 | + case 'ADD COLUMN': |
|
| 395 | + $do = 'ADD' . substr($do, 10); |
|
| 396 | + case 'ADD': |
|
| 397 | + default: |
|
| 398 | + if (!preg_match(',primary\s+key,i', $do)) { |
|
| 399 | + if (!Sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 400 | + spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 401 | + |
|
| 402 | + return false; |
|
| 403 | + } |
|
| 404 | + break; |
|
| 405 | + } |
|
| 406 | + // ou si la colonne est aussi primary key |
|
| 407 | + // cas du add id_truc int primary key |
|
| 408 | + // ajout d'une colonne qui passe en primary key directe |
|
| 409 | + else { |
|
| 410 | + $def = trim(substr($do, 3)); |
|
| 411 | + $colonne_ajoutee = substr($def, 0, strpos($def, ' ')); |
|
| 412 | + $def = substr($def, strlen($colonne_ajoutee) + 1); |
|
| 413 | + $opts = []; |
|
| 414 | + if (preg_match(',primary\s+key,i', $def)) { |
|
| 415 | + $opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee]; |
|
| 416 | + $def = preg_replace(',primary\s+key,i', '', $def); |
|
| 417 | + } |
|
| 418 | + $opts['field'] = [$colonne_ajoutee => $def]; |
|
| 419 | + if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) { |
|
| 420 | + spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 421 | + |
|
| 422 | + return false; |
|
| 423 | + } |
|
| 424 | + } |
|
| 425 | + break; |
|
| 426 | + } |
|
| 427 | + // tout est bon, ouf ! |
|
| 428 | + spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO); |
|
| 429 | + } |
|
| 430 | + |
|
| 431 | + spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO); |
|
| 432 | + |
|
| 433 | + return true; |
|
| 434 | 434 | } |
| 435 | 435 | |
| 436 | 436 | /** |
@@ -452,38 +452,38 @@ discard block |
||
| 452 | 452 | * - true si la requête réussie, false sinon. |
| 453 | 453 | */ |
| 454 | 454 | function spip_sqlite_create( |
| 455 | - $nom, |
|
| 456 | - $champs, |
|
| 457 | - $cles, |
|
| 458 | - $autoinc = false, |
|
| 459 | - $temporary = false, |
|
| 460 | - $serveur = '', |
|
| 461 | - $requeter = true |
|
| 455 | + $nom, |
|
| 456 | + $champs, |
|
| 457 | + $cles, |
|
| 458 | + $autoinc = false, |
|
| 459 | + $temporary = false, |
|
| 460 | + $serveur = '', |
|
| 461 | + $requeter = true |
|
| 462 | 462 | ) { |
| 463 | - $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter); |
|
| 464 | - if (!$query) { |
|
| 465 | - return false; |
|
| 466 | - } |
|
| 467 | - $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 468 | - |
|
| 469 | - // SQLite ne cree pas les KEY sur les requetes CREATE TABLE |
|
| 470 | - // il faut donc les faire creer ensuite |
|
| 471 | - if (!$requeter) { |
|
| 472 | - return $res; |
|
| 473 | - } |
|
| 474 | - |
|
| 475 | - $ok = $res ? true : false; |
|
| 476 | - if ($ok) { |
|
| 477 | - foreach ($cles as $k => $v) { |
|
| 478 | - if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) { |
|
| 479 | - $index = trim(substr($k, strlen($m[1]))); |
|
| 480 | - $unique = (strlen($m[1]) > 3); |
|
| 481 | - $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur); |
|
| 482 | - } |
|
| 483 | - } |
|
| 484 | - } |
|
| 485 | - |
|
| 486 | - return $ok ? true : false; |
|
| 463 | + $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter); |
|
| 464 | + if (!$query) { |
|
| 465 | + return false; |
|
| 466 | + } |
|
| 467 | + $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 468 | + |
|
| 469 | + // SQLite ne cree pas les KEY sur les requetes CREATE TABLE |
|
| 470 | + // il faut donc les faire creer ensuite |
|
| 471 | + if (!$requeter) { |
|
| 472 | + return $res; |
|
| 473 | + } |
|
| 474 | + |
|
| 475 | + $ok = $res ? true : false; |
|
| 476 | + if ($ok) { |
|
| 477 | + foreach ($cles as $k => $v) { |
|
| 478 | + if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) { |
|
| 479 | + $index = trim(substr($k, strlen($m[1]))); |
|
| 480 | + $unique = (strlen($m[1]) > 3); |
|
| 481 | + $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur); |
|
| 482 | + } |
|
| 483 | + } |
|
| 484 | + } |
|
| 485 | + |
|
| 486 | + return $ok ? true : false; |
|
| 487 | 487 | } |
| 488 | 488 | |
| 489 | 489 | /** |
@@ -497,21 +497,21 @@ discard block |
||
| 497 | 497 | **/ |
| 498 | 498 | function spip_sqlite_create_base($nom, $serveur = '', $option = true) |
| 499 | 499 | { |
| 500 | - $f = $nom . '.sqlite'; |
|
| 501 | - if (strpos($nom, '/') === false) { |
|
| 502 | - $f = _DIR_DB . $f; |
|
| 503 | - } |
|
| 500 | + $f = $nom . '.sqlite'; |
|
| 501 | + if (strpos($nom, '/') === false) { |
|
| 502 | + $f = _DIR_DB . $f; |
|
| 503 | + } |
|
| 504 | 504 | |
| 505 | - $ok = new \PDO("sqlite:$f"); |
|
| 505 | + $ok = new \PDO("sqlite:$f"); |
|
| 506 | 506 | |
| 507 | - if ($ok) { |
|
| 508 | - unset($ok); |
|
| 507 | + if ($ok) { |
|
| 508 | + unset($ok); |
|
| 509 | 509 | |
| 510 | - return true; |
|
| 511 | - } |
|
| 512 | - unset($ok); |
|
| 510 | + return true; |
|
| 511 | + } |
|
| 512 | + unset($ok); |
|
| 513 | 513 | |
| 514 | - return false; |
|
| 514 | + return false; |
|
| 515 | 515 | } |
| 516 | 516 | |
| 517 | 517 | |
@@ -533,22 +533,22 @@ discard block |
||
| 533 | 533 | */ |
| 534 | 534 | function spip_sqlite_create_view($nom, $query_select, $serveur = '', $requeter = true) |
| 535 | 535 | { |
| 536 | - if (!$query_select) { |
|
| 537 | - return false; |
|
| 538 | - } |
|
| 539 | - // vue deja presente |
|
| 540 | - if (sql_showtable($nom, false, $serveur)) { |
|
| 541 | - spip_log( |
|
| 542 | - "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", |
|
| 543 | - 'sqlite.' . _LOG_ERREUR |
|
| 544 | - ); |
|
| 545 | - |
|
| 546 | - return false; |
|
| 547 | - } |
|
| 548 | - |
|
| 549 | - $query = "CREATE VIEW $nom AS " . $query_select; |
|
| 550 | - |
|
| 551 | - return spip_sqlite_query($query, $serveur, $requeter); |
|
| 536 | + if (!$query_select) { |
|
| 537 | + return false; |
|
| 538 | + } |
|
| 539 | + // vue deja presente |
|
| 540 | + if (sql_showtable($nom, false, $serveur)) { |
|
| 541 | + spip_log( |
|
| 542 | + "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", |
|
| 543 | + 'sqlite.' . _LOG_ERREUR |
|
| 544 | + ); |
|
| 545 | + |
|
| 546 | + return false; |
|
| 547 | + } |
|
| 548 | + |
|
| 549 | + $query = "CREATE VIEW $nom AS " . $query_select; |
|
| 550 | + |
|
| 551 | + return spip_sqlite_query($query, $serveur, $requeter); |
|
| 552 | 552 | } |
| 553 | 553 | |
| 554 | 554 | /** |
@@ -571,54 +571,54 @@ discard block |
||
| 571 | 571 | */ |
| 572 | 572 | function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) |
| 573 | 573 | { |
| 574 | - if (!($nom or $table or $champs)) { |
|
| 575 | - spip_log( |
|
| 576 | - "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))', |
|
| 577 | - 'sqlite.' . _LOG_ERREUR |
|
| 578 | - ); |
|
| 579 | - |
|
| 580 | - return false; |
|
| 581 | - } |
|
| 582 | - |
|
| 583 | - // SQLite ne differentie pas noms des index en fonction des tables |
|
| 584 | - // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 585 | - $nom = $table . '_' . $nom; |
|
| 586 | - // enlever d'eventuelles parentheses deja presentes sur champs |
|
| 587 | - if (!is_array($champs)) { |
|
| 588 | - if ($champs[0] == '(') { |
|
| 589 | - $champs = substr($champs, 1, -1); |
|
| 590 | - } |
|
| 591 | - $champs = [$champs]; |
|
| 592 | - // supprimer l'info de longueur d'index mysql en fin de champ |
|
| 593 | - $champs = preg_replace(',\(\d+\)$,', '', $champs); |
|
| 594 | - } |
|
| 595 | - |
|
| 596 | - $ifnotexists = ''; |
|
| 597 | - $version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur); |
|
| 598 | - if (!function_exists('spip_version_compare')) { |
|
| 599 | - include_spip('plugins/installer'); |
|
| 600 | - } |
|
| 601 | - |
|
| 602 | - if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 603 | - $ifnotexists = ' IF NOT EXISTS'; |
|
| 604 | - } else { |
|
| 605 | - /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 606 | - $a = spip_sqlite_showtable($table, $serveur); |
|
| 607 | - if (isset($a['key']['KEY ' . $nom])) { |
|
| 608 | - return true; |
|
| 609 | - } |
|
| 610 | - } |
|
| 611 | - |
|
| 612 | - $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')'; |
|
| 613 | - $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 614 | - if (!$requeter) { |
|
| 615 | - return $res; |
|
| 616 | - } |
|
| 617 | - if ($res) { |
|
| 618 | - return true; |
|
| 619 | - } else { |
|
| 620 | - return false; |
|
| 621 | - } |
|
| 574 | + if (!($nom or $table or $champs)) { |
|
| 575 | + spip_log( |
|
| 576 | + "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))', |
|
| 577 | + 'sqlite.' . _LOG_ERREUR |
|
| 578 | + ); |
|
| 579 | + |
|
| 580 | + return false; |
|
| 581 | + } |
|
| 582 | + |
|
| 583 | + // SQLite ne differentie pas noms des index en fonction des tables |
|
| 584 | + // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 585 | + $nom = $table . '_' . $nom; |
|
| 586 | + // enlever d'eventuelles parentheses deja presentes sur champs |
|
| 587 | + if (!is_array($champs)) { |
|
| 588 | + if ($champs[0] == '(') { |
|
| 589 | + $champs = substr($champs, 1, -1); |
|
| 590 | + } |
|
| 591 | + $champs = [$champs]; |
|
| 592 | + // supprimer l'info de longueur d'index mysql en fin de champ |
|
| 593 | + $champs = preg_replace(',\(\d+\)$,', '', $champs); |
|
| 594 | + } |
|
| 595 | + |
|
| 596 | + $ifnotexists = ''; |
|
| 597 | + $version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur); |
|
| 598 | + if (!function_exists('spip_version_compare')) { |
|
| 599 | + include_spip('plugins/installer'); |
|
| 600 | + } |
|
| 601 | + |
|
| 602 | + if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 603 | + $ifnotexists = ' IF NOT EXISTS'; |
|
| 604 | + } else { |
|
| 605 | + /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 606 | + $a = spip_sqlite_showtable($table, $serveur); |
|
| 607 | + if (isset($a['key']['KEY ' . $nom])) { |
|
| 608 | + return true; |
|
| 609 | + } |
|
| 610 | + } |
|
| 611 | + |
|
| 612 | + $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')'; |
|
| 613 | + $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 614 | + if (!$requeter) { |
|
| 615 | + return $res; |
|
| 616 | + } |
|
| 617 | + if ($res) { |
|
| 618 | + return true; |
|
| 619 | + } else { |
|
| 620 | + return false; |
|
| 621 | + } |
|
| 622 | 622 | } |
| 623 | 623 | |
| 624 | 624 | /** |
@@ -636,31 +636,31 @@ discard block |
||
| 636 | 636 | */ |
| 637 | 637 | function spip_sqlite_count($r, $serveur = '', $requeter = true) |
| 638 | 638 | { |
| 639 | - if (!$r) { |
|
| 640 | - return 0; |
|
| 641 | - } |
|
| 642 | - |
|
| 643 | - // select ou autre (insert, update,...) ? |
|
| 644 | - // (link,requete) a compter |
|
| 645 | - if (is_array($r->spipSqliteRowCount)) { |
|
| 646 | - list($link, $query) = $r->spipSqliteRowCount; |
|
| 647 | - // amelioration possible a tester intensivement : pas de order by pour compter ! |
|
| 648 | - // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query); |
|
| 649 | - $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)"; |
|
| 650 | - $l = $link->query($query); |
|
| 651 | - $i = 0; |
|
| 652 | - if ($l and $z = $l->fetch()) { |
|
| 653 | - $i = $z['zzzzsqlitecount']; |
|
| 654 | - } |
|
| 655 | - $r->spipSqliteRowCount = $i; |
|
| 656 | - } |
|
| 657 | - if (isset($r->spipSqliteRowCount)) { |
|
| 658 | - // Ce compte est faux s'il y a des limit dans la requete :( |
|
| 659 | - // il retourne le nombre d'enregistrements sans le limit |
|
| 660 | - return $r->spipSqliteRowCount; |
|
| 661 | - } else { |
|
| 662 | - return $r->rowCount(); |
|
| 663 | - } |
|
| 639 | + if (!$r) { |
|
| 640 | + return 0; |
|
| 641 | + } |
|
| 642 | + |
|
| 643 | + // select ou autre (insert, update,...) ? |
|
| 644 | + // (link,requete) a compter |
|
| 645 | + if (is_array($r->spipSqliteRowCount)) { |
|
| 646 | + list($link, $query) = $r->spipSqliteRowCount; |
|
| 647 | + // amelioration possible a tester intensivement : pas de order by pour compter ! |
|
| 648 | + // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query); |
|
| 649 | + $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)"; |
|
| 650 | + $l = $link->query($query); |
|
| 651 | + $i = 0; |
|
| 652 | + if ($l and $z = $l->fetch()) { |
|
| 653 | + $i = $z['zzzzsqlitecount']; |
|
| 654 | + } |
|
| 655 | + $r->spipSqliteRowCount = $i; |
|
| 656 | + } |
|
| 657 | + if (isset($r->spipSqliteRowCount)) { |
|
| 658 | + // Ce compte est faux s'il y a des limit dans la requete :( |
|
| 659 | + // il retourne le nombre d'enregistrements sans le limit |
|
| 660 | + return $r->spipSqliteRowCount; |
|
| 661 | + } else { |
|
| 662 | + return $r->rowCount(); |
|
| 663 | + } |
|
| 664 | 664 | } |
| 665 | 665 | |
| 666 | 666 | |
@@ -679,30 +679,30 @@ discard block |
||
| 679 | 679 | * - false si la requête a échouée |
| 680 | 680 | **/ |
| 681 | 681 | function spip_sqlite_countsel( |
| 682 | - $from = [], |
|
| 683 | - $where = [], |
|
| 684 | - $groupby = '', |
|
| 685 | - $having = [], |
|
| 686 | - $serveur = '', |
|
| 687 | - $requeter = true |
|
| 682 | + $from = [], |
|
| 683 | + $where = [], |
|
| 684 | + $groupby = '', |
|
| 685 | + $having = [], |
|
| 686 | + $serveur = '', |
|
| 687 | + $requeter = true |
|
| 688 | 688 | ) { |
| 689 | - $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby))); |
|
| 690 | - $r = spip_sqlite_select( |
|
| 691 | - "COUNT($c)", |
|
| 692 | - $from, |
|
| 693 | - $where, |
|
| 694 | - '', |
|
| 695 | - '', |
|
| 696 | - '', |
|
| 697 | - $having, |
|
| 698 | - $serveur, |
|
| 699 | - $requeter |
|
| 700 | - ); |
|
| 701 | - if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3 |
|
| 702 | - list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur); |
|
| 703 | - } |
|
| 704 | - |
|
| 705 | - return $r; |
|
| 689 | + $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby))); |
|
| 690 | + $r = spip_sqlite_select( |
|
| 691 | + "COUNT($c)", |
|
| 692 | + $from, |
|
| 693 | + $where, |
|
| 694 | + '', |
|
| 695 | + '', |
|
| 696 | + '', |
|
| 697 | + $having, |
|
| 698 | + $serveur, |
|
| 699 | + $requeter |
|
| 700 | + ); |
|
| 701 | + if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3 |
|
| 702 | + list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur); |
|
| 703 | + } |
|
| 704 | + |
|
| 705 | + return $r; |
|
| 706 | 706 | } |
| 707 | 707 | |
| 708 | 708 | |
@@ -720,24 +720,24 @@ discard block |
||
| 720 | 720 | **/ |
| 721 | 721 | function spip_sqlite_delete($table, $where = '', $serveur = '', $requeter = true) |
| 722 | 722 | { |
| 723 | - $res = spip_sqlite_query( |
|
| 724 | - _sqlite_calculer_expression('DELETE FROM', $table, ',') |
|
| 725 | - . _sqlite_calculer_expression('WHERE', $where), |
|
| 726 | - $serveur, |
|
| 727 | - $requeter |
|
| 728 | - ); |
|
| 729 | - |
|
| 730 | - // renvoyer la requete inerte si demandee |
|
| 731 | - if (!$requeter) { |
|
| 732 | - return $res; |
|
| 733 | - } |
|
| 734 | - |
|
| 735 | - if ($res) { |
|
| 736 | - $link = _sqlite_link($serveur); |
|
| 737 | - return $res->rowCount(); |
|
| 738 | - } else { |
|
| 739 | - return false; |
|
| 740 | - } |
|
| 723 | + $res = spip_sqlite_query( |
|
| 724 | + _sqlite_calculer_expression('DELETE FROM', $table, ',') |
|
| 725 | + . _sqlite_calculer_expression('WHERE', $where), |
|
| 726 | + $serveur, |
|
| 727 | + $requeter |
|
| 728 | + ); |
|
| 729 | + |
|
| 730 | + // renvoyer la requete inerte si demandee |
|
| 731 | + if (!$requeter) { |
|
| 732 | + return $res; |
|
| 733 | + } |
|
| 734 | + |
|
| 735 | + if ($res) { |
|
| 736 | + $link = _sqlite_link($serveur); |
|
| 737 | + return $res->rowCount(); |
|
| 738 | + } else { |
|
| 739 | + return false; |
|
| 740 | + } |
|
| 741 | 741 | } |
| 742 | 742 | |
| 743 | 743 | |
@@ -754,15 +754,15 @@ discard block |
||
| 754 | 754 | */ |
| 755 | 755 | function spip_sqlite_drop_table($table, $exist = '', $serveur = '', $requeter = true) |
| 756 | 756 | { |
| 757 | - if ($exist) { |
|
| 758 | - $exist = ' IF EXISTS'; |
|
| 759 | - } |
|
| 760 | - |
|
| 761 | - if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) { |
|
| 762 | - return true; |
|
| 763 | - } else { |
|
| 764 | - return false; |
|
| 765 | - } |
|
| 757 | + if ($exist) { |
|
| 758 | + $exist = ' IF EXISTS'; |
|
| 759 | + } |
|
| 760 | + |
|
| 761 | + if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) { |
|
| 762 | + return true; |
|
| 763 | + } else { |
|
| 764 | + return false; |
|
| 765 | + } |
|
| 766 | 766 | } |
| 767 | 767 | |
| 768 | 768 | |
@@ -779,11 +779,11 @@ discard block |
||
| 779 | 779 | */ |
| 780 | 780 | function spip_sqlite_drop_view($view, $exist = '', $serveur = '', $requeter = true) |
| 781 | 781 | { |
| 782 | - if ($exist) { |
|
| 783 | - $exist = ' IF EXISTS'; |
|
| 784 | - } |
|
| 782 | + if ($exist) { |
|
| 783 | + $exist = ' IF EXISTS'; |
|
| 784 | + } |
|
| 785 | 785 | |
| 786 | - return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter); |
|
| 786 | + return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter); |
|
| 787 | 787 | } |
| 788 | 788 | |
| 789 | 789 | /** |
@@ -798,20 +798,20 @@ discard block |
||
| 798 | 798 | */ |
| 799 | 799 | function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) |
| 800 | 800 | { |
| 801 | - if (!($nom or $table)) { |
|
| 802 | - spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR); |
|
| 801 | + if (!($nom or $table)) { |
|
| 802 | + spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR); |
|
| 803 | 803 | |
| 804 | - return false; |
|
| 805 | - } |
|
| 804 | + return false; |
|
| 805 | + } |
|
| 806 | 806 | |
| 807 | - // SQLite ne differentie pas noms des index en fonction des tables |
|
| 808 | - // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 809 | - $index = $table . '_' . $nom; |
|
| 810 | - $exist = ' IF EXISTS'; |
|
| 807 | + // SQLite ne differentie pas noms des index en fonction des tables |
|
| 808 | + // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 809 | + $index = $table . '_' . $nom; |
|
| 810 | + $exist = ' IF EXISTS'; |
|
| 811 | 811 | |
| 812 | - $query = "DROP INDEX$exist $index"; |
|
| 812 | + $query = "DROP INDEX$exist $index"; |
|
| 813 | 813 | |
| 814 | - return spip_sqlite_query($query, $serveur, $requeter); |
|
| 814 | + return spip_sqlite_query($query, $serveur, $requeter); |
|
| 815 | 815 | } |
| 816 | 816 | |
| 817 | 817 | /** |
@@ -828,29 +828,29 @@ discard block |
||
| 828 | 828 | **/ |
| 829 | 829 | function spip_sqlite_error($query = '', $serveur = '') |
| 830 | 830 | { |
| 831 | - $link = _sqlite_link($serveur); |
|
| 832 | - |
|
| 833 | - if ($link) { |
|
| 834 | - $errs = $link->errorInfo(); |
|
| 835 | - $s = _sqlite_last_error_from_link($link); |
|
| 836 | - } else { |
|
| 837 | - $s = ': aucune ressource sqlite (link)'; |
|
| 838 | - } |
|
| 839 | - if ($s) { |
|
| 840 | - $trace = debug_backtrace(); |
|
| 841 | - if ($trace[0]['function'] != 'spip_sqlite_error') { |
|
| 842 | - spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR); |
|
| 843 | - } |
|
| 844 | - } |
|
| 845 | - |
|
| 846 | - return $s; |
|
| 831 | + $link = _sqlite_link($serveur); |
|
| 832 | + |
|
| 833 | + if ($link) { |
|
| 834 | + $errs = $link->errorInfo(); |
|
| 835 | + $s = _sqlite_last_error_from_link($link); |
|
| 836 | + } else { |
|
| 837 | + $s = ': aucune ressource sqlite (link)'; |
|
| 838 | + } |
|
| 839 | + if ($s) { |
|
| 840 | + $trace = debug_backtrace(); |
|
| 841 | + if ($trace[0]['function'] != 'spip_sqlite_error') { |
|
| 842 | + spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR); |
|
| 843 | + } |
|
| 844 | + } |
|
| 845 | + |
|
| 846 | + return $s; |
|
| 847 | 847 | } |
| 848 | 848 | |
| 849 | 849 | function _sqlite_last_error_from_link($link) |
| 850 | 850 | { |
| 851 | - if ($link) { |
|
| 852 | - $errs = $link->errorInfo(); |
|
| 853 | - /* |
|
| 851 | + if ($link) { |
|
| 852 | + $errs = $link->errorInfo(); |
|
| 853 | + /* |
|
| 854 | 854 | $errs[0] |
| 855 | 855 | numero SQLState ('HY000' souvent lors d'une erreur) |
| 856 | 856 | http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html |
@@ -860,11 +860,11 @@ discard block |
||
| 860 | 860 | $errs[2] |
| 861 | 861 | Le texte du message d'erreur |
| 862 | 862 | */ |
| 863 | - if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur |
|
| 864 | - return "$errs[2]"; |
|
| 865 | - } |
|
| 866 | - } |
|
| 867 | - return ''; |
|
| 863 | + if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur |
|
| 864 | + return "$errs[2]"; |
|
| 865 | + } |
|
| 866 | + } |
|
| 867 | + return ''; |
|
| 868 | 868 | } |
| 869 | 869 | |
| 870 | 870 | /** |
@@ -882,23 +882,23 @@ discard block |
||
| 882 | 882 | **/ |
| 883 | 883 | function spip_sqlite_errno($serveur = '') |
| 884 | 884 | { |
| 885 | - $link = _sqlite_link($serveur); |
|
| 886 | - |
|
| 887 | - if ($link) { |
|
| 888 | - $t = $link->errorInfo(); |
|
| 889 | - $s = ltrim($t[0], '0'); // 00000 si pas d'erreur |
|
| 890 | - if ($s) { |
|
| 891 | - $s .= ' / ' . $t[1]; |
|
| 892 | - } // ajoute l'erreur du moteur SQLite |
|
| 893 | - } else { |
|
| 894 | - $s = ': aucune ressource sqlite (link)'; |
|
| 895 | - } |
|
| 896 | - |
|
| 897 | - if ($s) { |
|
| 898 | - spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR); |
|
| 899 | - } |
|
| 900 | - |
|
| 901 | - return $s ? $s : 0; |
|
| 885 | + $link = _sqlite_link($serveur); |
|
| 886 | + |
|
| 887 | + if ($link) { |
|
| 888 | + $t = $link->errorInfo(); |
|
| 889 | + $s = ltrim($t[0], '0'); // 00000 si pas d'erreur |
|
| 890 | + if ($s) { |
|
| 891 | + $s .= ' / ' . $t[1]; |
|
| 892 | + } // ajoute l'erreur du moteur SQLite |
|
| 893 | + } else { |
|
| 894 | + $s = ': aucune ressource sqlite (link)'; |
|
| 895 | + } |
|
| 896 | + |
|
| 897 | + if ($s) { |
|
| 898 | + spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR); |
|
| 899 | + } |
|
| 900 | + |
|
| 901 | + return $s ? $s : 0; |
|
| 902 | 902 | } |
| 903 | 903 | |
| 904 | 904 | |
@@ -915,19 +915,19 @@ discard block |
||
| 915 | 915 | */ |
| 916 | 916 | function spip_sqlite_explain($query, $serveur = '', $requeter = true) |
| 917 | 917 | { |
| 918 | - if (strpos(ltrim($query), 'SELECT') !== 0) { |
|
| 919 | - return []; |
|
| 920 | - } |
|
| 921 | - |
|
| 922 | - $query = Sqlite::traduire_requete($query, $serveur); |
|
| 923 | - $query = 'EXPLAIN ' . $query; |
|
| 924 | - if (!$requeter) { |
|
| 925 | - return $query; |
|
| 926 | - } |
|
| 927 | - // on ne trace pas ces requetes, sinon on obtient un tracage sans fin... |
|
| 928 | - $r = Sqlite::executer_requete($query, $serveur, false); |
|
| 929 | - |
|
| 930 | - return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier |
|
| 918 | + if (strpos(ltrim($query), 'SELECT') !== 0) { |
|
| 919 | + return []; |
|
| 920 | + } |
|
| 921 | + |
|
| 922 | + $query = Sqlite::traduire_requete($query, $serveur); |
|
| 923 | + $query = 'EXPLAIN ' . $query; |
|
| 924 | + if (!$requeter) { |
|
| 925 | + return $query; |
|
| 926 | + } |
|
| 927 | + // on ne trace pas ces requetes, sinon on obtient un tracage sans fin... |
|
| 928 | + $r = Sqlite::executer_requete($query, $serveur, false); |
|
| 929 | + |
|
| 930 | + return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier |
|
| 931 | 931 | } |
| 932 | 932 | |
| 933 | 933 | |
@@ -948,35 +948,35 @@ discard block |
||
| 948 | 948 | function spip_sqlite_fetch($r, $t = '', $serveur = '', $requeter = true) |
| 949 | 949 | { |
| 950 | 950 | |
| 951 | - $link = _sqlite_link($serveur); |
|
| 952 | - $t = $t ? $t : SPIP_SQLITE3_ASSOC; |
|
| 953 | - |
|
| 954 | - if (!$r) { |
|
| 955 | - return false; |
|
| 956 | - } |
|
| 957 | - |
|
| 958 | - $retour = $r->fetch($t); |
|
| 959 | - |
|
| 960 | - if (!$retour) { |
|
| 961 | - if ($r->errorCode() === '00000') { |
|
| 962 | - return null; |
|
| 963 | - } |
|
| 964 | - return false; |
|
| 965 | - } |
|
| 966 | - |
|
| 967 | - // Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff ! |
|
| 968 | - // suppression de 'table.' pour toutes les cles (c'est un peu violent !) |
|
| 969 | - // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non |
|
| 970 | - if (str_contains(implode('', array_keys($retour)), '.')) { |
|
| 971 | - foreach ($retour as $cle => $val) { |
|
| 972 | - if (($pos = strpos($cle, '.')) !== false) { |
|
| 973 | - $retour[substr($cle, $pos + 1)] = &$retour[$cle]; |
|
| 974 | - unset($retour[$cle]); |
|
| 975 | - } |
|
| 976 | - } |
|
| 977 | - } |
|
| 978 | - |
|
| 979 | - return $retour; |
|
| 951 | + $link = _sqlite_link($serveur); |
|
| 952 | + $t = $t ? $t : SPIP_SQLITE3_ASSOC; |
|
| 953 | + |
|
| 954 | + if (!$r) { |
|
| 955 | + return false; |
|
| 956 | + } |
|
| 957 | + |
|
| 958 | + $retour = $r->fetch($t); |
|
| 959 | + |
|
| 960 | + if (!$retour) { |
|
| 961 | + if ($r->errorCode() === '00000') { |
|
| 962 | + return null; |
|
| 963 | + } |
|
| 964 | + return false; |
|
| 965 | + } |
|
| 966 | + |
|
| 967 | + // Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff ! |
|
| 968 | + // suppression de 'table.' pour toutes les cles (c'est un peu violent !) |
|
| 969 | + // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non |
|
| 970 | + if (str_contains(implode('', array_keys($retour)), '.')) { |
|
| 971 | + foreach ($retour as $cle => $val) { |
|
| 972 | + if (($pos = strpos($cle, '.')) !== false) { |
|
| 973 | + $retour[substr($cle, $pos + 1)] = &$retour[$cle]; |
|
| 974 | + unset($retour[$cle]); |
|
| 975 | + } |
|
| 976 | + } |
|
| 977 | + } |
|
| 978 | + |
|
| 979 | + return $retour; |
|
| 980 | 980 | } |
| 981 | 981 | |
| 982 | 982 | /** |
@@ -990,8 +990,8 @@ discard block |
||
| 990 | 990 | **/ |
| 991 | 991 | function spip_sqlite_seek($r, $row_number, $serveur = '', $requeter = true) |
| 992 | 992 | { |
| 993 | - // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind... |
|
| 994 | - return false; |
|
| 993 | + // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind... |
|
| 994 | + return false; |
|
| 995 | 995 | } |
| 996 | 996 | |
| 997 | 997 | |
@@ -1008,10 +1008,10 @@ discard block |
||
| 1008 | 1008 | */ |
| 1009 | 1009 | function spip_sqlite_free(&$r, $serveur = '', $requeter = true) |
| 1010 | 1010 | { |
| 1011 | - unset($r); |
|
| 1011 | + unset($r); |
|
| 1012 | 1012 | |
| 1013 | - return true; |
|
| 1014 | - //return sqlite_free_result($r); |
|
| 1013 | + return true; |
|
| 1014 | + //return sqlite_free_result($r); |
|
| 1015 | 1015 | } |
| 1016 | 1016 | |
| 1017 | 1017 | |
@@ -1027,8 +1027,8 @@ discard block |
||
| 1027 | 1027 | */ |
| 1028 | 1028 | function spip_sqlite_get_charset($charset = [], $serveur = '', $requeter = true) |
| 1029 | 1029 | { |
| 1030 | - //$c = !$charset ? '' : (" LIKE "._q($charset['charset'])); |
|
| 1031 | - //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur); |
|
| 1030 | + //$c = !$charset ? '' : (" LIKE "._q($charset['charset'])); |
|
| 1031 | + //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur); |
|
| 1032 | 1032 | } |
| 1033 | 1033 | |
| 1034 | 1034 | |
@@ -1044,7 +1044,7 @@ discard block |
||
| 1044 | 1044 | **/ |
| 1045 | 1045 | function spip_sqlite_hex($v) |
| 1046 | 1046 | { |
| 1047 | - return hexdec($v); |
|
| 1047 | + return hexdec($v); |
|
| 1048 | 1048 | } |
| 1049 | 1049 | |
| 1050 | 1050 | |
@@ -1067,7 +1067,7 @@ discard block |
||
| 1067 | 1067 | **/ |
| 1068 | 1068 | function spip_sqlite_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) |
| 1069 | 1069 | { |
| 1070 | - return "($val $not IN ($valeurs))"; |
|
| 1070 | + return "($val $not IN ($valeurs))"; |
|
| 1071 | 1071 | } |
| 1072 | 1072 | |
| 1073 | 1073 | |
@@ -1096,20 +1096,20 @@ discard block |
||
| 1096 | 1096 | function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) |
| 1097 | 1097 | { |
| 1098 | 1098 | |
| 1099 | - $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES'); |
|
| 1100 | - if ($r = spip_sqlite_query($query, $serveur, $requeter)) { |
|
| 1101 | - if (!$requeter) { |
|
| 1102 | - return $r; |
|
| 1103 | - } |
|
| 1104 | - $nb = Sqlite::last_insert_id($serveur); |
|
| 1105 | - } else { |
|
| 1106 | - $nb = false; |
|
| 1107 | - } |
|
| 1099 | + $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES'); |
|
| 1100 | + if ($r = spip_sqlite_query($query, $serveur, $requeter)) { |
|
| 1101 | + if (!$requeter) { |
|
| 1102 | + return $r; |
|
| 1103 | + } |
|
| 1104 | + $nb = Sqlite::last_insert_id($serveur); |
|
| 1105 | + } else { |
|
| 1106 | + $nb = false; |
|
| 1107 | + } |
|
| 1108 | 1108 | |
| 1109 | - $err = spip_sqlite_error($query, $serveur); |
|
| 1109 | + $err = spip_sqlite_error($query, $serveur); |
|
| 1110 | 1110 | |
| 1111 | - // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1112 | - return isset($_GET['var_profile']) ? $r : $nb; |
|
| 1111 | + // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1112 | + return isset($_GET['var_profile']) ? $r : $nb; |
|
| 1113 | 1113 | } |
| 1114 | 1114 | |
| 1115 | 1115 | |
@@ -1135,28 +1135,28 @@ discard block |
||
| 1135 | 1135 | **/ |
| 1136 | 1136 | function spip_sqlite_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) |
| 1137 | 1137 | { |
| 1138 | - if (!$desc) { |
|
| 1139 | - $desc = description_table($table, $serveur); |
|
| 1140 | - } |
|
| 1141 | - if (!$desc) { |
|
| 1142 | - die("$table insertion sans description"); |
|
| 1143 | - } |
|
| 1144 | - $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1145 | - |
|
| 1146 | - foreach ($couples as $champ => $val) { |
|
| 1147 | - $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1148 | - } |
|
| 1149 | - |
|
| 1150 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1151 | - $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1152 | - |
|
| 1153 | - $cles = $valeurs = ''; |
|
| 1154 | - if (count($couples)) { |
|
| 1155 | - $cles = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1156 | - $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1157 | - } |
|
| 1158 | - |
|
| 1159 | - return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter); |
|
| 1138 | + if (!$desc) { |
|
| 1139 | + $desc = description_table($table, $serveur); |
|
| 1140 | + } |
|
| 1141 | + if (!$desc) { |
|
| 1142 | + die("$table insertion sans description"); |
|
| 1143 | + } |
|
| 1144 | + $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1145 | + |
|
| 1146 | + foreach ($couples as $champ => $val) { |
|
| 1147 | + $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1148 | + } |
|
| 1149 | + |
|
| 1150 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1151 | + $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1152 | + |
|
| 1153 | + $cles = $valeurs = ''; |
|
| 1154 | + if (count($couples)) { |
|
| 1155 | + $cles = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1156 | + $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1157 | + } |
|
| 1158 | + |
|
| 1159 | + return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter); |
|
| 1160 | 1160 | } |
| 1161 | 1161 | |
| 1162 | 1162 | |
@@ -1181,70 +1181,70 @@ discard block |
||
| 1181 | 1181 | **/ |
| 1182 | 1182 | function spip_sqlite_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) |
| 1183 | 1183 | { |
| 1184 | - if (!$desc) { |
|
| 1185 | - $desc = description_table($table, $serveur); |
|
| 1186 | - } |
|
| 1187 | - if (!$desc) { |
|
| 1188 | - die("$table insertion sans description"); |
|
| 1189 | - } |
|
| 1190 | - if (!isset($desc['field'])) { |
|
| 1191 | - $desc['field'] = []; |
|
| 1192 | - } |
|
| 1193 | - |
|
| 1194 | - // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1195 | - $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 1196 | - |
|
| 1197 | - // seul le nom de la table est a traduire ici : |
|
| 1198 | - // le faire une seule fois au debut |
|
| 1199 | - $query_start = "INSERT INTO $table "; |
|
| 1200 | - $query_start = Sqlite::traduire_requete($query_start, $serveur); |
|
| 1201 | - |
|
| 1202 | - // ouvrir une transaction |
|
| 1203 | - if ($requeter) { |
|
| 1204 | - Sqlite::demarrer_transaction($serveur); |
|
| 1205 | - } |
|
| 1206 | - |
|
| 1207 | - while ($couples = array_shift($tab_couples)) { |
|
| 1208 | - foreach ($couples as $champ => $val) { |
|
| 1209 | - $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]); |
|
| 1210 | - } |
|
| 1211 | - |
|
| 1212 | - // inserer les champs timestamp par defaut |
|
| 1213 | - $couples = array_merge($maj, $couples); |
|
| 1214 | - |
|
| 1215 | - $champs = $valeurs = ''; |
|
| 1216 | - if (count($couples)) { |
|
| 1217 | - $champs = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1218 | - $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1219 | - $query = $query_start . "$champs VALUES $valeurs"; |
|
| 1220 | - } else { |
|
| 1221 | - $query = $query_start . 'DEFAULT VALUES'; |
|
| 1222 | - } |
|
| 1223 | - |
|
| 1224 | - if ($requeter) { |
|
| 1225 | - $retour = Sqlite::executer_requete($query, $serveur); |
|
| 1226 | - } |
|
| 1227 | - |
|
| 1228 | - // sur le dernier couple uniquement |
|
| 1229 | - if (!count($tab_couples)) { |
|
| 1230 | - $nb = 0; |
|
| 1231 | - if ($requeter) { |
|
| 1232 | - $nb = Sqlite::last_insert_id($serveur); |
|
| 1233 | - } else { |
|
| 1234 | - return $query; |
|
| 1235 | - } |
|
| 1236 | - } |
|
| 1237 | - |
|
| 1238 | - $err = spip_sqlite_error($query, $serveur); |
|
| 1239 | - } |
|
| 1240 | - |
|
| 1241 | - if ($requeter) { |
|
| 1242 | - Sqlite::finir_transaction($serveur); |
|
| 1243 | - } |
|
| 1244 | - |
|
| 1245 | - // renvoie le dernier id d'autoincrement ajoute |
|
| 1246 | - // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1247 | - return isset($_GET['var_profile']) ? $retour : $nb; |
|
| 1184 | + if (!$desc) { |
|
| 1185 | + $desc = description_table($table, $serveur); |
|
| 1186 | + } |
|
| 1187 | + if (!$desc) { |
|
| 1188 | + die("$table insertion sans description"); |
|
| 1189 | + } |
|
| 1190 | + if (!isset($desc['field'])) { |
|
| 1191 | + $desc['field'] = []; |
|
| 1192 | + } |
|
| 1193 | + |
|
| 1194 | + // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1195 | + $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 1196 | + |
|
| 1197 | + // seul le nom de la table est a traduire ici : |
|
| 1198 | + // le faire une seule fois au debut |
|
| 1199 | + $query_start = "INSERT INTO $table "; |
|
| 1200 | + $query_start = Sqlite::traduire_requete($query_start, $serveur); |
|
| 1201 | + |
|
| 1202 | + // ouvrir une transaction |
|
| 1203 | + if ($requeter) { |
|
| 1204 | + Sqlite::demarrer_transaction($serveur); |
|
| 1205 | + } |
|
| 1206 | + |
|
| 1207 | + while ($couples = array_shift($tab_couples)) { |
|
| 1208 | + foreach ($couples as $champ => $val) { |
|
| 1209 | + $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]); |
|
| 1210 | + } |
|
| 1211 | + |
|
| 1212 | + // inserer les champs timestamp par defaut |
|
| 1213 | + $couples = array_merge($maj, $couples); |
|
| 1214 | + |
|
| 1215 | + $champs = $valeurs = ''; |
|
| 1216 | + if (count($couples)) { |
|
| 1217 | + $champs = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1218 | + $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1219 | + $query = $query_start . "$champs VALUES $valeurs"; |
|
| 1220 | + } else { |
|
| 1221 | + $query = $query_start . 'DEFAULT VALUES'; |
|
| 1222 | + } |
|
| 1223 | + |
|
| 1224 | + if ($requeter) { |
|
| 1225 | + $retour = Sqlite::executer_requete($query, $serveur); |
|
| 1226 | + } |
|
| 1227 | + |
|
| 1228 | + // sur le dernier couple uniquement |
|
| 1229 | + if (!count($tab_couples)) { |
|
| 1230 | + $nb = 0; |
|
| 1231 | + if ($requeter) { |
|
| 1232 | + $nb = Sqlite::last_insert_id($serveur); |
|
| 1233 | + } else { |
|
| 1234 | + return $query; |
|
| 1235 | + } |
|
| 1236 | + } |
|
| 1237 | + |
|
| 1238 | + $err = spip_sqlite_error($query, $serveur); |
|
| 1239 | + } |
|
| 1240 | + |
|
| 1241 | + if ($requeter) { |
|
| 1242 | + Sqlite::finir_transaction($serveur); |
|
| 1243 | + } |
|
| 1244 | + |
|
| 1245 | + // renvoie le dernier id d'autoincrement ajoute |
|
| 1246 | + // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1247 | + return isset($_GET['var_profile']) ? $retour : $nb; |
|
| 1248 | 1248 | } |
| 1249 | 1249 | |
| 1250 | 1250 | |
@@ -1260,7 +1260,7 @@ discard block |
||
| 1260 | 1260 | **/ |
| 1261 | 1261 | function spip_sqlite_preferer_transaction($serveur = '', $requeter = true) |
| 1262 | 1262 | { |
| 1263 | - return true; |
|
| 1263 | + return true; |
|
| 1264 | 1264 | } |
| 1265 | 1265 | |
| 1266 | 1266 | /** |
@@ -1278,12 +1278,12 @@ discard block |
||
| 1278 | 1278 | **/ |
| 1279 | 1279 | function spip_sqlite_demarrer_transaction($serveur = '', $requeter = true) |
| 1280 | 1280 | { |
| 1281 | - if (!$requeter) { |
|
| 1282 | - return 'BEGIN TRANSACTION'; |
|
| 1283 | - } |
|
| 1284 | - Sqlite::demarrer_transaction($serveur); |
|
| 1281 | + if (!$requeter) { |
|
| 1282 | + return 'BEGIN TRANSACTION'; |
|
| 1283 | + } |
|
| 1284 | + Sqlite::demarrer_transaction($serveur); |
|
| 1285 | 1285 | |
| 1286 | - return true; |
|
| 1286 | + return true; |
|
| 1287 | 1287 | } |
| 1288 | 1288 | |
| 1289 | 1289 | /** |
@@ -1298,12 +1298,12 @@ discard block |
||
| 1298 | 1298 | **/ |
| 1299 | 1299 | function spip_sqlite_terminer_transaction($serveur = '', $requeter = true) |
| 1300 | 1300 | { |
| 1301 | - if (!$requeter) { |
|
| 1302 | - return 'COMMIT'; |
|
| 1303 | - } |
|
| 1304 | - Sqlite::finir_transaction($serveur); |
|
| 1301 | + if (!$requeter) { |
|
| 1302 | + return 'COMMIT'; |
|
| 1303 | + } |
|
| 1304 | + Sqlite::finir_transaction($serveur); |
|
| 1305 | 1305 | |
| 1306 | - return true; |
|
| 1306 | + return true; |
|
| 1307 | 1307 | } |
| 1308 | 1308 | |
| 1309 | 1309 | |
@@ -1319,27 +1319,27 @@ discard block |
||
| 1319 | 1319 | **/ |
| 1320 | 1320 | function spip_sqlite_listdbs($serveur = '', $requeter = true) |
| 1321 | 1321 | { |
| 1322 | - _sqlite_init(); |
|
| 1323 | - |
|
| 1324 | - if (!is_dir($d = substr(_DIR_DB, 0, -1))) { |
|
| 1325 | - return []; |
|
| 1326 | - } |
|
| 1327 | - |
|
| 1328 | - include_spip('inc/flock'); |
|
| 1329 | - $bases = preg_files($d, $pattern = '(.*)\.sqlite$'); |
|
| 1330 | - $bds = []; |
|
| 1331 | - |
|
| 1332 | - foreach ($bases as $b) { |
|
| 1333 | - // pas de bases commencant pas sqlite |
|
| 1334 | - // (on s'en sert pour l'installation pour simuler la presence d'un serveur) |
|
| 1335 | - // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite |
|
| 1336 | - if (strpos($b, '_sqlite')) { |
|
| 1337 | - continue; |
|
| 1338 | - } |
|
| 1339 | - $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b); |
|
| 1340 | - } |
|
| 1341 | - |
|
| 1342 | - return $bds; |
|
| 1322 | + _sqlite_init(); |
|
| 1323 | + |
|
| 1324 | + if (!is_dir($d = substr(_DIR_DB, 0, -1))) { |
|
| 1325 | + return []; |
|
| 1326 | + } |
|
| 1327 | + |
|
| 1328 | + include_spip('inc/flock'); |
|
| 1329 | + $bases = preg_files($d, $pattern = '(.*)\.sqlite$'); |
|
| 1330 | + $bds = []; |
|
| 1331 | + |
|
| 1332 | + foreach ($bases as $b) { |
|
| 1333 | + // pas de bases commencant pas sqlite |
|
| 1334 | + // (on s'en sert pour l'installation pour simuler la presence d'un serveur) |
|
| 1335 | + // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite |
|
| 1336 | + if (strpos($b, '_sqlite')) { |
|
| 1337 | + continue; |
|
| 1338 | + } |
|
| 1339 | + $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b); |
|
| 1340 | + } |
|
| 1341 | + |
|
| 1342 | + return $bds; |
|
| 1343 | 1343 | } |
| 1344 | 1344 | |
| 1345 | 1345 | |
@@ -1355,9 +1355,9 @@ discard block |
||
| 1355 | 1355 | */ |
| 1356 | 1356 | function spip_sqlite_multi($objet, $lang) |
| 1357 | 1357 | { |
| 1358 | - $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi"; |
|
| 1358 | + $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi"; |
|
| 1359 | 1359 | |
| 1360 | - return $r; |
|
| 1360 | + return $r; |
|
| 1361 | 1361 | } |
| 1362 | 1362 | |
| 1363 | 1363 | |
@@ -1375,15 +1375,15 @@ discard block |
||
| 1375 | 1375 | **/ |
| 1376 | 1376 | function spip_sqlite_optimize($table, $serveur = '', $requeter = true) |
| 1377 | 1377 | { |
| 1378 | - static $do = false; |
|
| 1379 | - if ($requeter and $do) { |
|
| 1380 | - return true; |
|
| 1381 | - } |
|
| 1382 | - if ($requeter) { |
|
| 1383 | - $do = true; |
|
| 1384 | - } |
|
| 1385 | - |
|
| 1386 | - return spip_sqlite_query('VACUUM', $serveur, $requeter); |
|
| 1378 | + static $do = false; |
|
| 1379 | + if ($requeter and $do) { |
|
| 1380 | + return true; |
|
| 1381 | + } |
|
| 1382 | + if ($requeter) { |
|
| 1383 | + $do = true; |
|
| 1384 | + } |
|
| 1385 | + |
|
| 1386 | + return spip_sqlite_query('VACUUM', $serveur, $requeter); |
|
| 1387 | 1387 | } |
| 1388 | 1388 | |
| 1389 | 1389 | |
@@ -1401,15 +1401,15 @@ discard block |
||
| 1401 | 1401 | */ |
| 1402 | 1402 | function spip_sqlite_quote($v, $type = '') |
| 1403 | 1403 | { |
| 1404 | - if (!is_array($v)) { |
|
| 1405 | - return _sqlite_calculer_cite($v, $type); |
|
| 1406 | - } |
|
| 1407 | - // si c'est un tableau, le parcourir en propageant le type |
|
| 1408 | - foreach ($v as $k => $r) { |
|
| 1409 | - $v[$k] = spip_sqlite_quote($r, $type); |
|
| 1410 | - } |
|
| 1411 | - |
|
| 1412 | - return join(',', $v); |
|
| 1404 | + if (!is_array($v)) { |
|
| 1405 | + return _sqlite_calculer_cite($v, $type); |
|
| 1406 | + } |
|
| 1407 | + // si c'est un tableau, le parcourir en propageant le type |
|
| 1408 | + foreach ($v as $k => $r) { |
|
| 1409 | + $v[$k] = spip_sqlite_quote($r, $type); |
|
| 1410 | + } |
|
| 1411 | + |
|
| 1412 | + return join(',', $v); |
|
| 1413 | 1413 | } |
| 1414 | 1414 | |
| 1415 | 1415 | |
@@ -1427,9 +1427,9 @@ discard block |
||
| 1427 | 1427 | **/ |
| 1428 | 1428 | function spip_sqlite_date_proche($champ, $interval, $unite) |
| 1429 | 1429 | { |
| 1430 | - $op = (($interval <= 0) ? '>' : '<'); |
|
| 1430 | + $op = (($interval <= 0) ? '>' : '<'); |
|
| 1431 | 1431 | |
| 1432 | - return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))"; |
|
| 1432 | + return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))"; |
|
| 1433 | 1433 | } |
| 1434 | 1434 | |
| 1435 | 1435 | |
@@ -1448,48 +1448,48 @@ discard block |
||
| 1448 | 1448 | */ |
| 1449 | 1449 | function spip_sqlite_repair($table, $serveur = '', $requeter = true) |
| 1450 | 1450 | { |
| 1451 | - if ( |
|
| 1452 | - $desc = spip_sqlite_showtable($table, $serveur) |
|
| 1453 | - and isset($desc['field']) |
|
| 1454 | - and is_array($desc['field']) |
|
| 1455 | - ) { |
|
| 1456 | - foreach ($desc['field'] as $c => $d) { |
|
| 1457 | - if ( |
|
| 1458 | - preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d) |
|
| 1459 | - and stripos($d, 'NOT NULL') !== false |
|
| 1460 | - and stripos($d, 'DEFAULT') === false |
|
| 1461 | - /* pas touche aux cles primaires */ |
|
| 1462 | - and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1463 | - ) { |
|
| 1464 | - spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur); |
|
| 1465 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1466 | - } |
|
| 1467 | - if ( |
|
| 1468 | - preg_match(',^(INTEGER),i', $d) |
|
| 1469 | - and stripos($d, 'NOT NULL') !== false |
|
| 1470 | - and stripos($d, 'DEFAULT') === false |
|
| 1471 | - /* pas touche aux cles primaires */ |
|
| 1472 | - and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1473 | - ) { |
|
| 1474 | - spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur); |
|
| 1475 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1476 | - } |
|
| 1477 | - if ( |
|
| 1478 | - preg_match(',^(datetime),i', $d) |
|
| 1479 | - and stripos($d, 'NOT NULL') !== false |
|
| 1480 | - and stripos($d, 'DEFAULT') === false |
|
| 1481 | - /* pas touche aux cles primaires */ |
|
| 1482 | - and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1483 | - ) { |
|
| 1484 | - spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur); |
|
| 1485 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1486 | - } |
|
| 1487 | - } |
|
| 1488 | - |
|
| 1489 | - return [' OK ']; |
|
| 1490 | - } |
|
| 1491 | - |
|
| 1492 | - return [' ERROR ']; |
|
| 1451 | + if ( |
|
| 1452 | + $desc = spip_sqlite_showtable($table, $serveur) |
|
| 1453 | + and isset($desc['field']) |
|
| 1454 | + and is_array($desc['field']) |
|
| 1455 | + ) { |
|
| 1456 | + foreach ($desc['field'] as $c => $d) { |
|
| 1457 | + if ( |
|
| 1458 | + preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d) |
|
| 1459 | + and stripos($d, 'NOT NULL') !== false |
|
| 1460 | + and stripos($d, 'DEFAULT') === false |
|
| 1461 | + /* pas touche aux cles primaires */ |
|
| 1462 | + and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1463 | + ) { |
|
| 1464 | + spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur); |
|
| 1465 | + spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1466 | + } |
|
| 1467 | + if ( |
|
| 1468 | + preg_match(',^(INTEGER),i', $d) |
|
| 1469 | + and stripos($d, 'NOT NULL') !== false |
|
| 1470 | + and stripos($d, 'DEFAULT') === false |
|
| 1471 | + /* pas touche aux cles primaires */ |
|
| 1472 | + and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1473 | + ) { |
|
| 1474 | + spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur); |
|
| 1475 | + spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1476 | + } |
|
| 1477 | + if ( |
|
| 1478 | + preg_match(',^(datetime),i', $d) |
|
| 1479 | + and stripos($d, 'NOT NULL') !== false |
|
| 1480 | + and stripos($d, 'DEFAULT') === false |
|
| 1481 | + /* pas touche aux cles primaires */ |
|
| 1482 | + and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1483 | + ) { |
|
| 1484 | + spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur); |
|
| 1485 | + spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1486 | + } |
|
| 1487 | + } |
|
| 1488 | + |
|
| 1489 | + return [' OK ']; |
|
| 1490 | + } |
|
| 1491 | + |
|
| 1492 | + return [' ERROR ']; |
|
| 1493 | 1493 | } |
| 1494 | 1494 | |
| 1495 | 1495 | |
@@ -1519,25 +1519,25 @@ discard block |
||
| 1519 | 1519 | **/ |
| 1520 | 1520 | function spip_sqlite_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) |
| 1521 | 1521 | { |
| 1522 | - if (!$desc) { |
|
| 1523 | - $desc = description_table($table, $serveur); |
|
| 1524 | - } |
|
| 1525 | - if (!$desc) { |
|
| 1526 | - die("$table insertion sans description"); |
|
| 1527 | - } |
|
| 1528 | - $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1529 | - |
|
| 1530 | - foreach ($couples as $champ => $val) { |
|
| 1531 | - $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1532 | - } |
|
| 1533 | - |
|
| 1534 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1535 | - $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1536 | - |
|
| 1537 | - return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join( |
|
| 1538 | - ',', |
|
| 1539 | - $couples |
|
| 1540 | - ) . ')', $serveur); |
|
| 1522 | + if (!$desc) { |
|
| 1523 | + $desc = description_table($table, $serveur); |
|
| 1524 | + } |
|
| 1525 | + if (!$desc) { |
|
| 1526 | + die("$table insertion sans description"); |
|
| 1527 | + } |
|
| 1528 | + $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1529 | + |
|
| 1530 | + foreach ($couples as $champ => $val) { |
|
| 1531 | + $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1532 | + } |
|
| 1533 | + |
|
| 1534 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1535 | + $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1536 | + |
|
| 1537 | + return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join( |
|
| 1538 | + ',', |
|
| 1539 | + $couples |
|
| 1540 | + ) . ')', $serveur); |
|
| 1541 | 1541 | } |
| 1542 | 1542 | |
| 1543 | 1543 | |
@@ -1568,13 +1568,13 @@ discard block |
||
| 1568 | 1568 | function spip_sqlite_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) |
| 1569 | 1569 | { |
| 1570 | 1570 | |
| 1571 | - // boucler pour trainter chaque requete independemment |
|
| 1572 | - foreach ($tab_couples as $couples) { |
|
| 1573 | - $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter); |
|
| 1574 | - } |
|
| 1571 | + // boucler pour trainter chaque requete independemment |
|
| 1572 | + foreach ($tab_couples as $couples) { |
|
| 1573 | + $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter); |
|
| 1574 | + } |
|
| 1575 | 1575 | |
| 1576 | - // renvoie le dernier id |
|
| 1577 | - return $retour; |
|
| 1576 | + // renvoie le dernier id |
|
| 1577 | + return $retour; |
|
| 1578 | 1578 | } |
| 1579 | 1579 | |
| 1580 | 1580 | |
@@ -1601,44 +1601,44 @@ discard block |
||
| 1601 | 1601 | * - array : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer. |
| 1602 | 1602 | */ |
| 1603 | 1603 | function spip_sqlite_select( |
| 1604 | - $select, |
|
| 1605 | - $from, |
|
| 1606 | - $where = '', |
|
| 1607 | - $groupby = '', |
|
| 1608 | - $orderby = '', |
|
| 1609 | - $limit = '', |
|
| 1610 | - $having = '', |
|
| 1611 | - $serveur = '', |
|
| 1612 | - $requeter = true |
|
| 1604 | + $select, |
|
| 1605 | + $from, |
|
| 1606 | + $where = '', |
|
| 1607 | + $groupby = '', |
|
| 1608 | + $orderby = '', |
|
| 1609 | + $limit = '', |
|
| 1610 | + $having = '', |
|
| 1611 | + $serveur = '', |
|
| 1612 | + $requeter = true |
|
| 1613 | 1613 | ) { |
| 1614 | 1614 | |
| 1615 | - // version() n'est pas connu de sqlite |
|
| 1616 | - $select = str_replace('version()', 'sqlite_version()', $select); |
|
| 1617 | - |
|
| 1618 | - // recomposer from |
|
| 1619 | - $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from)); |
|
| 1620 | - |
|
| 1621 | - $query = |
|
| 1622 | - _sqlite_calculer_expression('SELECT', $select, ', ') |
|
| 1623 | - . _sqlite_calculer_expression('FROM', $from, ', ') |
|
| 1624 | - . _sqlite_calculer_expression('WHERE', $where) |
|
| 1625 | - . _sqlite_calculer_expression('GROUP BY', $groupby, ',') |
|
| 1626 | - . _sqlite_calculer_expression('HAVING', $having) |
|
| 1627 | - . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '') |
|
| 1628 | - . ($limit ? "\nLIMIT $limit" : ''); |
|
| 1629 | - |
|
| 1630 | - // dans un select, on doit renvoyer la requête en cas d'erreur |
|
| 1631 | - $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1632 | - // texte de la requete demande ? |
|
| 1633 | - if (!$requeter) { |
|
| 1634 | - return $res; |
|
| 1635 | - } |
|
| 1636 | - // erreur survenue ? |
|
| 1637 | - if ($res === false) { |
|
| 1638 | - return Sqlite::traduire_requete($query, $serveur); |
|
| 1639 | - } |
|
| 1640 | - |
|
| 1641 | - return $res; |
|
| 1615 | + // version() n'est pas connu de sqlite |
|
| 1616 | + $select = str_replace('version()', 'sqlite_version()', $select); |
|
| 1617 | + |
|
| 1618 | + // recomposer from |
|
| 1619 | + $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from)); |
|
| 1620 | + |
|
| 1621 | + $query = |
|
| 1622 | + _sqlite_calculer_expression('SELECT', $select, ', ') |
|
| 1623 | + . _sqlite_calculer_expression('FROM', $from, ', ') |
|
| 1624 | + . _sqlite_calculer_expression('WHERE', $where) |
|
| 1625 | + . _sqlite_calculer_expression('GROUP BY', $groupby, ',') |
|
| 1626 | + . _sqlite_calculer_expression('HAVING', $having) |
|
| 1627 | + . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '') |
|
| 1628 | + . ($limit ? "\nLIMIT $limit" : ''); |
|
| 1629 | + |
|
| 1630 | + // dans un select, on doit renvoyer la requête en cas d'erreur |
|
| 1631 | + $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1632 | + // texte de la requete demande ? |
|
| 1633 | + if (!$requeter) { |
|
| 1634 | + return $res; |
|
| 1635 | + } |
|
| 1636 | + // erreur survenue ? |
|
| 1637 | + if ($res === false) { |
|
| 1638 | + return Sqlite::traduire_requete($query, $serveur); |
|
| 1639 | + } |
|
| 1640 | + |
|
| 1641 | + return $res; |
|
| 1642 | 1642 | } |
| 1643 | 1643 | |
| 1644 | 1644 | |
@@ -1658,32 +1658,32 @@ discard block |
||
| 1658 | 1658 | **/ |
| 1659 | 1659 | function spip_sqlite_selectdb($db, $serveur = '', $requeter = true) |
| 1660 | 1660 | { |
| 1661 | - _sqlite_init(); |
|
| 1662 | - |
|
| 1663 | - // interdire la creation d'une nouvelle base, |
|
| 1664 | - // sauf si on est dans l'installation |
|
| 1665 | - if ( |
|
| 1666 | - !is_file($f = _DIR_DB . $db . '.sqlite') |
|
| 1667 | - && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL) |
|
| 1668 | - ) { |
|
| 1669 | - spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS); |
|
| 1670 | - |
|
| 1671 | - return false; |
|
| 1672 | - } |
|
| 1673 | - |
|
| 1674 | - // se connecter a la base indiquee |
|
| 1675 | - // avec les identifiants connus |
|
| 1676 | - $index = $serveur ? $serveur : 0; |
|
| 1677 | - |
|
| 1678 | - if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) { |
|
| 1679 | - if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) { |
|
| 1680 | - return $db; |
|
| 1681 | - } |
|
| 1682 | - } else { |
|
| 1683 | - spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS); |
|
| 1684 | - } |
|
| 1685 | - |
|
| 1686 | - return false; |
|
| 1661 | + _sqlite_init(); |
|
| 1662 | + |
|
| 1663 | + // interdire la creation d'une nouvelle base, |
|
| 1664 | + // sauf si on est dans l'installation |
|
| 1665 | + if ( |
|
| 1666 | + !is_file($f = _DIR_DB . $db . '.sqlite') |
|
| 1667 | + && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL) |
|
| 1668 | + ) { |
|
| 1669 | + spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS); |
|
| 1670 | + |
|
| 1671 | + return false; |
|
| 1672 | + } |
|
| 1673 | + |
|
| 1674 | + // se connecter a la base indiquee |
|
| 1675 | + // avec les identifiants connus |
|
| 1676 | + $index = $serveur ? $serveur : 0; |
|
| 1677 | + |
|
| 1678 | + if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) { |
|
| 1679 | + if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) { |
|
| 1680 | + return $db; |
|
| 1681 | + } |
|
| 1682 | + } else { |
|
| 1683 | + spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS); |
|
| 1684 | + } |
|
| 1685 | + |
|
| 1686 | + return false; |
|
| 1687 | 1687 | } |
| 1688 | 1688 | |
| 1689 | 1689 | |
@@ -1699,8 +1699,8 @@ discard block |
||
| 1699 | 1699 | */ |
| 1700 | 1700 | function spip_sqlite_set_charset($charset, $serveur = '', $requeter = true) |
| 1701 | 1701 | { |
| 1702 | - # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR); |
|
| 1703 | - # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas ! |
|
| 1702 | + # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR); |
|
| 1703 | + # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas ! |
|
| 1704 | 1704 | } |
| 1705 | 1705 | |
| 1706 | 1706 | |
@@ -1719,24 +1719,24 @@ discard block |
||
| 1719 | 1719 | **/ |
| 1720 | 1720 | function spip_sqlite_showbase($match, $serveur = '', $requeter = true) |
| 1721 | 1721 | { |
| 1722 | - // type est le type d'entrée : table / index / view |
|
| 1723 | - // on ne retourne que les tables (?) et non les vues... |
|
| 1724 | - # ESCAPE non supporte par les versions sqlite <3 |
|
| 1725 | - # return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter); |
|
| 1726 | - $match = preg_quote($match); |
|
| 1727 | - $match = str_replace('\\\_', '[[TIRETBAS]]', $match); |
|
| 1728 | - $match = str_replace('\\\%', '[[POURCENT]]', $match); |
|
| 1729 | - $match = str_replace('_', '.', $match); |
|
| 1730 | - $match = str_replace('%', '.*', $match); |
|
| 1731 | - $match = str_replace('[[TIRETBAS]]', '_', $match); |
|
| 1732 | - $match = str_replace('[[POURCENT]]', '%', $match); |
|
| 1733 | - $match = "^$match$"; |
|
| 1734 | - |
|
| 1735 | - return spip_sqlite_query( |
|
| 1736 | - "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match), |
|
| 1737 | - $serveur, |
|
| 1738 | - $requeter |
|
| 1739 | - ); |
|
| 1722 | + // type est le type d'entrée : table / index / view |
|
| 1723 | + // on ne retourne que les tables (?) et non les vues... |
|
| 1724 | + # ESCAPE non supporte par les versions sqlite <3 |
|
| 1725 | + # return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter); |
|
| 1726 | + $match = preg_quote($match); |
|
| 1727 | + $match = str_replace('\\\_', '[[TIRETBAS]]', $match); |
|
| 1728 | + $match = str_replace('\\\%', '[[POURCENT]]', $match); |
|
| 1729 | + $match = str_replace('_', '.', $match); |
|
| 1730 | + $match = str_replace('%', '.*', $match); |
|
| 1731 | + $match = str_replace('[[TIRETBAS]]', '_', $match); |
|
| 1732 | + $match = str_replace('[[POURCENT]]', '%', $match); |
|
| 1733 | + $match = "^$match$"; |
|
| 1734 | + |
|
| 1735 | + return spip_sqlite_query( |
|
| 1736 | + "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match), |
|
| 1737 | + $serveur, |
|
| 1738 | + $requeter |
|
| 1739 | + ); |
|
| 1740 | 1740 | } |
| 1741 | 1741 | |
| 1742 | 1742 | /** |
@@ -1755,19 +1755,19 @@ discard block |
||
| 1755 | 1755 | **/ |
| 1756 | 1756 | function spip_sqlite_table_exists(string $table, $serveur = '', $requeter = true) |
| 1757 | 1757 | { |
| 1758 | - $r = spip_sqlite_query( |
|
| 1759 | - 'SELECT name FROM sqlite_master WHERE' |
|
| 1760 | - . ' type=\'table\'' |
|
| 1761 | - . ' AND name=' . spip_sqlite_quote($table, 'string') |
|
| 1762 | - . ' AND name NOT LIKE \'sqlite_%\'', |
|
| 1763 | - $serveur, |
|
| 1764 | - $requeter |
|
| 1765 | - ); |
|
| 1766 | - if (!$requeter) { |
|
| 1767 | - return $r; |
|
| 1768 | - } |
|
| 1769 | - $res = spip_sqlite_fetch($r); |
|
| 1770 | - return (bool) $res; |
|
| 1758 | + $r = spip_sqlite_query( |
|
| 1759 | + 'SELECT name FROM sqlite_master WHERE' |
|
| 1760 | + . ' type=\'table\'' |
|
| 1761 | + . ' AND name=' . spip_sqlite_quote($table, 'string') |
|
| 1762 | + . ' AND name NOT LIKE \'sqlite_%\'', |
|
| 1763 | + $serveur, |
|
| 1764 | + $requeter |
|
| 1765 | + ); |
|
| 1766 | + if (!$requeter) { |
|
| 1767 | + return $r; |
|
| 1768 | + } |
|
| 1769 | + $res = spip_sqlite_fetch($r); |
|
| 1770 | + return (bool) $res; |
|
| 1771 | 1771 | } |
| 1772 | 1772 | |
| 1773 | 1773 | define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/'); |
@@ -1791,129 +1791,129 @@ discard block |
||
| 1791 | 1791 | */ |
| 1792 | 1792 | function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true) |
| 1793 | 1793 | { |
| 1794 | - $query = |
|
| 1795 | - 'SELECT sql, type FROM' |
|
| 1796 | - . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1797 | - . ' SELECT * FROM sqlite_temp_master)' |
|
| 1798 | - . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1799 | - . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'" |
|
| 1800 | - . ' ORDER BY substr(type,2,1), name'; |
|
| 1801 | - |
|
| 1802 | - $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1803 | - if (!$a) { |
|
| 1804 | - return ''; |
|
| 1805 | - } |
|
| 1806 | - if (!$requeter) { |
|
| 1807 | - return $a; |
|
| 1808 | - } |
|
| 1809 | - if (!($a = spip_sqlite_fetch($a, null, $serveur))) { |
|
| 1810 | - return ''; |
|
| 1811 | - } |
|
| 1812 | - $vue = ($a['type'] == 'view'); // table | vue |
|
| 1813 | - |
|
| 1814 | - // c'est une table |
|
| 1815 | - // il faut parser le create |
|
| 1816 | - if (!$vue) { |
|
| 1817 | - if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) { |
|
| 1818 | - return ''; |
|
| 1819 | - } else { |
|
| 1820 | - $desc = $r[1]; |
|
| 1821 | - // extraction d'une KEY éventuelle en prenant garde de ne pas |
|
| 1822 | - // relever un champ dont le nom contient KEY (ex. ID_WHISKEY) |
|
| 1823 | - if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) { |
|
| 1824 | - $namedkeys = $r[2]; |
|
| 1825 | - $desc = $r[1]; |
|
| 1826 | - } else { |
|
| 1827 | - $namedkeys = ''; |
|
| 1828 | - } |
|
| 1829 | - |
|
| 1830 | - $fields = []; |
|
| 1831 | - $keys = []; |
|
| 1832 | - |
|
| 1833 | - // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber |
|
| 1834 | - // par exemple s'il contiennent une virgule. |
|
| 1835 | - // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager ! |
|
| 1836 | - list($desc, $echaps) = query_echappe_textes($desc); |
|
| 1837 | - |
|
| 1838 | - // separer toutes les descriptions de champs, separes par des virgules |
|
| 1839 | - # /!\ explode peut exploser aussi DECIMAL(10,2) ! |
|
| 1840 | - $k_precedent = null; |
|
| 1841 | - foreach (explode(',', $desc) as $v) { |
|
| 1842 | - preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r); |
|
| 1843 | - // Les cles de champs peuvent etre entourees |
|
| 1844 | - // de guillements doubles " , simples ', graves ` ou de crochets [ ], ou rien. |
|
| 1845 | - // http://www.sqlite.org/lang_keywords.html |
|
| 1846 | - $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]... |
|
| 1847 | - if ($char = strpbrk($k[0], '\'"[`')) { |
|
| 1848 | - $k = trim($k, $char); |
|
| 1849 | - if ($char == '[') { |
|
| 1850 | - $k = rtrim($k, ']'); |
|
| 1851 | - } |
|
| 1852 | - } |
|
| 1853 | - $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ |
|
| 1854 | - |
|
| 1855 | - // rustine pour DECIMAL(10,2) |
|
| 1856 | - // s'il y a une parenthèse fermante dans la clé |
|
| 1857 | - // ou dans la définition sans qu'il n'y ait une ouverture avant |
|
| 1858 | - if (str_contains($k, ')') or preg_match('/^[^\(]*\)/', $def)) { |
|
| 1859 | - $fields[$k_precedent] .= ',' . $k . ' ' . $def; |
|
| 1860 | - continue; |
|
| 1861 | - } |
|
| 1862 | - |
|
| 1863 | - // la primary key peut etre dans une des descriptions de champs |
|
| 1864 | - // et non en fin de table, cas encore decouvert avec Sqlite Manager |
|
| 1865 | - if (stripos($r[2], 'PRIMARY KEY') !== false) { |
|
| 1866 | - $keys['PRIMARY KEY'] = $k; |
|
| 1867 | - } |
|
| 1868 | - |
|
| 1869 | - $fields[$k] = $def; |
|
| 1870 | - $k_precedent = $k; |
|
| 1871 | - } |
|
| 1872 | - // key inclues dans la requete |
|
| 1873 | - foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) { |
|
| 1874 | - if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) { |
|
| 1875 | - $k = str_replace('`', '', trim($r[1])); |
|
| 1876 | - $t = trim(strtolower(str_replace('`', '', $r[2])), '"'); |
|
| 1877 | - if ($k && !isset($keys[$k])) { |
|
| 1878 | - $keys[$k] = $t; |
|
| 1879 | - } else { |
|
| 1880 | - $keys[] = $t; |
|
| 1881 | - } |
|
| 1882 | - } |
|
| 1883 | - } |
|
| 1884 | - // sinon ajouter les key index |
|
| 1885 | - $query = |
|
| 1886 | - 'SELECT name,sql FROM' |
|
| 1887 | - . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1888 | - . ' SELECT * FROM sqlite_temp_master)' |
|
| 1889 | - . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1890 | - . " AND type='index' AND name NOT LIKE 'sqlite_%'" |
|
| 1891 | - . 'ORDER BY substr(type,2,1), name'; |
|
| 1892 | - $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1893 | - while ($r = spip_sqlite_fetch($a, null, $serveur)) { |
|
| 1894 | - $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index |
|
| 1895 | - $keytype = 'KEY'; |
|
| 1896 | - if (strpos($r['sql'], 'UNIQUE INDEX') !== false) { |
|
| 1897 | - $keytype = 'UNIQUE KEY'; |
|
| 1898 | - } |
|
| 1899 | - $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']); |
|
| 1900 | - $keys[$keytype . ' ' . $key] = $colonnes; |
|
| 1901 | - } |
|
| 1902 | - } |
|
| 1903 | - } // c'est une vue, on liste les champs disponibles simplement |
|
| 1904 | - else { |
|
| 1905 | - if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1 |
|
| 1906 | - $fields = []; |
|
| 1907 | - foreach ($res as $c => $v) { |
|
| 1908 | - $fields[$c] = ''; |
|
| 1909 | - } |
|
| 1910 | - $keys = []; |
|
| 1911 | - } else { |
|
| 1912 | - return ''; |
|
| 1913 | - } |
|
| 1914 | - } |
|
| 1915 | - |
|
| 1916 | - return ['field' => $fields, 'key' => $keys]; |
|
| 1794 | + $query = |
|
| 1795 | + 'SELECT sql, type FROM' |
|
| 1796 | + . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1797 | + . ' SELECT * FROM sqlite_temp_master)' |
|
| 1798 | + . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1799 | + . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'" |
|
| 1800 | + . ' ORDER BY substr(type,2,1), name'; |
|
| 1801 | + |
|
| 1802 | + $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1803 | + if (!$a) { |
|
| 1804 | + return ''; |
|
| 1805 | + } |
|
| 1806 | + if (!$requeter) { |
|
| 1807 | + return $a; |
|
| 1808 | + } |
|
| 1809 | + if (!($a = spip_sqlite_fetch($a, null, $serveur))) { |
|
| 1810 | + return ''; |
|
| 1811 | + } |
|
| 1812 | + $vue = ($a['type'] == 'view'); // table | vue |
|
| 1813 | + |
|
| 1814 | + // c'est une table |
|
| 1815 | + // il faut parser le create |
|
| 1816 | + if (!$vue) { |
|
| 1817 | + if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) { |
|
| 1818 | + return ''; |
|
| 1819 | + } else { |
|
| 1820 | + $desc = $r[1]; |
|
| 1821 | + // extraction d'une KEY éventuelle en prenant garde de ne pas |
|
| 1822 | + // relever un champ dont le nom contient KEY (ex. ID_WHISKEY) |
|
| 1823 | + if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) { |
|
| 1824 | + $namedkeys = $r[2]; |
|
| 1825 | + $desc = $r[1]; |
|
| 1826 | + } else { |
|
| 1827 | + $namedkeys = ''; |
|
| 1828 | + } |
|
| 1829 | + |
|
| 1830 | + $fields = []; |
|
| 1831 | + $keys = []; |
|
| 1832 | + |
|
| 1833 | + // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber |
|
| 1834 | + // par exemple s'il contiennent une virgule. |
|
| 1835 | + // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager ! |
|
| 1836 | + list($desc, $echaps) = query_echappe_textes($desc); |
|
| 1837 | + |
|
| 1838 | + // separer toutes les descriptions de champs, separes par des virgules |
|
| 1839 | + # /!\ explode peut exploser aussi DECIMAL(10,2) ! |
|
| 1840 | + $k_precedent = null; |
|
| 1841 | + foreach (explode(',', $desc) as $v) { |
|
| 1842 | + preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r); |
|
| 1843 | + // Les cles de champs peuvent etre entourees |
|
| 1844 | + // de guillements doubles " , simples ', graves ` ou de crochets [ ], ou rien. |
|
| 1845 | + // http://www.sqlite.org/lang_keywords.html |
|
| 1846 | + $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]... |
|
| 1847 | + if ($char = strpbrk($k[0], '\'"[`')) { |
|
| 1848 | + $k = trim($k, $char); |
|
| 1849 | + if ($char == '[') { |
|
| 1850 | + $k = rtrim($k, ']'); |
|
| 1851 | + } |
|
| 1852 | + } |
|
| 1853 | + $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ |
|
| 1854 | + |
|
| 1855 | + // rustine pour DECIMAL(10,2) |
|
| 1856 | + // s'il y a une parenthèse fermante dans la clé |
|
| 1857 | + // ou dans la définition sans qu'il n'y ait une ouverture avant |
|
| 1858 | + if (str_contains($k, ')') or preg_match('/^[^\(]*\)/', $def)) { |
|
| 1859 | + $fields[$k_precedent] .= ',' . $k . ' ' . $def; |
|
| 1860 | + continue; |
|
| 1861 | + } |
|
| 1862 | + |
|
| 1863 | + // la primary key peut etre dans une des descriptions de champs |
|
| 1864 | + // et non en fin de table, cas encore decouvert avec Sqlite Manager |
|
| 1865 | + if (stripos($r[2], 'PRIMARY KEY') !== false) { |
|
| 1866 | + $keys['PRIMARY KEY'] = $k; |
|
| 1867 | + } |
|
| 1868 | + |
|
| 1869 | + $fields[$k] = $def; |
|
| 1870 | + $k_precedent = $k; |
|
| 1871 | + } |
|
| 1872 | + // key inclues dans la requete |
|
| 1873 | + foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) { |
|
| 1874 | + if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) { |
|
| 1875 | + $k = str_replace('`', '', trim($r[1])); |
|
| 1876 | + $t = trim(strtolower(str_replace('`', '', $r[2])), '"'); |
|
| 1877 | + if ($k && !isset($keys[$k])) { |
|
| 1878 | + $keys[$k] = $t; |
|
| 1879 | + } else { |
|
| 1880 | + $keys[] = $t; |
|
| 1881 | + } |
|
| 1882 | + } |
|
| 1883 | + } |
|
| 1884 | + // sinon ajouter les key index |
|
| 1885 | + $query = |
|
| 1886 | + 'SELECT name,sql FROM' |
|
| 1887 | + . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1888 | + . ' SELECT * FROM sqlite_temp_master)' |
|
| 1889 | + . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1890 | + . " AND type='index' AND name NOT LIKE 'sqlite_%'" |
|
| 1891 | + . 'ORDER BY substr(type,2,1), name'; |
|
| 1892 | + $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1893 | + while ($r = spip_sqlite_fetch($a, null, $serveur)) { |
|
| 1894 | + $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index |
|
| 1895 | + $keytype = 'KEY'; |
|
| 1896 | + if (strpos($r['sql'], 'UNIQUE INDEX') !== false) { |
|
| 1897 | + $keytype = 'UNIQUE KEY'; |
|
| 1898 | + } |
|
| 1899 | + $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']); |
|
| 1900 | + $keys[$keytype . ' ' . $key] = $colonnes; |
|
| 1901 | + } |
|
| 1902 | + } |
|
| 1903 | + } // c'est une vue, on liste les champs disponibles simplement |
|
| 1904 | + else { |
|
| 1905 | + if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1 |
|
| 1906 | + $fields = []; |
|
| 1907 | + foreach ($res as $c => $v) { |
|
| 1908 | + $fields[$c] = ''; |
|
| 1909 | + } |
|
| 1910 | + $keys = []; |
|
| 1911 | + } else { |
|
| 1912 | + return ''; |
|
| 1913 | + } |
|
| 1914 | + } |
|
| 1915 | + |
|
| 1916 | + return ['field' => $fields, 'key' => $keys]; |
|
| 1917 | 1917 | } |
| 1918 | 1918 | |
| 1919 | 1919 | |
@@ -1940,24 +1940,24 @@ discard block |
||
| 1940 | 1940 | */ |
| 1941 | 1941 | function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true) |
| 1942 | 1942 | { |
| 1943 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1944 | - $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur); |
|
| 1945 | - |
|
| 1946 | - $set = []; |
|
| 1947 | - foreach ($champs as $champ => $val) { |
|
| 1948 | - $set[] = $champ . "=$val"; |
|
| 1949 | - } |
|
| 1950 | - if (!empty($set)) { |
|
| 1951 | - return spip_sqlite_query( |
|
| 1952 | - _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 1953 | - . _sqlite_calculer_expression('SET', $set, ',') |
|
| 1954 | - . _sqlite_calculer_expression('WHERE', $where), |
|
| 1955 | - $serveur, |
|
| 1956 | - $requeter |
|
| 1957 | - ); |
|
| 1958 | - } |
|
| 1959 | - |
|
| 1960 | - return false; |
|
| 1943 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1944 | + $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur); |
|
| 1945 | + |
|
| 1946 | + $set = []; |
|
| 1947 | + foreach ($champs as $champ => $val) { |
|
| 1948 | + $set[] = $champ . "=$val"; |
|
| 1949 | + } |
|
| 1950 | + if (!empty($set)) { |
|
| 1951 | + return spip_sqlite_query( |
|
| 1952 | + _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 1953 | + . _sqlite_calculer_expression('SET', $set, ',') |
|
| 1954 | + . _sqlite_calculer_expression('WHERE', $where), |
|
| 1955 | + $serveur, |
|
| 1956 | + $requeter |
|
| 1957 | + ); |
|
| 1958 | + } |
|
| 1959 | + |
|
| 1960 | + return false; |
|
| 1961 | 1961 | } |
| 1962 | 1962 | |
| 1963 | 1963 | |
@@ -1988,38 +1988,38 @@ discard block |
||
| 1988 | 1988 | function spip_sqlite_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) |
| 1989 | 1989 | { |
| 1990 | 1990 | |
| 1991 | - if (!$champs) { |
|
| 1992 | - return; |
|
| 1993 | - } |
|
| 1994 | - if (!$desc) { |
|
| 1995 | - $desc = description_table($table, $serveur); |
|
| 1996 | - } |
|
| 1997 | - if (!$desc) { |
|
| 1998 | - die("$table insertion sans description"); |
|
| 1999 | - } |
|
| 2000 | - $fields = $desc['field']; |
|
| 2001 | - |
|
| 2002 | - $set = []; |
|
| 2003 | - foreach ($champs as $champ => $val) { |
|
| 2004 | - $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : ''); |
|
| 2005 | - } |
|
| 2006 | - |
|
| 2007 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 2008 | - // attention ils sont deja quotes |
|
| 2009 | - $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 2010 | - foreach ($maj as $champ => $val) { |
|
| 2011 | - if (!isset($set[$champ])) { |
|
| 2012 | - $set[$champ] = $champ . '=' . $val; |
|
| 2013 | - } |
|
| 2014 | - } |
|
| 2015 | - |
|
| 2016 | - return spip_sqlite_query( |
|
| 2017 | - _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 2018 | - . _sqlite_calculer_expression('SET', $set, ',') |
|
| 2019 | - . _sqlite_calculer_expression('WHERE', $where), |
|
| 2020 | - $serveur, |
|
| 2021 | - $requeter |
|
| 2022 | - ); |
|
| 1991 | + if (!$champs) { |
|
| 1992 | + return; |
|
| 1993 | + } |
|
| 1994 | + if (!$desc) { |
|
| 1995 | + $desc = description_table($table, $serveur); |
|
| 1996 | + } |
|
| 1997 | + if (!$desc) { |
|
| 1998 | + die("$table insertion sans description"); |
|
| 1999 | + } |
|
| 2000 | + $fields = $desc['field']; |
|
| 2001 | + |
|
| 2002 | + $set = []; |
|
| 2003 | + foreach ($champs as $champ => $val) { |
|
| 2004 | + $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : ''); |
|
| 2005 | + } |
|
| 2006 | + |
|
| 2007 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 2008 | + // attention ils sont deja quotes |
|
| 2009 | + $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 2010 | + foreach ($maj as $champ => $val) { |
|
| 2011 | + if (!isset($set[$champ])) { |
|
| 2012 | + $set[$champ] = $champ . '=' . $val; |
|
| 2013 | + } |
|
| 2014 | + } |
|
| 2015 | + |
|
| 2016 | + return spip_sqlite_query( |
|
| 2017 | + _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 2018 | + . _sqlite_calculer_expression('SET', $set, ',') |
|
| 2019 | + . _sqlite_calculer_expression('WHERE', $where), |
|
| 2020 | + $serveur, |
|
| 2021 | + $requeter |
|
| 2022 | + ); |
|
| 2023 | 2023 | } |
| 2024 | 2024 | |
| 2025 | 2025 | |
@@ -2038,17 +2038,17 @@ discard block |
||
| 2038 | 2038 | */ |
| 2039 | 2039 | function _sqlite_init() |
| 2040 | 2040 | { |
| 2041 | - if (!defined('_DIR_DB')) { |
|
| 2042 | - define('_DIR_DB', _DIR_ETC . 'bases/'); |
|
| 2043 | - } |
|
| 2044 | - if (!defined('_SQLITE_CHMOD')) { |
|
| 2045 | - define('_SQLITE_CHMOD', _SPIP_CHMOD); |
|
| 2046 | - } |
|
| 2047 | - |
|
| 2048 | - if (!is_dir($d = _DIR_DB)) { |
|
| 2049 | - include_spip('inc/flock'); |
|
| 2050 | - sous_repertoire($d); |
|
| 2051 | - } |
|
| 2041 | + if (!defined('_DIR_DB')) { |
|
| 2042 | + define('_DIR_DB', _DIR_ETC . 'bases/'); |
|
| 2043 | + } |
|
| 2044 | + if (!defined('_SQLITE_CHMOD')) { |
|
| 2045 | + define('_SQLITE_CHMOD', _SPIP_CHMOD); |
|
| 2046 | + } |
|
| 2047 | + |
|
| 2048 | + if (!is_dir($d = _DIR_DB)) { |
|
| 2049 | + include_spip('inc/flock'); |
|
| 2050 | + sous_repertoire($d); |
|
| 2051 | + } |
|
| 2052 | 2052 | } |
| 2053 | 2053 | |
| 2054 | 2054 | |
@@ -2063,20 +2063,20 @@ discard block |
||
| 2063 | 2063 | */ |
| 2064 | 2064 | function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true) |
| 2065 | 2065 | { |
| 2066 | - if ($link === '') { |
|
| 2067 | - $link = _sqlite_link($serveur); |
|
| 2068 | - } |
|
| 2069 | - if (!$link) { |
|
| 2070 | - return false; |
|
| 2071 | - } |
|
| 2066 | + if ($link === '') { |
|
| 2067 | + $link = _sqlite_link($serveur); |
|
| 2068 | + } |
|
| 2069 | + if (!$link) { |
|
| 2070 | + return false; |
|
| 2071 | + } |
|
| 2072 | 2072 | |
| 2073 | - $v = 3; |
|
| 2073 | + $v = 3; |
|
| 2074 | 2074 | |
| 2075 | - if (!$version) { |
|
| 2076 | - return $v; |
|
| 2077 | - } |
|
| 2075 | + if (!$version) { |
|
| 2076 | + return $v; |
|
| 2077 | + } |
|
| 2078 | 2078 | |
| 2079 | - return ($version == $v); |
|
| 2079 | + return ($version == $v); |
|
| 2080 | 2080 | } |
| 2081 | 2081 | |
| 2082 | 2082 | |
@@ -2088,9 +2088,9 @@ discard block |
||
| 2088 | 2088 | */ |
| 2089 | 2089 | function _sqlite_link($serveur = '') |
| 2090 | 2090 | { |
| 2091 | - $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link']; |
|
| 2091 | + $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link']; |
|
| 2092 | 2092 | |
| 2093 | - return $link; |
|
| 2093 | + return $link; |
|
| 2094 | 2094 | } |
| 2095 | 2095 | |
| 2096 | 2096 | |
@@ -2106,54 +2106,54 @@ discard block |
||
| 2106 | 2106 | */ |
| 2107 | 2107 | function _sqlite_calculer_cite($v, $type) |
| 2108 | 2108 | { |
| 2109 | - if ($type) { |
|
| 2110 | - if ( |
|
| 2111 | - is_null($v) |
|
| 2112 | - and stripos($type, 'NOT NULL') === false |
|
| 2113 | - ) { |
|
| 2114 | - // null php se traduit en NULL SQL |
|
| 2115 | - return 'NULL'; |
|
| 2116 | - } |
|
| 2117 | - |
|
| 2118 | - if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) { |
|
| 2119 | - return $v; |
|
| 2120 | - } |
|
| 2121 | - if (sql_test_int($type)) { |
|
| 2122 | - if (is_numeric($v)) { |
|
| 2123 | - return $v; |
|
| 2124 | - } elseif ($v === null) { |
|
| 2125 | - return 0; |
|
| 2126 | - } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) === 0) { |
|
| 2127 | - return hexdec(substr($v, 2)); |
|
| 2128 | - } else { |
|
| 2129 | - return intval($v); |
|
| 2130 | - } |
|
| 2131 | - } |
|
| 2132 | - } else { |
|
| 2133 | - // si on ne connait pas le type on le deduit de $v autant que possible |
|
| 2134 | - if (is_bool($v)) { |
|
| 2135 | - return strval(intval($v)); |
|
| 2136 | - } elseif (is_numeric($v)) { |
|
| 2137 | - return strval($v); |
|
| 2138 | - } |
|
| 2139 | - } |
|
| 2140 | - |
|
| 2141 | - // trouver un link sqlite pour faire l'echappement |
|
| 2142 | - foreach ($GLOBALS['connexions'] as $s) { |
|
| 2143 | - if ( |
|
| 2144 | - $l = $s['link'] |
|
| 2145 | - and is_object($l) |
|
| 2146 | - and $l instanceof \PDO |
|
| 2147 | - and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite' |
|
| 2148 | - ) { |
|
| 2149 | - return $l->quote($v ?? ''); |
|
| 2150 | - } |
|
| 2151 | - } |
|
| 2152 | - |
|
| 2153 | - // echapper les ' en '' |
|
| 2154 | - spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE); |
|
| 2155 | - |
|
| 2156 | - return ("'" . str_replace("'", "''", $v) . "'"); |
|
| 2109 | + if ($type) { |
|
| 2110 | + if ( |
|
| 2111 | + is_null($v) |
|
| 2112 | + and stripos($type, 'NOT NULL') === false |
|
| 2113 | + ) { |
|
| 2114 | + // null php se traduit en NULL SQL |
|
| 2115 | + return 'NULL'; |
|
| 2116 | + } |
|
| 2117 | + |
|
| 2118 | + if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) { |
|
| 2119 | + return $v; |
|
| 2120 | + } |
|
| 2121 | + if (sql_test_int($type)) { |
|
| 2122 | + if (is_numeric($v)) { |
|
| 2123 | + return $v; |
|
| 2124 | + } elseif ($v === null) { |
|
| 2125 | + return 0; |
|
| 2126 | + } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) === 0) { |
|
| 2127 | + return hexdec(substr($v, 2)); |
|
| 2128 | + } else { |
|
| 2129 | + return intval($v); |
|
| 2130 | + } |
|
| 2131 | + } |
|
| 2132 | + } else { |
|
| 2133 | + // si on ne connait pas le type on le deduit de $v autant que possible |
|
| 2134 | + if (is_bool($v)) { |
|
| 2135 | + return strval(intval($v)); |
|
| 2136 | + } elseif (is_numeric($v)) { |
|
| 2137 | + return strval($v); |
|
| 2138 | + } |
|
| 2139 | + } |
|
| 2140 | + |
|
| 2141 | + // trouver un link sqlite pour faire l'echappement |
|
| 2142 | + foreach ($GLOBALS['connexions'] as $s) { |
|
| 2143 | + if ( |
|
| 2144 | + $l = $s['link'] |
|
| 2145 | + and is_object($l) |
|
| 2146 | + and $l instanceof \PDO |
|
| 2147 | + and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite' |
|
| 2148 | + ) { |
|
| 2149 | + return $l->quote($v ?? ''); |
|
| 2150 | + } |
|
| 2151 | + } |
|
| 2152 | + |
|
| 2153 | + // echapper les ' en '' |
|
| 2154 | + spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE); |
|
| 2155 | + |
|
| 2156 | + return ("'" . str_replace("'", "''", $v) . "'"); |
|
| 2157 | 2157 | } |
| 2158 | 2158 | |
| 2159 | 2159 | |
@@ -2170,21 +2170,21 @@ discard block |
||
| 2170 | 2170 | */ |
| 2171 | 2171 | function _sqlite_calculer_expression($expression, $v, $join = 'AND') |
| 2172 | 2172 | { |
| 2173 | - if (empty($v)) { |
|
| 2174 | - return ''; |
|
| 2175 | - } |
|
| 2176 | - |
|
| 2177 | - $exp = "\n$expression "; |
|
| 2178 | - |
|
| 2179 | - if (!is_array($v)) { |
|
| 2180 | - return $exp . $v; |
|
| 2181 | - } else { |
|
| 2182 | - if (strtoupper($join) === 'AND') { |
|
| 2183 | - return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v)); |
|
| 2184 | - } else { |
|
| 2185 | - return $exp . join($join, $v); |
|
| 2186 | - } |
|
| 2187 | - } |
|
| 2173 | + if (empty($v)) { |
|
| 2174 | + return ''; |
|
| 2175 | + } |
|
| 2176 | + |
|
| 2177 | + $exp = "\n$expression "; |
|
| 2178 | + |
|
| 2179 | + if (!is_array($v)) { |
|
| 2180 | + return $exp . $v; |
|
| 2181 | + } else { |
|
| 2182 | + if (strtoupper($join) === 'AND') { |
|
| 2183 | + return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v)); |
|
| 2184 | + } else { |
|
| 2185 | + return $exp . join($join, $v); |
|
| 2186 | + } |
|
| 2187 | + } |
|
| 2188 | 2188 | } |
| 2189 | 2189 | |
| 2190 | 2190 | |
@@ -2201,7 +2201,7 @@ discard block |
||
| 2201 | 2201 | */ |
| 2202 | 2202 | function _sqlite_calculer_order($orderby) |
| 2203 | 2203 | { |
| 2204 | - return (is_array($orderby)) ? join(', ', $orderby) : $orderby; |
|
| 2204 | + return (is_array($orderby)) ? join(', ', $orderby) : $orderby; |
|
| 2205 | 2205 | } |
| 2206 | 2206 | |
| 2207 | 2207 | |
@@ -2213,26 +2213,26 @@ discard block |
||
| 2213 | 2213 | */ |
| 2214 | 2214 | function _sqlite_calculer_select_as($args) |
| 2215 | 2215 | { |
| 2216 | - $res = ''; |
|
| 2217 | - foreach ($args as $k => $v) { |
|
| 2218 | - if (substr($k, -1) == '@') { |
|
| 2219 | - // c'est une jointure qui se refere au from precedent |
|
| 2220 | - // pas de virgule |
|
| 2221 | - $res .= ' ' . $v; |
|
| 2222 | - } else { |
|
| 2223 | - if (!is_numeric($k)) { |
|
| 2224 | - $p = strpos($v, ' '); |
|
| 2225 | - if ($p) { |
|
| 2226 | - $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p); |
|
| 2227 | - } else { |
|
| 2228 | - $v .= " AS '$k'"; |
|
| 2229 | - } |
|
| 2230 | - } |
|
| 2231 | - $res .= ', ' . $v; |
|
| 2232 | - } |
|
| 2233 | - } |
|
| 2234 | - |
|
| 2235 | - return substr($res, 2); |
|
| 2216 | + $res = ''; |
|
| 2217 | + foreach ($args as $k => $v) { |
|
| 2218 | + if (substr($k, -1) == '@') { |
|
| 2219 | + // c'est une jointure qui se refere au from precedent |
|
| 2220 | + // pas de virgule |
|
| 2221 | + $res .= ' ' . $v; |
|
| 2222 | + } else { |
|
| 2223 | + if (!is_numeric($k)) { |
|
| 2224 | + $p = strpos($v, ' '); |
|
| 2225 | + if ($p) { |
|
| 2226 | + $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p); |
|
| 2227 | + } else { |
|
| 2228 | + $v .= " AS '$k'"; |
|
| 2229 | + } |
|
| 2230 | + } |
|
| 2231 | + $res .= ', ' . $v; |
|
| 2232 | + } |
|
| 2233 | + } |
|
| 2234 | + |
|
| 2235 | + return substr($res, 2); |
|
| 2236 | 2236 | } |
| 2237 | 2237 | |
| 2238 | 2238 | |
@@ -2256,26 +2256,26 @@ discard block |
||
| 2256 | 2256 | */ |
| 2257 | 2257 | function _sqlite_calculer_where($v) |
| 2258 | 2258 | { |
| 2259 | - if (!is_array($v)) { |
|
| 2260 | - return $v; |
|
| 2261 | - } |
|
| 2262 | - |
|
| 2263 | - $op = array_shift($v); |
|
| 2264 | - if (!($n = count($v))) { |
|
| 2265 | - return $op; |
|
| 2266 | - } else { |
|
| 2267 | - $arg = _sqlite_calculer_where(array_shift($v)); |
|
| 2268 | - if ($n == 1) { |
|
| 2269 | - return "$op($arg)"; |
|
| 2270 | - } else { |
|
| 2271 | - $arg2 = _sqlite_calculer_where(array_shift($v)); |
|
| 2272 | - if ($n == 2) { |
|
| 2273 | - return "($arg $op $arg2)"; |
|
| 2274 | - } else { |
|
| 2275 | - return "($arg $op ($arg2) : $v[0])"; |
|
| 2276 | - } |
|
| 2277 | - } |
|
| 2278 | - } |
|
| 2259 | + if (!is_array($v)) { |
|
| 2260 | + return $v; |
|
| 2261 | + } |
|
| 2262 | + |
|
| 2263 | + $op = array_shift($v); |
|
| 2264 | + if (!($n = count($v))) { |
|
| 2265 | + return $op; |
|
| 2266 | + } else { |
|
| 2267 | + $arg = _sqlite_calculer_where(array_shift($v)); |
|
| 2268 | + if ($n == 1) { |
|
| 2269 | + return "$op($arg)"; |
|
| 2270 | + } else { |
|
| 2271 | + $arg2 = _sqlite_calculer_where(array_shift($v)); |
|
| 2272 | + if ($n == 2) { |
|
| 2273 | + return "($arg $op $arg2)"; |
|
| 2274 | + } else { |
|
| 2275 | + return "($arg $op ($arg2) : $v[0])"; |
|
| 2276 | + } |
|
| 2277 | + } |
|
| 2278 | + } |
|
| 2279 | 2279 | } |
| 2280 | 2280 | |
| 2281 | 2281 | |
@@ -2291,19 +2291,19 @@ discard block |
||
| 2291 | 2291 | */ |
| 2292 | 2292 | function _sqlite_charger_version($version = '') |
| 2293 | 2293 | { |
| 2294 | - $versions = []; |
|
| 2295 | - |
|
| 2296 | - // version 3 |
|
| 2297 | - if (!$version || $version == 3) { |
|
| 2298 | - if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) { |
|
| 2299 | - $versions[] = 3; |
|
| 2300 | - } |
|
| 2301 | - } |
|
| 2302 | - if ($version) { |
|
| 2303 | - return in_array($version, $versions); |
|
| 2304 | - } |
|
| 2305 | - |
|
| 2306 | - return $versions; |
|
| 2294 | + $versions = []; |
|
| 2295 | + |
|
| 2296 | + // version 3 |
|
| 2297 | + if (!$version || $version == 3) { |
|
| 2298 | + if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) { |
|
| 2299 | + $versions[] = 3; |
|
| 2300 | + } |
|
| 2301 | + } |
|
| 2302 | + if ($version) { |
|
| 2303 | + return in_array($version, $versions); |
|
| 2304 | + } |
|
| 2305 | + |
|
| 2306 | + return $versions; |
|
| 2307 | 2307 | } |
| 2308 | 2308 | |
| 2309 | 2309 | |
@@ -2342,147 +2342,147 @@ discard block |
||
| 2342 | 2342 | function _sqlite_modifier_table($table, $colonne, $opt = [], $serveur = '') |
| 2343 | 2343 | { |
| 2344 | 2344 | |
| 2345 | - if (is_array($table)) { |
|
| 2346 | - $table_destination = reset($table); |
|
| 2347 | - $table_origine = key($table); |
|
| 2348 | - } else { |
|
| 2349 | - $table_origine = $table_destination = $table; |
|
| 2350 | - } |
|
| 2351 | - // ne prend actuellement qu'un changement |
|
| 2352 | - // mais pourra etre adapte pour changer plus qu'une colonne a la fois |
|
| 2353 | - if (is_array($colonne)) { |
|
| 2354 | - $colonne_destination = reset($colonne); |
|
| 2355 | - $colonne_origine = key($colonne); |
|
| 2356 | - } else { |
|
| 2357 | - $colonne_origine = $colonne_destination = $colonne; |
|
| 2358 | - } |
|
| 2359 | - if (!isset($opt['field'])) { |
|
| 2360 | - $opt['field'] = []; |
|
| 2361 | - } |
|
| 2362 | - if (!isset($opt['key'])) { |
|
| 2363 | - $opt['key'] = []; |
|
| 2364 | - } |
|
| 2365 | - |
|
| 2366 | - // si les noms de tables sont differents, pas besoin de table temporaire |
|
| 2367 | - // on prendra directement le nom de la future table |
|
| 2368 | - $meme_table = ($table_origine == $table_destination); |
|
| 2369 | - |
|
| 2370 | - $def_origine = sql_showtable($table_origine, false, $serveur); |
|
| 2371 | - if (!$def_origine or !isset($def_origine['field'])) { |
|
| 2372 | - spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR); |
|
| 2373 | - |
|
| 2374 | - return false; |
|
| 2375 | - } |
|
| 2376 | - |
|
| 2377 | - |
|
| 2378 | - $table_tmp = $table_origine . '_tmp'; |
|
| 2379 | - |
|
| 2380 | - // 1) creer une table temporaire avec les modifications |
|
| 2381 | - // - DROP : suppression de la colonne |
|
| 2382 | - // - CHANGE : modification de la colonne |
|
| 2383 | - // (foreach pour conserver l'ordre des champs) |
|
| 2384 | - |
|
| 2385 | - // field |
|
| 2386 | - $fields = []; |
|
| 2387 | - // pour le INSERT INTO plus loin |
|
| 2388 | - // stocker la correspondance nouvelles->anciennes colonnes |
|
| 2389 | - $fields_correspondances = []; |
|
| 2390 | - foreach ($def_origine['field'] as $c => $d) { |
|
| 2391 | - if ($colonne_origine && ($c == $colonne_origine)) { |
|
| 2392 | - // si pas DROP |
|
| 2393 | - if ($colonne_destination) { |
|
| 2394 | - $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2395 | - $fields_correspondances[$colonne_destination] = $c; |
|
| 2396 | - } |
|
| 2397 | - } else { |
|
| 2398 | - $fields[$c] = $d; |
|
| 2399 | - $fields_correspondances[$c] = $c; |
|
| 2400 | - } |
|
| 2401 | - } |
|
| 2402 | - // cas de ADD sqlite2 (ajout du champ en fin de table): |
|
| 2403 | - if (!$colonne_origine && $colonne_destination) { |
|
| 2404 | - $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2405 | - } |
|
| 2406 | - |
|
| 2407 | - // key... |
|
| 2408 | - $keys = []; |
|
| 2409 | - foreach ($def_origine['key'] as $c => $d) { |
|
| 2410 | - $c = str_replace($colonne_origine, $colonne_destination, $c); |
|
| 2411 | - $d = str_replace($colonne_origine, $colonne_destination, $d); |
|
| 2412 | - // seulement si on ne supprime pas la colonne ! |
|
| 2413 | - if ($d) { |
|
| 2414 | - $keys[$c] = $d; |
|
| 2415 | - } |
|
| 2416 | - } |
|
| 2417 | - |
|
| 2418 | - // autres keys, on merge |
|
| 2419 | - $keys = array_merge($keys, $opt['key']); |
|
| 2420 | - $queries = []; |
|
| 2421 | - |
|
| 2422 | - // copier dans destination (si differente de origine), sinon tmp |
|
| 2423 | - $table_copie = ($meme_table) ? $table_tmp : $table_destination; |
|
| 2424 | - $autoinc = (isset($keys['PRIMARY KEY']) |
|
| 2425 | - and $keys['PRIMARY KEY'] |
|
| 2426 | - and stripos($keys['PRIMARY KEY'], ',') === false |
|
| 2427 | - and stripos($fields[$keys['PRIMARY KEY']], 'default') === false); |
|
| 2428 | - |
|
| 2429 | - if ( |
|
| 2430 | - $q = _sqlite_requete_create( |
|
| 2431 | - $table_copie, |
|
| 2432 | - $fields, |
|
| 2433 | - $keys, |
|
| 2434 | - $autoinc, |
|
| 2435 | - $temporary = false, |
|
| 2436 | - $ifnotexists = true, |
|
| 2437 | - $serveur |
|
| 2438 | - ) |
|
| 2439 | - ) { |
|
| 2440 | - $queries[] = $q; |
|
| 2441 | - } |
|
| 2442 | - |
|
| 2443 | - |
|
| 2444 | - // 2) y copier les champs qui vont bien |
|
| 2445 | - $champs_dest = join(', ', array_keys($fields_correspondances)); |
|
| 2446 | - $champs_ori = join(', ', $fields_correspondances); |
|
| 2447 | - $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine"; |
|
| 2448 | - |
|
| 2449 | - // 3) supprimer la table d'origine |
|
| 2450 | - $queries[] = "DROP TABLE $table_origine"; |
|
| 2451 | - |
|
| 2452 | - // 4) renommer la table temporaire |
|
| 2453 | - // avec le nom de la table destination |
|
| 2454 | - // si necessaire |
|
| 2455 | - if ($meme_table) { |
|
| 2456 | - $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination"; |
|
| 2457 | - } |
|
| 2458 | - |
|
| 2459 | - // 5) remettre les index ! |
|
| 2460 | - foreach ($keys as $k => $v) { |
|
| 2461 | - if ($k == 'PRIMARY KEY') { |
|
| 2462 | - } else { |
|
| 2463 | - // enlever KEY |
|
| 2464 | - $k = substr($k, 4); |
|
| 2465 | - $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)"; |
|
| 2466 | - } |
|
| 2467 | - } |
|
| 2468 | - |
|
| 2469 | - |
|
| 2470 | - if (count($queries)) { |
|
| 2471 | - Sqlite::demarrer_transaction($serveur); |
|
| 2472 | - // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas |
|
| 2473 | - foreach ($queries as $q) { |
|
| 2474 | - if (!Sqlite::executer_requete($q, $serveur)) { |
|
| 2475 | - spip_log('SQLite : ALTER TABLE table :' |
|
| 2476 | - . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR); |
|
| 2477 | - Sqlite::annuler_transaction($serveur); |
|
| 2478 | - |
|
| 2479 | - return false; |
|
| 2480 | - } |
|
| 2481 | - } |
|
| 2482 | - Sqlite::finir_transaction($serveur); |
|
| 2483 | - } |
|
| 2484 | - |
|
| 2485 | - return true; |
|
| 2345 | + if (is_array($table)) { |
|
| 2346 | + $table_destination = reset($table); |
|
| 2347 | + $table_origine = key($table); |
|
| 2348 | + } else { |
|
| 2349 | + $table_origine = $table_destination = $table; |
|
| 2350 | + } |
|
| 2351 | + // ne prend actuellement qu'un changement |
|
| 2352 | + // mais pourra etre adapte pour changer plus qu'une colonne a la fois |
|
| 2353 | + if (is_array($colonne)) { |
|
| 2354 | + $colonne_destination = reset($colonne); |
|
| 2355 | + $colonne_origine = key($colonne); |
|
| 2356 | + } else { |
|
| 2357 | + $colonne_origine = $colonne_destination = $colonne; |
|
| 2358 | + } |
|
| 2359 | + if (!isset($opt['field'])) { |
|
| 2360 | + $opt['field'] = []; |
|
| 2361 | + } |
|
| 2362 | + if (!isset($opt['key'])) { |
|
| 2363 | + $opt['key'] = []; |
|
| 2364 | + } |
|
| 2365 | + |
|
| 2366 | + // si les noms de tables sont differents, pas besoin de table temporaire |
|
| 2367 | + // on prendra directement le nom de la future table |
|
| 2368 | + $meme_table = ($table_origine == $table_destination); |
|
| 2369 | + |
|
| 2370 | + $def_origine = sql_showtable($table_origine, false, $serveur); |
|
| 2371 | + if (!$def_origine or !isset($def_origine['field'])) { |
|
| 2372 | + spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR); |
|
| 2373 | + |
|
| 2374 | + return false; |
|
| 2375 | + } |
|
| 2376 | + |
|
| 2377 | + |
|
| 2378 | + $table_tmp = $table_origine . '_tmp'; |
|
| 2379 | + |
|
| 2380 | + // 1) creer une table temporaire avec les modifications |
|
| 2381 | + // - DROP : suppression de la colonne |
|
| 2382 | + // - CHANGE : modification de la colonne |
|
| 2383 | + // (foreach pour conserver l'ordre des champs) |
|
| 2384 | + |
|
| 2385 | + // field |
|
| 2386 | + $fields = []; |
|
| 2387 | + // pour le INSERT INTO plus loin |
|
| 2388 | + // stocker la correspondance nouvelles->anciennes colonnes |
|
| 2389 | + $fields_correspondances = []; |
|
| 2390 | + foreach ($def_origine['field'] as $c => $d) { |
|
| 2391 | + if ($colonne_origine && ($c == $colonne_origine)) { |
|
| 2392 | + // si pas DROP |
|
| 2393 | + if ($colonne_destination) { |
|
| 2394 | + $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2395 | + $fields_correspondances[$colonne_destination] = $c; |
|
| 2396 | + } |
|
| 2397 | + } else { |
|
| 2398 | + $fields[$c] = $d; |
|
| 2399 | + $fields_correspondances[$c] = $c; |
|
| 2400 | + } |
|
| 2401 | + } |
|
| 2402 | + // cas de ADD sqlite2 (ajout du champ en fin de table): |
|
| 2403 | + if (!$colonne_origine && $colonne_destination) { |
|
| 2404 | + $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2405 | + } |
|
| 2406 | + |
|
| 2407 | + // key... |
|
| 2408 | + $keys = []; |
|
| 2409 | + foreach ($def_origine['key'] as $c => $d) { |
|
| 2410 | + $c = str_replace($colonne_origine, $colonne_destination, $c); |
|
| 2411 | + $d = str_replace($colonne_origine, $colonne_destination, $d); |
|
| 2412 | + // seulement si on ne supprime pas la colonne ! |
|
| 2413 | + if ($d) { |
|
| 2414 | + $keys[$c] = $d; |
|
| 2415 | + } |
|
| 2416 | + } |
|
| 2417 | + |
|
| 2418 | + // autres keys, on merge |
|
| 2419 | + $keys = array_merge($keys, $opt['key']); |
|
| 2420 | + $queries = []; |
|
| 2421 | + |
|
| 2422 | + // copier dans destination (si differente de origine), sinon tmp |
|
| 2423 | + $table_copie = ($meme_table) ? $table_tmp : $table_destination; |
|
| 2424 | + $autoinc = (isset($keys['PRIMARY KEY']) |
|
| 2425 | + and $keys['PRIMARY KEY'] |
|
| 2426 | + and stripos($keys['PRIMARY KEY'], ',') === false |
|
| 2427 | + and stripos($fields[$keys['PRIMARY KEY']], 'default') === false); |
|
| 2428 | + |
|
| 2429 | + if ( |
|
| 2430 | + $q = _sqlite_requete_create( |
|
| 2431 | + $table_copie, |
|
| 2432 | + $fields, |
|
| 2433 | + $keys, |
|
| 2434 | + $autoinc, |
|
| 2435 | + $temporary = false, |
|
| 2436 | + $ifnotexists = true, |
|
| 2437 | + $serveur |
|
| 2438 | + ) |
|
| 2439 | + ) { |
|
| 2440 | + $queries[] = $q; |
|
| 2441 | + } |
|
| 2442 | + |
|
| 2443 | + |
|
| 2444 | + // 2) y copier les champs qui vont bien |
|
| 2445 | + $champs_dest = join(', ', array_keys($fields_correspondances)); |
|
| 2446 | + $champs_ori = join(', ', $fields_correspondances); |
|
| 2447 | + $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine"; |
|
| 2448 | + |
|
| 2449 | + // 3) supprimer la table d'origine |
|
| 2450 | + $queries[] = "DROP TABLE $table_origine"; |
|
| 2451 | + |
|
| 2452 | + // 4) renommer la table temporaire |
|
| 2453 | + // avec le nom de la table destination |
|
| 2454 | + // si necessaire |
|
| 2455 | + if ($meme_table) { |
|
| 2456 | + $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination"; |
|
| 2457 | + } |
|
| 2458 | + |
|
| 2459 | + // 5) remettre les index ! |
|
| 2460 | + foreach ($keys as $k => $v) { |
|
| 2461 | + if ($k == 'PRIMARY KEY') { |
|
| 2462 | + } else { |
|
| 2463 | + // enlever KEY |
|
| 2464 | + $k = substr($k, 4); |
|
| 2465 | + $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)"; |
|
| 2466 | + } |
|
| 2467 | + } |
|
| 2468 | + |
|
| 2469 | + |
|
| 2470 | + if (count($queries)) { |
|
| 2471 | + Sqlite::demarrer_transaction($serveur); |
|
| 2472 | + // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas |
|
| 2473 | + foreach ($queries as $q) { |
|
| 2474 | + if (!Sqlite::executer_requete($q, $serveur)) { |
|
| 2475 | + spip_log('SQLite : ALTER TABLE table :' |
|
| 2476 | + . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR); |
|
| 2477 | + Sqlite::annuler_transaction($serveur); |
|
| 2478 | + |
|
| 2479 | + return false; |
|
| 2480 | + } |
|
| 2481 | + } |
|
| 2482 | + Sqlite::finir_transaction($serveur); |
|
| 2483 | + } |
|
| 2484 | + |
|
| 2485 | + return true; |
|
| 2486 | 2486 | } |
| 2487 | 2487 | |
| 2488 | 2488 | |
@@ -2493,61 +2493,61 @@ discard block |
||
| 2493 | 2493 | */ |
| 2494 | 2494 | function _sqlite_ref_fonctions() |
| 2495 | 2495 | { |
| 2496 | - $fonctions = [ |
|
| 2497 | - 'alter' => 'spip_sqlite_alter', |
|
| 2498 | - 'count' => 'spip_sqlite_count', |
|
| 2499 | - 'countsel' => 'spip_sqlite_countsel', |
|
| 2500 | - 'create' => 'spip_sqlite_create', |
|
| 2501 | - 'create_base' => 'spip_sqlite_create_base', |
|
| 2502 | - 'create_view' => 'spip_sqlite_create_view', |
|
| 2503 | - 'date_proche' => 'spip_sqlite_date_proche', |
|
| 2504 | - 'delete' => 'spip_sqlite_delete', |
|
| 2505 | - 'drop_table' => 'spip_sqlite_drop_table', |
|
| 2506 | - 'drop_view' => 'spip_sqlite_drop_view', |
|
| 2507 | - 'errno' => 'spip_sqlite_errno', |
|
| 2508 | - 'error' => 'spip_sqlite_error', |
|
| 2509 | - 'explain' => 'spip_sqlite_explain', |
|
| 2510 | - 'fetch' => 'spip_sqlite_fetch', |
|
| 2511 | - 'seek' => 'spip_sqlite_seek', |
|
| 2512 | - 'free' => 'spip_sqlite_free', |
|
| 2513 | - 'hex' => 'spip_sqlite_hex', |
|
| 2514 | - 'in' => 'spip_sqlite_in', |
|
| 2515 | - 'insert' => 'spip_sqlite_insert', |
|
| 2516 | - 'insertq' => 'spip_sqlite_insertq', |
|
| 2517 | - 'insertq_multi' => 'spip_sqlite_insertq_multi', |
|
| 2518 | - 'listdbs' => 'spip_sqlite_listdbs', |
|
| 2519 | - 'multi' => 'spip_sqlite_multi', |
|
| 2520 | - 'optimize' => 'spip_sqlite_optimize', |
|
| 2521 | - 'query' => 'spip_sqlite_query', |
|
| 2522 | - 'quote' => 'spip_sqlite_quote', |
|
| 2523 | - 'repair' => 'spip_sqlite_repair', |
|
| 2524 | - 'replace' => 'spip_sqlite_replace', |
|
| 2525 | - 'replace_multi' => 'spip_sqlite_replace_multi', |
|
| 2526 | - 'select' => 'spip_sqlite_select', |
|
| 2527 | - 'selectdb' => 'spip_sqlite_selectdb', |
|
| 2528 | - 'set_charset' => 'spip_sqlite_set_charset', |
|
| 2529 | - 'get_charset' => 'spip_sqlite_get_charset', |
|
| 2530 | - 'showbase' => 'spip_sqlite_showbase', |
|
| 2531 | - 'showtable' => 'spip_sqlite_showtable', |
|
| 2532 | - 'table_exists' => 'spip_sqlite_table_exists', |
|
| 2533 | - 'update' => 'spip_sqlite_update', |
|
| 2534 | - 'updateq' => 'spip_sqlite_updateq', |
|
| 2535 | - 'preferer_transaction' => 'spip_sqlite_preferer_transaction', |
|
| 2536 | - 'demarrer_transaction' => 'spip_sqlite_demarrer_transaction', |
|
| 2537 | - 'terminer_transaction' => 'spip_sqlite_terminer_transaction', |
|
| 2538 | - ]; |
|
| 2539 | - |
|
| 2540 | - // association de chaque nom http d'un charset aux couples sqlite |
|
| 2541 | - // SQLite supporte utf-8 et utf-16 uniquement. |
|
| 2542 | - $charsets = [ |
|
| 2543 | - 'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'], |
|
| 2544 | - //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la |
|
| 2545 | - //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE') |
|
| 2546 | - ]; |
|
| 2547 | - |
|
| 2548 | - $fonctions['charsets'] = $charsets; |
|
| 2549 | - |
|
| 2550 | - return $fonctions; |
|
| 2496 | + $fonctions = [ |
|
| 2497 | + 'alter' => 'spip_sqlite_alter', |
|
| 2498 | + 'count' => 'spip_sqlite_count', |
|
| 2499 | + 'countsel' => 'spip_sqlite_countsel', |
|
| 2500 | + 'create' => 'spip_sqlite_create', |
|
| 2501 | + 'create_base' => 'spip_sqlite_create_base', |
|
| 2502 | + 'create_view' => 'spip_sqlite_create_view', |
|
| 2503 | + 'date_proche' => 'spip_sqlite_date_proche', |
|
| 2504 | + 'delete' => 'spip_sqlite_delete', |
|
| 2505 | + 'drop_table' => 'spip_sqlite_drop_table', |
|
| 2506 | + 'drop_view' => 'spip_sqlite_drop_view', |
|
| 2507 | + 'errno' => 'spip_sqlite_errno', |
|
| 2508 | + 'error' => 'spip_sqlite_error', |
|
| 2509 | + 'explain' => 'spip_sqlite_explain', |
|
| 2510 | + 'fetch' => 'spip_sqlite_fetch', |
|
| 2511 | + 'seek' => 'spip_sqlite_seek', |
|
| 2512 | + 'free' => 'spip_sqlite_free', |
|
| 2513 | + 'hex' => 'spip_sqlite_hex', |
|
| 2514 | + 'in' => 'spip_sqlite_in', |
|
| 2515 | + 'insert' => 'spip_sqlite_insert', |
|
| 2516 | + 'insertq' => 'spip_sqlite_insertq', |
|
| 2517 | + 'insertq_multi' => 'spip_sqlite_insertq_multi', |
|
| 2518 | + 'listdbs' => 'spip_sqlite_listdbs', |
|
| 2519 | + 'multi' => 'spip_sqlite_multi', |
|
| 2520 | + 'optimize' => 'spip_sqlite_optimize', |
|
| 2521 | + 'query' => 'spip_sqlite_query', |
|
| 2522 | + 'quote' => 'spip_sqlite_quote', |
|
| 2523 | + 'repair' => 'spip_sqlite_repair', |
|
| 2524 | + 'replace' => 'spip_sqlite_replace', |
|
| 2525 | + 'replace_multi' => 'spip_sqlite_replace_multi', |
|
| 2526 | + 'select' => 'spip_sqlite_select', |
|
| 2527 | + 'selectdb' => 'spip_sqlite_selectdb', |
|
| 2528 | + 'set_charset' => 'spip_sqlite_set_charset', |
|
| 2529 | + 'get_charset' => 'spip_sqlite_get_charset', |
|
| 2530 | + 'showbase' => 'spip_sqlite_showbase', |
|
| 2531 | + 'showtable' => 'spip_sqlite_showtable', |
|
| 2532 | + 'table_exists' => 'spip_sqlite_table_exists', |
|
| 2533 | + 'update' => 'spip_sqlite_update', |
|
| 2534 | + 'updateq' => 'spip_sqlite_updateq', |
|
| 2535 | + 'preferer_transaction' => 'spip_sqlite_preferer_transaction', |
|
| 2536 | + 'demarrer_transaction' => 'spip_sqlite_demarrer_transaction', |
|
| 2537 | + 'terminer_transaction' => 'spip_sqlite_terminer_transaction', |
|
| 2538 | + ]; |
|
| 2539 | + |
|
| 2540 | + // association de chaque nom http d'un charset aux couples sqlite |
|
| 2541 | + // SQLite supporte utf-8 et utf-16 uniquement. |
|
| 2542 | + $charsets = [ |
|
| 2543 | + 'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'], |
|
| 2544 | + //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la |
|
| 2545 | + //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE') |
|
| 2546 | + ]; |
|
| 2547 | + |
|
| 2548 | + $fonctions['charsets'] = $charsets; |
|
| 2549 | + |
|
| 2550 | + return $fonctions; |
|
| 2551 | 2551 | } |
| 2552 | 2552 | |
| 2553 | 2553 | |
@@ -2560,56 +2560,56 @@ discard block |
||
| 2560 | 2560 | */ |
| 2561 | 2561 | function _sqlite_remplacements_definitions_table($query, $autoinc = false) |
| 2562 | 2562 | { |
| 2563 | - // quelques remplacements |
|
| 2564 | - $num = '(\s*\([0-9]*\))?'; |
|
| 2565 | - $enum = '(\s*\([^\)]*\))?'; |
|
| 2566 | - |
|
| 2567 | - $remplace = [ |
|
| 2568 | - '/enum' . $enum . '/is' => 'VARCHAR(255)', |
|
| 2569 | - '/COLLATE \w+_bin/is' => 'COLLATE BINARY', |
|
| 2570 | - '/COLLATE \w+_ci/is' => 'COLLATE NOCASE', |
|
| 2571 | - '/auto_increment/is' => '', |
|
| 2572 | - '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374 |
|
| 2573 | - '/(timestamp .* )ON .*$/is' => '\\1', |
|
| 2574 | - '/character set \w+/is' => '', |
|
| 2575 | - '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED', |
|
| 2576 | - '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2577 | - '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2578 | - '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'", |
|
| 2579 | - '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'", |
|
| 2580 | - ]; |
|
| 2581 | - |
|
| 2582 | - // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY |
|
| 2583 | - $remplace_autocinc = [ |
|
| 2584 | - '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER' |
|
| 2585 | - ]; |
|
| 2586 | - // pour les int non autoincrement, il faut un DEFAULT |
|
| 2587 | - $remplace_nonautocinc = [ |
|
| 2588 | - '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0", |
|
| 2589 | - ]; |
|
| 2590 | - |
|
| 2591 | - if (is_string($query)) { |
|
| 2592 | - $query = preg_replace(array_keys($remplace), $remplace, $query); |
|
| 2593 | - if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) { |
|
| 2594 | - $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query); |
|
| 2595 | - } else { |
|
| 2596 | - $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query); |
|
| 2597 | - $query = _sqlite_collate_ci($query); |
|
| 2598 | - } |
|
| 2599 | - } elseif (is_array($query)) { |
|
| 2600 | - foreach ($query as $k => $q) { |
|
| 2601 | - $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q)); |
|
| 2602 | - $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]); |
|
| 2603 | - if ($ai) { |
|
| 2604 | - $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]); |
|
| 2605 | - } else { |
|
| 2606 | - $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]); |
|
| 2607 | - $query[$k] = _sqlite_collate_ci($query[$k]); |
|
| 2608 | - } |
|
| 2609 | - } |
|
| 2610 | - } |
|
| 2611 | - |
|
| 2612 | - return $query; |
|
| 2563 | + // quelques remplacements |
|
| 2564 | + $num = '(\s*\([0-9]*\))?'; |
|
| 2565 | + $enum = '(\s*\([^\)]*\))?'; |
|
| 2566 | + |
|
| 2567 | + $remplace = [ |
|
| 2568 | + '/enum' . $enum . '/is' => 'VARCHAR(255)', |
|
| 2569 | + '/COLLATE \w+_bin/is' => 'COLLATE BINARY', |
|
| 2570 | + '/COLLATE \w+_ci/is' => 'COLLATE NOCASE', |
|
| 2571 | + '/auto_increment/is' => '', |
|
| 2572 | + '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374 |
|
| 2573 | + '/(timestamp .* )ON .*$/is' => '\\1', |
|
| 2574 | + '/character set \w+/is' => '', |
|
| 2575 | + '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED', |
|
| 2576 | + '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2577 | + '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2578 | + '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'", |
|
| 2579 | + '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'", |
|
| 2580 | + ]; |
|
| 2581 | + |
|
| 2582 | + // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY |
|
| 2583 | + $remplace_autocinc = [ |
|
| 2584 | + '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER' |
|
| 2585 | + ]; |
|
| 2586 | + // pour les int non autoincrement, il faut un DEFAULT |
|
| 2587 | + $remplace_nonautocinc = [ |
|
| 2588 | + '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0", |
|
| 2589 | + ]; |
|
| 2590 | + |
|
| 2591 | + if (is_string($query)) { |
|
| 2592 | + $query = preg_replace(array_keys($remplace), $remplace, $query); |
|
| 2593 | + if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) { |
|
| 2594 | + $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query); |
|
| 2595 | + } else { |
|
| 2596 | + $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query); |
|
| 2597 | + $query = _sqlite_collate_ci($query); |
|
| 2598 | + } |
|
| 2599 | + } elseif (is_array($query)) { |
|
| 2600 | + foreach ($query as $k => $q) { |
|
| 2601 | + $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q)); |
|
| 2602 | + $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]); |
|
| 2603 | + if ($ai) { |
|
| 2604 | + $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]); |
|
| 2605 | + } else { |
|
| 2606 | + $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]); |
|
| 2607 | + $query[$k] = _sqlite_collate_ci($query[$k]); |
|
| 2608 | + } |
|
| 2609 | + } |
|
| 2610 | + } |
|
| 2611 | + |
|
| 2612 | + return $query; |
|
| 2613 | 2613 | } |
| 2614 | 2614 | |
| 2615 | 2615 | /** |
@@ -2621,17 +2621,17 @@ discard block |
||
| 2621 | 2621 | */ |
| 2622 | 2622 | function _sqlite_collate_ci($champ) |
| 2623 | 2623 | { |
| 2624 | - if (stripos($champ, 'COLLATE') !== false) { |
|
| 2625 | - return $champ; |
|
| 2626 | - } |
|
| 2627 | - if (stripos($champ, 'BINARY') !== false) { |
|
| 2628 | - return str_ireplace('BINARY', 'COLLATE BINARY', $champ); |
|
| 2629 | - } |
|
| 2630 | - if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) { |
|
| 2631 | - return $champ . ' COLLATE NOCASE'; |
|
| 2632 | - } |
|
| 2633 | - |
|
| 2634 | - return $champ; |
|
| 2624 | + if (stripos($champ, 'COLLATE') !== false) { |
|
| 2625 | + return $champ; |
|
| 2626 | + } |
|
| 2627 | + if (stripos($champ, 'BINARY') !== false) { |
|
| 2628 | + return str_ireplace('BINARY', 'COLLATE BINARY', $champ); |
|
| 2629 | + } |
|
| 2630 | + if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) { |
|
| 2631 | + return $champ . ' COLLATE NOCASE'; |
|
| 2632 | + } |
|
| 2633 | + |
|
| 2634 | + return $champ; |
|
| 2635 | 2635 | } |
| 2636 | 2636 | |
| 2637 | 2637 | |
@@ -2650,84 +2650,84 @@ discard block |
||
| 2650 | 2650 | * @return bool|string |
| 2651 | 2651 | */ |
| 2652 | 2652 | function _sqlite_requete_create( |
| 2653 | - $nom, |
|
| 2654 | - $champs, |
|
| 2655 | - $cles, |
|
| 2656 | - $autoinc = false, |
|
| 2657 | - $temporary = false, |
|
| 2658 | - $_ifnotexists = true, |
|
| 2659 | - $serveur = '', |
|
| 2660 | - $requeter = true |
|
| 2653 | + $nom, |
|
| 2654 | + $champs, |
|
| 2655 | + $cles, |
|
| 2656 | + $autoinc = false, |
|
| 2657 | + $temporary = false, |
|
| 2658 | + $_ifnotexists = true, |
|
| 2659 | + $serveur = '', |
|
| 2660 | + $requeter = true |
|
| 2661 | 2661 | ) { |
| 2662 | - $query = $keys = $s = $p = ''; |
|
| 2663 | - |
|
| 2664 | - // certains plugins declarent les tables (permet leur inclusion dans le dump) |
|
| 2665 | - // sans les renseigner (laisse le compilo recuperer la description) |
|
| 2666 | - if (!is_array($champs) || !is_array($cles)) { |
|
| 2667 | - return; |
|
| 2668 | - } |
|
| 2669 | - |
|
| 2670 | - // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE |
|
| 2671 | - // il faut passer par des create index |
|
| 2672 | - // Il gere par contre primary key ! |
|
| 2673 | - // Soit la PK est definie dans les cles, soit dans un champs |
|
| 2674 | - // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !) |
|
| 2675 | - $pk = 'PRIMARY KEY'; |
|
| 2676 | - // le champ de cle primaire |
|
| 2677 | - $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : ''; |
|
| 2678 | - |
|
| 2679 | - foreach ($champs as $k => $v) { |
|
| 2680 | - if (false !== stripos($v, $pk)) { |
|
| 2681 | - $champ_pk = $k; |
|
| 2682 | - // on n'en a plus besoin dans field, vu que defini dans key |
|
| 2683 | - $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]); |
|
| 2684 | - break; |
|
| 2685 | - } |
|
| 2686 | - } |
|
| 2687 | - |
|
| 2688 | - if ($champ_pk) { |
|
| 2689 | - $keys = "\n\t\t$pk ($champ_pk)"; |
|
| 2690 | - } |
|
| 2691 | - // Pas de DEFAULT 0 sur les cles primaires en auto-increment |
|
| 2692 | - if ( |
|
| 2693 | - isset($champs[$champ_pk]) |
|
| 2694 | - and stripos($champs[$champ_pk], 'default 0') !== false |
|
| 2695 | - ) { |
|
| 2696 | - $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk])); |
|
| 2697 | - } |
|
| 2698 | - |
|
| 2699 | - $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false); |
|
| 2700 | - foreach ($champs as $k => $v) { |
|
| 2701 | - $query .= "$s\n\t\t$k $v"; |
|
| 2702 | - $s = ','; |
|
| 2703 | - } |
|
| 2704 | - |
|
| 2705 | - $ifnotexists = ''; |
|
| 2706 | - if ($_ifnotexists) { |
|
| 2707 | - $version = spip_sqlite_fetch( |
|
| 2708 | - spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), |
|
| 2709 | - '', |
|
| 2710 | - $serveur |
|
| 2711 | - ); |
|
| 2712 | - if (!function_exists('spip_version_compare')) { |
|
| 2713 | - include_spip('plugins/installer'); |
|
| 2714 | - } |
|
| 2715 | - |
|
| 2716 | - if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 2717 | - $ifnotexists = ' IF NOT EXISTS'; |
|
| 2718 | - } else { |
|
| 2719 | - /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 2720 | - $a = spip_sqlite_showtable($nom, $serveur); |
|
| 2721 | - if (isset($a['key']['KEY ' . $nom])) { |
|
| 2722 | - return true; |
|
| 2723 | - } |
|
| 2724 | - } |
|
| 2725 | - } |
|
| 2726 | - |
|
| 2727 | - $temporary = $temporary ? ' TEMPORARY' : ''; |
|
| 2728 | - $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n"; |
|
| 2729 | - |
|
| 2730 | - return $q; |
|
| 2662 | + $query = $keys = $s = $p = ''; |
|
| 2663 | + |
|
| 2664 | + // certains plugins declarent les tables (permet leur inclusion dans le dump) |
|
| 2665 | + // sans les renseigner (laisse le compilo recuperer la description) |
|
| 2666 | + if (!is_array($champs) || !is_array($cles)) { |
|
| 2667 | + return; |
|
| 2668 | + } |
|
| 2669 | + |
|
| 2670 | + // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE |
|
| 2671 | + // il faut passer par des create index |
|
| 2672 | + // Il gere par contre primary key ! |
|
| 2673 | + // Soit la PK est definie dans les cles, soit dans un champs |
|
| 2674 | + // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !) |
|
| 2675 | + $pk = 'PRIMARY KEY'; |
|
| 2676 | + // le champ de cle primaire |
|
| 2677 | + $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : ''; |
|
| 2678 | + |
|
| 2679 | + foreach ($champs as $k => $v) { |
|
| 2680 | + if (false !== stripos($v, $pk)) { |
|
| 2681 | + $champ_pk = $k; |
|
| 2682 | + // on n'en a plus besoin dans field, vu que defini dans key |
|
| 2683 | + $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]); |
|
| 2684 | + break; |
|
| 2685 | + } |
|
| 2686 | + } |
|
| 2687 | + |
|
| 2688 | + if ($champ_pk) { |
|
| 2689 | + $keys = "\n\t\t$pk ($champ_pk)"; |
|
| 2690 | + } |
|
| 2691 | + // Pas de DEFAULT 0 sur les cles primaires en auto-increment |
|
| 2692 | + if ( |
|
| 2693 | + isset($champs[$champ_pk]) |
|
| 2694 | + and stripos($champs[$champ_pk], 'default 0') !== false |
|
| 2695 | + ) { |
|
| 2696 | + $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk])); |
|
| 2697 | + } |
|
| 2698 | + |
|
| 2699 | + $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false); |
|
| 2700 | + foreach ($champs as $k => $v) { |
|
| 2701 | + $query .= "$s\n\t\t$k $v"; |
|
| 2702 | + $s = ','; |
|
| 2703 | + } |
|
| 2704 | + |
|
| 2705 | + $ifnotexists = ''; |
|
| 2706 | + if ($_ifnotexists) { |
|
| 2707 | + $version = spip_sqlite_fetch( |
|
| 2708 | + spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), |
|
| 2709 | + '', |
|
| 2710 | + $serveur |
|
| 2711 | + ); |
|
| 2712 | + if (!function_exists('spip_version_compare')) { |
|
| 2713 | + include_spip('plugins/installer'); |
|
| 2714 | + } |
|
| 2715 | + |
|
| 2716 | + if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 2717 | + $ifnotexists = ' IF NOT EXISTS'; |
|
| 2718 | + } else { |
|
| 2719 | + /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 2720 | + $a = spip_sqlite_showtable($nom, $serveur); |
|
| 2721 | + if (isset($a['key']['KEY ' . $nom])) { |
|
| 2722 | + return true; |
|
| 2723 | + } |
|
| 2724 | + } |
|
| 2725 | + } |
|
| 2726 | + |
|
| 2727 | + $temporary = $temporary ? ' TEMPORARY' : ''; |
|
| 2728 | + $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n"; |
|
| 2729 | + |
|
| 2730 | + return $q; |
|
| 2731 | 2731 | } |
| 2732 | 2732 | |
| 2733 | 2733 | |
@@ -2747,40 +2747,40 @@ discard block |
||
| 2747 | 2747 | */ |
| 2748 | 2748 | function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') |
| 2749 | 2749 | { |
| 2750 | - static $tables = []; |
|
| 2751 | - |
|
| 2752 | - if (!isset($tables[$table])) { |
|
| 2753 | - if (!$desc) { |
|
| 2754 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 2755 | - $desc = $trouver_table($table, $serveur); |
|
| 2756 | - // si pas de description, on ne fait rien, ou on die() ? |
|
| 2757 | - if (!$desc) { |
|
| 2758 | - return $couples; |
|
| 2759 | - } |
|
| 2760 | - } |
|
| 2761 | - |
|
| 2762 | - // recherche des champs avec simplement 'TIMESTAMP' |
|
| 2763 | - // cependant, il faudra peut etre etendre |
|
| 2764 | - // avec la gestion de DEFAULT et ON UPDATE |
|
| 2765 | - // mais ceux-ci ne sont pas utilises dans le core |
|
| 2766 | - $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []]; |
|
| 2767 | - |
|
| 2768 | - $now = _sqlite_func_now(true); |
|
| 2769 | - foreach ($desc['field'] as $k => $v) { |
|
| 2770 | - if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) { |
|
| 2771 | - $tables[$table]['desc'][$k] = $v; |
|
| 2772 | - $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2773 | - } |
|
| 2774 | - } |
|
| 2775 | - } else { |
|
| 2776 | - $now = _sqlite_func_now(true); |
|
| 2777 | - foreach (array_keys($tables[$table]['desc']) as $k) { |
|
| 2778 | - $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2779 | - } |
|
| 2780 | - } |
|
| 2781 | - |
|
| 2782 | - // ajout des champs type 'timestamp' absents |
|
| 2783 | - return array_merge($tables[$table]['valeur'], $couples); |
|
| 2750 | + static $tables = []; |
|
| 2751 | + |
|
| 2752 | + if (!isset($tables[$table])) { |
|
| 2753 | + if (!$desc) { |
|
| 2754 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 2755 | + $desc = $trouver_table($table, $serveur); |
|
| 2756 | + // si pas de description, on ne fait rien, ou on die() ? |
|
| 2757 | + if (!$desc) { |
|
| 2758 | + return $couples; |
|
| 2759 | + } |
|
| 2760 | + } |
|
| 2761 | + |
|
| 2762 | + // recherche des champs avec simplement 'TIMESTAMP' |
|
| 2763 | + // cependant, il faudra peut etre etendre |
|
| 2764 | + // avec la gestion de DEFAULT et ON UPDATE |
|
| 2765 | + // mais ceux-ci ne sont pas utilises dans le core |
|
| 2766 | + $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []]; |
|
| 2767 | + |
|
| 2768 | + $now = _sqlite_func_now(true); |
|
| 2769 | + foreach ($desc['field'] as $k => $v) { |
|
| 2770 | + if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) { |
|
| 2771 | + $tables[$table]['desc'][$k] = $v; |
|
| 2772 | + $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2773 | + } |
|
| 2774 | + } |
|
| 2775 | + } else { |
|
| 2776 | + $now = _sqlite_func_now(true); |
|
| 2777 | + foreach (array_keys($tables[$table]['desc']) as $k) { |
|
| 2778 | + $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2779 | + } |
|
| 2780 | + } |
|
| 2781 | + |
|
| 2782 | + // ajout des champs type 'timestamp' absents |
|
| 2783 | + return array_merge($tables[$table]['valeur'], $couples); |
|
| 2784 | 2784 | } |
| 2785 | 2785 | |
| 2786 | 2786 | |
@@ -2792,5 +2792,5 @@ discard block |
||
| 2792 | 2792 | */ |
| 2793 | 2793 | function spip_versions_sqlite() |
| 2794 | 2794 | { |
| 2795 | - return _sqlite_charger_version(); |
|
| 2795 | + return _sqlite_charger_version(); |
|
| 2796 | 2796 | } |
@@ -66,27 +66,27 @@ discard block |
||
| 66 | 66 | // determiner le dossier de la base : $addr ou _DIR_DB |
| 67 | 67 | $f = _DIR_DB; |
| 68 | 68 | if ($addr and str_contains($addr, '/')) { |
| 69 | - $f = rtrim($addr, '/') . '/'; |
|
| 69 | + $f = rtrim($addr, '/').'/'; |
|
| 70 | 70 | } |
| 71 | 71 | |
| 72 | 72 | // un nom de base demande et impossible d'obtenir la base, on s'en va : |
| 73 | 73 | // il faut que la base existe ou que le repertoire parent soit writable |
| 74 | - if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) { |
|
| 75 | - spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS); |
|
| 74 | + if ($db and !is_file($f .= $db.'.sqlite') and !is_writable(dirname($f))) { |
|
| 75 | + spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.'._LOG_HS); |
|
| 76 | 76 | |
| 77 | 77 | return false; |
| 78 | 78 | } |
| 79 | 79 | |
| 80 | 80 | // charger les modules sqlite au besoin |
| 81 | 81 | if (!_sqlite_charger_version($sqlite_version)) { |
| 82 | - spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS); |
|
| 82 | + spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.'._LOG_HS); |
|
| 83 | 83 | |
| 84 | 84 | return false; |
| 85 | 85 | } |
| 86 | 86 | |
| 87 | 87 | // chargement des constantes |
| 88 | 88 | // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite |
| 89 | - $define = 'spip_sqlite' . $sqlite_version . '_constantes'; |
|
| 89 | + $define = 'spip_sqlite'.$sqlite_version.'_constantes'; |
|
| 90 | 90 | $define(); |
| 91 | 91 | |
| 92 | 92 | $ok = false; |
@@ -94,8 +94,8 @@ discard block |
||
| 94 | 94 | // si pas de db -> |
| 95 | 95 | // base temporaire tant qu'on ne connait pas son vrai nom |
| 96 | 96 | // pour tester la connexion |
| 97 | - $db = '_sqlite' . $sqlite_version . '_install'; |
|
| 98 | - $tmp = _DIR_DB . $db . '.sqlite'; |
|
| 97 | + $db = '_sqlite'.$sqlite_version.'_install'; |
|
| 98 | + $tmp = _DIR_DB.$db.'.sqlite'; |
|
| 99 | 99 | $ok = $link = new \PDO("sqlite:$tmp"); |
| 100 | 100 | } else { |
| 101 | 101 | // Ouvrir (eventuellement creer la base) |
@@ -104,7 +104,7 @@ discard block |
||
| 104 | 104 | |
| 105 | 105 | if (!$ok) { |
| 106 | 106 | $e = _sqlite_last_error_from_link($link); |
| 107 | - spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS); |
|
| 107 | + spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.'._LOG_HS); |
|
| 108 | 108 | |
| 109 | 109 | return false; |
| 110 | 110 | } |
@@ -192,7 +192,7 @@ discard block |
||
| 192 | 192 | $table = $regs[3]; |
| 193 | 193 | $suite = $regs[4]; |
| 194 | 194 | } else { |
| 195 | - spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR); |
|
| 195 | + spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.'._LOG_ERREUR); |
|
| 196 | 196 | |
| 197 | 197 | return false; |
| 198 | 198 | } |
@@ -209,7 +209,7 @@ discard block |
||
| 209 | 209 | $i = 0; |
| 210 | 210 | $ouverte = false; |
| 211 | 211 | while ($do = array_shift($todo)) { |
| 212 | - $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do; |
|
| 212 | + $todo2[$i] = isset($todo2[$i]) ? $todo2[$i].','.$do : $do; |
|
| 213 | 213 | $o = (str_contains($do, '(')); |
| 214 | 214 | $f = (str_contains($do, ')')); |
| 215 | 215 | if ($o and !$f) { |
@@ -235,7 +235,7 @@ discard block |
||
| 235 | 235 | ) { |
| 236 | 236 | spip_log( |
| 237 | 237 | "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)", |
| 238 | - 'sqlite.' . _LOG_ERREUR |
|
| 238 | + 'sqlite.'._LOG_ERREUR |
|
| 239 | 239 | ); |
| 240 | 240 | |
| 241 | 241 | return false; |
@@ -331,10 +331,10 @@ discard block |
||
| 331 | 331 | |
| 332 | 332 | // pas geres en sqlite2 |
| 333 | 333 | case 'RENAME': |
| 334 | - $do = 'RENAME TO' . substr($do, 6); |
|
| 334 | + $do = 'RENAME TO'.substr($do, 6); |
|
| 335 | 335 | case 'RENAME TO': |
| 336 | 336 | if (!Sqlite::executer_requete("$debut $do", $serveur)) { |
| 337 | - spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 337 | + spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR); |
|
| 338 | 338 | |
| 339 | 339 | return false; |
| 340 | 340 | } |
@@ -377,7 +377,7 @@ discard block |
||
| 377 | 377 | $colonnes = substr($colonne_origine, 1, -1); |
| 378 | 378 | if (str_contains(',', $colonnes)) { |
| 379 | 379 | spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes' |
| 380 | - . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR); |
|
| 380 | + . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.'._LOG_ERREUR); |
|
| 381 | 381 | break; |
| 382 | 382 | } else { |
| 383 | 383 | $nom_index = $colonnes; |
@@ -392,12 +392,12 @@ discard block |
||
| 392 | 392 | |
| 393 | 393 | // pas geres en sqlite2 |
| 394 | 394 | case 'ADD COLUMN': |
| 395 | - $do = 'ADD' . substr($do, 10); |
|
| 395 | + $do = 'ADD'.substr($do, 10); |
|
| 396 | 396 | case 'ADD': |
| 397 | 397 | default: |
| 398 | 398 | if (!preg_match(',primary\s+key,i', $do)) { |
| 399 | 399 | if (!Sqlite::executer_requete("$debut $do", $serveur)) { |
| 400 | - spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 400 | + spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR); |
|
| 401 | 401 | |
| 402 | 402 | return false; |
| 403 | 403 | } |
@@ -417,7 +417,7 @@ discard block |
||
| 417 | 417 | } |
| 418 | 418 | $opts['field'] = [$colonne_ajoutee => $def]; |
| 419 | 419 | if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) { |
| 420 | - spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 420 | + spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR); |
|
| 421 | 421 | |
| 422 | 422 | return false; |
| 423 | 423 | } |
@@ -425,10 +425,10 @@ discard block |
||
| 425 | 425 | break; |
| 426 | 426 | } |
| 427 | 427 | // tout est bon, ouf ! |
| 428 | - spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO); |
|
| 428 | + spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.'._LOG_INFO); |
|
| 429 | 429 | } |
| 430 | 430 | |
| 431 | - spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO); |
|
| 431 | + spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.'._LOG_INFO); |
|
| 432 | 432 | |
| 433 | 433 | return true; |
| 434 | 434 | } |
@@ -497,9 +497,9 @@ discard block |
||
| 497 | 497 | **/ |
| 498 | 498 | function spip_sqlite_create_base($nom, $serveur = '', $option = true) |
| 499 | 499 | { |
| 500 | - $f = $nom . '.sqlite'; |
|
| 500 | + $f = $nom.'.sqlite'; |
|
| 501 | 501 | if (strpos($nom, '/') === false) { |
| 502 | - $f = _DIR_DB . $f; |
|
| 502 | + $f = _DIR_DB.$f; |
|
| 503 | 503 | } |
| 504 | 504 | |
| 505 | 505 | $ok = new \PDO("sqlite:$f"); |
@@ -540,13 +540,13 @@ discard block |
||
| 540 | 540 | if (sql_showtable($nom, false, $serveur)) { |
| 541 | 541 | spip_log( |
| 542 | 542 | "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", |
| 543 | - 'sqlite.' . _LOG_ERREUR |
|
| 543 | + 'sqlite.'._LOG_ERREUR |
|
| 544 | 544 | ); |
| 545 | 545 | |
| 546 | 546 | return false; |
| 547 | 547 | } |
| 548 | 548 | |
| 549 | - $query = "CREATE VIEW $nom AS " . $query_select; |
|
| 549 | + $query = "CREATE VIEW $nom AS ".$query_select; |
|
| 550 | 550 | |
| 551 | 551 | return spip_sqlite_query($query, $serveur, $requeter); |
| 552 | 552 | } |
@@ -573,8 +573,8 @@ discard block |
||
| 573 | 573 | { |
| 574 | 574 | if (!($nom or $table or $champs)) { |
| 575 | 575 | spip_log( |
| 576 | - "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))', |
|
| 577 | - 'sqlite.' . _LOG_ERREUR |
|
| 576 | + "Champ manquant pour creer un index sqlite ($nom, $table, (".join(',', $champs).'))', |
|
| 577 | + 'sqlite.'._LOG_ERREUR |
|
| 578 | 578 | ); |
| 579 | 579 | |
| 580 | 580 | return false; |
@@ -582,7 +582,7 @@ discard block |
||
| 582 | 582 | |
| 583 | 583 | // SQLite ne differentie pas noms des index en fonction des tables |
| 584 | 584 | // il faut donc creer des noms uniques d'index pour une base sqlite |
| 585 | - $nom = $table . '_' . $nom; |
|
| 585 | + $nom = $table.'_'.$nom; |
|
| 586 | 586 | // enlever d'eventuelles parentheses deja presentes sur champs |
| 587 | 587 | if (!is_array($champs)) { |
| 588 | 588 | if ($champs[0] == '(') { |
@@ -604,12 +604,12 @@ discard block |
||
| 604 | 604 | } else { |
| 605 | 605 | /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
| 606 | 606 | $a = spip_sqlite_showtable($table, $serveur); |
| 607 | - if (isset($a['key']['KEY ' . $nom])) { |
|
| 607 | + if (isset($a['key']['KEY '.$nom])) { |
|
| 608 | 608 | return true; |
| 609 | 609 | } |
| 610 | 610 | } |
| 611 | 611 | |
| 612 | - $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')'; |
|
| 612 | + $query = 'CREATE '.($unique ? 'UNIQUE ' : '')."INDEX$ifnotexists $nom ON $table (".join(',', $champs).')'; |
|
| 613 | 613 | $res = spip_sqlite_query($query, $serveur, $requeter); |
| 614 | 614 | if (!$requeter) { |
| 615 | 615 | return $res; |
@@ -686,7 +686,7 @@ discard block |
||
| 686 | 686 | $serveur = '', |
| 687 | 687 | $requeter = true |
| 688 | 688 | ) { |
| 689 | - $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby))); |
|
| 689 | + $c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby))); |
|
| 690 | 690 | $r = spip_sqlite_select( |
| 691 | 691 | "COUNT($c)", |
| 692 | 692 | $from, |
@@ -799,14 +799,14 @@ discard block |
||
| 799 | 799 | function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) |
| 800 | 800 | { |
| 801 | 801 | if (!($nom or $table)) { |
| 802 | - spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR); |
|
| 802 | + spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.'._LOG_ERREUR); |
|
| 803 | 803 | |
| 804 | 804 | return false; |
| 805 | 805 | } |
| 806 | 806 | |
| 807 | 807 | // SQLite ne differentie pas noms des index en fonction des tables |
| 808 | 808 | // il faut donc creer des noms uniques d'index pour une base sqlite |
| 809 | - $index = $table . '_' . $nom; |
|
| 809 | + $index = $table.'_'.$nom; |
|
| 810 | 810 | $exist = ' IF EXISTS'; |
| 811 | 811 | |
| 812 | 812 | $query = "DROP INDEX$exist $index"; |
@@ -839,7 +839,7 @@ discard block |
||
| 839 | 839 | if ($s) { |
| 840 | 840 | $trace = debug_backtrace(); |
| 841 | 841 | if ($trace[0]['function'] != 'spip_sqlite_error') { |
| 842 | - spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR); |
|
| 842 | + spip_log("$s - $query - ".sql_error_backtrace(), 'sqlite.'._LOG_ERREUR); |
|
| 843 | 843 | } |
| 844 | 844 | } |
| 845 | 845 | |
@@ -888,14 +888,14 @@ discard block |
||
| 888 | 888 | $t = $link->errorInfo(); |
| 889 | 889 | $s = ltrim($t[0], '0'); // 00000 si pas d'erreur |
| 890 | 890 | if ($s) { |
| 891 | - $s .= ' / ' . $t[1]; |
|
| 891 | + $s .= ' / '.$t[1]; |
|
| 892 | 892 | } // ajoute l'erreur du moteur SQLite |
| 893 | 893 | } else { |
| 894 | 894 | $s = ': aucune ressource sqlite (link)'; |
| 895 | 895 | } |
| 896 | 896 | |
| 897 | 897 | if ($s) { |
| 898 | - spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR); |
|
| 898 | + spip_log("Erreur sqlite $s", 'sqlite.'._LOG_ERREUR); |
|
| 899 | 899 | } |
| 900 | 900 | |
| 901 | 901 | return $s ? $s : 0; |
@@ -920,7 +920,7 @@ discard block |
||
| 920 | 920 | } |
| 921 | 921 | |
| 922 | 922 | $query = Sqlite::traduire_requete($query, $serveur); |
| 923 | - $query = 'EXPLAIN ' . $query; |
|
| 923 | + $query = 'EXPLAIN '.$query; |
|
| 924 | 924 | if (!$requeter) { |
| 925 | 925 | return $query; |
| 926 | 926 | } |
@@ -1096,7 +1096,7 @@ discard block |
||
| 1096 | 1096 | function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) |
| 1097 | 1097 | { |
| 1098 | 1098 | |
| 1099 | - $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES'); |
|
| 1099 | + $query = "INSERT INTO $table ".($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES'); |
|
| 1100 | 1100 | if ($r = spip_sqlite_query($query, $serveur, $requeter)) { |
| 1101 | 1101 | if (!$requeter) { |
| 1102 | 1102 | return $r; |
@@ -1152,8 +1152,8 @@ discard block |
||
| 1152 | 1152 | |
| 1153 | 1153 | $cles = $valeurs = ''; |
| 1154 | 1154 | if (count($couples)) { |
| 1155 | - $cles = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1156 | - $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1155 | + $cles = '('.join(',', array_keys($couples)).')'; |
|
| 1156 | + $valeurs = '('.join(',', $couples).')'; |
|
| 1157 | 1157 | } |
| 1158 | 1158 | |
| 1159 | 1159 | return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter); |
@@ -1214,11 +1214,11 @@ discard block |
||
| 1214 | 1214 | |
| 1215 | 1215 | $champs = $valeurs = ''; |
| 1216 | 1216 | if (count($couples)) { |
| 1217 | - $champs = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1218 | - $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1219 | - $query = $query_start . "$champs VALUES $valeurs"; |
|
| 1217 | + $champs = '('.join(',', array_keys($couples)).')'; |
|
| 1218 | + $valeurs = '('.join(',', $couples).')'; |
|
| 1219 | + $query = $query_start."$champs VALUES $valeurs"; |
|
| 1220 | 1220 | } else { |
| 1221 | - $query = $query_start . 'DEFAULT VALUES'; |
|
| 1221 | + $query = $query_start.'DEFAULT VALUES'; |
|
| 1222 | 1222 | } |
| 1223 | 1223 | |
| 1224 | 1224 | if ($requeter) { |
@@ -1355,7 +1355,7 @@ discard block |
||
| 1355 | 1355 | */ |
| 1356 | 1356 | function spip_sqlite_multi($objet, $lang) |
| 1357 | 1357 | { |
| 1358 | - $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi"; |
|
| 1358 | + $r = 'EXTRAIRE_MULTI('.$objet.", '".$lang."') AS multi"; |
|
| 1359 | 1359 | |
| 1360 | 1360 | return $r; |
| 1361 | 1361 | } |
@@ -1429,7 +1429,7 @@ discard block |
||
| 1429 | 1429 | { |
| 1430 | 1430 | $op = (($interval <= 0) ? '>' : '<'); |
| 1431 | 1431 | |
| 1432 | - return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))"; |
|
| 1432 | + return "($champ $op datetime('".date('Y-m-d H:i:s')."', '$interval $unite'))"; |
|
| 1433 | 1433 | } |
| 1434 | 1434 | |
| 1435 | 1435 | |
@@ -1462,7 +1462,7 @@ discard block |
||
| 1462 | 1462 | and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
| 1463 | 1463 | ) { |
| 1464 | 1464 | spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur); |
| 1465 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1465 | + spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE); |
|
| 1466 | 1466 | } |
| 1467 | 1467 | if ( |
| 1468 | 1468 | preg_match(',^(INTEGER),i', $d) |
@@ -1472,7 +1472,7 @@ discard block |
||
| 1472 | 1472 | and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
| 1473 | 1473 | ) { |
| 1474 | 1474 | spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur); |
| 1475 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1475 | + spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE); |
|
| 1476 | 1476 | } |
| 1477 | 1477 | if ( |
| 1478 | 1478 | preg_match(',^(datetime),i', $d) |
@@ -1482,7 +1482,7 @@ discard block |
||
| 1482 | 1482 | and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
| 1483 | 1483 | ) { |
| 1484 | 1484 | spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur); |
| 1485 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1485 | + spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE); |
|
| 1486 | 1486 | } |
| 1487 | 1487 | } |
| 1488 | 1488 | |
@@ -1534,10 +1534,10 @@ discard block |
||
| 1534 | 1534 | // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
| 1535 | 1535 | $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
| 1536 | 1536 | |
| 1537 | - return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join( |
|
| 1537 | + return spip_sqlite_query("REPLACE INTO $table (".join(',', array_keys($couples)).') VALUES ('.join( |
|
| 1538 | 1538 | ',', |
| 1539 | 1539 | $couples |
| 1540 | - ) . ')', $serveur); |
|
| 1540 | + ).')', $serveur); |
|
| 1541 | 1541 | } |
| 1542 | 1542 | |
| 1543 | 1543 | |
@@ -1624,7 +1624,7 @@ discard block |
||
| 1624 | 1624 | . _sqlite_calculer_expression('WHERE', $where) |
| 1625 | 1625 | . _sqlite_calculer_expression('GROUP BY', $groupby, ',') |
| 1626 | 1626 | . _sqlite_calculer_expression('HAVING', $having) |
| 1627 | - . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '') |
|
| 1627 | + . ($orderby ? ("\nORDER BY "._sqlite_calculer_order($orderby)) : '') |
|
| 1628 | 1628 | . ($limit ? "\nLIMIT $limit" : ''); |
| 1629 | 1629 | |
| 1630 | 1630 | // dans un select, on doit renvoyer la requête en cas d'erreur |
@@ -1663,10 +1663,10 @@ discard block |
||
| 1663 | 1663 | // interdire la creation d'une nouvelle base, |
| 1664 | 1664 | // sauf si on est dans l'installation |
| 1665 | 1665 | if ( |
| 1666 | - !is_file($f = _DIR_DB . $db . '.sqlite') |
|
| 1666 | + !is_file($f = _DIR_DB.$db.'.sqlite') |
|
| 1667 | 1667 | && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL) |
| 1668 | 1668 | ) { |
| 1669 | - spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS); |
|
| 1669 | + spip_log("Il est interdit de creer la base $db", 'sqlite.'._LOG_HS); |
|
| 1670 | 1670 | |
| 1671 | 1671 | return false; |
| 1672 | 1672 | } |
@@ -1675,12 +1675,12 @@ discard block |
||
| 1675 | 1675 | // avec les identifiants connus |
| 1676 | 1676 | $index = $serveur ? $serveur : 0; |
| 1677 | 1677 | |
| 1678 | - if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) { |
|
| 1678 | + if ($link = spip_connect_db('', '', '', '', '@selectdb@'.$db, $serveur, '', '')) { |
|
| 1679 | 1679 | if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) { |
| 1680 | 1680 | return $db; |
| 1681 | 1681 | } |
| 1682 | 1682 | } else { |
| 1683 | - spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS); |
|
| 1683 | + spip_log("Impossible de selectionner la base $db", 'sqlite.'._LOG_HS); |
|
| 1684 | 1684 | } |
| 1685 | 1685 | |
| 1686 | 1686 | return false; |
@@ -1733,7 +1733,7 @@ discard block |
||
| 1733 | 1733 | $match = "^$match$"; |
| 1734 | 1734 | |
| 1735 | 1735 | return spip_sqlite_query( |
| 1736 | - "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match), |
|
| 1736 | + "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP "._q($match), |
|
| 1737 | 1737 | $serveur, |
| 1738 | 1738 | $requeter |
| 1739 | 1739 | ); |
@@ -1758,7 +1758,7 @@ discard block |
||
| 1758 | 1758 | $r = spip_sqlite_query( |
| 1759 | 1759 | 'SELECT name FROM sqlite_master WHERE' |
| 1760 | 1760 | . ' type=\'table\'' |
| 1761 | - . ' AND name=' . spip_sqlite_quote($table, 'string') |
|
| 1761 | + . ' AND name='.spip_sqlite_quote($table, 'string') |
|
| 1762 | 1762 | . ' AND name NOT LIKE \'sqlite_%\'', |
| 1763 | 1763 | $serveur, |
| 1764 | 1764 | $requeter |
@@ -1856,7 +1856,7 @@ discard block |
||
| 1856 | 1856 | // s'il y a une parenthèse fermante dans la clé |
| 1857 | 1857 | // ou dans la définition sans qu'il n'y ait une ouverture avant |
| 1858 | 1858 | if (str_contains($k, ')') or preg_match('/^[^\(]*\)/', $def)) { |
| 1859 | - $fields[$k_precedent] .= ',' . $k . ' ' . $def; |
|
| 1859 | + $fields[$k_precedent] .= ','.$k.' '.$def; |
|
| 1860 | 1860 | continue; |
| 1861 | 1861 | } |
| 1862 | 1862 | |
@@ -1891,13 +1891,13 @@ discard block |
||
| 1891 | 1891 | . 'ORDER BY substr(type,2,1), name'; |
| 1892 | 1892 | $a = spip_sqlite_query($query, $serveur, $requeter); |
| 1893 | 1893 | while ($r = spip_sqlite_fetch($a, null, $serveur)) { |
| 1894 | - $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index |
|
| 1894 | + $key = str_replace($nom_table.'_', '', $r['name']); // enlever le nom de la table ajoute a l'index |
|
| 1895 | 1895 | $keytype = 'KEY'; |
| 1896 | 1896 | if (strpos($r['sql'], 'UNIQUE INDEX') !== false) { |
| 1897 | 1897 | $keytype = 'UNIQUE KEY'; |
| 1898 | 1898 | } |
| 1899 | 1899 | $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']); |
| 1900 | - $keys[$keytype . ' ' . $key] = $colonnes; |
|
| 1900 | + $keys[$keytype.' '.$key] = $colonnes; |
|
| 1901 | 1901 | } |
| 1902 | 1902 | } |
| 1903 | 1903 | } // c'est une vue, on liste les champs disponibles simplement |
@@ -1945,7 +1945,7 @@ discard block |
||
| 1945 | 1945 | |
| 1946 | 1946 | $set = []; |
| 1947 | 1947 | foreach ($champs as $champ => $val) { |
| 1948 | - $set[] = $champ . "=$val"; |
|
| 1948 | + $set[] = $champ."=$val"; |
|
| 1949 | 1949 | } |
| 1950 | 1950 | if (!empty($set)) { |
| 1951 | 1951 | return spip_sqlite_query( |
@@ -2001,7 +2001,7 @@ discard block |
||
| 2001 | 2001 | |
| 2002 | 2002 | $set = []; |
| 2003 | 2003 | foreach ($champs as $champ => $val) { |
| 2004 | - $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : ''); |
|
| 2004 | + $set[$champ] = $champ.'='._sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : ''); |
|
| 2005 | 2005 | } |
| 2006 | 2006 | |
| 2007 | 2007 | // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
@@ -2009,7 +2009,7 @@ discard block |
||
| 2009 | 2009 | $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
| 2010 | 2010 | foreach ($maj as $champ => $val) { |
| 2011 | 2011 | if (!isset($set[$champ])) { |
| 2012 | - $set[$champ] = $champ . '=' . $val; |
|
| 2012 | + $set[$champ] = $champ.'='.$val; |
|
| 2013 | 2013 | } |
| 2014 | 2014 | } |
| 2015 | 2015 | |
@@ -2039,7 +2039,7 @@ discard block |
||
| 2039 | 2039 | function _sqlite_init() |
| 2040 | 2040 | { |
| 2041 | 2041 | if (!defined('_DIR_DB')) { |
| 2042 | - define('_DIR_DB', _DIR_ETC . 'bases/'); |
|
| 2042 | + define('_DIR_DB', _DIR_ETC.'bases/'); |
|
| 2043 | 2043 | } |
| 2044 | 2044 | if (!defined('_SQLITE_CHMOD')) { |
| 2045 | 2045 | define('_SQLITE_CHMOD', _SPIP_CHMOD); |
@@ -2151,9 +2151,9 @@ discard block |
||
| 2151 | 2151 | } |
| 2152 | 2152 | |
| 2153 | 2153 | // echapper les ' en '' |
| 2154 | - spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE); |
|
| 2154 | + spip_log('Pas de methode ->quote pour echapper', 'sqlite.'._LOG_INFO_IMPORTANTE); |
|
| 2155 | 2155 | |
| 2156 | - return ("'" . str_replace("'", "''", $v) . "'"); |
|
| 2156 | + return ("'".str_replace("'", "''", $v)."'"); |
|
| 2157 | 2157 | } |
| 2158 | 2158 | |
| 2159 | 2159 | |
@@ -2177,12 +2177,12 @@ discard block |
||
| 2177 | 2177 | $exp = "\n$expression "; |
| 2178 | 2178 | |
| 2179 | 2179 | if (!is_array($v)) { |
| 2180 | - return $exp . $v; |
|
| 2180 | + return $exp.$v; |
|
| 2181 | 2181 | } else { |
| 2182 | 2182 | if (strtoupper($join) === 'AND') { |
| 2183 | - return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v)); |
|
| 2183 | + return $exp.join("\n\t$join ", array_map('_sqlite_calculer_where', $v)); |
|
| 2184 | 2184 | } else { |
| 2185 | - return $exp . join($join, $v); |
|
| 2185 | + return $exp.join($join, $v); |
|
| 2186 | 2186 | } |
| 2187 | 2187 | } |
| 2188 | 2188 | } |
@@ -2218,17 +2218,17 @@ discard block |
||
| 2218 | 2218 | if (substr($k, -1) == '@') { |
| 2219 | 2219 | // c'est une jointure qui se refere au from precedent |
| 2220 | 2220 | // pas de virgule |
| 2221 | - $res .= ' ' . $v; |
|
| 2221 | + $res .= ' '.$v; |
|
| 2222 | 2222 | } else { |
| 2223 | 2223 | if (!is_numeric($k)) { |
| 2224 | 2224 | $p = strpos($v, ' '); |
| 2225 | 2225 | if ($p) { |
| 2226 | - $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p); |
|
| 2226 | + $v = substr($v, 0, $p)." AS '$k'".substr($v, $p); |
|
| 2227 | 2227 | } else { |
| 2228 | 2228 | $v .= " AS '$k'"; |
| 2229 | 2229 | } |
| 2230 | 2230 | } |
| 2231 | - $res .= ', ' . $v; |
|
| 2231 | + $res .= ', '.$v; |
|
| 2232 | 2232 | } |
| 2233 | 2233 | } |
| 2234 | 2234 | |
@@ -2369,13 +2369,13 @@ discard block |
||
| 2369 | 2369 | |
| 2370 | 2370 | $def_origine = sql_showtable($table_origine, false, $serveur); |
| 2371 | 2371 | if (!$def_origine or !isset($def_origine['field'])) { |
| 2372 | - spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR); |
|
| 2372 | + spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite'._LOG_ERREUR); |
|
| 2373 | 2373 | |
| 2374 | 2374 | return false; |
| 2375 | 2375 | } |
| 2376 | 2376 | |
| 2377 | 2377 | |
| 2378 | - $table_tmp = $table_origine . '_tmp'; |
|
| 2378 | + $table_tmp = $table_origine.'_tmp'; |
|
| 2379 | 2379 | |
| 2380 | 2380 | // 1) creer une table temporaire avec les modifications |
| 2381 | 2381 | // - DROP : suppression de la colonne |
@@ -2462,7 +2462,7 @@ discard block |
||
| 2462 | 2462 | } else { |
| 2463 | 2463 | // enlever KEY |
| 2464 | 2464 | $k = substr($k, 4); |
| 2465 | - $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)"; |
|
| 2465 | + $queries[] = "CREATE INDEX $table_destination"."_$k ON $table_destination ($v)"; |
|
| 2466 | 2466 | } |
| 2467 | 2467 | } |
| 2468 | 2468 | |
@@ -2473,7 +2473,7 @@ discard block |
||
| 2473 | 2473 | foreach ($queries as $q) { |
| 2474 | 2474 | if (!Sqlite::executer_requete($q, $serveur)) { |
| 2475 | 2475 | spip_log('SQLite : ALTER TABLE table :' |
| 2476 | - . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR); |
|
| 2476 | + . " Erreur a l'execution de la requete : $q", 'sqlite.'._LOG_ERREUR); |
|
| 2477 | 2477 | Sqlite::annuler_transaction($serveur); |
| 2478 | 2478 | |
| 2479 | 2479 | return false; |
@@ -2565,27 +2565,27 @@ discard block |
||
| 2565 | 2565 | $enum = '(\s*\([^\)]*\))?'; |
| 2566 | 2566 | |
| 2567 | 2567 | $remplace = [ |
| 2568 | - '/enum' . $enum . '/is' => 'VARCHAR(255)', |
|
| 2568 | + '/enum'.$enum.'/is' => 'VARCHAR(255)', |
|
| 2569 | 2569 | '/COLLATE \w+_bin/is' => 'COLLATE BINARY', |
| 2570 | 2570 | '/COLLATE \w+_ci/is' => 'COLLATE NOCASE', |
| 2571 | 2571 | '/auto_increment/is' => '', |
| 2572 | 2572 | '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374 |
| 2573 | 2573 | '/(timestamp .* )ON .*$/is' => '\\1', |
| 2574 | 2574 | '/character set \w+/is' => '', |
| 2575 | - '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED', |
|
| 2575 | + '/((big|small|medium|tiny)?int(eger)?)'.$num.'\s*unsigned/is' => '\\1 UNSIGNED', |
|
| 2576 | 2576 | '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
| 2577 | - '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2577 | + '/((char|varchar)'.$num.'\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2578 | 2578 | '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'", |
| 2579 | 2579 | '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'", |
| 2580 | 2580 | ]; |
| 2581 | 2581 | |
| 2582 | 2582 | // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY |
| 2583 | 2583 | $remplace_autocinc = [ |
| 2584 | - '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER' |
|
| 2584 | + '/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER' |
|
| 2585 | 2585 | ]; |
| 2586 | 2586 | // pour les int non autoincrement, il faut un DEFAULT |
| 2587 | 2587 | $remplace_nonautocinc = [ |
| 2588 | - '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0", |
|
| 2588 | + '/((big|small|medium|tiny)?int(eger)?'.$num.'\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0", |
|
| 2589 | 2589 | ]; |
| 2590 | 2590 | |
| 2591 | 2591 | if (is_string($query)) { |
@@ -2628,7 +2628,7 @@ discard block |
||
| 2628 | 2628 | return str_ireplace('BINARY', 'COLLATE BINARY', $champ); |
| 2629 | 2629 | } |
| 2630 | 2630 | if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) { |
| 2631 | - return $champ . ' COLLATE NOCASE'; |
|
| 2631 | + return $champ.' COLLATE NOCASE'; |
|
| 2632 | 2632 | } |
| 2633 | 2633 | |
| 2634 | 2634 | return $champ; |
@@ -2718,14 +2718,14 @@ discard block |
||
| 2718 | 2718 | } else { |
| 2719 | 2719 | /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
| 2720 | 2720 | $a = spip_sqlite_showtable($nom, $serveur); |
| 2721 | - if (isset($a['key']['KEY ' . $nom])) { |
|
| 2721 | + if (isset($a['key']['KEY '.$nom])) { |
|
| 2722 | 2722 | return true; |
| 2723 | 2723 | } |
| 2724 | 2724 | } |
| 2725 | 2725 | } |
| 2726 | 2726 | |
| 2727 | 2727 | $temporary = $temporary ? ' TEMPORARY' : ''; |
| 2728 | - $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n"; |
|
| 2728 | + $q = "CREATE$temporary TABLE$ifnotexists $nom ($query".($keys ? ",$keys" : '').")\n"; |
|
| 2729 | 2729 | |
| 2730 | 2730 | return $q; |
| 2731 | 2731 | } |
@@ -4,879 +4,879 @@ |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'activer_plugin' => 'Ativar o plugin', |
|
| 14 | - 'affichage' => 'Exibição', |
|
| 15 | - 'aide_non_disponible' => 'Esta parte da ajuda online ainda não está disponível neste idioma.', |
|
| 16 | - 'annuler_recherche' => 'Cancelar a busca', |
|
| 17 | - 'auteur' => 'Autor:', |
|
| 18 | - 'avis_acces_interdit' => 'Acesso negado.', |
|
| 19 | - 'avis_acces_interdit_prive' => 'Você não está autorizado a acessar a página <b>@exec@</b>.', |
|
| 20 | - 'avis_article_modifie' => 'Atenção, @nom_auteur_modif@ editou esta matéria há @date_diff@ minutos', |
|
| 21 | - 'avis_aucun_resultat' => 'Nenhum resultado.', |
|
| 22 | - 'avis_base_inaccessible' => 'Não foi possível conectar com a base de dados @base@.', |
|
| 23 | - 'avis_chemin_invalide_1' => 'O caminho que você escolheu', |
|
| 24 | - 'avis_chemin_invalide_2' => 'não parece válido. Por favor, volte à página anterior e verifique as informações fornecidas.', |
|
| 25 | - 'avis_connexion_echec_1' => 'A conexão com a base de dados falhou.', |
|
| 26 | - 'avis_connexion_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.', |
|
| 27 | - 'avis_connexion_echec_3' => '<b>N.B.</b> Em diversos servidores, você precisa <b>solicitar</b> a ativação do seu acesso à base de dados antes de poder utilizá-la. Se você não consegue se conectar, verifique se você efetuou esse pedido.', |
|
| 28 | - 'avis_connexion_erreur_creer_base' => 'Não foi possível criar a base de dados.', |
|
| 29 | - 'avis_connexion_erreur_fichier_cle_manquant_1' => 'A instalação deve ser realizada por um webmaster com um backup das chaves e sua senha.', |
|
| 30 | - 'avis_connexion_erreur_fichier_cle_manquant_2' => 'A instalação deve ser feita por um webmaster com um backup das chaves', |
|
| 31 | - 'avis_connexion_erreur_nom_base' => 'O nome da base só pode conter letras, números e traços', |
|
| 32 | - 'avis_connexion_ldap_echec_1' => 'A conexão ao servidor LDAP falhou.', |
|
| 33 | - 'avis_connexion_ldap_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.', |
|
| 34 | - 'avis_connexion_ldap_echec_3' => 'Opcionalmente, não use o suporte LDAP para importar os usuários.', |
|
| 35 | - 'avis_deplacement_rubrique' => 'Atenção! Esta seção contém @contient_breves@ nota@scb@: se você a transferir, por favor, marque este quadrado.', |
|
| 36 | - 'avis_erreur_connexion_mysql' => 'Erro de conexão SQL', |
|
| 37 | - 'avis_erreur_creation_compte' => 'Erro durante a inicialização da conta', |
|
| 38 | - 'avis_espace_interdit' => '<b>Área interdita</b> <div>O SPIP já está instalado.</div>', |
|
| 39 | - 'avis_lecture_noms_bases_1' => 'O programa de instalação não pôde ler os nomes das bases de dados instaladas.', |
|
| 40 | - 'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados esta disponível, ou a função que permite listar as bases foi desativada por razões de segurança (o que é o caso de diversos provedores de hospedagem).', |
|
| 41 | - 'avis_lecture_noms_bases_3' => 'No segundo caso, é provável que uma base de dados com o nome do seu login possa ser utilizada:', |
|
| 42 | - 'avis_non_acces_page' => 'Você não tem acesso a esta página.', |
|
| 43 | - 'avis_operation_echec' => 'A operação falhou.', |
|
| 44 | - 'avis_operation_impossible' => 'Operação impossível', |
|
| 45 | - 'avis_suppression_base' => 'ATENÇÃO, a supressão dos dados é irreversível', |
|
| 12 | + // A |
|
| 13 | + 'activer_plugin' => 'Ativar o plugin', |
|
| 14 | + 'affichage' => 'Exibição', |
|
| 15 | + 'aide_non_disponible' => 'Esta parte da ajuda online ainda não está disponível neste idioma.', |
|
| 16 | + 'annuler_recherche' => 'Cancelar a busca', |
|
| 17 | + 'auteur' => 'Autor:', |
|
| 18 | + 'avis_acces_interdit' => 'Acesso negado.', |
|
| 19 | + 'avis_acces_interdit_prive' => 'Você não está autorizado a acessar a página <b>@exec@</b>.', |
|
| 20 | + 'avis_article_modifie' => 'Atenção, @nom_auteur_modif@ editou esta matéria há @date_diff@ minutos', |
|
| 21 | + 'avis_aucun_resultat' => 'Nenhum resultado.', |
|
| 22 | + 'avis_base_inaccessible' => 'Não foi possível conectar com a base de dados @base@.', |
|
| 23 | + 'avis_chemin_invalide_1' => 'O caminho que você escolheu', |
|
| 24 | + 'avis_chemin_invalide_2' => 'não parece válido. Por favor, volte à página anterior e verifique as informações fornecidas.', |
|
| 25 | + 'avis_connexion_echec_1' => 'A conexão com a base de dados falhou.', |
|
| 26 | + 'avis_connexion_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.', |
|
| 27 | + 'avis_connexion_echec_3' => '<b>N.B.</b> Em diversos servidores, você precisa <b>solicitar</b> a ativação do seu acesso à base de dados antes de poder utilizá-la. Se você não consegue se conectar, verifique se você efetuou esse pedido.', |
|
| 28 | + 'avis_connexion_erreur_creer_base' => 'Não foi possível criar a base de dados.', |
|
| 29 | + 'avis_connexion_erreur_fichier_cle_manquant_1' => 'A instalação deve ser realizada por um webmaster com um backup das chaves e sua senha.', |
|
| 30 | + 'avis_connexion_erreur_fichier_cle_manquant_2' => 'A instalação deve ser feita por um webmaster com um backup das chaves', |
|
| 31 | + 'avis_connexion_erreur_nom_base' => 'O nome da base só pode conter letras, números e traços', |
|
| 32 | + 'avis_connexion_ldap_echec_1' => 'A conexão ao servidor LDAP falhou.', |
|
| 33 | + 'avis_connexion_ldap_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.', |
|
| 34 | + 'avis_connexion_ldap_echec_3' => 'Opcionalmente, não use o suporte LDAP para importar os usuários.', |
|
| 35 | + 'avis_deplacement_rubrique' => 'Atenção! Esta seção contém @contient_breves@ nota@scb@: se você a transferir, por favor, marque este quadrado.', |
|
| 36 | + 'avis_erreur_connexion_mysql' => 'Erro de conexão SQL', |
|
| 37 | + 'avis_erreur_creation_compte' => 'Erro durante a inicialização da conta', |
|
| 38 | + 'avis_espace_interdit' => '<b>Área interdita</b> <div>O SPIP já está instalado.</div>', |
|
| 39 | + 'avis_lecture_noms_bases_1' => 'O programa de instalação não pôde ler os nomes das bases de dados instaladas.', |
|
| 40 | + 'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados esta disponível, ou a função que permite listar as bases foi desativada por razões de segurança (o que é o caso de diversos provedores de hospedagem).', |
|
| 41 | + 'avis_lecture_noms_bases_3' => 'No segundo caso, é provável que uma base de dados com o nome do seu login possa ser utilizada:', |
|
| 42 | + 'avis_non_acces_page' => 'Você não tem acesso a esta página.', |
|
| 43 | + 'avis_operation_echec' => 'A operação falhou.', |
|
| 44 | + 'avis_operation_impossible' => 'Operação impossível', |
|
| 45 | + 'avis_suppression_base' => 'ATENÇÃO, a supressão dos dados é irreversível', |
|
| 46 | 46 | |
| 47 | - // B |
|
| 48 | - 'bouton_acces_ldap' => 'Incluir o acesso ao LDAP', |
|
| 49 | - 'bouton_ajouter' => 'Incluir', |
|
| 50 | - 'bouton_annuler' => 'Anular', |
|
| 51 | - 'bouton_cache_activer' => 'Reativar o cache', |
|
| 52 | - 'bouton_cache_desactiver' => 'Desativar temporariamente o cache', |
|
| 53 | - 'bouton_demande_publication' => 'Solicitar a publicação desta matéria', |
|
| 54 | - 'bouton_desactive_tout' => 'Desativar tudo', |
|
| 55 | - 'bouton_desinstaller' => 'Desinstalar', |
|
| 56 | - 'bouton_effacer_tout' => 'Apagar TUDO', |
|
| 57 | - 'bouton_envoyer_message' => 'Mensagem definitiva: enviar', |
|
| 58 | - 'bouton_fermer' => 'Fechar', |
|
| 59 | - 'bouton_mettre_a_jour_base' => 'Atualizar a base de dados', |
|
| 60 | - 'bouton_modifier' => 'Alterar', |
|
| 61 | - 'bouton_radio_afficher' => 'Exibir', |
|
| 62 | - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Exibir nas listas de redatores conectados', |
|
| 63 | - 'bouton_radio_envoi_annonces_adresse' => 'Enviar os avisos para o endereço:', |
|
| 64 | - 'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista de novidades', |
|
| 65 | - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não exibir na lista de redatores', |
|
| 66 | - 'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar os avisos editoriais', |
|
| 67 | - 'bouton_redirection' => 'REDIRECIONAMENTO', |
|
| 68 | - 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reiniciar aos valores padrão', |
|
| 69 | - 'bouton_relancer_inscription' => 'Reiniciar o registro', |
|
| 70 | - 'bouton_relancer_inscriptions' => 'Reiniciar os registros', |
|
| 71 | - 'bouton_relancer_installation' => 'Reiniciar a instalação', |
|
| 72 | - 'bouton_reset_password' => 'Criar uma nova senha e enviá-la por e-mail', |
|
| 73 | - 'bouton_suivant' => 'Avançar', |
|
| 74 | - 'bouton_tenter_recuperation' => 'Tentar uma reparação', |
|
| 75 | - 'bouton_test_proxy' => 'Testar o proxy', |
|
| 76 | - 'bouton_vider_cache' => 'Limpar o cache', |
|
| 47 | + // B |
|
| 48 | + 'bouton_acces_ldap' => 'Incluir o acesso ao LDAP', |
|
| 49 | + 'bouton_ajouter' => 'Incluir', |
|
| 50 | + 'bouton_annuler' => 'Anular', |
|
| 51 | + 'bouton_cache_activer' => 'Reativar o cache', |
|
| 52 | + 'bouton_cache_desactiver' => 'Desativar temporariamente o cache', |
|
| 53 | + 'bouton_demande_publication' => 'Solicitar a publicação desta matéria', |
|
| 54 | + 'bouton_desactive_tout' => 'Desativar tudo', |
|
| 55 | + 'bouton_desinstaller' => 'Desinstalar', |
|
| 56 | + 'bouton_effacer_tout' => 'Apagar TUDO', |
|
| 57 | + 'bouton_envoyer_message' => 'Mensagem definitiva: enviar', |
|
| 58 | + 'bouton_fermer' => 'Fechar', |
|
| 59 | + 'bouton_mettre_a_jour_base' => 'Atualizar a base de dados', |
|
| 60 | + 'bouton_modifier' => 'Alterar', |
|
| 61 | + 'bouton_radio_afficher' => 'Exibir', |
|
| 62 | + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Exibir nas listas de redatores conectados', |
|
| 63 | + 'bouton_radio_envoi_annonces_adresse' => 'Enviar os avisos para o endereço:', |
|
| 64 | + 'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista de novidades', |
|
| 65 | + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não exibir na lista de redatores', |
|
| 66 | + 'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar os avisos editoriais', |
|
| 67 | + 'bouton_redirection' => 'REDIRECIONAMENTO', |
|
| 68 | + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reiniciar aos valores padrão', |
|
| 69 | + 'bouton_relancer_inscription' => 'Reiniciar o registro', |
|
| 70 | + 'bouton_relancer_inscriptions' => 'Reiniciar os registros', |
|
| 71 | + 'bouton_relancer_installation' => 'Reiniciar a instalação', |
|
| 72 | + 'bouton_reset_password' => 'Criar uma nova senha e enviá-la por e-mail', |
|
| 73 | + 'bouton_suivant' => 'Avançar', |
|
| 74 | + 'bouton_tenter_recuperation' => 'Tentar uma reparação', |
|
| 75 | + 'bouton_test_proxy' => 'Testar o proxy', |
|
| 76 | + 'bouton_vider_cache' => 'Limpar o cache', |
|
| 77 | 77 | |
| 78 | - // C |
|
| 79 | - 'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.', |
|
| 80 | - 'calendrier_synchro' => 'Se você usa um programa de agenda compatível com <b>iCal</b>, você pode sincronizá-lo com as informações deste site.', |
|
| 81 | - 'config_activer_champs' => 'Ativar os campos a seguir', |
|
| 82 | - 'config_choix_base_sup' => 'indicar uma base neste servidor', |
|
| 83 | - 'config_erreur_base_sup' => 'O SPIP não tem acesso à lista de bases acessíveis', |
|
| 84 | - 'config_info_base_sup' => 'Se você tiver outras bases de dados para serem consultadas via SPIP, em seu servidor SQL ou em outro, o formulário abaixo permite configurá-las. Se você deixar determinados campos em branco, os dados de conexão da base principal serão utilizados.', |
|
| 85 | - 'config_info_base_sup_disponibles' => 'Bases suplementares já consultáveis:', |
|
| 86 | - 'config_info_enregistree' => 'A nova configuração foi gravada', |
|
| 87 | - 'config_info_logos' => 'Cada elemento do site pode ter um ícone, bem como um ícone de «mouseOver»', |
|
| 88 | - 'config_info_logos_utiliser' => 'Usar os ícones', |
|
| 89 | - 'config_info_logos_utiliser_non' => 'Não usar o ícones', |
|
| 90 | - 'config_info_logos_utiliser_survol' => 'Usar os ícones de mouseOver', |
|
| 91 | - 'config_info_logos_utiliser_survol_non' => 'Não usar os ícones de mouseOver', |
|
| 92 | - 'config_info_redirection' => 'Ao ativar esta opção, você poderá criar matérias virtuais, meras referências a matérias publicadas em outros sites ou fora do SPIP.', |
|
| 93 | - 'config_redirection' => 'Matérias virtuais', |
|
| 94 | - 'config_titre_base_sup' => 'Configuração de uma base suplementar', |
|
| 95 | - 'config_titre_base_sup_choix' => 'Escolha uma base suplementar', |
|
| 96 | - 'connexion_ldap' => 'Conexão:', |
|
| 97 | - 'creer_et_associer_un_auteur' => 'Criar e vincular um autor', |
|
| 78 | + // C |
|
| 79 | + 'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.', |
|
| 80 | + 'calendrier_synchro' => 'Se você usa um programa de agenda compatível com <b>iCal</b>, você pode sincronizá-lo com as informações deste site.', |
|
| 81 | + 'config_activer_champs' => 'Ativar os campos a seguir', |
|
| 82 | + 'config_choix_base_sup' => 'indicar uma base neste servidor', |
|
| 83 | + 'config_erreur_base_sup' => 'O SPIP não tem acesso à lista de bases acessíveis', |
|
| 84 | + 'config_info_base_sup' => 'Se você tiver outras bases de dados para serem consultadas via SPIP, em seu servidor SQL ou em outro, o formulário abaixo permite configurá-las. Se você deixar determinados campos em branco, os dados de conexão da base principal serão utilizados.', |
|
| 85 | + 'config_info_base_sup_disponibles' => 'Bases suplementares já consultáveis:', |
|
| 86 | + 'config_info_enregistree' => 'A nova configuração foi gravada', |
|
| 87 | + 'config_info_logos' => 'Cada elemento do site pode ter um ícone, bem como um ícone de «mouseOver»', |
|
| 88 | + 'config_info_logos_utiliser' => 'Usar os ícones', |
|
| 89 | + 'config_info_logos_utiliser_non' => 'Não usar o ícones', |
|
| 90 | + 'config_info_logos_utiliser_survol' => 'Usar os ícones de mouseOver', |
|
| 91 | + 'config_info_logos_utiliser_survol_non' => 'Não usar os ícones de mouseOver', |
|
| 92 | + 'config_info_redirection' => 'Ao ativar esta opção, você poderá criar matérias virtuais, meras referências a matérias publicadas em outros sites ou fora do SPIP.', |
|
| 93 | + 'config_redirection' => 'Matérias virtuais', |
|
| 94 | + 'config_titre_base_sup' => 'Configuração de uma base suplementar', |
|
| 95 | + 'config_titre_base_sup_choix' => 'Escolha uma base suplementar', |
|
| 96 | + 'connexion_ldap' => 'Conexão:', |
|
| 97 | + 'creer_et_associer_un_auteur' => 'Criar e vincular um autor', |
|
| 98 | 98 | |
| 99 | - // D |
|
| 100 | - 'date_mot_heures' => 'horas', |
|
| 99 | + // D |
|
| 100 | + 'date_mot_heures' => 'horas', |
|
| 101 | 101 | |
| 102 | - // E |
|
| 103 | - 'ecran_connexion_couleur_principale' => 'Cor principal', |
|
| 104 | - 'ecran_connexion_image_fond' => 'Imagem de fundo', |
|
| 105 | - 'ecran_connexion_image_fond_explication' => 'Usar uma imagem (formato JPEG, 1920x1080 pixels)', |
|
| 106 | - 'ecran_connexion_image_revenir_couleur_defaut' => 'Reverter para a cor padrão', |
|
| 107 | - 'ecran_connexion_titre' => 'Tela de conexão', |
|
| 108 | - 'ecran_securite' => ' + tela de segurança @version@', |
|
| 109 | - 'email' => 'e-mail', |
|
| 110 | - 'email_2' => 'e-mail:', |
|
| 111 | - 'en_savoir_plus' => 'Saiba mais', |
|
| 112 | - 'entree_adresse_annuaire' => 'Endereço do catálogo', |
|
| 113 | - 'entree_adresse_email' => 'Seu endereço de e-mail', |
|
| 114 | - 'entree_adresse_email_2' => 'Endereço de e-mail', |
|
| 115 | - 'entree_base_donnee_1' => 'Endereço da base de dados', |
|
| 116 | - 'entree_base_donnee_2' => '(Frequentemente este endereço corresponde ao do seu site, às vezes ele corresponde ao nome «localhost», algumas vezes ele pode ser deixado completamente em branco.)', |
|
| 117 | - 'entree_biographie' => 'Biografia curta em poucas palavras.', |
|
| 118 | - 'entree_chemin_acces' => '<b>Informe</b> o caminho de acesso:', |
|
| 119 | - 'entree_cle_pgp' => 'Sua chave PGP', |
|
| 120 | - 'entree_cle_pgp_2' => 'Chave PGP', |
|
| 121 | - 'entree_contenu_rubrique' => '(Conteúdo da seção em poucas palavras.)', |
|
| 122 | - 'entree_identifiants_connexion' => 'Seus dados de conexão...', |
|
| 123 | - 'entree_identifiants_connexion_2' => 'Dados de conexão', |
|
| 124 | - 'entree_informations_connexion_ldap' => 'Informe neste formulário os dados de conexão ao seu catálogo LDAP. |
|
| 102 | + // E |
|
| 103 | + 'ecran_connexion_couleur_principale' => 'Cor principal', |
|
| 104 | + 'ecran_connexion_image_fond' => 'Imagem de fundo', |
|
| 105 | + 'ecran_connexion_image_fond_explication' => 'Usar uma imagem (formato JPEG, 1920x1080 pixels)', |
|
| 106 | + 'ecran_connexion_image_revenir_couleur_defaut' => 'Reverter para a cor padrão', |
|
| 107 | + 'ecran_connexion_titre' => 'Tela de conexão', |
|
| 108 | + 'ecran_securite' => ' + tela de segurança @version@', |
|
| 109 | + 'email' => 'e-mail', |
|
| 110 | + 'email_2' => 'e-mail:', |
|
| 111 | + 'en_savoir_plus' => 'Saiba mais', |
|
| 112 | + 'entree_adresse_annuaire' => 'Endereço do catálogo', |
|
| 113 | + 'entree_adresse_email' => 'Seu endereço de e-mail', |
|
| 114 | + 'entree_adresse_email_2' => 'Endereço de e-mail', |
|
| 115 | + 'entree_base_donnee_1' => 'Endereço da base de dados', |
|
| 116 | + 'entree_base_donnee_2' => '(Frequentemente este endereço corresponde ao do seu site, às vezes ele corresponde ao nome «localhost», algumas vezes ele pode ser deixado completamente em branco.)', |
|
| 117 | + 'entree_biographie' => 'Biografia curta em poucas palavras.', |
|
| 118 | + 'entree_chemin_acces' => '<b>Informe</b> o caminho de acesso:', |
|
| 119 | + 'entree_cle_pgp' => 'Sua chave PGP', |
|
| 120 | + 'entree_cle_pgp_2' => 'Chave PGP', |
|
| 121 | + 'entree_contenu_rubrique' => '(Conteúdo da seção em poucas palavras.)', |
|
| 122 | + 'entree_identifiants_connexion' => 'Seus dados de conexão...', |
|
| 123 | + 'entree_identifiants_connexion_2' => 'Dados de conexão', |
|
| 124 | + 'entree_informations_connexion_ldap' => 'Informe neste formulário os dados de conexão ao seu catálogo LDAP. |
|
| 125 | 125 | Estas informações deverão ser fornecidas pelo administrador do sistema ou da rede.', |
| 126 | - 'entree_infos_perso' => 'Quem é você?', |
|
| 127 | - 'entree_infos_perso_2' => 'Quem é o autor?', |
|
| 128 | - 'entree_interieur_rubrique' => 'No interior da seção:', |
|
| 129 | - 'entree_liens_sites' => '<b>Link hipertexto</b> (referência, site a visitar...)', |
|
| 130 | - 'entree_login' => 'Seu login', |
|
| 131 | - 'entree_login_connexion_1' => 'O login de conexão', |
|
| 132 | - 'entree_login_connexion_2' => '(Frequentemente corresponde ao seu login para acesso por FTP; às vezes pode ser deixado em branco)', |
|
| 133 | - 'entree_mot_passe' => 'Sua senha', |
|
| 134 | - 'entree_mot_passe_1' => 'A senha de conexão', |
|
| 135 | - 'entree_mot_passe_2' => '(Frequentemente corresponde à sua senha para acesso por FTP; às vezes pode ser deixado em branco)', |
|
| 136 | - 'entree_nom_fichier' => 'Por favor, informe o nome do arquivo @texte_compresse@:', |
|
| 137 | - 'entree_nom_pseudo' => 'Seu nome ou apelido', |
|
| 138 | - 'entree_nom_pseudo_1' => '(Seu nome ou apelido)', |
|
| 139 | - 'entree_nom_pseudo_2' => 'Nome ou apelido', |
|
| 140 | - 'entree_nom_site' => 'O nome do seu site', |
|
| 141 | - 'entree_nom_site_2' => 'Nome do site do autor', |
|
| 142 | - 'entree_nouveau_passe' => 'Nova senha', |
|
| 143 | - 'entree_passe_ldap' => 'Senha', |
|
| 144 | - 'entree_port_annuaire' => 'O número da porta do catálogo', |
|
| 145 | - 'entree_signature' => 'Assinatura', |
|
| 146 | - 'entree_titre_obligatoire' => '<b>Título</b> [Obrigatório]<br />', |
|
| 147 | - 'entree_url' => 'O endereço (URL) do seu site', |
|
| 148 | - 'entree_url_2' => 'Endereço (URL) do site', |
|
| 149 | - 'erreur_connect_deja_existant' => 'Já existe um servidor com esse nome', |
|
| 150 | - 'erreur_contenu_suspect' => 'Texto escapado', |
|
| 151 | - 'erreur_email_deja_existant' => 'Esse endereço de email já está em uso.', |
|
| 152 | - 'erreur_nom_connect_incorrect' => 'Este nome de servidor não é autorizado', |
|
| 153 | - 'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ faltando no tag @balise@.', |
|
| 154 | - 'erreur_plugin_desinstalation_echouee' => 'A desinstalação do plugin falhou. No entanto, você pode desativá-lo.', |
|
| 155 | - 'erreur_plugin_fichier_absent' => 'Arquivo ausente', |
|
| 156 | - 'erreur_plugin_fichier_def_absent' => 'Arquivo de definição ausente', |
|
| 157 | - 'erreur_plugin_nom_fonction_interdit' => 'Nome de função não permitido', |
|
| 158 | - 'erreur_plugin_nom_manquant' => 'Nome do plugin ausente', |
|
| 159 | - 'erreur_plugin_prefix_manquant' => 'Área de nomeação do plugin não definida', |
|
| 160 | - 'erreur_plugin_tag_plugin_absent' => '<plugin> ausente no arquivo de definição', |
|
| 161 | - 'erreur_plugin_version_manquant' => 'Versão do plugin ausente', |
|
| 162 | - 'erreur_type_fichier' => 'Tipo de arquivo incorreto', |
|
| 126 | + 'entree_infos_perso' => 'Quem é você?', |
|
| 127 | + 'entree_infos_perso_2' => 'Quem é o autor?', |
|
| 128 | + 'entree_interieur_rubrique' => 'No interior da seção:', |
|
| 129 | + 'entree_liens_sites' => '<b>Link hipertexto</b> (referência, site a visitar...)', |
|
| 130 | + 'entree_login' => 'Seu login', |
|
| 131 | + 'entree_login_connexion_1' => 'O login de conexão', |
|
| 132 | + 'entree_login_connexion_2' => '(Frequentemente corresponde ao seu login para acesso por FTP; às vezes pode ser deixado em branco)', |
|
| 133 | + 'entree_mot_passe' => 'Sua senha', |
|
| 134 | + 'entree_mot_passe_1' => 'A senha de conexão', |
|
| 135 | + 'entree_mot_passe_2' => '(Frequentemente corresponde à sua senha para acesso por FTP; às vezes pode ser deixado em branco)', |
|
| 136 | + 'entree_nom_fichier' => 'Por favor, informe o nome do arquivo @texte_compresse@:', |
|
| 137 | + 'entree_nom_pseudo' => 'Seu nome ou apelido', |
|
| 138 | + 'entree_nom_pseudo_1' => '(Seu nome ou apelido)', |
|
| 139 | + 'entree_nom_pseudo_2' => 'Nome ou apelido', |
|
| 140 | + 'entree_nom_site' => 'O nome do seu site', |
|
| 141 | + 'entree_nom_site_2' => 'Nome do site do autor', |
|
| 142 | + 'entree_nouveau_passe' => 'Nova senha', |
|
| 143 | + 'entree_passe_ldap' => 'Senha', |
|
| 144 | + 'entree_port_annuaire' => 'O número da porta do catálogo', |
|
| 145 | + 'entree_signature' => 'Assinatura', |
|
| 146 | + 'entree_titre_obligatoire' => '<b>Título</b> [Obrigatório]<br />', |
|
| 147 | + 'entree_url' => 'O endereço (URL) do seu site', |
|
| 148 | + 'entree_url_2' => 'Endereço (URL) do site', |
|
| 149 | + 'erreur_connect_deja_existant' => 'Já existe um servidor com esse nome', |
|
| 150 | + 'erreur_contenu_suspect' => 'Texto escapado', |
|
| 151 | + 'erreur_email_deja_existant' => 'Esse endereço de email já está em uso.', |
|
| 152 | + 'erreur_nom_connect_incorrect' => 'Este nome de servidor não é autorizado', |
|
| 153 | + 'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ faltando no tag @balise@.', |
|
| 154 | + 'erreur_plugin_desinstalation_echouee' => 'A desinstalação do plugin falhou. No entanto, você pode desativá-lo.', |
|
| 155 | + 'erreur_plugin_fichier_absent' => 'Arquivo ausente', |
|
| 156 | + 'erreur_plugin_fichier_def_absent' => 'Arquivo de definição ausente', |
|
| 157 | + 'erreur_plugin_nom_fonction_interdit' => 'Nome de função não permitido', |
|
| 158 | + 'erreur_plugin_nom_manquant' => 'Nome do plugin ausente', |
|
| 159 | + 'erreur_plugin_prefix_manquant' => 'Área de nomeação do plugin não definida', |
|
| 160 | + 'erreur_plugin_tag_plugin_absent' => '<plugin> ausente no arquivo de definição', |
|
| 161 | + 'erreur_plugin_version_manquant' => 'Versão do plugin ausente', |
|
| 162 | + 'erreur_type_fichier' => 'Tipo de arquivo incorreto', |
|
| 163 | 163 | |
| 164 | - // H |
|
| 165 | - 'htaccess_a_simuler' => 'Aviso: a configuração do seu servidor HTTP não leva em conta os arquivos @htaccess@. Para poder garantir um bom nível de segurança, é preciso que você altere esta configuração, ou que as constantes @constantes@ (definíveis no arquivo mes_options.php) tenham como valor os diretórios abaixo de @document_root@.', |
|
| 166 | - 'htaccess_inoperant' => 'htaccess inoperante', |
|
| 164 | + // H |
|
| 165 | + 'htaccess_a_simuler' => 'Aviso: a configuração do seu servidor HTTP não leva em conta os arquivos @htaccess@. Para poder garantir um bom nível de segurança, é preciso que você altere esta configuração, ou que as constantes @constantes@ (definíveis no arquivo mes_options.php) tenham como valor os diretórios abaixo de @document_root@.', |
|
| 166 | + 'htaccess_inoperant' => 'htaccess inoperante', |
|
| 167 | 167 | |
| 168 | - // I |
|
| 169 | - 'ical_info1' => 'Esta página apresenta diversos métodos para se manter a par da atividade deste site.', |
|
| 170 | - 'ical_info2' => 'Para mais informações sobre todas estas técnicas, não deixe de consultar <a href="@spipnet@">a documentação do SPIP</a>.', |
|
| 171 | - 'ical_info_calendrier' => 'Dois calendários estão à sua disposição. O primeiro é um mapa do site anunciando todas as matérias publicadas. O segundo contém os avisos editoriais bem como suas últimas mensagens privadas: ele lhe é reservado graças a uma chave pessoal, que você pode alterar a qualquer momento ao renovar a sua senha.', |
|
| 172 | - 'ical_methode_http' => 'Transferência', |
|
| 173 | - 'ical_methode_webcal' => 'Sincronização (webcal://)', |
|
| 174 | - 'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, o informa sobre a atividade editorial privada deste site (tarefas e encontros pessoais, matérias e notas propostas...).', |
|
| 175 | - 'ical_texte_public' => 'Este calendário permite-lhe acompanhar a atividade pública deste site (matérias e notas publicadas).', |
|
| 176 | - 'ical_texte_rss' => 'Você pode sindicar as novidades deste site em qualquer leitor de arquivos em formato XML/RSS (Rich Site Summary). É também o formato que permite ao SPIP ler as novidades publicadas em outros sites que utilizem um formato de troca de informações compatível (sites sindicados).', |
|
| 177 | - 'ical_titre_js' => 'Javascript', |
|
| 178 | - 'ical_titre_mailing' => 'Mailing-list', |
|
| 179 | - 'ical_titre_rss' => 'Arquivos de sindicação', |
|
| 180 | - 'icone_accueil' => 'Página Inicial', |
|
| 181 | - 'icone_activer_cookie' => 'Ativar o coockie de correspondência', |
|
| 182 | - 'icone_activite' => 'Atividade', |
|
| 183 | - 'icone_admin_plugin' => 'Gerenciamento dos plugins', |
|
| 184 | - 'icone_administration' => 'Manutenção', |
|
| 185 | - 'icone_afficher_auteurs' => 'Exibir os autores', |
|
| 186 | - 'icone_afficher_visiteurs' => 'Exibir os visitantes', |
|
| 187 | - 'icone_arret_discussion' => 'Não participar mais desta discussão', |
|
| 188 | - 'icone_calendrier' => 'Calendário', |
|
| 189 | - 'icone_configuration' => 'Configuração', |
|
| 190 | - 'icone_creer_auteur' => 'Criar um novo autor e vinculá-lo a esta matéria', |
|
| 191 | - 'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a esta matéria', |
|
| 192 | - 'icone_creer_rubrique_2' => 'Criar uma nova seção', |
|
| 193 | - 'icone_developpement' => 'Desenvolvimento', |
|
| 194 | - 'icone_edition' => 'Edição', |
|
| 195 | - 'icone_ma_langue' => 'Meu idioma', |
|
| 196 | - 'icone_mes_infos' => 'Minhas informações', |
|
| 197 | - 'icone_mes_preferences' => 'Minhas preferências', |
|
| 198 | - 'icone_modifier_article' => 'Editar esta matéria', |
|
| 199 | - 'icone_modifier_rubrique' => 'Editar esta seção', |
|
| 200 | - 'icone_publication' => 'Publicação', |
|
| 201 | - 'icone_relancer_signataire' => 'Reconfirmar o assinante', |
|
| 202 | - 'icone_retour' => 'Voltar', |
|
| 203 | - 'icone_retour_article' => 'Voltar para a matéria', |
|
| 204 | - 'icone_squelette' => 'Templates', |
|
| 205 | - 'icone_suivi_publication' => 'Acompanhamento da publicação', |
|
| 206 | - 'icone_supprimer_cookie' => 'Excluir o cookie de correspondência', |
|
| 207 | - 'icone_supprimer_rubrique' => 'Excluir esta seção', |
|
| 208 | - 'icone_supprimer_signature' => 'Excluir esta assinatura', |
|
| 209 | - 'icone_valider_signature' => 'Validar esta assinatura', |
|
| 210 | - 'image_administrer_rubrique' => 'Você pode administrar esta seção', |
|
| 211 | - 'impossible_modifier_login_auteur' => 'Não foi possível alterar o login.', |
|
| 212 | - 'impossible_modifier_pass_auteur' => 'Não foi possível alterar a senha.', |
|
| 213 | - 'info_1_article' => '1 matéria', |
|
| 214 | - 'info_1_auteur' => '1 autor', |
|
| 215 | - 'info_1_message' => '1 mensagem', |
|
| 216 | - 'info_1_mot_cle' => '1 palavra-chave', |
|
| 217 | - 'info_1_rubrique' => '1 seção', |
|
| 218 | - 'info_1_visiteur' => '1 visitante', |
|
| 219 | - 'info_activer_cookie' => 'Você pode ativar um <b>cookie de correspondência</b>, que lhe permitirá passar facilmente do site público para o site privado.', |
|
| 220 | - 'info_activer_menu_developpement' => 'Exibir o menu Desenvolvimento', |
|
| 221 | - 'info_admin_etre_webmestre' => 'Me conceder direitos de webmaster', |
|
| 222 | - 'info_admin_je_suis_webmestre' => 'Eu sou <b>webmaster</b>', |
|
| 223 | - 'info_admin_statuer_webmestre' => 'Dar a este administrador os direitos de webmaster', |
|
| 224 | - 'info_admin_webmestre' => 'Este administrador é <b>webmaster</b>', |
|
| 225 | - 'info_administrateur' => 'Administrador', |
|
| 226 | - 'info_administrateur_1' => 'Administrador', |
|
| 227 | - 'info_administrateur_2' => 'do site (<i>use com cuidado</i>)', |
|
| 228 | - 'info_administrateur_site_01' => 'Se você é administrador do site, por favor,', |
|
| 229 | - 'info_administrateur_site_02' => 'clique neste link', |
|
| 230 | - 'info_administrateurs' => 'Administradores', |
|
| 231 | - 'info_administrer_rubrique' => 'Você pode administrar esta seção', |
|
| 232 | - 'info_adresse' => 'no endereço:', |
|
| 233 | - 'info_adresse_desinscription' => 'Endereço da desinscrição:', |
|
| 234 | - 'info_adresse_url' => 'Endereço (URL) do site público', |
|
| 235 | - 'info_afficher_par_nb' => 'Exibir por', |
|
| 236 | - 'info_aide_en_ligne' => 'Ajuda online SPIP', |
|
| 237 | - 'info_ajout_image' => 'Assim que você incluir imagens e documentos anexados a uma matéria, o SPIP pode criar para você, automaticamente, ícones (miniaturas) das imagens inseridas. Isto permite, por exemplo, criar automaticamente uma galeria ou um portfólio.', |
|
| 238 | - 'info_ajouter_rubrique' => 'Incluir outra seção para administrar:', |
|
| 239 | - 'info_annonce_nouveautes' => 'Aviso das novidades', |
|
| 240 | - 'info_article' => 'matéria', |
|
| 241 | - 'info_article_2' => 'matérias', |
|
| 242 | - 'info_article_a_paraitre' => 'As matérias pós-datadas para exibição', |
|
| 243 | - 'info_articles_02' => 'matérias', |
|
| 244 | - 'info_articles_2' => 'Matérias', |
|
| 245 | - 'info_articles_auteur' => 'As matérias deste autor', |
|
| 246 | - 'info_articles_miens' => 'Minhas matérias', |
|
| 247 | - 'info_articles_tous' => 'Todas as matérias', |
|
| 248 | - 'info_articles_trouves' => 'Matérias encontradas', |
|
| 249 | - 'info_attente_validation' => 'Suas matérias aguardando validação', |
|
| 250 | - 'info_aucun_article' => 'Nenhuma matéria', |
|
| 251 | - 'info_aucun_auteur' => 'Nenhum autor', |
|
| 252 | - 'info_aucun_message' => 'Nenhuma mensagem', |
|
| 253 | - 'info_aucun_rubrique' => 'Nenhuma seção', |
|
| 254 | - 'info_aujourdhui' => 'Hoje:', |
|
| 255 | - 'info_auteur_gere_rubriques' => 'Este autor gerencia as seções a seguir:', |
|
| 256 | - 'info_auteur_gere_toutes_rubriques' => 'Este autor gerencia <b>todas as seções</b>', |
|
| 257 | - 'info_auteur_gere_toutes_rubriques_2' => 'Eu gerencio <b>todas as seções</b>', |
|
| 258 | - 'info_auteurs' => 'Os autores', |
|
| 259 | - 'info_auteurs_par_tri' => 'Autores@partri@', |
|
| 260 | - 'info_auteurs_trouves' => 'Autores encontrados', |
|
| 261 | - 'info_authentification_externe' => 'Autenticação externa', |
|
| 262 | - 'info_avertissement' => 'Aviso', |
|
| 263 | - 'info_barre_outils' => 'com sua barra de ferramentas?', |
|
| 264 | - 'info_base_installee' => 'A estrutura da sua base de dados foi instalada.', |
|
| 265 | - 'info_bio' => 'Biografia', |
|
| 266 | - 'info_cache_desactive' => 'O cache está temporariamente desativado.', |
|
| 267 | - 'info_chapeau' => 'Introdução', |
|
| 268 | - 'info_chapeau_2' => 'Introdução:', |
|
| 269 | - 'info_chemin_acces_1' => 'Opções: <b>Caminho de acesso no diretório</b>', |
|
| 270 | - 'info_chemin_acces_2' => 'A partir daqui, você deverá configurar o caminho de acesso às informações do diretório. Esta informação é indispensávelpara ler os perfis dos usuários no diretório.', |
|
| 271 | - 'info_chemin_acces_annuaire' => 'Opções: <b>Caminho de acesso no diretório</b>', |
|
| 272 | - 'info_choix_base' => 'Terceiro passo:', |
|
| 273 | - 'info_classement_1' => '<sup><u>o</u></sup> em @liste@', |
|
| 274 | - 'info_classement_2' => '<sup><u>a</u></sup> em @liste@', |
|
| 275 | - 'info_code_acces' => 'Não se esqueça dos seus dados de conexão!', |
|
| 276 | - 'info_config_suivi' => 'Se este endereço corresponde a uma mailing-list, você pode informar abaixo o endereço onde os participantes do site podem se inscrever. Este endereço pode ser um URL (por exemplo a página de inscrição na lista pela Web), ou um endereço de e-mail dotado de um assunto específico (par exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 277 | - 'info_config_suivi_explication' => 'Voce pode assinar a mailing-list deste site. Você irá receber por e-mail, os avisos de matérias e notas propostos para publicação.', |
|
| 278 | - 'info_confirmer_passe' => 'Confirmar a nova senha:', |
|
| 279 | - 'info_conflit_edition_avis_non_sauvegarde' => 'Atenção os campos a seguir foram alterados por terceiros. As suas modificações nestes campos não foram, por isso, gravadas.', |
|
| 280 | - 'info_conflit_edition_differences' => 'Diferenças:', |
|
| 281 | - 'info_conflit_edition_version_enregistree' => 'A versão gravada:', |
|
| 282 | - 'info_conflit_edition_votre_version' => 'A sua versão:', |
|
| 283 | - 'info_connexion_base' => 'Teste de conexão com a base', |
|
| 284 | - 'info_connexion_base_donnee' => 'Conexão à sua base de dados', |
|
| 285 | - 'info_connexion_ldap_ok' => '<b>A conexão LDAP foi efetuada.</b><p>Você pode passar para o próximo passo.</p>', |
|
| 286 | - 'info_connexion_mysql' => 'Sua conexão SQL', |
|
| 287 | - 'info_connexion_ok' => 'A conexão foi obtida.', |
|
| 288 | - 'info_contact' => 'Contato', |
|
| 289 | - 'info_contenu_articles' => 'Conteúdo das matérias', |
|
| 290 | - 'info_contributions' => 'Contribuições', |
|
| 291 | - 'info_creation_paragraphe' => 'Para criar parágrafos, basta deixar linhas em branco.', |
|
| 292 | - 'info_creation_rubrique' => 'Antes de poder escrever matérias, você deve criar, pelo menos, uma seção.<br />', |
|
| 293 | - 'info_creation_tables' => 'Criação das tabelas da base', |
|
| 294 | - 'info_creer_base' => '<b>Criar</b> uma nova base de dados:', |
|
| 295 | - 'info_dans_rubrique' => 'Na seção:', |
|
| 296 | - 'info_date_publication_anterieure' => 'Data de redação anterior:', |
|
| 297 | - 'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SITE:', |
|
| 298 | - 'info_derniere_etape' => 'Terminou!', |
|
| 299 | - 'info_descriptif' => 'Descrição:', |
|
| 300 | - 'info_desinstaller_plugin' => 'exclui os dados e desativa o plugin', |
|
| 301 | - 'info_discussion_cours' => 'Discussões em andamento', |
|
| 302 | - 'info_ecrire_article' => 'Antes de poder escrever matérias, você precisa criar pelo menos uma seção.', |
|
| 303 | - 'info_email_envoi' => 'Endereço de e-mail de envio (opcional)', |
|
| 304 | - 'info_email_envoi_txt' => 'Informe aqui o endereço a ser utilizado para enviar os e-mails (por padrão, o endereço de destino será usado como endereço de envio):', |
|
| 305 | - 'info_email_webmestre' => 'Endereço de e-mail do webmaster', |
|
| 306 | - 'info_envoi_email_automatique' => 'Envio automático de e-mails', |
|
| 307 | - 'info_envoyer_maintenant' => 'Enviar agora', |
|
| 308 | - 'info_etape_suivante' => 'Avançar para a próxima etapa', |
|
| 309 | - 'info_etape_suivante_1' => 'Você pode passar para a próxima etapa.', |
|
| 310 | - 'info_etape_suivante_2' => 'Você pode passar para a próxima etapa.', |
|
| 311 | - 'info_exceptions_proxy' => 'Exceções para o proxy', |
|
| 312 | - 'info_exportation_base' => 'exportação da base para @archive@', |
|
| 313 | - 'info_facilite_suivi_activite' => 'Para facilitar o acompanhamento da atividade editorial do site, o SPIP pode avisar por e-mail, por exemplo para uma mailing-list de redatores, os avisos dos pedidos de publicação e das validações das matérias. Informe um ou mais endereços, separados por vírgula.', |
|
| 314 | - 'info_fichiers_authent' => 'Arquivos de autenticação «.htpasswd»', |
|
| 315 | - 'info_forums_abo_invites' => 'O seu site comporta fóruns por assinatura; os visitantes são convidados a se registrar no site público.', |
|
| 316 | - 'info_gauche_admin_tech' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p>Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>', |
|
| 317 | - 'info_gauche_admin_vider' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>', |
|
| 318 | - 'info_gauche_auteurs' => 'Aqui, você encontra todos os autores do site. |
|
| 168 | + // I |
|
| 169 | + 'ical_info1' => 'Esta página apresenta diversos métodos para se manter a par da atividade deste site.', |
|
| 170 | + 'ical_info2' => 'Para mais informações sobre todas estas técnicas, não deixe de consultar <a href="@spipnet@">a documentação do SPIP</a>.', |
|
| 171 | + 'ical_info_calendrier' => 'Dois calendários estão à sua disposição. O primeiro é um mapa do site anunciando todas as matérias publicadas. O segundo contém os avisos editoriais bem como suas últimas mensagens privadas: ele lhe é reservado graças a uma chave pessoal, que você pode alterar a qualquer momento ao renovar a sua senha.', |
|
| 172 | + 'ical_methode_http' => 'Transferência', |
|
| 173 | + 'ical_methode_webcal' => 'Sincronização (webcal://)', |
|
| 174 | + 'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, o informa sobre a atividade editorial privada deste site (tarefas e encontros pessoais, matérias e notas propostas...).', |
|
| 175 | + 'ical_texte_public' => 'Este calendário permite-lhe acompanhar a atividade pública deste site (matérias e notas publicadas).', |
|
| 176 | + 'ical_texte_rss' => 'Você pode sindicar as novidades deste site em qualquer leitor de arquivos em formato XML/RSS (Rich Site Summary). É também o formato que permite ao SPIP ler as novidades publicadas em outros sites que utilizem um formato de troca de informações compatível (sites sindicados).', |
|
| 177 | + 'ical_titre_js' => 'Javascript', |
|
| 178 | + 'ical_titre_mailing' => 'Mailing-list', |
|
| 179 | + 'ical_titre_rss' => 'Arquivos de sindicação', |
|
| 180 | + 'icone_accueil' => 'Página Inicial', |
|
| 181 | + 'icone_activer_cookie' => 'Ativar o coockie de correspondência', |
|
| 182 | + 'icone_activite' => 'Atividade', |
|
| 183 | + 'icone_admin_plugin' => 'Gerenciamento dos plugins', |
|
| 184 | + 'icone_administration' => 'Manutenção', |
|
| 185 | + 'icone_afficher_auteurs' => 'Exibir os autores', |
|
| 186 | + 'icone_afficher_visiteurs' => 'Exibir os visitantes', |
|
| 187 | + 'icone_arret_discussion' => 'Não participar mais desta discussão', |
|
| 188 | + 'icone_calendrier' => 'Calendário', |
|
| 189 | + 'icone_configuration' => 'Configuração', |
|
| 190 | + 'icone_creer_auteur' => 'Criar um novo autor e vinculá-lo a esta matéria', |
|
| 191 | + 'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a esta matéria', |
|
| 192 | + 'icone_creer_rubrique_2' => 'Criar uma nova seção', |
|
| 193 | + 'icone_developpement' => 'Desenvolvimento', |
|
| 194 | + 'icone_edition' => 'Edição', |
|
| 195 | + 'icone_ma_langue' => 'Meu idioma', |
|
| 196 | + 'icone_mes_infos' => 'Minhas informações', |
|
| 197 | + 'icone_mes_preferences' => 'Minhas preferências', |
|
| 198 | + 'icone_modifier_article' => 'Editar esta matéria', |
|
| 199 | + 'icone_modifier_rubrique' => 'Editar esta seção', |
|
| 200 | + 'icone_publication' => 'Publicação', |
|
| 201 | + 'icone_relancer_signataire' => 'Reconfirmar o assinante', |
|
| 202 | + 'icone_retour' => 'Voltar', |
|
| 203 | + 'icone_retour_article' => 'Voltar para a matéria', |
|
| 204 | + 'icone_squelette' => 'Templates', |
|
| 205 | + 'icone_suivi_publication' => 'Acompanhamento da publicação', |
|
| 206 | + 'icone_supprimer_cookie' => 'Excluir o cookie de correspondência', |
|
| 207 | + 'icone_supprimer_rubrique' => 'Excluir esta seção', |
|
| 208 | + 'icone_supprimer_signature' => 'Excluir esta assinatura', |
|
| 209 | + 'icone_valider_signature' => 'Validar esta assinatura', |
|
| 210 | + 'image_administrer_rubrique' => 'Você pode administrar esta seção', |
|
| 211 | + 'impossible_modifier_login_auteur' => 'Não foi possível alterar o login.', |
|
| 212 | + 'impossible_modifier_pass_auteur' => 'Não foi possível alterar a senha.', |
|
| 213 | + 'info_1_article' => '1 matéria', |
|
| 214 | + 'info_1_auteur' => '1 autor', |
|
| 215 | + 'info_1_message' => '1 mensagem', |
|
| 216 | + 'info_1_mot_cle' => '1 palavra-chave', |
|
| 217 | + 'info_1_rubrique' => '1 seção', |
|
| 218 | + 'info_1_visiteur' => '1 visitante', |
|
| 219 | + 'info_activer_cookie' => 'Você pode ativar um <b>cookie de correspondência</b>, que lhe permitirá passar facilmente do site público para o site privado.', |
|
| 220 | + 'info_activer_menu_developpement' => 'Exibir o menu Desenvolvimento', |
|
| 221 | + 'info_admin_etre_webmestre' => 'Me conceder direitos de webmaster', |
|
| 222 | + 'info_admin_je_suis_webmestre' => 'Eu sou <b>webmaster</b>', |
|
| 223 | + 'info_admin_statuer_webmestre' => 'Dar a este administrador os direitos de webmaster', |
|
| 224 | + 'info_admin_webmestre' => 'Este administrador é <b>webmaster</b>', |
|
| 225 | + 'info_administrateur' => 'Administrador', |
|
| 226 | + 'info_administrateur_1' => 'Administrador', |
|
| 227 | + 'info_administrateur_2' => 'do site (<i>use com cuidado</i>)', |
|
| 228 | + 'info_administrateur_site_01' => 'Se você é administrador do site, por favor,', |
|
| 229 | + 'info_administrateur_site_02' => 'clique neste link', |
|
| 230 | + 'info_administrateurs' => 'Administradores', |
|
| 231 | + 'info_administrer_rubrique' => 'Você pode administrar esta seção', |
|
| 232 | + 'info_adresse' => 'no endereço:', |
|
| 233 | + 'info_adresse_desinscription' => 'Endereço da desinscrição:', |
|
| 234 | + 'info_adresse_url' => 'Endereço (URL) do site público', |
|
| 235 | + 'info_afficher_par_nb' => 'Exibir por', |
|
| 236 | + 'info_aide_en_ligne' => 'Ajuda online SPIP', |
|
| 237 | + 'info_ajout_image' => 'Assim que você incluir imagens e documentos anexados a uma matéria, o SPIP pode criar para você, automaticamente, ícones (miniaturas) das imagens inseridas. Isto permite, por exemplo, criar automaticamente uma galeria ou um portfólio.', |
|
| 238 | + 'info_ajouter_rubrique' => 'Incluir outra seção para administrar:', |
|
| 239 | + 'info_annonce_nouveautes' => 'Aviso das novidades', |
|
| 240 | + 'info_article' => 'matéria', |
|
| 241 | + 'info_article_2' => 'matérias', |
|
| 242 | + 'info_article_a_paraitre' => 'As matérias pós-datadas para exibição', |
|
| 243 | + 'info_articles_02' => 'matérias', |
|
| 244 | + 'info_articles_2' => 'Matérias', |
|
| 245 | + 'info_articles_auteur' => 'As matérias deste autor', |
|
| 246 | + 'info_articles_miens' => 'Minhas matérias', |
|
| 247 | + 'info_articles_tous' => 'Todas as matérias', |
|
| 248 | + 'info_articles_trouves' => 'Matérias encontradas', |
|
| 249 | + 'info_attente_validation' => 'Suas matérias aguardando validação', |
|
| 250 | + 'info_aucun_article' => 'Nenhuma matéria', |
|
| 251 | + 'info_aucun_auteur' => 'Nenhum autor', |
|
| 252 | + 'info_aucun_message' => 'Nenhuma mensagem', |
|
| 253 | + 'info_aucun_rubrique' => 'Nenhuma seção', |
|
| 254 | + 'info_aujourdhui' => 'Hoje:', |
|
| 255 | + 'info_auteur_gere_rubriques' => 'Este autor gerencia as seções a seguir:', |
|
| 256 | + 'info_auteur_gere_toutes_rubriques' => 'Este autor gerencia <b>todas as seções</b>', |
|
| 257 | + 'info_auteur_gere_toutes_rubriques_2' => 'Eu gerencio <b>todas as seções</b>', |
|
| 258 | + 'info_auteurs' => 'Os autores', |
|
| 259 | + 'info_auteurs_par_tri' => 'Autores@partri@', |
|
| 260 | + 'info_auteurs_trouves' => 'Autores encontrados', |
|
| 261 | + 'info_authentification_externe' => 'Autenticação externa', |
|
| 262 | + 'info_avertissement' => 'Aviso', |
|
| 263 | + 'info_barre_outils' => 'com sua barra de ferramentas?', |
|
| 264 | + 'info_base_installee' => 'A estrutura da sua base de dados foi instalada.', |
|
| 265 | + 'info_bio' => 'Biografia', |
|
| 266 | + 'info_cache_desactive' => 'O cache está temporariamente desativado.', |
|
| 267 | + 'info_chapeau' => 'Introdução', |
|
| 268 | + 'info_chapeau_2' => 'Introdução:', |
|
| 269 | + 'info_chemin_acces_1' => 'Opções: <b>Caminho de acesso no diretório</b>', |
|
| 270 | + 'info_chemin_acces_2' => 'A partir daqui, você deverá configurar o caminho de acesso às informações do diretório. Esta informação é indispensávelpara ler os perfis dos usuários no diretório.', |
|
| 271 | + 'info_chemin_acces_annuaire' => 'Opções: <b>Caminho de acesso no diretório</b>', |
|
| 272 | + 'info_choix_base' => 'Terceiro passo:', |
|
| 273 | + 'info_classement_1' => '<sup><u>o</u></sup> em @liste@', |
|
| 274 | + 'info_classement_2' => '<sup><u>a</u></sup> em @liste@', |
|
| 275 | + 'info_code_acces' => 'Não se esqueça dos seus dados de conexão!', |
|
| 276 | + 'info_config_suivi' => 'Se este endereço corresponde a uma mailing-list, você pode informar abaixo o endereço onde os participantes do site podem se inscrever. Este endereço pode ser um URL (por exemplo a página de inscrição na lista pela Web), ou um endereço de e-mail dotado de um assunto específico (par exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 277 | + 'info_config_suivi_explication' => 'Voce pode assinar a mailing-list deste site. Você irá receber por e-mail, os avisos de matérias e notas propostos para publicação.', |
|
| 278 | + 'info_confirmer_passe' => 'Confirmar a nova senha:', |
|
| 279 | + 'info_conflit_edition_avis_non_sauvegarde' => 'Atenção os campos a seguir foram alterados por terceiros. As suas modificações nestes campos não foram, por isso, gravadas.', |
|
| 280 | + 'info_conflit_edition_differences' => 'Diferenças:', |
|
| 281 | + 'info_conflit_edition_version_enregistree' => 'A versão gravada:', |
|
| 282 | + 'info_conflit_edition_votre_version' => 'A sua versão:', |
|
| 283 | + 'info_connexion_base' => 'Teste de conexão com a base', |
|
| 284 | + 'info_connexion_base_donnee' => 'Conexão à sua base de dados', |
|
| 285 | + 'info_connexion_ldap_ok' => '<b>A conexão LDAP foi efetuada.</b><p>Você pode passar para o próximo passo.</p>', |
|
| 286 | + 'info_connexion_mysql' => 'Sua conexão SQL', |
|
| 287 | + 'info_connexion_ok' => 'A conexão foi obtida.', |
|
| 288 | + 'info_contact' => 'Contato', |
|
| 289 | + 'info_contenu_articles' => 'Conteúdo das matérias', |
|
| 290 | + 'info_contributions' => 'Contribuições', |
|
| 291 | + 'info_creation_paragraphe' => 'Para criar parágrafos, basta deixar linhas em branco.', |
|
| 292 | + 'info_creation_rubrique' => 'Antes de poder escrever matérias, você deve criar, pelo menos, uma seção.<br />', |
|
| 293 | + 'info_creation_tables' => 'Criação das tabelas da base', |
|
| 294 | + 'info_creer_base' => '<b>Criar</b> uma nova base de dados:', |
|
| 295 | + 'info_dans_rubrique' => 'Na seção:', |
|
| 296 | + 'info_date_publication_anterieure' => 'Data de redação anterior:', |
|
| 297 | + 'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SITE:', |
|
| 298 | + 'info_derniere_etape' => 'Terminou!', |
|
| 299 | + 'info_descriptif' => 'Descrição:', |
|
| 300 | + 'info_desinstaller_plugin' => 'exclui os dados e desativa o plugin', |
|
| 301 | + 'info_discussion_cours' => 'Discussões em andamento', |
|
| 302 | + 'info_ecrire_article' => 'Antes de poder escrever matérias, você precisa criar pelo menos uma seção.', |
|
| 303 | + 'info_email_envoi' => 'Endereço de e-mail de envio (opcional)', |
|
| 304 | + 'info_email_envoi_txt' => 'Informe aqui o endereço a ser utilizado para enviar os e-mails (por padrão, o endereço de destino será usado como endereço de envio):', |
|
| 305 | + 'info_email_webmestre' => 'Endereço de e-mail do webmaster', |
|
| 306 | + 'info_envoi_email_automatique' => 'Envio automático de e-mails', |
|
| 307 | + 'info_envoyer_maintenant' => 'Enviar agora', |
|
| 308 | + 'info_etape_suivante' => 'Avançar para a próxima etapa', |
|
| 309 | + 'info_etape_suivante_1' => 'Você pode passar para a próxima etapa.', |
|
| 310 | + 'info_etape_suivante_2' => 'Você pode passar para a próxima etapa.', |
|
| 311 | + 'info_exceptions_proxy' => 'Exceções para o proxy', |
|
| 312 | + 'info_exportation_base' => 'exportação da base para @archive@', |
|
| 313 | + 'info_facilite_suivi_activite' => 'Para facilitar o acompanhamento da atividade editorial do site, o SPIP pode avisar por e-mail, por exemplo para uma mailing-list de redatores, os avisos dos pedidos de publicação e das validações das matérias. Informe um ou mais endereços, separados por vírgula.', |
|
| 314 | + 'info_fichiers_authent' => 'Arquivos de autenticação «.htpasswd»', |
|
| 315 | + 'info_forums_abo_invites' => 'O seu site comporta fóruns por assinatura; os visitantes são convidados a se registrar no site público.', |
|
| 316 | + 'info_gauche_admin_tech' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p>Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>', |
|
| 317 | + 'info_gauche_admin_vider' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>', |
|
| 318 | + 'info_gauche_auteurs' => 'Aqui, você encontra todos os autores do site. |
|
| 319 | 319 | Os status dos autores é indicado pela côr dos ícones (administrador = verde; redator = amarelo).', |
| 320 | - 'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao site, são indicados por um ícone azul; |
|
| 320 | + 'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao site, são indicados por um ícone azul; |
|
| 321 | 321 | os autores excluídos por um ícone cinza.', |
| 322 | - 'info_gauche_messagerie' => 'O sistema interno de mensagens permite a troca de mensagens entre redatores, a criação de lembretes (para seu uso pessoal) ou exibir anúncios na página de entrada da área privada (se você for administrador).', |
|
| 323 | - 'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos <i>referers</i>, ou seja, dos sites que contêm links para o seu site, unicamente para ontem e hoje; esta lista é zerada a cada 24 horas.', |
|
| 324 | - 'info_gauche_visiteurs_enregistres' => 'Você encontrará aqui os visitantes registrados na área pública do site (fóruns por assinatura).', |
|
| 325 | - 'info_generation_miniatures_images' => 'Geração de miniaturas das imagens', |
|
| 326 | - 'info_gerer_trad_objets' => '@objets@ : gerenciar os links de tradução', |
|
| 327 | - 'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desativam o envio automático de e-mails a partir dos seus servidores. Neste caso, as funcionalidades a seguir não funcionarão.', |
|
| 328 | - 'info_hier' => 'ontem:', |
|
| 329 | - 'info_identification_publique' => 'Sua identificação pública...', |
|
| 330 | - 'info_image_process' => 'Por favor, selecione o melhor método de criação dos ícones, clicando na imagem correspondente.', |
|
| 331 | - 'info_image_process2' => 'Se nenhuma imagem está sendo exibida, o servidor que hospeda o seu site não foi configurado para utilizar essas ferramentas. Se você deseja usar essas funções, contate o responsável técnico e solicite as extensões «GD» ou «Imagick».', |
|
| 332 | - 'info_images_auto' => 'Imagens calculadas automaticamente', |
|
| 333 | - 'info_informations_personnelles' => 'Informações pessoais', |
|
| 334 | - 'info_inscription' => 'Inscrição online', |
|
| 335 | - 'info_inscription_automatique' => 'Inscrição automática de novos redatores', |
|
| 336 | - 'info_jeu_caractere' => 'Conjunto de caracteres do site', |
|
| 337 | - 'info_jours' => 'dias', |
|
| 338 | - 'info_laisser_champs_vides' => 'deixar estes campos vazios)', |
|
| 339 | - 'info_langues' => 'Idiomas do site', |
|
| 340 | - 'info_ldap_ok' => 'A autenticação LDAP está instalada.', |
|
| 341 | - 'info_lien_hypertexte' => 'Link hipertexto:', |
|
| 342 | - 'info_liste_nouveautes_envoyee' => 'A lista de novidades foi enviada', |
|
| 343 | - 'info_liste_redacteurs_connectes' => 'Lista de redatores conectados', |
|
| 344 | - 'info_login_existant' => 'Este login já está cadastrado.', |
|
| 345 | - 'info_login_trop_court' => 'Login muito curto.', |
|
| 346 | - 'info_login_trop_court_car_pluriel' => 'O login deve conter pelo menos @nb@ caracteres.', |
|
| 347 | - 'info_logos' => 'Os ícones', |
|
| 348 | - 'info_maximum' => 'máximo:', |
|
| 349 | - 'info_meme_rubrique' => 'Na mesma seção', |
|
| 350 | - 'info_message_en_redaction' => 'Suas mensagens em fase de redação', |
|
| 351 | - 'info_message_technique' => 'Mensagem técnica:', |
|
| 352 | - 'info_messagerie_interne' => 'Mensageria interna', |
|
| 353 | - 'info_mise_a_niveau_base' => 'atualização da sua base SQL', |
|
| 354 | - 'info_mise_a_niveau_base_2' => '{{Atenção!}} Você instalou uma versão de arquivos SPIP {anterior} à que estava instalada no site: a sua base de dados corre o risco de se corromper e o seu site não funcionar mais.<br />{{Reinstale os arquivos SPIP.}}', |
|
| 355 | - 'info_modification_enregistree' => 'Sua alteração foi gravada', |
|
| 356 | - 'info_modifier_auteur' => 'Editar o autor:', |
|
| 357 | - 'info_modifier_rubrique' => 'Editar a seção:', |
|
| 358 | - 'info_modifier_titre' => 'Editar: @titre@', |
|
| 359 | - 'info_mon_site_spip' => 'Meu site SPIP', |
|
| 360 | - 'info_moyenne' => 'média:', |
|
| 361 | - 'info_multi_cet_article' => 'Idioma desta matéria:', |
|
| 362 | - 'info_multi_langues_choisies' => 'Por favor, selecione a seguir os idiomas à disposição dos redatores do seu site. |
|
| 322 | + 'info_gauche_messagerie' => 'O sistema interno de mensagens permite a troca de mensagens entre redatores, a criação de lembretes (para seu uso pessoal) ou exibir anúncios na página de entrada da área privada (se você for administrador).', |
|
| 323 | + 'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos <i>referers</i>, ou seja, dos sites que contêm links para o seu site, unicamente para ontem e hoje; esta lista é zerada a cada 24 horas.', |
|
| 324 | + 'info_gauche_visiteurs_enregistres' => 'Você encontrará aqui os visitantes registrados na área pública do site (fóruns por assinatura).', |
|
| 325 | + 'info_generation_miniatures_images' => 'Geração de miniaturas das imagens', |
|
| 326 | + 'info_gerer_trad_objets' => '@objets@ : gerenciar os links de tradução', |
|
| 327 | + 'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desativam o envio automático de e-mails a partir dos seus servidores. Neste caso, as funcionalidades a seguir não funcionarão.', |
|
| 328 | + 'info_hier' => 'ontem:', |
|
| 329 | + 'info_identification_publique' => 'Sua identificação pública...', |
|
| 330 | + 'info_image_process' => 'Por favor, selecione o melhor método de criação dos ícones, clicando na imagem correspondente.', |
|
| 331 | + 'info_image_process2' => 'Se nenhuma imagem está sendo exibida, o servidor que hospeda o seu site não foi configurado para utilizar essas ferramentas. Se você deseja usar essas funções, contate o responsável técnico e solicite as extensões «GD» ou «Imagick».', |
|
| 332 | + 'info_images_auto' => 'Imagens calculadas automaticamente', |
|
| 333 | + 'info_informations_personnelles' => 'Informações pessoais', |
|
| 334 | + 'info_inscription' => 'Inscrição online', |
|
| 335 | + 'info_inscription_automatique' => 'Inscrição automática de novos redatores', |
|
| 336 | + 'info_jeu_caractere' => 'Conjunto de caracteres do site', |
|
| 337 | + 'info_jours' => 'dias', |
|
| 338 | + 'info_laisser_champs_vides' => 'deixar estes campos vazios)', |
|
| 339 | + 'info_langues' => 'Idiomas do site', |
|
| 340 | + 'info_ldap_ok' => 'A autenticação LDAP está instalada.', |
|
| 341 | + 'info_lien_hypertexte' => 'Link hipertexto:', |
|
| 342 | + 'info_liste_nouveautes_envoyee' => 'A lista de novidades foi enviada', |
|
| 343 | + 'info_liste_redacteurs_connectes' => 'Lista de redatores conectados', |
|
| 344 | + 'info_login_existant' => 'Este login já está cadastrado.', |
|
| 345 | + 'info_login_trop_court' => 'Login muito curto.', |
|
| 346 | + 'info_login_trop_court_car_pluriel' => 'O login deve conter pelo menos @nb@ caracteres.', |
|
| 347 | + 'info_logos' => 'Os ícones', |
|
| 348 | + 'info_maximum' => 'máximo:', |
|
| 349 | + 'info_meme_rubrique' => 'Na mesma seção', |
|
| 350 | + 'info_message_en_redaction' => 'Suas mensagens em fase de redação', |
|
| 351 | + 'info_message_technique' => 'Mensagem técnica:', |
|
| 352 | + 'info_messagerie_interne' => 'Mensageria interna', |
|
| 353 | + 'info_mise_a_niveau_base' => 'atualização da sua base SQL', |
|
| 354 | + 'info_mise_a_niveau_base_2' => '{{Atenção!}} Você instalou uma versão de arquivos SPIP {anterior} à que estava instalada no site: a sua base de dados corre o risco de se corromper e o seu site não funcionar mais.<br />{{Reinstale os arquivos SPIP.}}', |
|
| 355 | + 'info_modification_enregistree' => 'Sua alteração foi gravada', |
|
| 356 | + 'info_modifier_auteur' => 'Editar o autor:', |
|
| 357 | + 'info_modifier_rubrique' => 'Editar a seção:', |
|
| 358 | + 'info_modifier_titre' => 'Editar: @titre@', |
|
| 359 | + 'info_mon_site_spip' => 'Meu site SPIP', |
|
| 360 | + 'info_moyenne' => 'média:', |
|
| 361 | + 'info_multi_cet_article' => 'Idioma desta matéria:', |
|
| 362 | + 'info_multi_langues_choisies' => 'Por favor, selecione a seguir os idiomas à disposição dos redatores do seu site. |
|
| 363 | 363 | Os idiomas já utilizados no site (no topo da lista) não podem ser desativados.', |
| 364 | - 'info_multi_objets' => '@objets@ : ativar o menu de idioma', |
|
| 365 | - 'info_multi_secteurs' => '... apenas para as seções situadas na raiz?', |
|
| 366 | - 'info_nb_articles' => '@nb@ matérias', |
|
| 367 | - 'info_nb_auteurs' => '@nb@ autores', |
|
| 368 | - 'info_nb_messages' => '@nb@ mensagens', |
|
| 369 | - 'info_nb_mots_cles' => '@nb@ palavras-chave', |
|
| 370 | - 'info_nb_rubriques' => '@nb@ seções', |
|
| 371 | - 'info_nb_visiteurs' => '@nb@ visitantes', |
|
| 372 | - 'info_nom' => 'Nome', |
|
| 373 | - 'info_nom_destinataire' => 'Nome do destinatário', |
|
| 374 | - 'info_nom_pas_conforme' => 'tags HTML não são permitidas', |
|
| 375 | - 'info_nom_site' => 'Nome do seu site', |
|
| 376 | - 'info_nombre_articles' => '@nb_articles@ matérias,', |
|
| 377 | - 'info_nombre_rubriques' => '@nb_rubriques@ seções,', |
|
| 378 | - 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 379 | - 'info_non_deplacer' => 'Não mover...', |
|
| 380 | - 'info_non_envoi_annonce_dernieres_nouveautes' => 'O SPIP pode enviar regularmente o anúncio das últimas novidades do site (matérias e notas publicadas recentemente).', |
|
| 381 | - 'info_non_envoi_liste_nouveautes' => 'Não enviar a lista de novidades', |
|
| 382 | - 'info_non_modifiable' => 'não pode ser modificado', |
|
| 383 | - 'info_non_suppression_mot_cle' => 'Eu não quero excluir esta palavra-chave.', |
|
| 384 | - 'info_notes' => 'Observações', |
|
| 385 | - 'info_nouvel_article' => 'Nova matéria', |
|
| 386 | - 'info_nouvelle_traduction' => 'Nova tradução:', |
|
| 387 | - 'info_numero_article' => 'MATÉRIA NÚMERO:', |
|
| 388 | - 'info_obligatoire_02' => '(obrigatório)', |
|
| 389 | - 'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do site público', |
|
| 390 | - 'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição dos visitantes', |
|
| 391 | - 'info_options_avancees' => 'OPÇÕES AVANÇADAS', |
|
| 392 | - 'info_ou' => 'ou...', |
|
| 393 | - 'info_page_interdite' => 'Página não autorizada', |
|
| 394 | - 'info_par_nom' => 'por nome', |
|
| 395 | - 'info_par_nombre_article' => 'por número de matérias', |
|
| 396 | - 'info_par_statut' => 'por status', |
|
| 397 | - 'info_par_tri' => '’(por @tri@)’', |
|
| 398 | - 'info_passe_trop_court' => 'Senha muito curta.', |
|
| 399 | - 'info_passe_trop_court_car_pluriel' => 'A senha deve conter pelo menos @nb@ caracteres.', |
|
| 400 | - 'info_passes_identiques' => 'As duas senhas não são idênticas.', |
|
| 401 | - 'info_plus_cinq_car' => 'mais de 5 caracteres', |
|
| 402 | - 'info_plus_cinq_car_2' => '(Mais de 5 caracteres)', |
|
| 403 | - 'info_plus_trois_car' => '(Mais de 3 caracteres)', |
|
| 404 | - 'info_popularite' => 'popularidade: @popularite@; visitas: @visites@', |
|
| 405 | - 'info_post_scriptum' => 'Rodapé', |
|
| 406 | - 'info_post_scriptum_2' => 'Rodapé:', |
|
| 407 | - 'info_pour' => 'para', |
|
| 408 | - 'info_preview_texte' => 'É possível visualizar os diferentes elementos editoriais do site que tenham pelo menos o status de «proposto», bem como os elementos em fase de redação de que se é autor. Esta funcionalidade deve estar disponível para os administradores, para os redatores, ou para ninguém?', |
|
| 409 | - 'info_procedez_par_etape' => 'proceder passo-a-passo', |
|
| 410 | - 'info_procedure_maj_version' => 'o procedimento de atualização deve ser rodado para adaptar a base de dados à nova versão do SPIP.', |
|
| 411 | - 'info_proxy_ok' => 'Teste do proxy bem sucedido', |
|
| 412 | - 'info_ps' => 'P.S.', |
|
| 413 | - 'info_publier' => 'publicar', |
|
| 414 | - 'info_publies' => 'Suas matérias publicadas online', |
|
| 415 | - 'info_question_accepter_visiteurs' => 'Se os templates do seu site prevêem o cadastramento de visitantes sem acesso à área privada, por favor, ative a opção abaixo:', |
|
| 416 | - 'info_question_inscription_nouveaux_redacteurs' => 'Você quer aceitar inscrições de novos redatores a partir do site público? Se você aceitar, os visitantes poderão se cadastrar através de um formulário automatizado, tendo acesso à área privada para propôr as suas próprias matérias. <div class="notice">Durante a fase de inscrição, os usuários recebem um e-mail automático, fornecendo-lhes os seus códigos de acesso à área privada. Alguns serviços de hospedagem desativam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.</div>', |
|
| 417 | - 'info_qui_edite' => '@nom_auteur_modif@ trabalhou neste conteúdo há @date_diff@ minutos', |
|
| 418 | - 'info_racine_site' => 'Raiz do site', |
|
| 419 | - 'info_recharger_page' => 'Por favor, atualize esta página em alguns instantes.', |
|
| 420 | - 'info_recherche_auteur_zero' => 'Nenhum resultado para «@cherche_auteur@».', |
|
| 421 | - 'info_recommencer' => 'Por favor, recomece.', |
|
| 422 | - 'info_redacteur_1' => 'Redator', |
|
| 423 | - 'info_redacteur_2' => 'com acesso à área privada (<i>recomendado</i>)', |
|
| 424 | - 'info_redacteurs' => 'Redatores', |
|
| 425 | - 'info_redaction_en_cours' => 'EM FASE DE REDAÇÃO', |
|
| 426 | - 'info_redirection' => 'Redirecionamento', |
|
| 427 | - 'info_redirection_activee' => 'O redirecionamento foi ativado.', |
|
| 428 | - 'info_redirection_boucle' => 'Você tentou redirecionar a matéria para ela mesma.', |
|
| 429 | - 'info_redirection_desactivee' => 'O redirecionamento foi excluído.', |
|
| 430 | - 'info_refuses' => 'Suas matérias recusadas', |
|
| 431 | - 'info_reglage_ldap' => 'Opções: <b>Configuração da importação LDAP</b>', |
|
| 432 | - 'info_renvoi_article' => '<b>Redirecionamento.</b> Esta matéria redireciona para a página:', |
|
| 433 | - 'info_reserve_admin' => 'Apenas os administradores podem alterar este endereço.', |
|
| 434 | - 'info_restreindre_rubrique' => 'Restringir o gerenciamento à seção:', |
|
| 435 | - 'info_resultat_recherche' => 'Resultados da busca:', |
|
| 436 | - 'info_rubriques' => 'Seções', |
|
| 437 | - 'info_rubriques_02' => 'seções', |
|
| 438 | - 'info_rubriques_trouvees' => 'Seções encontradas', |
|
| 439 | - 'info_sans_titre' => 'Sem título', |
|
| 440 | - 'info_selection_chemin_acces' => '<b>Selecione</b> a seguir o caminho para acessar o diretório:', |
|
| 441 | - 'info_signatures' => 'assinaturas', |
|
| 442 | - 'info_site' => 'Site', |
|
| 443 | - 'info_site_2' => 'site:', |
|
| 444 | - 'info_site_min' => 'site', |
|
| 445 | - 'info_site_reference_2' => 'Site referenciado', |
|
| 446 | - 'info_site_web' => 'Website:', |
|
| 447 | - 'info_sites' => 'sites', |
|
| 448 | - 'info_sites_lies_mot' => 'Os sites referenciados vinculados a esta palavra-chave', |
|
| 449 | - 'info_sites_proxy' => 'Utilizar um proxy', |
|
| 450 | - 'info_sites_trouves' => 'Sites encontrados', |
|
| 451 | - 'info_sous_titre' => 'Subtítulo:', |
|
| 452 | - 'info_statut_administrateur' => 'Administrador', |
|
| 453 | - 'info_statut_auteur' => 'Status deste autor:', |
|
| 454 | - 'info_statut_auteur_2' => 'Eu sou', |
|
| 455 | - 'info_statut_auteur_a_confirmer' => 'Inscrição a confirmar', |
|
| 456 | - 'info_statut_auteur_autre' => 'Outro status:', |
|
| 457 | - 'info_statut_redacteur' => 'Redator', |
|
| 458 | - 'info_statut_utilisateurs_1' => 'Status padrão dos usuários importados', |
|
| 459 | - 'info_statut_utilisateurs_2' => 'Escolha o status atribuído às pessoas que constam do diretório LDAP, quando elas se conectarem pela primeira vêz. Você poderá, em seguida, alterar caso a caso este valor para cada autor.', |
|
| 460 | - 'info_suivi_activite' => 'Acompanhamento da atividade editorial', |
|
| 461 | - 'info_surtitre' => 'Sobretítulo:', |
|
| 462 | - 'info_syndication_integrale_1' => 'O seu site propõe arquivos de sindicação (ver «<a href="@url@">@titre@</a>»).', |
|
| 463 | - 'info_syndication_integrale_2' => 'Você deseja transmitir as matérias integralmente, ou difundir apenas um resumo de algumas centenas de caracteres?', |
|
| 464 | - 'info_table_prefix' => 'Você pode alterar o prefixo do nome das tabelas de dados (indispensável no caso de pretender instalar diversos sites na mesma base de dados). Este prefixo deve estar em minúsculas, não acentuadas, e sem espaços.', |
|
| 465 | - 'info_taille_maximale_images' => 'SPIP irá testar o tamanho máximo das imagens que o sistema pode tratar (em milhões de pixels).<br />As imagens muito grandes não serão reduzidas.', |
|
| 466 | - 'info_taille_maximale_vignette' => 'Tamanho máximo dos ícones gerados pelo sistema:', |
|
| 467 | - 'info_terminer_installation' => 'Você pode agora terminar o procedimento de instalação padrão.', |
|
| 468 | - 'info_texte' => 'Texto', |
|
| 469 | - 'info_texte_explicatif' => 'Texto explicativo', |
|
| 470 | - 'info_texte_long' => '(o texto é longo: ele aparecerá em diversas partes que serão recombinadas após validação.)', |
|
| 471 | - 'info_texte_message' => 'Texto da sua mensagem', |
|
| 472 | - 'info_texte_message_02' => 'Texto da mensagem', |
|
| 473 | - 'info_titre' => 'Título:', |
|
| 474 | - 'info_total' => 'total:', |
|
| 475 | - 'info_tous_articles_en_redaction' => 'Todas as matérias em fase de redação', |
|
| 476 | - 'info_tous_articles_presents' => 'Todas as matérias publicadas nesta seção', |
|
| 477 | - 'info_tous_articles_refuses' => 'Todas as matérias recusadas', |
|
| 478 | - 'info_tous_les' => 'todos os:', |
|
| 479 | - 'info_tout_site' => 'Todo o site', |
|
| 480 | - 'info_tout_site2' => 'A matéria não foi traduzida para este idioma.', |
|
| 481 | - 'info_tout_site3' => 'A matéria foi traduzida para este idioma, mas foram feitas alterações na matéria de referência. A tradução procisa ser atualizada.', |
|
| 482 | - 'info_tout_site4' => 'A matéria foi traduzida para este idioma e a tradução está em dia.', |
|
| 483 | - 'info_tout_site5' => 'Matéria original.', |
|
| 484 | - 'info_tout_site6' => '<b>Atenção:</b> apenas as matérias originais estão exibidas. |
|
| 364 | + 'info_multi_objets' => '@objets@ : ativar o menu de idioma', |
|
| 365 | + 'info_multi_secteurs' => '... apenas para as seções situadas na raiz?', |
|
| 366 | + 'info_nb_articles' => '@nb@ matérias', |
|
| 367 | + 'info_nb_auteurs' => '@nb@ autores', |
|
| 368 | + 'info_nb_messages' => '@nb@ mensagens', |
|
| 369 | + 'info_nb_mots_cles' => '@nb@ palavras-chave', |
|
| 370 | + 'info_nb_rubriques' => '@nb@ seções', |
|
| 371 | + 'info_nb_visiteurs' => '@nb@ visitantes', |
|
| 372 | + 'info_nom' => 'Nome', |
|
| 373 | + 'info_nom_destinataire' => 'Nome do destinatário', |
|
| 374 | + 'info_nom_pas_conforme' => 'tags HTML não são permitidas', |
|
| 375 | + 'info_nom_site' => 'Nome do seu site', |
|
| 376 | + 'info_nombre_articles' => '@nb_articles@ matérias,', |
|
| 377 | + 'info_nombre_rubriques' => '@nb_rubriques@ seções,', |
|
| 378 | + 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 379 | + 'info_non_deplacer' => 'Não mover...', |
|
| 380 | + 'info_non_envoi_annonce_dernieres_nouveautes' => 'O SPIP pode enviar regularmente o anúncio das últimas novidades do site (matérias e notas publicadas recentemente).', |
|
| 381 | + 'info_non_envoi_liste_nouveautes' => 'Não enviar a lista de novidades', |
|
| 382 | + 'info_non_modifiable' => 'não pode ser modificado', |
|
| 383 | + 'info_non_suppression_mot_cle' => 'Eu não quero excluir esta palavra-chave.', |
|
| 384 | + 'info_notes' => 'Observações', |
|
| 385 | + 'info_nouvel_article' => 'Nova matéria', |
|
| 386 | + 'info_nouvelle_traduction' => 'Nova tradução:', |
|
| 387 | + 'info_numero_article' => 'MATÉRIA NÚMERO:', |
|
| 388 | + 'info_obligatoire_02' => '(obrigatório)', |
|
| 389 | + 'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do site público', |
|
| 390 | + 'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição dos visitantes', |
|
| 391 | + 'info_options_avancees' => 'OPÇÕES AVANÇADAS', |
|
| 392 | + 'info_ou' => 'ou...', |
|
| 393 | + 'info_page_interdite' => 'Página não autorizada', |
|
| 394 | + 'info_par_nom' => 'por nome', |
|
| 395 | + 'info_par_nombre_article' => 'por número de matérias', |
|
| 396 | + 'info_par_statut' => 'por status', |
|
| 397 | + 'info_par_tri' => '’(por @tri@)’', |
|
| 398 | + 'info_passe_trop_court' => 'Senha muito curta.', |
|
| 399 | + 'info_passe_trop_court_car_pluriel' => 'A senha deve conter pelo menos @nb@ caracteres.', |
|
| 400 | + 'info_passes_identiques' => 'As duas senhas não são idênticas.', |
|
| 401 | + 'info_plus_cinq_car' => 'mais de 5 caracteres', |
|
| 402 | + 'info_plus_cinq_car_2' => '(Mais de 5 caracteres)', |
|
| 403 | + 'info_plus_trois_car' => '(Mais de 3 caracteres)', |
|
| 404 | + 'info_popularite' => 'popularidade: @popularite@; visitas: @visites@', |
|
| 405 | + 'info_post_scriptum' => 'Rodapé', |
|
| 406 | + 'info_post_scriptum_2' => 'Rodapé:', |
|
| 407 | + 'info_pour' => 'para', |
|
| 408 | + 'info_preview_texte' => 'É possível visualizar os diferentes elementos editoriais do site que tenham pelo menos o status de «proposto», bem como os elementos em fase de redação de que se é autor. Esta funcionalidade deve estar disponível para os administradores, para os redatores, ou para ninguém?', |
|
| 409 | + 'info_procedez_par_etape' => 'proceder passo-a-passo', |
|
| 410 | + 'info_procedure_maj_version' => 'o procedimento de atualização deve ser rodado para adaptar a base de dados à nova versão do SPIP.', |
|
| 411 | + 'info_proxy_ok' => 'Teste do proxy bem sucedido', |
|
| 412 | + 'info_ps' => 'P.S.', |
|
| 413 | + 'info_publier' => 'publicar', |
|
| 414 | + 'info_publies' => 'Suas matérias publicadas online', |
|
| 415 | + 'info_question_accepter_visiteurs' => 'Se os templates do seu site prevêem o cadastramento de visitantes sem acesso à área privada, por favor, ative a opção abaixo:', |
|
| 416 | + 'info_question_inscription_nouveaux_redacteurs' => 'Você quer aceitar inscrições de novos redatores a partir do site público? Se você aceitar, os visitantes poderão se cadastrar através de um formulário automatizado, tendo acesso à área privada para propôr as suas próprias matérias. <div class="notice">Durante a fase de inscrição, os usuários recebem um e-mail automático, fornecendo-lhes os seus códigos de acesso à área privada. Alguns serviços de hospedagem desativam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.</div>', |
|
| 417 | + 'info_qui_edite' => '@nom_auteur_modif@ trabalhou neste conteúdo há @date_diff@ minutos', |
|
| 418 | + 'info_racine_site' => 'Raiz do site', |
|
| 419 | + 'info_recharger_page' => 'Por favor, atualize esta página em alguns instantes.', |
|
| 420 | + 'info_recherche_auteur_zero' => 'Nenhum resultado para «@cherche_auteur@».', |
|
| 421 | + 'info_recommencer' => 'Por favor, recomece.', |
|
| 422 | + 'info_redacteur_1' => 'Redator', |
|
| 423 | + 'info_redacteur_2' => 'com acesso à área privada (<i>recomendado</i>)', |
|
| 424 | + 'info_redacteurs' => 'Redatores', |
|
| 425 | + 'info_redaction_en_cours' => 'EM FASE DE REDAÇÃO', |
|
| 426 | + 'info_redirection' => 'Redirecionamento', |
|
| 427 | + 'info_redirection_activee' => 'O redirecionamento foi ativado.', |
|
| 428 | + 'info_redirection_boucle' => 'Você tentou redirecionar a matéria para ela mesma.', |
|
| 429 | + 'info_redirection_desactivee' => 'O redirecionamento foi excluído.', |
|
| 430 | + 'info_refuses' => 'Suas matérias recusadas', |
|
| 431 | + 'info_reglage_ldap' => 'Opções: <b>Configuração da importação LDAP</b>', |
|
| 432 | + 'info_renvoi_article' => '<b>Redirecionamento.</b> Esta matéria redireciona para a página:', |
|
| 433 | + 'info_reserve_admin' => 'Apenas os administradores podem alterar este endereço.', |
|
| 434 | + 'info_restreindre_rubrique' => 'Restringir o gerenciamento à seção:', |
|
| 435 | + 'info_resultat_recherche' => 'Resultados da busca:', |
|
| 436 | + 'info_rubriques' => 'Seções', |
|
| 437 | + 'info_rubriques_02' => 'seções', |
|
| 438 | + 'info_rubriques_trouvees' => 'Seções encontradas', |
|
| 439 | + 'info_sans_titre' => 'Sem título', |
|
| 440 | + 'info_selection_chemin_acces' => '<b>Selecione</b> a seguir o caminho para acessar o diretório:', |
|
| 441 | + 'info_signatures' => 'assinaturas', |
|
| 442 | + 'info_site' => 'Site', |
|
| 443 | + 'info_site_2' => 'site:', |
|
| 444 | + 'info_site_min' => 'site', |
|
| 445 | + 'info_site_reference_2' => 'Site referenciado', |
|
| 446 | + 'info_site_web' => 'Website:', |
|
| 447 | + 'info_sites' => 'sites', |
|
| 448 | + 'info_sites_lies_mot' => 'Os sites referenciados vinculados a esta palavra-chave', |
|
| 449 | + 'info_sites_proxy' => 'Utilizar um proxy', |
|
| 450 | + 'info_sites_trouves' => 'Sites encontrados', |
|
| 451 | + 'info_sous_titre' => 'Subtítulo:', |
|
| 452 | + 'info_statut_administrateur' => 'Administrador', |
|
| 453 | + 'info_statut_auteur' => 'Status deste autor:', |
|
| 454 | + 'info_statut_auteur_2' => 'Eu sou', |
|
| 455 | + 'info_statut_auteur_a_confirmer' => 'Inscrição a confirmar', |
|
| 456 | + 'info_statut_auteur_autre' => 'Outro status:', |
|
| 457 | + 'info_statut_redacteur' => 'Redator', |
|
| 458 | + 'info_statut_utilisateurs_1' => 'Status padrão dos usuários importados', |
|
| 459 | + 'info_statut_utilisateurs_2' => 'Escolha o status atribuído às pessoas que constam do diretório LDAP, quando elas se conectarem pela primeira vêz. Você poderá, em seguida, alterar caso a caso este valor para cada autor.', |
|
| 460 | + 'info_suivi_activite' => 'Acompanhamento da atividade editorial', |
|
| 461 | + 'info_surtitre' => 'Sobretítulo:', |
|
| 462 | + 'info_syndication_integrale_1' => 'O seu site propõe arquivos de sindicação (ver «<a href="@url@">@titre@</a>»).', |
|
| 463 | + 'info_syndication_integrale_2' => 'Você deseja transmitir as matérias integralmente, ou difundir apenas um resumo de algumas centenas de caracteres?', |
|
| 464 | + 'info_table_prefix' => 'Você pode alterar o prefixo do nome das tabelas de dados (indispensável no caso de pretender instalar diversos sites na mesma base de dados). Este prefixo deve estar em minúsculas, não acentuadas, e sem espaços.', |
|
| 465 | + 'info_taille_maximale_images' => 'SPIP irá testar o tamanho máximo das imagens que o sistema pode tratar (em milhões de pixels).<br />As imagens muito grandes não serão reduzidas.', |
|
| 466 | + 'info_taille_maximale_vignette' => 'Tamanho máximo dos ícones gerados pelo sistema:', |
|
| 467 | + 'info_terminer_installation' => 'Você pode agora terminar o procedimento de instalação padrão.', |
|
| 468 | + 'info_texte' => 'Texto', |
|
| 469 | + 'info_texte_explicatif' => 'Texto explicativo', |
|
| 470 | + 'info_texte_long' => '(o texto é longo: ele aparecerá em diversas partes que serão recombinadas após validação.)', |
|
| 471 | + 'info_texte_message' => 'Texto da sua mensagem', |
|
| 472 | + 'info_texte_message_02' => 'Texto da mensagem', |
|
| 473 | + 'info_titre' => 'Título:', |
|
| 474 | + 'info_total' => 'total:', |
|
| 475 | + 'info_tous_articles_en_redaction' => 'Todas as matérias em fase de redação', |
|
| 476 | + 'info_tous_articles_presents' => 'Todas as matérias publicadas nesta seção', |
|
| 477 | + 'info_tous_articles_refuses' => 'Todas as matérias recusadas', |
|
| 478 | + 'info_tous_les' => 'todos os:', |
|
| 479 | + 'info_tout_site' => 'Todo o site', |
|
| 480 | + 'info_tout_site2' => 'A matéria não foi traduzida para este idioma.', |
|
| 481 | + 'info_tout_site3' => 'A matéria foi traduzida para este idioma, mas foram feitas alterações na matéria de referência. A tradução procisa ser atualizada.', |
|
| 482 | + 'info_tout_site4' => 'A matéria foi traduzida para este idioma e a tradução está em dia.', |
|
| 483 | + 'info_tout_site5' => 'Matéria original.', |
|
| 484 | + 'info_tout_site6' => '<b>Atenção:</b> apenas as matérias originais estão exibidas. |
|
| 485 | 485 | As traduções estão associadas ao original, numa côr que indica o seu status:', |
| 486 | - 'info_traductions' => 'Traduções', |
|
| 487 | - 'info_travail_colaboratif' => 'Trabalho colaborativo nas matérias', |
|
| 488 | - 'info_un_article' => 'uma matéria,', |
|
| 489 | - 'info_un_site' => 'um site,', |
|
| 490 | - 'info_une_rubrique' => 'uma seção,', |
|
| 491 | - 'info_une_rubrique_02' => '1 seção', |
|
| 492 | - 'info_url' => 'URL:', |
|
| 493 | - 'info_url_proxy' => 'URL do proxy', |
|
| 494 | - 'info_url_proxy_pas_conforme' => 'O URL do proxy não é válido.', |
|
| 495 | - 'info_url_site_pas_conforme' => 'O URL do site não é válido.', |
|
| 496 | - 'info_url_test_proxy' => 'URL de teste', |
|
| 497 | - 'info_urlref' => 'Link hipertexto:', |
|
| 498 | - 'info_utilisation_spip' => 'Você pode agora começar a utilizar o sistema de publicação assistida...', |
|
| 499 | - 'info_visites_par_mois' => 'Exibir por mês:', |
|
| 500 | - 'info_visiteur_1' => 'Visitante', |
|
| 501 | - 'info_visiteur_2' => 'do site público', |
|
| 502 | - 'info_visiteurs' => 'Visitantes', |
|
| 503 | - 'info_visiteurs_02' => 'Visitantes do site público', |
|
| 504 | - 'info_webmestre_forces' => 'Os webmasters são definidos em <tt>@file_options@</tt>.', |
|
| 505 | - 'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem:', |
|
| 506 | - 'install_connect_ok' => 'A nova base de dados foi corretamente declarada sob o nome de servidor @connect@.', |
|
| 507 | - 'install_echec_annonce' => 'A instalação irá, provavelmente, falhar, ou levar a um site que não funciona...', |
|
| 508 | - 'install_extension_mbstring' => 'O SPIP não funciona com:', |
|
| 509 | - 'install_extension_php_obligatoire' => 'O SPIP exige a extensão php:', |
|
| 510 | - 'install_login_base_hebergeur' => 'Login de conexão atribuído pelo serviço de hospedagem:', |
|
| 511 | - 'install_nom_base_hebergeur' => 'Nome da base atribuído pelo serviço de hospedagem:', |
|
| 512 | - 'install_pas_table' => 'Base atualmente sem tabelas', |
|
| 513 | - 'install_pass_base_hebergeur' => 'Senha de conexão atribuída pelo serviço de hospedagem', |
|
| 514 | - 'install_php_extension' => 'As extensões a seguir estão faltando: @extensions@', |
|
| 515 | - 'install_php_version' => 'PHP versão @version@ é insuficiente (mínimo = @minimum@)', |
|
| 516 | - 'install_php_version_max' => 'A versão @version@ do PHP é muito recente (máximo = @maximum@)', |
|
| 517 | - 'install_select_langue' => 'Escolha um idioma e clique no botão «avançar» para iniciar o procedimento de instalação.', |
|
| 518 | - 'install_select_type_db' => 'Indicar o tipo de base de dados:', |
|
| 519 | - 'install_select_type_mysql' => 'MySQL', |
|
| 520 | - 'install_select_type_pg' => 'PostgreSQL', |
|
| 521 | - 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 522 | - 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 523 | - 'install_serveur_hebergeur' => 'Servidor de base de dados atribuído pelo serviço de hospedagem', |
|
| 524 | - 'install_table_prefix_hebergeur' => 'Prefixo de tabela atribuído pelo serviço de hospedagem:', |
|
| 525 | - 'install_tables_base' => 'Tabelas da base', |
|
| 526 | - 'install_types_db_connus' => 'SPIP pode usar <b>MySQL</b> (a mais comum), e <b>SQLite</b>.', |
|
| 527 | - 'install_types_db_connus_avertissement' => 'O suporte ao <b>PostgreSQL</b> é também proposto a título experimental', |
|
| 528 | - 'instituer_erreur_statut_a_change' => 'O status já foi alterado', |
|
| 529 | - 'instituer_erreur_statut_non_autorise' => 'Você não pode escolher este status', |
|
| 530 | - 'intem_redacteur' => 'redator', |
|
| 531 | - 'intitule_licence' => 'Licença', |
|
| 532 | - 'item_accepter_inscriptions' => 'Aceitar as inscrições', |
|
| 533 | - 'item_activer_messages_avertissement' => 'Ativar as mensagens de aviso', |
|
| 534 | - 'item_administrateur_2' => 'administrador', |
|
| 535 | - 'item_afficher_calendrier' => 'Exibir no calendário', |
|
| 536 | - 'item_autoriser_syndication_integrale' => 'Difundir a íntegra das matérias nos arquivos de sindicação', |
|
| 537 | - 'item_choix_administrateurs' => 'os administradores', |
|
| 538 | - 'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.', |
|
| 539 | - 'item_choix_non_generation_miniature' => 'Não gerar as miniaturas das imagens.', |
|
| 540 | - 'item_choix_redacteurs' => 'os redatores', |
|
| 541 | - 'item_choix_visiteurs' => 'os visitantes do site público', |
|
| 542 | - 'item_creer_fichiers_authent' => 'Criar os arquivos .htpasswd', |
|
| 543 | - 'item_login' => 'Login', |
|
| 544 | - 'item_messagerie_agenda' => 'Ativar as mesagens internas e a agenda', |
|
| 545 | - 'item_mots_cles_association_articles' => 'às matérias', |
|
| 546 | - 'item_mots_cles_association_rubriques' => 'às seções', |
|
| 547 | - 'item_mots_cles_association_sites' => 'aos sites referenciados ou sindicados.', |
|
| 548 | - 'item_non' => 'Não', |
|
| 549 | - 'item_non_accepter_inscriptions' => 'Não aceitar inscrições', |
|
| 550 | - 'item_non_activer_messages_avertissement' => 'Sem mensagens de aviso', |
|
| 551 | - 'item_non_afficher_calendrier' => 'Não exibir no calendário', |
|
| 552 | - 'item_non_autoriser_syndication_integrale' => 'Difundir apenas um resumo', |
|
| 553 | - 'item_non_creer_fichiers_authent' => 'Não criar os arquivos', |
|
| 554 | - 'item_non_messagerie_agenda' => 'Desativar as mensagens internas e a agenda', |
|
| 555 | - 'item_non_publier_articles' => 'Não publicar as matérias antes da data de publicação fixada.', |
|
| 556 | - 'item_nouvel_auteur' => 'Novo autor', |
|
| 557 | - 'item_nouvelle_rubrique' => 'Nova seção', |
|
| 558 | - 'item_oui' => 'Sim', |
|
| 559 | - 'item_publier_articles' => 'Publicar as matérias seja qual for a sua data de publicação.', |
|
| 560 | - 'item_reponse_article' => 'Resposta à matéria', |
|
| 561 | - 'item_visiteur' => 'Visitante', |
|
| 486 | + 'info_traductions' => 'Traduções', |
|
| 487 | + 'info_travail_colaboratif' => 'Trabalho colaborativo nas matérias', |
|
| 488 | + 'info_un_article' => 'uma matéria,', |
|
| 489 | + 'info_un_site' => 'um site,', |
|
| 490 | + 'info_une_rubrique' => 'uma seção,', |
|
| 491 | + 'info_une_rubrique_02' => '1 seção', |
|
| 492 | + 'info_url' => 'URL:', |
|
| 493 | + 'info_url_proxy' => 'URL do proxy', |
|
| 494 | + 'info_url_proxy_pas_conforme' => 'O URL do proxy não é válido.', |
|
| 495 | + 'info_url_site_pas_conforme' => 'O URL do site não é válido.', |
|
| 496 | + 'info_url_test_proxy' => 'URL de teste', |
|
| 497 | + 'info_urlref' => 'Link hipertexto:', |
|
| 498 | + 'info_utilisation_spip' => 'Você pode agora começar a utilizar o sistema de publicação assistida...', |
|
| 499 | + 'info_visites_par_mois' => 'Exibir por mês:', |
|
| 500 | + 'info_visiteur_1' => 'Visitante', |
|
| 501 | + 'info_visiteur_2' => 'do site público', |
|
| 502 | + 'info_visiteurs' => 'Visitantes', |
|
| 503 | + 'info_visiteurs_02' => 'Visitantes do site público', |
|
| 504 | + 'info_webmestre_forces' => 'Os webmasters são definidos em <tt>@file_options@</tt>.', |
|
| 505 | + 'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem:', |
|
| 506 | + 'install_connect_ok' => 'A nova base de dados foi corretamente declarada sob o nome de servidor @connect@.', |
|
| 507 | + 'install_echec_annonce' => 'A instalação irá, provavelmente, falhar, ou levar a um site que não funciona...', |
|
| 508 | + 'install_extension_mbstring' => 'O SPIP não funciona com:', |
|
| 509 | + 'install_extension_php_obligatoire' => 'O SPIP exige a extensão php:', |
|
| 510 | + 'install_login_base_hebergeur' => 'Login de conexão atribuído pelo serviço de hospedagem:', |
|
| 511 | + 'install_nom_base_hebergeur' => 'Nome da base atribuído pelo serviço de hospedagem:', |
|
| 512 | + 'install_pas_table' => 'Base atualmente sem tabelas', |
|
| 513 | + 'install_pass_base_hebergeur' => 'Senha de conexão atribuída pelo serviço de hospedagem', |
|
| 514 | + 'install_php_extension' => 'As extensões a seguir estão faltando: @extensions@', |
|
| 515 | + 'install_php_version' => 'PHP versão @version@ é insuficiente (mínimo = @minimum@)', |
|
| 516 | + 'install_php_version_max' => 'A versão @version@ do PHP é muito recente (máximo = @maximum@)', |
|
| 517 | + 'install_select_langue' => 'Escolha um idioma e clique no botão «avançar» para iniciar o procedimento de instalação.', |
|
| 518 | + 'install_select_type_db' => 'Indicar o tipo de base de dados:', |
|
| 519 | + 'install_select_type_mysql' => 'MySQL', |
|
| 520 | + 'install_select_type_pg' => 'PostgreSQL', |
|
| 521 | + 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 522 | + 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 523 | + 'install_serveur_hebergeur' => 'Servidor de base de dados atribuído pelo serviço de hospedagem', |
|
| 524 | + 'install_table_prefix_hebergeur' => 'Prefixo de tabela atribuído pelo serviço de hospedagem:', |
|
| 525 | + 'install_tables_base' => 'Tabelas da base', |
|
| 526 | + 'install_types_db_connus' => 'SPIP pode usar <b>MySQL</b> (a mais comum), e <b>SQLite</b>.', |
|
| 527 | + 'install_types_db_connus_avertissement' => 'O suporte ao <b>PostgreSQL</b> é também proposto a título experimental', |
|
| 528 | + 'instituer_erreur_statut_a_change' => 'O status já foi alterado', |
|
| 529 | + 'instituer_erreur_statut_non_autorise' => 'Você não pode escolher este status', |
|
| 530 | + 'intem_redacteur' => 'redator', |
|
| 531 | + 'intitule_licence' => 'Licença', |
|
| 532 | + 'item_accepter_inscriptions' => 'Aceitar as inscrições', |
|
| 533 | + 'item_activer_messages_avertissement' => 'Ativar as mensagens de aviso', |
|
| 534 | + 'item_administrateur_2' => 'administrador', |
|
| 535 | + 'item_afficher_calendrier' => 'Exibir no calendário', |
|
| 536 | + 'item_autoriser_syndication_integrale' => 'Difundir a íntegra das matérias nos arquivos de sindicação', |
|
| 537 | + 'item_choix_administrateurs' => 'os administradores', |
|
| 538 | + 'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.', |
|
| 539 | + 'item_choix_non_generation_miniature' => 'Não gerar as miniaturas das imagens.', |
|
| 540 | + 'item_choix_redacteurs' => 'os redatores', |
|
| 541 | + 'item_choix_visiteurs' => 'os visitantes do site público', |
|
| 542 | + 'item_creer_fichiers_authent' => 'Criar os arquivos .htpasswd', |
|
| 543 | + 'item_login' => 'Login', |
|
| 544 | + 'item_messagerie_agenda' => 'Ativar as mesagens internas e a agenda', |
|
| 545 | + 'item_mots_cles_association_articles' => 'às matérias', |
|
| 546 | + 'item_mots_cles_association_rubriques' => 'às seções', |
|
| 547 | + 'item_mots_cles_association_sites' => 'aos sites referenciados ou sindicados.', |
|
| 548 | + 'item_non' => 'Não', |
|
| 549 | + 'item_non_accepter_inscriptions' => 'Não aceitar inscrições', |
|
| 550 | + 'item_non_activer_messages_avertissement' => 'Sem mensagens de aviso', |
|
| 551 | + 'item_non_afficher_calendrier' => 'Não exibir no calendário', |
|
| 552 | + 'item_non_autoriser_syndication_integrale' => 'Difundir apenas um resumo', |
|
| 553 | + 'item_non_creer_fichiers_authent' => 'Não criar os arquivos', |
|
| 554 | + 'item_non_messagerie_agenda' => 'Desativar as mensagens internas e a agenda', |
|
| 555 | + 'item_non_publier_articles' => 'Não publicar as matérias antes da data de publicação fixada.', |
|
| 556 | + 'item_nouvel_auteur' => 'Novo autor', |
|
| 557 | + 'item_nouvelle_rubrique' => 'Nova seção', |
|
| 558 | + 'item_oui' => 'Sim', |
|
| 559 | + 'item_publier_articles' => 'Publicar as matérias seja qual for a sua data de publicação.', |
|
| 560 | + 'item_reponse_article' => 'Resposta à matéria', |
|
| 561 | + 'item_visiteur' => 'Visitante', |
|
| 562 | 562 | |
| 563 | - // J |
|
| 564 | - 'jour_non_connu_nc' => 'n.c.', |
|
| 563 | + // J |
|
| 564 | + 'jour_non_connu_nc' => 'n.c.', |
|
| 565 | 565 | |
| 566 | - // L |
|
| 567 | - 'label_bando_outils' => 'Barra de ferramentas', |
|
| 568 | - 'label_bando_outils_afficher' => 'Exibir as ferramentas', |
|
| 569 | - 'label_bando_outils_masquer' => 'Esconder as ferramentas', |
|
| 570 | - 'label_choix_langue' => 'Escolha o seu idioma', |
|
| 571 | - 'label_langue' => 'Idioma', |
|
| 572 | - 'label_nom_fichier_connect' => 'Informe o nome usado por este servidor', |
|
| 573 | - 'label_slogan_site' => 'Slogan do site', |
|
| 574 | - 'label_taille_ecran' => 'Largura da tela', |
|
| 575 | - 'label_texte_et_icones_navigation' => 'Menu de navegação', |
|
| 576 | - 'label_texte_et_icones_page' => 'Exibição na página', |
|
| 577 | - 'ldap_correspondance' => 'herança do campo @champ@', |
|
| 578 | - 'ldap_correspondance_1' => 'Herança dos campos LDAP', |
|
| 579 | - 'ldap_correspondance_2' => 'Para cada um dos campos SPIP a seguir, indique o nome do campo LDAP correspondente. Deixe em branco para não preencher, separe por espaços ou vírgulas para tentar vários campos LDAP.', |
|
| 580 | - 'lien_ajouter_auteur' => 'Incluir este autor', |
|
| 581 | - 'lien_ajouter_une_rubrique' => 'Incluir esta seção', |
|
| 582 | - 'lien_email' => 'e-mail', |
|
| 583 | - 'lien_nom_site' => 'NOME DO SITE:', |
|
| 584 | - 'lien_rapide_contenu' => 'Ir para o conteúdo', |
|
| 585 | - 'lien_rapide_navigation' => 'Ir para a navegação', |
|
| 586 | - 'lien_rapide_recherche' => 'Ir para a busca', |
|
| 587 | - 'lien_retirer_auteur' => 'Retirar o autor', |
|
| 588 | - 'lien_retirer_rubrique' => 'Excluir a seção', |
|
| 589 | - 'lien_retirer_tous_auteurs' => 'Retirar todos os autores', |
|
| 590 | - 'lien_retirer_toutes_rubriques' => 'Retirar todas as seções', |
|
| 591 | - 'lien_site' => 'site', |
|
| 592 | - 'lien_tout_decocher' => 'Desmarcar tudo', |
|
| 593 | - 'lien_tout_deplier' => 'Expandir tudo', |
|
| 594 | - 'lien_tout_replier' => 'Retrair tudo', |
|
| 595 | - 'lien_tout_supprimer' => 'Excluir tudo', |
|
| 596 | - 'lien_trier_nom' => 'Ordenar pelo nome', |
|
| 597 | - 'lien_trier_nombre_articles' => 'Ordenar por número de matérias', |
|
| 598 | - 'lien_trier_statut' => 'Ordenar pelo status', |
|
| 599 | - 'lien_voir_en_ligne' => 'VER ONLINE:', |
|
| 600 | - 'logo_article' => 'Ícone da matéria', |
|
| 601 | - 'logo_auteur' => 'Ícone do autor', |
|
| 602 | - 'logo_rubrique' => 'Ícone da seção', |
|
| 603 | - 'logo_site' => 'Ícone deste site', |
|
| 604 | - 'logo_standard_rubrique' => 'Ícone padrão das seções', |
|
| 605 | - 'logo_survol' => 'Ícone para mouseOver', |
|
| 566 | + // L |
|
| 567 | + 'label_bando_outils' => 'Barra de ferramentas', |
|
| 568 | + 'label_bando_outils_afficher' => 'Exibir as ferramentas', |
|
| 569 | + 'label_bando_outils_masquer' => 'Esconder as ferramentas', |
|
| 570 | + 'label_choix_langue' => 'Escolha o seu idioma', |
|
| 571 | + 'label_langue' => 'Idioma', |
|
| 572 | + 'label_nom_fichier_connect' => 'Informe o nome usado por este servidor', |
|
| 573 | + 'label_slogan_site' => 'Slogan do site', |
|
| 574 | + 'label_taille_ecran' => 'Largura da tela', |
|
| 575 | + 'label_texte_et_icones_navigation' => 'Menu de navegação', |
|
| 576 | + 'label_texte_et_icones_page' => 'Exibição na página', |
|
| 577 | + 'ldap_correspondance' => 'herança do campo @champ@', |
|
| 578 | + 'ldap_correspondance_1' => 'Herança dos campos LDAP', |
|
| 579 | + 'ldap_correspondance_2' => 'Para cada um dos campos SPIP a seguir, indique o nome do campo LDAP correspondente. Deixe em branco para não preencher, separe por espaços ou vírgulas para tentar vários campos LDAP.', |
|
| 580 | + 'lien_ajouter_auteur' => 'Incluir este autor', |
|
| 581 | + 'lien_ajouter_une_rubrique' => 'Incluir esta seção', |
|
| 582 | + 'lien_email' => 'e-mail', |
|
| 583 | + 'lien_nom_site' => 'NOME DO SITE:', |
|
| 584 | + 'lien_rapide_contenu' => 'Ir para o conteúdo', |
|
| 585 | + 'lien_rapide_navigation' => 'Ir para a navegação', |
|
| 586 | + 'lien_rapide_recherche' => 'Ir para a busca', |
|
| 587 | + 'lien_retirer_auteur' => 'Retirar o autor', |
|
| 588 | + 'lien_retirer_rubrique' => 'Excluir a seção', |
|
| 589 | + 'lien_retirer_tous_auteurs' => 'Retirar todos os autores', |
|
| 590 | + 'lien_retirer_toutes_rubriques' => 'Retirar todas as seções', |
|
| 591 | + 'lien_site' => 'site', |
|
| 592 | + 'lien_tout_decocher' => 'Desmarcar tudo', |
|
| 593 | + 'lien_tout_deplier' => 'Expandir tudo', |
|
| 594 | + 'lien_tout_replier' => 'Retrair tudo', |
|
| 595 | + 'lien_tout_supprimer' => 'Excluir tudo', |
|
| 596 | + 'lien_trier_nom' => 'Ordenar pelo nome', |
|
| 597 | + 'lien_trier_nombre_articles' => 'Ordenar por número de matérias', |
|
| 598 | + 'lien_trier_statut' => 'Ordenar pelo status', |
|
| 599 | + 'lien_voir_en_ligne' => 'VER ONLINE:', |
|
| 600 | + 'logo_article' => 'Ícone da matéria', |
|
| 601 | + 'logo_auteur' => 'Ícone do autor', |
|
| 602 | + 'logo_rubrique' => 'Ícone da seção', |
|
| 603 | + 'logo_site' => 'Ícone deste site', |
|
| 604 | + 'logo_standard_rubrique' => 'Ícone padrão das seções', |
|
| 605 | + 'logo_survol' => 'Ícone para mouseOver', |
|
| 606 | 606 | |
| 607 | - // M |
|
| 608 | - 'menu_aide_installation_choix_base' => 'Seleção da sua base', |
|
| 609 | - 'module_fichier_langue' => 'Arquivo de idioma', |
|
| 610 | - 'module_raccourci' => 'Atalho', |
|
| 611 | - 'module_texte_affiche' => 'Texto exibido', |
|
| 612 | - 'module_texte_explicatif' => 'Você pode inserir os atalhos a seguir nos templates do seu site público. Eles serão traduzidos automaticamente para os idiomas para os quais exista um arquivo de idioma.', |
|
| 613 | - 'module_texte_traduction' => 'O arquivo de idioma «@module@» está disponível em:', |
|
| 614 | - 'mois_non_connu' => 'desconhecido', |
|
| 607 | + // M |
|
| 608 | + 'menu_aide_installation_choix_base' => 'Seleção da sua base', |
|
| 609 | + 'module_fichier_langue' => 'Arquivo de idioma', |
|
| 610 | + 'module_raccourci' => 'Atalho', |
|
| 611 | + 'module_texte_affiche' => 'Texto exibido', |
|
| 612 | + 'module_texte_explicatif' => 'Você pode inserir os atalhos a seguir nos templates do seu site público. Eles serão traduzidos automaticamente para os idiomas para os quais exista um arquivo de idioma.', |
|
| 613 | + 'module_texte_traduction' => 'O arquivo de idioma «@module@» está disponível em:', |
|
| 614 | + 'mois_non_connu' => 'desconhecido', |
|
| 615 | 615 | |
| 616 | - // N |
|
| 617 | - 'nouvelle_version_spip' => 'A versão @version@ do SPIP está disponível', |
|
| 618 | - 'nouvelle_version_spip_majeure' => 'Uma nova versão SPIP @version@ está disponível', |
|
| 616 | + // N |
|
| 617 | + 'nouvelle_version_spip' => 'A versão @version@ do SPIP está disponível', |
|
| 618 | + 'nouvelle_version_spip_majeure' => 'Uma nova versão SPIP @version@ está disponível', |
|
| 619 | 619 | |
| 620 | - // O |
|
| 621 | - 'onglet_contenu' => 'Conteúdo', |
|
| 622 | - 'onglet_declarer_une_autre_base' => 'Configurar outra base', |
|
| 623 | - 'onglet_discuter' => 'Discutir', |
|
| 624 | - 'onglet_interactivite' => 'Interatividade', |
|
| 625 | - 'onglet_proprietes' => 'Propriedades', |
|
| 626 | - 'onglet_repartition_actuelle' => 'atualmente', |
|
| 627 | - 'onglet_sous_rubriques' => 'Subseções', |
|
| 620 | + // O |
|
| 621 | + 'onglet_contenu' => 'Conteúdo', |
|
| 622 | + 'onglet_declarer_une_autre_base' => 'Configurar outra base', |
|
| 623 | + 'onglet_discuter' => 'Discutir', |
|
| 624 | + 'onglet_interactivite' => 'Interatividade', |
|
| 625 | + 'onglet_proprietes' => 'Propriedades', |
|
| 626 | + 'onglet_repartition_actuelle' => 'atualmente', |
|
| 627 | + 'onglet_sous_rubriques' => 'Subseções', |
|
| 628 | 628 | |
| 629 | - // P |
|
| 630 | - 'page_pas_proxy' => 'Esta página não deve passar pelo proxy', |
|
| 631 | - 'pas_de_proxy_pour' => 'Se necessário, indique as máquinas ou domínios para os quais este proxy não se aplica (por exemplo: @exemple@)', |
|
| 632 | - 'phpinfo' => 'Configuração PHP', |
|
| 633 | - 'plugin_charge_paquet' => 'Carregamento do pacote @name@', |
|
| 634 | - 'plugin_charger' => 'Transferir', |
|
| 635 | - 'plugin_erreur_charger' => 'erro: não foi possível carregar @zip@', |
|
| 636 | - 'plugin_erreur_droit1' => 'O diretório <code>@dest@</code> não está acessível para escrita.', |
|
| 637 | - 'plugin_erreur_droit2' => 'Por favor, verifique os direitos deste diretório (e criá-lo, caso não exista), ou instalar os arquivos por FTP.', |
|
| 638 | - 'plugin_erreur_zip' => 'falha pclzip: erro @status@', |
|
| 639 | - 'plugin_etat_developpement' => 'em desenvolvimento', |
|
| 640 | - 'plugin_etat_experimental' => 'experimental', |
|
| 641 | - 'plugin_etat_stable' => 'estável', |
|
| 642 | - 'plugin_etat_test' => 'em teste', |
|
| 643 | - 'plugin_impossible_activer' => 'Não foi possível ativar o plugin @plugin@', |
|
| 644 | - 'plugin_info_automatique1' => 'Se você deseja autorizar a instalaçào automática dos plugins, por favor:', |
|
| 645 | - 'plugin_info_automatique1_lib' => 'Se você deseja autorizar a instalação automática desta biblioteca, por favor:', |
|
| 646 | - 'plugin_info_automatique2' => 'crie um diretório <code>@rep@</code> ;', |
|
| 647 | - 'plugin_info_automatique3' => 'verifique se o servidor está autorizado a escrever neste diretório', |
|
| 648 | - 'plugin_info_automatique_creer' => 'a ser criado na raiz do site.', |
|
| 649 | - 'plugin_info_automatique_exemples' => 'exemplos:', |
|
| 650 | - 'plugin_info_automatique_ftp' => 'Você pode instalar os plugins, por FTP, no diretório <tt>@rep@</tt>', |
|
| 651 | - 'plugin_info_automatique_lib' => 'Alguns plugins precisam também poder transferir arquivos para o diretório <code>lib/</code>, a ser criado, caso não exista, na raiz do site.', |
|
| 652 | - 'plugin_info_automatique_liste' => 'Suas listas de plugins:', |
|
| 653 | - 'plugin_info_automatique_liste_officielle' => 'os plugins oficiais', |
|
| 654 | - 'plugin_info_automatique_liste_update' => 'Atualizar as listas', |
|
| 655 | - 'plugin_info_automatique_ou' => 'ou...', |
|
| 656 | - 'plugin_info_automatique_select' => 'Selecione abaixo um plugin: O SPIP o transferirá e o instalará no diretório <code>@rep@</code>; se o plugin já existir, será atualizado.', |
|
| 657 | - 'plugin_info_credit' => 'Créditos', |
|
| 658 | - 'plugin_info_erreur_xml' => 'A declaração deste plugin está incorreta', |
|
| 659 | - 'plugin_info_install_ok' => 'Instalação bem sucedida', |
|
| 660 | - 'plugin_info_necessite' => 'Requer:', |
|
| 661 | - 'plugin_info_non_compatible_spip' => 'Este plugin não é compatível com esta versão do SPIP', |
|
| 662 | - 'plugin_info_plugins_dist_1' => 'Os plugins abaixo são carregados e ativados no diretório @plugins_dist@.', |
|
| 663 | - 'plugin_info_plugins_dist_2' => 'Eles não são desativáveis.', |
|
| 664 | - 'plugin_info_telecharger' => 'transferir de @url@ e instalar em @rep@', |
|
| 665 | - 'plugin_info_upgrade_ok' => 'Atualização bem sucedida', |
|
| 666 | - 'plugin_librairies_installees' => 'Bibliotecas instaladas', |
|
| 667 | - 'plugin_necessite_extension_php' => 'Requer a extensão PHP @plugin@ na versão @version@.', |
|
| 668 | - 'plugin_necessite_extension_php_sans_version' => 'Requer a extensão PHP @plugin@', |
|
| 669 | - 'plugin_necessite_lib' => 'Este plugin precisa da biblioteca @lib@', |
|
| 670 | - 'plugin_necessite_php' => 'Requer @plugin@ na versão @version@.', |
|
| 671 | - 'plugin_necessite_plugin' => 'Precisa do plugin @plugin@, na versão @version@.', |
|
| 672 | - 'plugin_necessite_plugin_sans_version' => 'Precisa do plugin @plugin@', |
|
| 673 | - 'plugin_necessite_spip' => 'É necessário o SPIP na versão @version@, pelo menos.', |
|
| 674 | - 'plugin_source' => 'fonte: ', |
|
| 675 | - 'plugin_titre_automatique' => 'Instalação automática', |
|
| 676 | - 'plugin_titre_automatique_ajouter' => 'Incluir plugins', |
|
| 677 | - 'plugin_titre_installation' => 'Instalação do plugin @plugin@', |
|
| 678 | - 'plugin_titre_modifier' => 'Meus plugins', |
|
| 679 | - 'plugin_utilise_extension_php' => 'A extensão PHP @plugin@ deve estar na versão @version@.', |
|
| 680 | - 'plugin_utilise_php' => '@plugin@ deve estar na versão @version@.', |
|
| 681 | - 'plugin_utilise_plugin' => 'O plugin @plugin@ deve estar na versão @version@.', |
|
| 682 | - 'plugin_zip_active' => 'Continue para o ativar', |
|
| 683 | - 'plugin_zip_adresse' => 'Indique abaixo o endereço de um arquivo zip de plugin a ser transferido, ou ainda o endereço de uma lista de plugins.', |
|
| 684 | - 'plugin_zip_adresse_champ' => 'Endereço do plugin ou da lista', |
|
| 685 | - 'plugin_zip_content' => 'Ele contém os arquivos a seguir (@taille@),<br />prontos para serem instalados no diretório <code>@rep@</code>', |
|
| 686 | - 'plugin_zip_installe_finie' => 'O arquivo @zip@ foi descompactado e instalado.', |
|
| 687 | - 'plugin_zip_installe_rep_finie' => 'O arquivo @zip@ foi descompactado e instalado no diretório @rep@', |
|
| 688 | - 'plugin_zip_installer' => 'Você pode, agora, instalá-lo.', |
|
| 689 | - 'plugin_zip_telecharge' => 'O arquivo @zip@ foi transferido', |
|
| 690 | - 'plugins_actif_aucun' => 'Nenhum plugin ativado.', |
|
| 691 | - 'plugins_actif_un' => 'Um plugin ativado.', |
|
| 692 | - 'plugins_actifs' => '@count@ plugins ativados.', |
|
| 693 | - 'plugins_actifs_liste' => 'Ativos', |
|
| 694 | - 'plugins_compte' => '@count@ plugins', |
|
| 695 | - 'plugins_disponible_un' => 'Um plugin disponível.', |
|
| 696 | - 'plugins_disponibles' => '@count@ plugins disponiveis.', |
|
| 697 | - 'plugins_erreur' => 'Erro nos plugins: @plugins@', |
|
| 698 | - 'plugins_liste' => 'Lista dos plugins', |
|
| 699 | - 'plugins_liste_dist' => 'Plugins bloqueados', |
|
| 700 | - 'plugins_recents' => 'Plugins recentes.', |
|
| 701 | - 'plugins_tous_liste' => 'Todos', |
|
| 702 | - 'plugins_vue_hierarchie' => 'Hierarquia', |
|
| 703 | - 'plugins_vue_liste' => 'Lista', |
|
| 704 | - 'protocole_ldap' => 'Versão do protocolo:', |
|
| 629 | + // P |
|
| 630 | + 'page_pas_proxy' => 'Esta página não deve passar pelo proxy', |
|
| 631 | + 'pas_de_proxy_pour' => 'Se necessário, indique as máquinas ou domínios para os quais este proxy não se aplica (por exemplo: @exemple@)', |
|
| 632 | + 'phpinfo' => 'Configuração PHP', |
|
| 633 | + 'plugin_charge_paquet' => 'Carregamento do pacote @name@', |
|
| 634 | + 'plugin_charger' => 'Transferir', |
|
| 635 | + 'plugin_erreur_charger' => 'erro: não foi possível carregar @zip@', |
|
| 636 | + 'plugin_erreur_droit1' => 'O diretório <code>@dest@</code> não está acessível para escrita.', |
|
| 637 | + 'plugin_erreur_droit2' => 'Por favor, verifique os direitos deste diretório (e criá-lo, caso não exista), ou instalar os arquivos por FTP.', |
|
| 638 | + 'plugin_erreur_zip' => 'falha pclzip: erro @status@', |
|
| 639 | + 'plugin_etat_developpement' => 'em desenvolvimento', |
|
| 640 | + 'plugin_etat_experimental' => 'experimental', |
|
| 641 | + 'plugin_etat_stable' => 'estável', |
|
| 642 | + 'plugin_etat_test' => 'em teste', |
|
| 643 | + 'plugin_impossible_activer' => 'Não foi possível ativar o plugin @plugin@', |
|
| 644 | + 'plugin_info_automatique1' => 'Se você deseja autorizar a instalaçào automática dos plugins, por favor:', |
|
| 645 | + 'plugin_info_automatique1_lib' => 'Se você deseja autorizar a instalação automática desta biblioteca, por favor:', |
|
| 646 | + 'plugin_info_automatique2' => 'crie um diretório <code>@rep@</code> ;', |
|
| 647 | + 'plugin_info_automatique3' => 'verifique se o servidor está autorizado a escrever neste diretório', |
|
| 648 | + 'plugin_info_automatique_creer' => 'a ser criado na raiz do site.', |
|
| 649 | + 'plugin_info_automatique_exemples' => 'exemplos:', |
|
| 650 | + 'plugin_info_automatique_ftp' => 'Você pode instalar os plugins, por FTP, no diretório <tt>@rep@</tt>', |
|
| 651 | + 'plugin_info_automatique_lib' => 'Alguns plugins precisam também poder transferir arquivos para o diretório <code>lib/</code>, a ser criado, caso não exista, na raiz do site.', |
|
| 652 | + 'plugin_info_automatique_liste' => 'Suas listas de plugins:', |
|
| 653 | + 'plugin_info_automatique_liste_officielle' => 'os plugins oficiais', |
|
| 654 | + 'plugin_info_automatique_liste_update' => 'Atualizar as listas', |
|
| 655 | + 'plugin_info_automatique_ou' => 'ou...', |
|
| 656 | + 'plugin_info_automatique_select' => 'Selecione abaixo um plugin: O SPIP o transferirá e o instalará no diretório <code>@rep@</code>; se o plugin já existir, será atualizado.', |
|
| 657 | + 'plugin_info_credit' => 'Créditos', |
|
| 658 | + 'plugin_info_erreur_xml' => 'A declaração deste plugin está incorreta', |
|
| 659 | + 'plugin_info_install_ok' => 'Instalação bem sucedida', |
|
| 660 | + 'plugin_info_necessite' => 'Requer:', |
|
| 661 | + 'plugin_info_non_compatible_spip' => 'Este plugin não é compatível com esta versão do SPIP', |
|
| 662 | + 'plugin_info_plugins_dist_1' => 'Os plugins abaixo são carregados e ativados no diretório @plugins_dist@.', |
|
| 663 | + 'plugin_info_plugins_dist_2' => 'Eles não são desativáveis.', |
|
| 664 | + 'plugin_info_telecharger' => 'transferir de @url@ e instalar em @rep@', |
|
| 665 | + 'plugin_info_upgrade_ok' => 'Atualização bem sucedida', |
|
| 666 | + 'plugin_librairies_installees' => 'Bibliotecas instaladas', |
|
| 667 | + 'plugin_necessite_extension_php' => 'Requer a extensão PHP @plugin@ na versão @version@.', |
|
| 668 | + 'plugin_necessite_extension_php_sans_version' => 'Requer a extensão PHP @plugin@', |
|
| 669 | + 'plugin_necessite_lib' => 'Este plugin precisa da biblioteca @lib@', |
|
| 670 | + 'plugin_necessite_php' => 'Requer @plugin@ na versão @version@.', |
|
| 671 | + 'plugin_necessite_plugin' => 'Precisa do plugin @plugin@, na versão @version@.', |
|
| 672 | + 'plugin_necessite_plugin_sans_version' => 'Precisa do plugin @plugin@', |
|
| 673 | + 'plugin_necessite_spip' => 'É necessário o SPIP na versão @version@, pelo menos.', |
|
| 674 | + 'plugin_source' => 'fonte: ', |
|
| 675 | + 'plugin_titre_automatique' => 'Instalação automática', |
|
| 676 | + 'plugin_titre_automatique_ajouter' => 'Incluir plugins', |
|
| 677 | + 'plugin_titre_installation' => 'Instalação do plugin @plugin@', |
|
| 678 | + 'plugin_titre_modifier' => 'Meus plugins', |
|
| 679 | + 'plugin_utilise_extension_php' => 'A extensão PHP @plugin@ deve estar na versão @version@.', |
|
| 680 | + 'plugin_utilise_php' => '@plugin@ deve estar na versão @version@.', |
|
| 681 | + 'plugin_utilise_plugin' => 'O plugin @plugin@ deve estar na versão @version@.', |
|
| 682 | + 'plugin_zip_active' => 'Continue para o ativar', |
|
| 683 | + 'plugin_zip_adresse' => 'Indique abaixo o endereço de um arquivo zip de plugin a ser transferido, ou ainda o endereço de uma lista de plugins.', |
|
| 684 | + 'plugin_zip_adresse_champ' => 'Endereço do plugin ou da lista', |
|
| 685 | + 'plugin_zip_content' => 'Ele contém os arquivos a seguir (@taille@),<br />prontos para serem instalados no diretório <code>@rep@</code>', |
|
| 686 | + 'plugin_zip_installe_finie' => 'O arquivo @zip@ foi descompactado e instalado.', |
|
| 687 | + 'plugin_zip_installe_rep_finie' => 'O arquivo @zip@ foi descompactado e instalado no diretório @rep@', |
|
| 688 | + 'plugin_zip_installer' => 'Você pode, agora, instalá-lo.', |
|
| 689 | + 'plugin_zip_telecharge' => 'O arquivo @zip@ foi transferido', |
|
| 690 | + 'plugins_actif_aucun' => 'Nenhum plugin ativado.', |
|
| 691 | + 'plugins_actif_un' => 'Um plugin ativado.', |
|
| 692 | + 'plugins_actifs' => '@count@ plugins ativados.', |
|
| 693 | + 'plugins_actifs_liste' => 'Ativos', |
|
| 694 | + 'plugins_compte' => '@count@ plugins', |
|
| 695 | + 'plugins_disponible_un' => 'Um plugin disponível.', |
|
| 696 | + 'plugins_disponibles' => '@count@ plugins disponiveis.', |
|
| 697 | + 'plugins_erreur' => 'Erro nos plugins: @plugins@', |
|
| 698 | + 'plugins_liste' => 'Lista dos plugins', |
|
| 699 | + 'plugins_liste_dist' => 'Plugins bloqueados', |
|
| 700 | + 'plugins_recents' => 'Plugins recentes.', |
|
| 701 | + 'plugins_tous_liste' => 'Todos', |
|
| 702 | + 'plugins_vue_hierarchie' => 'Hierarquia', |
|
| 703 | + 'plugins_vue_liste' => 'Lista', |
|
| 704 | + 'protocole_ldap' => 'Versão do protocolo:', |
|
| 705 | 705 | |
| 706 | - // Q |
|
| 707 | - 'queue_executer_maintenant' => 'Executar agora', |
|
| 708 | - 'queue_info_purger' => 'Você pode excluir todas as tarefas de fundo em espera e reinicializar a lista com as tarefas periódicas', |
|
| 709 | - 'queue_nb_jobs_in_queue' => '@nb@ tarefas em espera', |
|
| 710 | - 'queue_next_job_in_nb_sec' => 'Próxima tarefa em @nb@ s', |
|
| 711 | - 'queue_no_job_in_queue' => 'Nenhum tarefa em espera', |
|
| 712 | - 'queue_one_job_in_queue' => '1 tarefa em espera', |
|
| 713 | - 'queue_priorite_tache' => 'prioridade', |
|
| 714 | - 'queue_purger_queue' => 'Reiniciar a lista de tarefas', |
|
| 715 | - 'queue_titre' => 'Tarefas de fundo', |
|
| 706 | + // Q |
|
| 707 | + 'queue_executer_maintenant' => 'Executar agora', |
|
| 708 | + 'queue_info_purger' => 'Você pode excluir todas as tarefas de fundo em espera e reinicializar a lista com as tarefas periódicas', |
|
| 709 | + 'queue_nb_jobs_in_queue' => '@nb@ tarefas em espera', |
|
| 710 | + 'queue_next_job_in_nb_sec' => 'Próxima tarefa em @nb@ s', |
|
| 711 | + 'queue_no_job_in_queue' => 'Nenhum tarefa em espera', |
|
| 712 | + 'queue_one_job_in_queue' => '1 tarefa em espera', |
|
| 713 | + 'queue_priorite_tache' => 'prioridade', |
|
| 714 | + 'queue_purger_queue' => 'Reiniciar a lista de tarefas', |
|
| 715 | + 'queue_titre' => 'Tarefas de fundo', |
|
| 716 | 716 | |
| 717 | - // R |
|
| 718 | - 'repertoire_plugins' => 'Diretório:', |
|
| 719 | - 'required' => '(obrigatório)', |
|
| 717 | + // R |
|
| 718 | + 'repertoire_plugins' => 'Diretório:', |
|
| 719 | + 'required' => '(obrigatório)', |
|
| 720 | 720 | |
| 721 | - // S |
|
| 722 | - 'sans_heure' => 'sem hora', |
|
| 723 | - 'statut_admin_restreint' => '(admin limitado)', |
|
| 724 | - 'statut_webmestre' => 'webmaster', |
|
| 721 | + // S |
|
| 722 | + 'sans_heure' => 'sem hora', |
|
| 723 | + 'statut_admin_restreint' => '(admin limitado)', |
|
| 724 | + 'statut_webmestre' => 'webmaster', |
|
| 725 | 725 | |
| 726 | - // T |
|
| 727 | - 'tache_cron_asap' => 'Tarefa CRON @function@ (ASAP)', |
|
| 728 | - 'tache_cron_secondes' => 'Tarefa CRON @function@ (a cada @nb@ s)', |
|
| 729 | - 'taille_cache_image' => 'As imagens calculadas automaticamente pelo SPIP (ícones de documentos, títulos apresentados sob a forma gráfica, funções matemáticas em formato TeX...) ocupam, no diretório @dir@, um total de @taille@.', |
|
| 730 | - 'taille_cache_moins_de' => 'O tamanho do cache é menor do que @octets@.', |
|
| 731 | - 'taille_cache_octets' => 'O tamanho atual do cache é de cerca de @octets@.', |
|
| 732 | - 'taille_cache_vide' => 'O cache está vazio.', |
|
| 733 | - 'taille_repertoire_cache' => 'Tamanho do diretório cache', |
|
| 734 | - 'text_article_propose_publication' => 'Matéria proposta para publicação.', |
|
| 735 | - 'texte_acces_ldap_anonyme_1' => 'Alguns servidores LDAP não aceitam nenhum acesso anônimo. Neste caso, é necessário especificar um identificador de acesso inicial de modo a poder, em seguida, pesquisar as informações no diretório. Na maior parte dos casos, entretanto, os campos a seguir poderão ser deixados em branco.', |
|
| 736 | - 'texte_admin_effacer_01' => 'Este comando apaga <i>todo</i> o conteúdo da base de dados,incluindo <i>todos</i> os acessos dos redatores e administradores. Após executá-lo, você deverá reinstalar o SPIP para recriar uma nova base de dados bem como um acesso inicial de administrador.', |
|
| 737 | - 'texte_adresse_annuaire_1' => '(Se o seu diretório está instalado na mesma máquina que este website, trata-se provavelmente de «localhost».)', |
|
| 738 | - 'texte_ajout_auteur' => 'O autor a seguir foi incluído na matéria:', |
|
| 739 | - 'texte_annuaire_ldap_1' => 'Se você tem acesso a um diretório LDAP, você poderá utilizá-lo para importar automaticamente os usuários para o SPIP.', |
|
| 740 | - 'texte_article_statut' => 'Esta matéria está:', |
|
| 741 | - 'texte_article_virtuel' => 'Matéria virtual', |
|
| 742 | - 'texte_article_virtuel_reference' => '<b>Matéria virtual:</b> matéria referenciada no seu site SPIP, mas redirecionada para um outro URL. Para cancelar o redirecionamento, apague o URL abaixo.', |
|
| 743 | - 'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"', |
|
| 744 | - 'texte_auteur_messagerie' => 'Este site pode monitorar permanentemente a lista de editores conectados, permitindo-lhe trocar mensagens em tempo real. Você pode decidir não aparecer nessa lista (ficando "invisível" para os outros usuários).', |
|
| 745 | - 'texte_auteurs' => 'OS AUTORES', |
|
| 746 | - 'texte_choix_base_1' => 'Escolha a sua base:', |
|
| 747 | - 'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.', |
|
| 748 | - 'texte_choix_base_3' => '<b>Escolha</b> abaixo a que lhe foi atribuída pelo seu serviço de hospedagem:', |
|
| 749 | - 'texte_choix_table_prefix' => 'Prefixo das tabelas:', |
|
| 750 | - 'texte_compte_element' => '@count@ elemento', |
|
| 751 | - 'texte_compte_elements' => '@count@ elementos', |
|
| 752 | - 'texte_conflit_edition_correction' => 'Por favor, controle abaixo as diferenças entre as duas versões do texto; você pode também copiar as suas modificações e depois recomeçar.', |
|
| 753 | - 'texte_connexion_mysql' => 'Consulte as informações fornecidas pelo seu serviço de hospedagem: nelas, você deverá encontrar o servidor de base de dados fornecido e os seus dados de conexão ao servidor SQL.', |
|
| 754 | - 'texte_contenu_article' => '(Conteúdo da matéria em poucas palavras.)', |
|
| 755 | - 'texte_contenu_articles' => 'De acordo com o layout adotado pelo seu site, você poderá decidir se certos elementos das matérias serão utilizados. Use a listagem abaixo para indicar quais elementos estão disponíveis.', |
|
| 756 | - 'texte_crash_base' => 'Se a sua base de dados se corrompeu, você poderá tentar uma reparação automática.', |
|
| 757 | - 'texte_creer_rubrique' => 'Antes de poder escrever matérias, você precisa criar uma seção.', |
|
| 758 | - 'texte_date_creation_article' => 'DATA DE CRIAÇÃO DA MATÉRIA:', |
|
| 759 | - 'texte_date_creation_objet' => 'Data de criação:', # on ajoute le ":" |
|
| 760 | - 'texte_date_publication_anterieure' => 'Data de redação anterior:', |
|
| 761 | - 'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redação anterior.', |
|
| 762 | - 'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:', |
|
| 763 | - 'texte_date_publication_objet' => 'Data de publicação online:', |
|
| 764 | - 'texte_definir_comme_traduction_rubrique' => 'Esta seção é uma tradução da seção número:', |
|
| 765 | - 'texte_descriptif_rapide' => 'Descrição rápida', |
|
| 766 | - 'texte_effacer_base' => 'Apagar a base de dados do SPIP', |
|
| 767 | - 'texte_effacer_statistiques' => 'Apagar as estatísticas', |
|
| 768 | - 'texte_en_cours_validation' => 'Os conteúdos abaixo estão propostos para publicação.', |
|
| 769 | - 'texte_enrichir_mise_a_jour' => 'Você pode enriquecer a diagramação do seu texto usando «atalhos tipográficos».', |
|
| 770 | - 'texte_fichier_authent' => '<b>O SPIP pode criar os arquivos especiais <tt>.htpasswd</tt> e <tt>.htpasswd-admin</tt> no diretório @dossier@?</b><p> |
|
| 726 | + // T |
|
| 727 | + 'tache_cron_asap' => 'Tarefa CRON @function@ (ASAP)', |
|
| 728 | + 'tache_cron_secondes' => 'Tarefa CRON @function@ (a cada @nb@ s)', |
|
| 729 | + 'taille_cache_image' => 'As imagens calculadas automaticamente pelo SPIP (ícones de documentos, títulos apresentados sob a forma gráfica, funções matemáticas em formato TeX...) ocupam, no diretório @dir@, um total de @taille@.', |
|
| 730 | + 'taille_cache_moins_de' => 'O tamanho do cache é menor do que @octets@.', |
|
| 731 | + 'taille_cache_octets' => 'O tamanho atual do cache é de cerca de @octets@.', |
|
| 732 | + 'taille_cache_vide' => 'O cache está vazio.', |
|
| 733 | + 'taille_repertoire_cache' => 'Tamanho do diretório cache', |
|
| 734 | + 'text_article_propose_publication' => 'Matéria proposta para publicação.', |
|
| 735 | + 'texte_acces_ldap_anonyme_1' => 'Alguns servidores LDAP não aceitam nenhum acesso anônimo. Neste caso, é necessário especificar um identificador de acesso inicial de modo a poder, em seguida, pesquisar as informações no diretório. Na maior parte dos casos, entretanto, os campos a seguir poderão ser deixados em branco.', |
|
| 736 | + 'texte_admin_effacer_01' => 'Este comando apaga <i>todo</i> o conteúdo da base de dados,incluindo <i>todos</i> os acessos dos redatores e administradores. Após executá-lo, você deverá reinstalar o SPIP para recriar uma nova base de dados bem como um acesso inicial de administrador.', |
|
| 737 | + 'texte_adresse_annuaire_1' => '(Se o seu diretório está instalado na mesma máquina que este website, trata-se provavelmente de «localhost».)', |
|
| 738 | + 'texte_ajout_auteur' => 'O autor a seguir foi incluído na matéria:', |
|
| 739 | + 'texte_annuaire_ldap_1' => 'Se você tem acesso a um diretório LDAP, você poderá utilizá-lo para importar automaticamente os usuários para o SPIP.', |
|
| 740 | + 'texte_article_statut' => 'Esta matéria está:', |
|
| 741 | + 'texte_article_virtuel' => 'Matéria virtual', |
|
| 742 | + 'texte_article_virtuel_reference' => '<b>Matéria virtual:</b> matéria referenciada no seu site SPIP, mas redirecionada para um outro URL. Para cancelar o redirecionamento, apague o URL abaixo.', |
|
| 743 | + 'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"', |
|
| 744 | + 'texte_auteur_messagerie' => 'Este site pode monitorar permanentemente a lista de editores conectados, permitindo-lhe trocar mensagens em tempo real. Você pode decidir não aparecer nessa lista (ficando "invisível" para os outros usuários).', |
|
| 745 | + 'texte_auteurs' => 'OS AUTORES', |
|
| 746 | + 'texte_choix_base_1' => 'Escolha a sua base:', |
|
| 747 | + 'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.', |
|
| 748 | + 'texte_choix_base_3' => '<b>Escolha</b> abaixo a que lhe foi atribuída pelo seu serviço de hospedagem:', |
|
| 749 | + 'texte_choix_table_prefix' => 'Prefixo das tabelas:', |
|
| 750 | + 'texte_compte_element' => '@count@ elemento', |
|
| 751 | + 'texte_compte_elements' => '@count@ elementos', |
|
| 752 | + 'texte_conflit_edition_correction' => 'Por favor, controle abaixo as diferenças entre as duas versões do texto; você pode também copiar as suas modificações e depois recomeçar.', |
|
| 753 | + 'texte_connexion_mysql' => 'Consulte as informações fornecidas pelo seu serviço de hospedagem: nelas, você deverá encontrar o servidor de base de dados fornecido e os seus dados de conexão ao servidor SQL.', |
|
| 754 | + 'texte_contenu_article' => '(Conteúdo da matéria em poucas palavras.)', |
|
| 755 | + 'texte_contenu_articles' => 'De acordo com o layout adotado pelo seu site, você poderá decidir se certos elementos das matérias serão utilizados. Use a listagem abaixo para indicar quais elementos estão disponíveis.', |
|
| 756 | + 'texte_crash_base' => 'Se a sua base de dados se corrompeu, você poderá tentar uma reparação automática.', |
|
| 757 | + 'texte_creer_rubrique' => 'Antes de poder escrever matérias, você precisa criar uma seção.', |
|
| 758 | + 'texte_date_creation_article' => 'DATA DE CRIAÇÃO DA MATÉRIA:', |
|
| 759 | + 'texte_date_creation_objet' => 'Data de criação:', # on ajoute le ":" |
|
| 760 | + 'texte_date_publication_anterieure' => 'Data de redação anterior:', |
|
| 761 | + 'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redação anterior.', |
|
| 762 | + 'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:', |
|
| 763 | + 'texte_date_publication_objet' => 'Data de publicação online:', |
|
| 764 | + 'texte_definir_comme_traduction_rubrique' => 'Esta seção é uma tradução da seção número:', |
|
| 765 | + 'texte_descriptif_rapide' => 'Descrição rápida', |
|
| 766 | + 'texte_effacer_base' => 'Apagar a base de dados do SPIP', |
|
| 767 | + 'texte_effacer_statistiques' => 'Apagar as estatísticas', |
|
| 768 | + 'texte_en_cours_validation' => 'Os conteúdos abaixo estão propostos para publicação.', |
|
| 769 | + 'texte_enrichir_mise_a_jour' => 'Você pode enriquecer a diagramação do seu texto usando «atalhos tipográficos».', |
|
| 770 | + 'texte_fichier_authent' => '<b>O SPIP pode criar os arquivos especiais <tt>.htpasswd</tt> e <tt>.htpasswd-admin</tt> no diretório @dossier@?</b><p> |
|
| 771 | 771 | Estes arquivos podem servir para restringir o acesso aos autores e administradores em outras áreas do seu site (programas externos de estatísticas, por exemplo).</p><p> |
| 772 | 772 | Se eles não forem úteis, você poderá deixar esta opção com o seu valor padrão (sem criar os arquivos).</p>', |
| 773 | - 'texte_informations_personnelles_1' => 'O sistema vai criar agora um acesso personalizado ao site.', |
|
| 774 | - 'texte_informations_personnelles_2' => '(Nota: trata-se de uma reinstalação, se o seu acesso funciona corretamente, você pode', |
|
| 775 | - 'texte_introductif_article' => '(Texto introdutório da matéria.)', |
|
| 776 | - 'texte_jeu_caractere' => 'É aconselhável usar no seu site o alfabeto universal (<tt>utf-8</tt>): ele permite a exibição de textos em todos os idiomas, e não tem problemas de compatibilidade com os navegadores modernos.', |
|
| 777 | - 'texte_jeu_caractere_3' => 'O seu site está configurado atualmente com o conjunto de caracteres:', |
|
| 778 | - 'texte_jeu_caractere_4' => 'Se isso não corresponde à realidade dos seus dados (por ex., em seguimento a um restauro da base de dados), ou se <em>você lançou este site</em> e deseja utilizar um outro conjunto de caracteres, por favor, indique-o aqui:', |
|
| 779 | - 'texte_login_ldap_1' => '(Deixe em branco para acesso anônimo, ou informe o caminho completo, por exemplo «<tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt>».)', |
|
| 780 | - 'texte_login_precaution' => 'Atenção! Este é o login com o qual você está conectado agora. Use este formulário com cautela...', |
|
| 781 | - 'texte_messagerie_agenda' => 'As mensagens internas permitem que os redatores se comuniquem entre si, diretamente da área privada do site. Elas estão associadas a uma agenda.', |
|
| 782 | - 'texte_mise_a_niveau_base_1' => 'Você acabou de atualizar os arquivos do SPIP. |
|
| 773 | + 'texte_informations_personnelles_1' => 'O sistema vai criar agora um acesso personalizado ao site.', |
|
| 774 | + 'texte_informations_personnelles_2' => '(Nota: trata-se de uma reinstalação, se o seu acesso funciona corretamente, você pode', |
|
| 775 | + 'texte_introductif_article' => '(Texto introdutório da matéria.)', |
|
| 776 | + 'texte_jeu_caractere' => 'É aconselhável usar no seu site o alfabeto universal (<tt>utf-8</tt>): ele permite a exibição de textos em todos os idiomas, e não tem problemas de compatibilidade com os navegadores modernos.', |
|
| 777 | + 'texte_jeu_caractere_3' => 'O seu site está configurado atualmente com o conjunto de caracteres:', |
|
| 778 | + 'texte_jeu_caractere_4' => 'Se isso não corresponde à realidade dos seus dados (por ex., em seguimento a um restauro da base de dados), ou se <em>você lançou este site</em> e deseja utilizar um outro conjunto de caracteres, por favor, indique-o aqui:', |
|
| 779 | + 'texte_login_ldap_1' => '(Deixe em branco para acesso anônimo, ou informe o caminho completo, por exemplo «<tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt>».)', |
|
| 780 | + 'texte_login_precaution' => 'Atenção! Este é o login com o qual você está conectado agora. Use este formulário com cautela...', |
|
| 781 | + 'texte_messagerie_agenda' => 'As mensagens internas permitem que os redatores se comuniquem entre si, diretamente da área privada do site. Elas estão associadas a uma agenda.', |
|
| 782 | + 'texte_mise_a_niveau_base_1' => 'Você acabou de atualizar os arquivos do SPIP. |
|
| 783 | 783 | Agora é necessário atualizar a base de dados do site.', |
| 784 | - 'texte_modifier_article' => 'Editar a matéria:', |
|
| 785 | - 'texte_multilinguisme' => 'Se você deseja gerar objetos em diversos idiomas, com uma navegação complexa, você pode incluir um menu de seleção de idioma nesses objetos, de acordo com a estrutura do seu site.', |
|
| 786 | - 'texte_multilinguisme_trad' => 'Você pode, igualmente, ativar um sistema de gerenciamento de links entre as diferentes traduções em certos objetos.', |
|
| 787 | - 'texte_non_compresse' => '<i>não compactado</i> (seu servidor não suporta esta funcionalidade)', |
|
| 788 | - 'texte_nouvelle_version_spip_1' => 'Você instalou uma nova versão do SPIP.', |
|
| 789 | - 'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma atualização mais completa do que o normal. Se você é o webmaster do site, por favor, apague o arquivo @connect@ e retome a instalação de forma a incluir os seus parâmetros de conexão à base de dados.<p> (NB.: se você não se lembra dos seus parâmetros de conexão, consulte o arquivo @connect@ antes de apagá-lo...)</p>', |
|
| 790 | - 'texte_operation_echec' => 'Volte à página anterior, escolha uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.', |
|
| 791 | - 'texte_plus_trois_car' => 'mais de 3 caracteres', |
|
| 792 | - 'texte_plusieurs_articles' => 'Demasiados autores encontrados para "@cherche_auteur@":', |
|
| 793 | - 'texte_port_annuaire' => '(O valor padrão indicado é geralmente conveniente.)', |
|
| 794 | - 'texte_presente_plugin' => 'Esta página lista os plugins disponíveis para o site. Você pode ativar os plugins necessários marcando a opção correspondente.', |
|
| 795 | - 'texte_proposer_publication' => 'Assim que a sua matéria estiver pronta, você pode propor a sua publicação.', |
|
| 796 | - 'texte_proxy' => 'Em alguns casos (intranet, redes protegidas...), os sites remotos (documentação do SPIP, sites sindicados etc.) só estarão acessíveis através de um <i>proxy HTTP</i>. Nesse caso, informe abaixo o endereço, no formato @[email protected], você pode deixar este campo vazio.', |
|
| 797 | - 'texte_publication_articles_post_dates' => 'Que comportamento o SPIP deve adotar face às matérias em que a data de publicação está pré-datada?', |
|
| 798 | - 'texte_rappel_selection_champs' => '[Não se esqueça de selecionar corretamente este campo.]', |
|
| 799 | - 'texte_recalcul_page' => 'Se você quiser recalcular uma única página, passe para a área pública e clique no botão «atualizar».', |
|
| 800 | - 'texte_recuperer_base' => 'Reparar a base de dados', |
|
| 801 | - 'texte_reference_mais_redirige' => 'matéria referenciada no seu site em SPIP, mas redirecionada para outro URL.', |
|
| 802 | - 'texte_requetes_echouent' => '<b>Já que certas solicitações SQL falharam sistematicamente e sem razão aparente, é possível que a causa esteja na base de dados em si.</b><p> |
|
| 784 | + 'texte_modifier_article' => 'Editar a matéria:', |
|
| 785 | + 'texte_multilinguisme' => 'Se você deseja gerar objetos em diversos idiomas, com uma navegação complexa, você pode incluir um menu de seleção de idioma nesses objetos, de acordo com a estrutura do seu site.', |
|
| 786 | + 'texte_multilinguisme_trad' => 'Você pode, igualmente, ativar um sistema de gerenciamento de links entre as diferentes traduções em certos objetos.', |
|
| 787 | + 'texte_non_compresse' => '<i>não compactado</i> (seu servidor não suporta esta funcionalidade)', |
|
| 788 | + 'texte_nouvelle_version_spip_1' => 'Você instalou uma nova versão do SPIP.', |
|
| 789 | + 'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma atualização mais completa do que o normal. Se você é o webmaster do site, por favor, apague o arquivo @connect@ e retome a instalação de forma a incluir os seus parâmetros de conexão à base de dados.<p> (NB.: se você não se lembra dos seus parâmetros de conexão, consulte o arquivo @connect@ antes de apagá-lo...)</p>', |
|
| 790 | + 'texte_operation_echec' => 'Volte à página anterior, escolha uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.', |
|
| 791 | + 'texte_plus_trois_car' => 'mais de 3 caracteres', |
|
| 792 | + 'texte_plusieurs_articles' => 'Demasiados autores encontrados para "@cherche_auteur@":', |
|
| 793 | + 'texte_port_annuaire' => '(O valor padrão indicado é geralmente conveniente.)', |
|
| 794 | + 'texte_presente_plugin' => 'Esta página lista os plugins disponíveis para o site. Você pode ativar os plugins necessários marcando a opção correspondente.', |
|
| 795 | + 'texte_proposer_publication' => 'Assim que a sua matéria estiver pronta, você pode propor a sua publicação.', |
|
| 796 | + 'texte_proxy' => 'Em alguns casos (intranet, redes protegidas...), os sites remotos (documentação do SPIP, sites sindicados etc.) só estarão acessíveis através de um <i>proxy HTTP</i>. Nesse caso, informe abaixo o endereço, no formato @[email protected], você pode deixar este campo vazio.', |
|
| 797 | + 'texte_publication_articles_post_dates' => 'Que comportamento o SPIP deve adotar face às matérias em que a data de publicação está pré-datada?', |
|
| 798 | + 'texte_rappel_selection_champs' => '[Não se esqueça de selecionar corretamente este campo.]', |
|
| 799 | + 'texte_recalcul_page' => 'Se você quiser recalcular uma única página, passe para a área pública e clique no botão «atualizar».', |
|
| 800 | + 'texte_recuperer_base' => 'Reparar a base de dados', |
|
| 801 | + 'texte_reference_mais_redirige' => 'matéria referenciada no seu site em SPIP, mas redirecionada para outro URL.', |
|
| 802 | + 'texte_requetes_echouent' => '<b>Já que certas solicitações SQL falharam sistematicamente e sem razão aparente, é possível que a causa esteja na base de dados em si.</b><p> |
|
| 803 | 803 | O seu servidor SQL dispõe de uma funcionalidade de reparação das suas tabelas quando elas são danificadas por acidente. Você poderá tentar esta reparação; em caso de falha, conserve uma cópia da mensagem de erro, que poderá conter indícios do que não está funcionando...</p><p> |
| 804 | 804 | Se o problema persistir, contate o seu serviço de hospedagem.</p>', |
| 805 | - 'texte_selection_langue_principale' => 'Você pode escolher abaixo o «idioma principal» do site. esta escolha não o obriga - felizmente! - a escrever as suas matérias no idioma selecionado, mas permite determinar: |
|
| 805 | + 'texte_selection_langue_principale' => 'Você pode escolher abaixo o «idioma principal» do site. esta escolha não o obriga - felizmente! - a escrever as suas matérias no idioma selecionado, mas permite determinar: |
|
| 806 | 806 | <ul><li>o formato padrão das datas no site público;</li> |
| 807 | 807 | <li>a natureza do motor tipográfico que o SPIP deverá usar para a composição dos textos;</li> |
| 808 | 808 | <li>o idioma usado nos formulários do site público;</li> |
| 809 | 809 | <li>o idioma padrão exibido na área privada.</li></ul>', |
| 810 | - 'texte_sous_titre' => 'Subtítulo', |
|
| 811 | - 'texte_statistiques_visites' => '(barras escuras: domingo / curva escura: evolução da média)', |
|
| 812 | - 'texte_statut_attente_validation' => 'aguardando validação', |
|
| 813 | - 'texte_statut_publies' => 'publicadas online', |
|
| 814 | - 'texte_statut_refuses' => 'recusadas', |
|
| 815 | - 'texte_suppression_fichiers' => 'Use este comando para excluir todos os arquivos que constam do cache do SPIP. Isto permite, por exemplo, forçar a reconstrução de todas as páginas, caso você tenha feito alterações importantes no layout ou na estrutura do site.', |
|
| 816 | - 'texte_sur_titre' => 'Sobretítulo', |
|
| 817 | - 'texte_table_ok' => ': esta tabela está OK.', |
|
| 818 | - 'texte_tentative_recuperation' => 'Tentativa de reparação', |
|
| 819 | - 'texte_tenter_reparation' => 'Tentar uma reparação da base de dados', |
|
| 820 | - 'texte_test_proxy' => 'Para testar este proxy, informe aqui o endereço de um website que você deseje testar.', |
|
| 821 | - 'texte_titre_02' => 'Título:', |
|
| 822 | - 'texte_titre_obligatoire' => '<b>Título</b> [obrigatório]', |
|
| 823 | - 'texte_travail_article' => '@nom_auteur_modif@ trabalhou nesta matéria há @date_diff@ minutos', |
|
| 824 | - 'texte_travail_collaboratif' => 'Se é frequente acontecer de mais de um redator trabalhar em uma mesma matéria, o sistema pode exibir as matérias recentemente "abertas", de modo a evitar modificações concorrentes. Esta opção está desativada por padrão, para evitar a exibição de mensagens de aviso desnecessárias.', |
|
| 825 | - 'texte_vide' => 'vazia', |
|
| 826 | - 'texte_vider_cache' => 'Esvaziar o cache', |
|
| 827 | - 'titre_admin_tech' => 'Manutenção técnica', |
|
| 828 | - 'titre_admin_vider' => 'Manutenção técnica', |
|
| 829 | - 'titre_ajouter_un_auteur' => 'Incluir um autor', |
|
| 830 | - 'titre_ajouter_un_mot' => 'Incluir uma palavra-chave', |
|
| 831 | - 'titre_cadre_afficher_article' => 'Exibir as matérias', |
|
| 832 | - 'titre_cadre_afficher_traductions' => 'Exibir o status das traduções para os idiomas a seguir:', |
|
| 833 | - 'titre_cadre_ajouter_auteur' => 'INCLUIR UM AUTOR:', |
|
| 834 | - 'titre_cadre_interieur_rubrique' => 'Na seção', |
|
| 835 | - 'titre_cadre_numero_auteur' => 'AUTOR NÚMERO', |
|
| 836 | - 'titre_cadre_numero_objet' => '@objet@ NÚMERO:', |
|
| 837 | - 'titre_cadre_signature_obligatoire' => '<b>Assinatura</b> [obrigatório]<br />', |
|
| 838 | - 'titre_config_contenu_notifications' => 'Notificações', |
|
| 839 | - 'titre_config_contenu_prive' => 'Na área privada', |
|
| 840 | - 'titre_config_contenu_public' => 'No site público', |
|
| 841 | - 'titre_config_fonctions' => 'Configuração do site', |
|
| 842 | - 'titre_config_langage' => 'Configurar o idioma', |
|
| 843 | - 'titre_configuration' => 'Configuração do site', |
|
| 844 | - 'titre_configurer_preferences' => 'Configurar as suas preferências', |
|
| 845 | - 'titre_configurer_preferences_menus' => 'Configurar as suas preferências de menus', |
|
| 846 | - 'titre_conflit_edition' => 'Conflito durante a edição', |
|
| 847 | - 'titre_connexion_ldap' => 'Opções: <b>Sua conexão LDAP</b>', |
|
| 848 | - 'titre_groupe_mots' => 'GRUPO DE PALAVRAS-CHAVE:', |
|
| 849 | - 'titre_identite_site' => 'Identidade do site', |
|
| 850 | - 'titre_langue_article' => 'Idioma da matéria', |
|
| 851 | - 'titre_langue_rubrique' => 'Idioma da seção', |
|
| 852 | - 'titre_langue_trad_article' => 'IDIOMA E TRADUÇÕES DA MATÉRIA', |
|
| 853 | - 'titre_les_articles' => 'AS MATÉRIAS', |
|
| 854 | - 'titre_messagerie_agenda' => 'Mensagens internas e agenda', |
|
| 855 | - 'titre_naviguer_dans_le_site' => 'Navegar no site...', |
|
| 856 | - 'titre_nouvelle_rubrique' => 'Nova seção', |
|
| 857 | - 'titre_numero_rubrique' => 'SEÇÃO NÚMERO:', |
|
| 858 | - 'titre_page_articles_edit' => 'Editar: @titre@', |
|
| 859 | - 'titre_page_articles_page' => 'As matérias', |
|
| 860 | - 'titre_page_articles_tous' => 'Todo o site', |
|
| 861 | - 'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@', |
|
| 862 | - 'titre_page_config_contenu' => 'Configuração do site', |
|
| 863 | - 'titre_page_delete_all' => 'supressão total e irreversível', |
|
| 864 | - 'titre_page_recherche' => 'Resultados da busca por @recherche@', |
|
| 865 | - 'titre_page_statistiques_referers' => 'Estatísticas (links de entrada)', |
|
| 866 | - 'titre_page_upgrade' => 'Atualização do SPIP', |
|
| 867 | - 'titre_preference_menus_favoris' => 'Menus favoritos', |
|
| 868 | - 'titre_publication_articles_post_dates' => 'Publicação de matérias pós-datadas', |
|
| 869 | - 'titre_reparation' => 'Reparação', |
|
| 870 | - 'titre_suivi_petition' => 'Acompanhamento das petições', |
|
| 871 | - 'tls_ldap' => 'Transport Layer Security:', |
|
| 872 | - 'trad_article_traduction' => 'Todas as versões desta matéria:', |
|
| 873 | - 'trad_delier' => 'Desvincular destas traduções', |
|
| 874 | - 'trad_lier' => 'Esta matéria é uma tradução da matéria número:', |
|
| 875 | - 'trad_new' => 'Escrever uma nova tradução', |
|
| 810 | + 'texte_sous_titre' => 'Subtítulo', |
|
| 811 | + 'texte_statistiques_visites' => '(barras escuras: domingo / curva escura: evolução da média)', |
|
| 812 | + 'texte_statut_attente_validation' => 'aguardando validação', |
|
| 813 | + 'texte_statut_publies' => 'publicadas online', |
|
| 814 | + 'texte_statut_refuses' => 'recusadas', |
|
| 815 | + 'texte_suppression_fichiers' => 'Use este comando para excluir todos os arquivos que constam do cache do SPIP. Isto permite, por exemplo, forçar a reconstrução de todas as páginas, caso você tenha feito alterações importantes no layout ou na estrutura do site.', |
|
| 816 | + 'texte_sur_titre' => 'Sobretítulo', |
|
| 817 | + 'texte_table_ok' => ': esta tabela está OK.', |
|
| 818 | + 'texte_tentative_recuperation' => 'Tentativa de reparação', |
|
| 819 | + 'texte_tenter_reparation' => 'Tentar uma reparação da base de dados', |
|
| 820 | + 'texte_test_proxy' => 'Para testar este proxy, informe aqui o endereço de um website que você deseje testar.', |
|
| 821 | + 'texte_titre_02' => 'Título:', |
|
| 822 | + 'texte_titre_obligatoire' => '<b>Título</b> [obrigatório]', |
|
| 823 | + 'texte_travail_article' => '@nom_auteur_modif@ trabalhou nesta matéria há @date_diff@ minutos', |
|
| 824 | + 'texte_travail_collaboratif' => 'Se é frequente acontecer de mais de um redator trabalhar em uma mesma matéria, o sistema pode exibir as matérias recentemente "abertas", de modo a evitar modificações concorrentes. Esta opção está desativada por padrão, para evitar a exibição de mensagens de aviso desnecessárias.', |
|
| 825 | + 'texte_vide' => 'vazia', |
|
| 826 | + 'texte_vider_cache' => 'Esvaziar o cache', |
|
| 827 | + 'titre_admin_tech' => 'Manutenção técnica', |
|
| 828 | + 'titre_admin_vider' => 'Manutenção técnica', |
|
| 829 | + 'titre_ajouter_un_auteur' => 'Incluir um autor', |
|
| 830 | + 'titre_ajouter_un_mot' => 'Incluir uma palavra-chave', |
|
| 831 | + 'titre_cadre_afficher_article' => 'Exibir as matérias', |
|
| 832 | + 'titre_cadre_afficher_traductions' => 'Exibir o status das traduções para os idiomas a seguir:', |
|
| 833 | + 'titre_cadre_ajouter_auteur' => 'INCLUIR UM AUTOR:', |
|
| 834 | + 'titre_cadre_interieur_rubrique' => 'Na seção', |
|
| 835 | + 'titre_cadre_numero_auteur' => 'AUTOR NÚMERO', |
|
| 836 | + 'titre_cadre_numero_objet' => '@objet@ NÚMERO:', |
|
| 837 | + 'titre_cadre_signature_obligatoire' => '<b>Assinatura</b> [obrigatório]<br />', |
|
| 838 | + 'titre_config_contenu_notifications' => 'Notificações', |
|
| 839 | + 'titre_config_contenu_prive' => 'Na área privada', |
|
| 840 | + 'titre_config_contenu_public' => 'No site público', |
|
| 841 | + 'titre_config_fonctions' => 'Configuração do site', |
|
| 842 | + 'titre_config_langage' => 'Configurar o idioma', |
|
| 843 | + 'titre_configuration' => 'Configuração do site', |
|
| 844 | + 'titre_configurer_preferences' => 'Configurar as suas preferências', |
|
| 845 | + 'titre_configurer_preferences_menus' => 'Configurar as suas preferências de menus', |
|
| 846 | + 'titre_conflit_edition' => 'Conflito durante a edição', |
|
| 847 | + 'titre_connexion_ldap' => 'Opções: <b>Sua conexão LDAP</b>', |
|
| 848 | + 'titre_groupe_mots' => 'GRUPO DE PALAVRAS-CHAVE:', |
|
| 849 | + 'titre_identite_site' => 'Identidade do site', |
|
| 850 | + 'titre_langue_article' => 'Idioma da matéria', |
|
| 851 | + 'titre_langue_rubrique' => 'Idioma da seção', |
|
| 852 | + 'titre_langue_trad_article' => 'IDIOMA E TRADUÇÕES DA MATÉRIA', |
|
| 853 | + 'titre_les_articles' => 'AS MATÉRIAS', |
|
| 854 | + 'titre_messagerie_agenda' => 'Mensagens internas e agenda', |
|
| 855 | + 'titre_naviguer_dans_le_site' => 'Navegar no site...', |
|
| 856 | + 'titre_nouvelle_rubrique' => 'Nova seção', |
|
| 857 | + 'titre_numero_rubrique' => 'SEÇÃO NÚMERO:', |
|
| 858 | + 'titre_page_articles_edit' => 'Editar: @titre@', |
|
| 859 | + 'titre_page_articles_page' => 'As matérias', |
|
| 860 | + 'titre_page_articles_tous' => 'Todo o site', |
|
| 861 | + 'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@', |
|
| 862 | + 'titre_page_config_contenu' => 'Configuração do site', |
|
| 863 | + 'titre_page_delete_all' => 'supressão total e irreversível', |
|
| 864 | + 'titre_page_recherche' => 'Resultados da busca por @recherche@', |
|
| 865 | + 'titre_page_statistiques_referers' => 'Estatísticas (links de entrada)', |
|
| 866 | + 'titre_page_upgrade' => 'Atualização do SPIP', |
|
| 867 | + 'titre_preference_menus_favoris' => 'Menus favoritos', |
|
| 868 | + 'titre_publication_articles_post_dates' => 'Publicação de matérias pós-datadas', |
|
| 869 | + 'titre_reparation' => 'Reparação', |
|
| 870 | + 'titre_suivi_petition' => 'Acompanhamento das petições', |
|
| 871 | + 'tls_ldap' => 'Transport Layer Security:', |
|
| 872 | + 'trad_article_traduction' => 'Todas as versões desta matéria:', |
|
| 873 | + 'trad_delier' => 'Desvincular destas traduções', |
|
| 874 | + 'trad_lier' => 'Esta matéria é uma tradução da matéria número:', |
|
| 875 | + 'trad_new' => 'Escrever uma nova tradução', |
|
| 876 | 876 | |
| 877 | - // U |
|
| 878 | - 'utf8_convert_erreur_orig' => 'Erro: o conjunto de caracteres @charset@ não é suportado.', |
|
| 877 | + // U |
|
| 878 | + 'utf8_convert_erreur_orig' => 'Erro: o conjunto de caracteres @charset@ não é suportado.', |
|
| 879 | 879 | |
| 880 | - // V |
|
| 881 | - 'version' => 'Versão:' |
|
| 880 | + // V |
|
| 881 | + 'version' => 'Versão:' |
|
| 882 | 882 | ); |
@@ -4,584 +4,584 @@ discard block |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'access_interface_graphique' => 'Reen al kompleta grafika interfaco', |
|
| 14 | - 'access_mode_texte' => 'Afiŝi la simpligitan tekstan interfacon', |
|
| 15 | - 'admin_debug' => 'erarserĉilo', |
|
| 16 | - 'admin_modifier_article' => 'Modifu tiun ĉi artikolon', |
|
| 17 | - 'admin_modifier_auteur' => 'Modifu tiun ĉi aŭtoron', |
|
| 18 | - 'admin_modifier_breve' => 'Modifu tiun ĉi fulm-informon', |
|
| 19 | - 'admin_modifier_mot' => 'Modifu tiun ĉi ŝlosilvorton', |
|
| 20 | - 'admin_modifier_rubrique' => 'Modifu tiun ĉi rubrikon', |
|
| 21 | - 'admin_recalculer' => 'Rekalkulu tiun ĉi paĝon', |
|
| 22 | - 'afficher_calendrier' => 'Montri la kalendaro', |
|
| 23 | - 'afficher_trad' => 'afiŝi la tradukojn', |
|
| 24 | - 'alerte_maj_impossible' => '<b>Alarmo !</b> La ĝisdatigo de la SQL-datenbazo al versio @version@ ne eblas pro datenbazo-modif-rajtaj kialoj. Bonvolu kontakti vian retgastiganton.', |
|
| 25 | - 'alerte_modif_info_concourante' => 'ATENTU : Tiu ĉi informo estis modifita de alia homo. La nuna stato estas :', |
|
| 26 | - 'analyse_xml' => 'XML analizo', |
|
| 27 | - 'annuler' => 'Nuligi', |
|
| 28 | - 'antispam_champ_vide' => 'Bonvolu forlasi tiun tajpujon malplena :', |
|
| 29 | - 'articles_recents' => 'La plej freŝaj artikoloj', |
|
| 30 | - 'avis_1_erreur_saisie' => 'Estas 1 eraro en via tajpado, bonvolu kontroli ĝin.', |
|
| 31 | - 'avis_archive_incorrect' => 'Tiu arkivo ne estas SPIP-dosiero', |
|
| 32 | - 'avis_archive_invalide' => 'Tiu arkiva dosiero ne validas', |
|
| 33 | - 'avis_attention' => 'ATENTU !', |
|
| 34 | - 'avis_champ_incorrect_type_objet' => 'Erara tajpuja nomo @name@ por la objekto de tipo @type@', |
|
| 35 | - 'avis_colonne_inexistante' => 'La kolumno @col@ ne ekzistas', |
|
| 36 | - 'avis_erreur' => 'Eraro : vidu ĉi-sube', |
|
| 37 | - 'avis_erreur_connexion' => 'Konekt-eraro', |
|
| 38 | - 'avis_erreur_cookie' => 'kuketo-problemo', |
|
| 39 | - 'avis_erreur_fonction_contexte' => 'Program-eraro. Tiu funkcio ne alvokeblas en tiu ĉi kunteksto.', |
|
| 40 | - 'avis_erreur_mysql' => 'SQL-eraro', |
|
| 41 | - 'avis_erreur_sauvegarde' => 'Konservo-eraro (@type@ @id_objet@) ! ', |
|
| 42 | - 'avis_erreur_visiteur' => 'Alir-problemo al la privata spaco', |
|
| 43 | - 'avis_nb_erreurs_saisie' => 'Estas @nb@ eraroj en via tajpado, bonvolu kontroli ilin.', |
|
| 12 | + // A |
|
| 13 | + 'access_interface_graphique' => 'Reen al kompleta grafika interfaco', |
|
| 14 | + 'access_mode_texte' => 'Afiŝi la simpligitan tekstan interfacon', |
|
| 15 | + 'admin_debug' => 'erarserĉilo', |
|
| 16 | + 'admin_modifier_article' => 'Modifu tiun ĉi artikolon', |
|
| 17 | + 'admin_modifier_auteur' => 'Modifu tiun ĉi aŭtoron', |
|
| 18 | + 'admin_modifier_breve' => 'Modifu tiun ĉi fulm-informon', |
|
| 19 | + 'admin_modifier_mot' => 'Modifu tiun ĉi ŝlosilvorton', |
|
| 20 | + 'admin_modifier_rubrique' => 'Modifu tiun ĉi rubrikon', |
|
| 21 | + 'admin_recalculer' => 'Rekalkulu tiun ĉi paĝon', |
|
| 22 | + 'afficher_calendrier' => 'Montri la kalendaro', |
|
| 23 | + 'afficher_trad' => 'afiŝi la tradukojn', |
|
| 24 | + 'alerte_maj_impossible' => '<b>Alarmo !</b> La ĝisdatigo de la SQL-datenbazo al versio @version@ ne eblas pro datenbazo-modif-rajtaj kialoj. Bonvolu kontakti vian retgastiganton.', |
|
| 25 | + 'alerte_modif_info_concourante' => 'ATENTU : Tiu ĉi informo estis modifita de alia homo. La nuna stato estas :', |
|
| 26 | + 'analyse_xml' => 'XML analizo', |
|
| 27 | + 'annuler' => 'Nuligi', |
|
| 28 | + 'antispam_champ_vide' => 'Bonvolu forlasi tiun tajpujon malplena :', |
|
| 29 | + 'articles_recents' => 'La plej freŝaj artikoloj', |
|
| 30 | + 'avis_1_erreur_saisie' => 'Estas 1 eraro en via tajpado, bonvolu kontroli ĝin.', |
|
| 31 | + 'avis_archive_incorrect' => 'Tiu arkivo ne estas SPIP-dosiero', |
|
| 32 | + 'avis_archive_invalide' => 'Tiu arkiva dosiero ne validas', |
|
| 33 | + 'avis_attention' => 'ATENTU !', |
|
| 34 | + 'avis_champ_incorrect_type_objet' => 'Erara tajpuja nomo @name@ por la objekto de tipo @type@', |
|
| 35 | + 'avis_colonne_inexistante' => 'La kolumno @col@ ne ekzistas', |
|
| 36 | + 'avis_erreur' => 'Eraro : vidu ĉi-sube', |
|
| 37 | + 'avis_erreur_connexion' => 'Konekt-eraro', |
|
| 38 | + 'avis_erreur_cookie' => 'kuketo-problemo', |
|
| 39 | + 'avis_erreur_fonction_contexte' => 'Program-eraro. Tiu funkcio ne alvokeblas en tiu ĉi kunteksto.', |
|
| 40 | + 'avis_erreur_mysql' => 'SQL-eraro', |
|
| 41 | + 'avis_erreur_sauvegarde' => 'Konservo-eraro (@type@ @id_objet@) ! ', |
|
| 42 | + 'avis_erreur_visiteur' => 'Alir-problemo al la privata spaco', |
|
| 43 | + 'avis_nb_erreurs_saisie' => 'Estas @nb@ eraroj en via tajpado, bonvolu kontroli ilin.', |
|
| 44 | 44 | |
| 45 | - // B |
|
| 46 | - 'barre_a_accent_grave' => 'Entajpi malakut-akcentan ĉefliteran A', |
|
| 47 | - 'barre_aide' => 'Uzu la tipografiajn rapidligilojn por pliriĉigi vian enpaĝigon', |
|
| 48 | - 'barre_e_accent_aigu' => 'Entajpi malakut-akcentan ĉefliteran E', |
|
| 49 | - 'barre_eo' => 'Entajpi E en ĉefliteran O', |
|
| 50 | - 'barre_eo_maj' => 'Entajpi E en la ĉeflitero O', |
|
| 51 | - 'barre_euro' => 'Entajpi la simbolon €', |
|
| 52 | - 'barre_gras' => '{{Grasigi}}', |
|
| 53 | - 'barre_guillemets' => 'Flanki per « citiloj »', |
|
| 54 | - 'barre_guillemets_simples' => 'Flanki per simplaj citiloj', |
|
| 55 | - 'barre_intertitre' => '{{{Intertitoligi}}}', |
|
| 56 | - 'barre_italic' => '{Kursivigi}', |
|
| 57 | - 'barre_lien' => 'Transformi al [hiperligo->http://...]', |
|
| 58 | - 'barre_lien_input' => 'Bonvolu indiki la retadreson de via ligilo (vi povas indiki ret-adreson tian, kia http://www.monsite.com aŭ simple indiki la numeron de artikolo de tiu retejo.', |
|
| 59 | - 'barre_note' => 'Transformi al [[sub-paĝan noton]]', |
|
| 60 | - 'barre_paragraphe' => 'Krei paragrafon', |
|
| 61 | - 'barre_quote' => '<quote>Citi mesaĝon</quote>', |
|
| 62 | - 'bouton_changer' => 'Ŝanĝi', |
|
| 63 | - 'bouton_chercher' => 'Serĉi', |
|
| 64 | - 'bouton_choisir' => 'Elekti', |
|
| 65 | - 'bouton_deplacer' => 'Movi', |
|
| 66 | - 'bouton_download' => 'Elŝuti', |
|
| 67 | - 'bouton_enregistrer' => 'Registri', |
|
| 68 | - 'bouton_radio_desactiver_messagerie_interne' => 'Malŝalti la internan mesaĝilon', |
|
| 69 | - 'bouton_radio_envoi_annonces' => 'Sendi la ĉefartikolajn anoncojn', |
|
| 70 | - 'bouton_radio_non_envoi_annonces' => 'Ne sendi anoncojn', |
|
| 71 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne sendi liston de novaĵoj', |
|
| 72 | - 'bouton_recharger_page' => 'freŝigi tiun paĝon', |
|
| 73 | - 'bouton_telecharger' => 'Alŝuti', |
|
| 74 | - 'bouton_upload' => 'Alŝuti', |
|
| 75 | - 'bouton_valider' => 'Validigi', |
|
| 45 | + // B |
|
| 46 | + 'barre_a_accent_grave' => 'Entajpi malakut-akcentan ĉefliteran A', |
|
| 47 | + 'barre_aide' => 'Uzu la tipografiajn rapidligilojn por pliriĉigi vian enpaĝigon', |
|
| 48 | + 'barre_e_accent_aigu' => 'Entajpi malakut-akcentan ĉefliteran E', |
|
| 49 | + 'barre_eo' => 'Entajpi E en ĉefliteran O', |
|
| 50 | + 'barre_eo_maj' => 'Entajpi E en la ĉeflitero O', |
|
| 51 | + 'barre_euro' => 'Entajpi la simbolon €', |
|
| 52 | + 'barre_gras' => '{{Grasigi}}', |
|
| 53 | + 'barre_guillemets' => 'Flanki per « citiloj »', |
|
| 54 | + 'barre_guillemets_simples' => 'Flanki per simplaj citiloj', |
|
| 55 | + 'barre_intertitre' => '{{{Intertitoligi}}}', |
|
| 56 | + 'barre_italic' => '{Kursivigi}', |
|
| 57 | + 'barre_lien' => 'Transformi al [hiperligo->http://...]', |
|
| 58 | + 'barre_lien_input' => 'Bonvolu indiki la retadreson de via ligilo (vi povas indiki ret-adreson tian, kia http://www.monsite.com aŭ simple indiki la numeron de artikolo de tiu retejo.', |
|
| 59 | + 'barre_note' => 'Transformi al [[sub-paĝan noton]]', |
|
| 60 | + 'barre_paragraphe' => 'Krei paragrafon', |
|
| 61 | + 'barre_quote' => '<quote>Citi mesaĝon</quote>', |
|
| 62 | + 'bouton_changer' => 'Ŝanĝi', |
|
| 63 | + 'bouton_chercher' => 'Serĉi', |
|
| 64 | + 'bouton_choisir' => 'Elekti', |
|
| 65 | + 'bouton_deplacer' => 'Movi', |
|
| 66 | + 'bouton_download' => 'Elŝuti', |
|
| 67 | + 'bouton_enregistrer' => 'Registri', |
|
| 68 | + 'bouton_radio_desactiver_messagerie_interne' => 'Malŝalti la internan mesaĝilon', |
|
| 69 | + 'bouton_radio_envoi_annonces' => 'Sendi la ĉefartikolajn anoncojn', |
|
| 70 | + 'bouton_radio_non_envoi_annonces' => 'Ne sendi anoncojn', |
|
| 71 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne sendi liston de novaĵoj', |
|
| 72 | + 'bouton_recharger_page' => 'freŝigi tiun paĝon', |
|
| 73 | + 'bouton_telecharger' => 'Alŝuti', |
|
| 74 | + 'bouton_upload' => 'Alŝuti', |
|
| 75 | + 'bouton_valider' => 'Validigi', |
|
| 76 | 76 | |
| 77 | - // C |
|
| 78 | - 'cal_apresmidi' => 'posttagmezo', |
|
| 79 | - 'cal_jour_entier' => 'tuta tago', |
|
| 80 | - 'cal_matin' => 'mateno', |
|
| 81 | - 'cal_par_jour' => 'tag-kalendaro', |
|
| 82 | - 'cal_par_mois' => 'monat-kalendaro', |
|
| 83 | - 'cal_par_semaine' => 'semajn-kalendaro', |
|
| 84 | - 'choix_couleur_interface' => 'koloro', |
|
| 85 | - 'choix_interface' => 'elekto de interfaco', |
|
| 86 | - 'colonne' => 'Kolumno', |
|
| 87 | - 'confirm_changer_statut' => 'Atentu, vi petis por ŝanĝi la statuton de tiu elemento. Ĉu vi deziras daŭrigi ?', |
|
| 88 | - 'correcte' => 'korekta', |
|
| 77 | + // C |
|
| 78 | + 'cal_apresmidi' => 'posttagmezo', |
|
| 79 | + 'cal_jour_entier' => 'tuta tago', |
|
| 80 | + 'cal_matin' => 'mateno', |
|
| 81 | + 'cal_par_jour' => 'tag-kalendaro', |
|
| 82 | + 'cal_par_mois' => 'monat-kalendaro', |
|
| 83 | + 'cal_par_semaine' => 'semajn-kalendaro', |
|
| 84 | + 'choix_couleur_interface' => 'koloro', |
|
| 85 | + 'choix_interface' => 'elekto de interfaco', |
|
| 86 | + 'colonne' => 'Kolumno', |
|
| 87 | + 'confirm_changer_statut' => 'Atentu, vi petis por ŝanĝi la statuton de tiu elemento. Ĉu vi deziras daŭrigi ?', |
|
| 88 | + 'correcte' => 'korekta', |
|
| 89 | 89 | |
| 90 | - // D |
|
| 91 | - 'date_aujourdhui' => 'hodiaŭ', |
|
| 92 | - 'date_avant_jc' => 'a.K.', |
|
| 93 | - 'date_dans' => 'post @delai@', |
|
| 94 | - 'date_de_mois_1' => '@j@ @nommois@', |
|
| 95 | - 'date_de_mois_10' => '@j@ @nommois@', |
|
| 96 | - 'date_de_mois_11' => '@j@ @nommois@', |
|
| 97 | - 'date_de_mois_12' => '@j@ @nommois@', |
|
| 98 | - 'date_de_mois_2' => '@j@ @nommois@', |
|
| 99 | - 'date_de_mois_3' => '@j@ @nommois@', |
|
| 100 | - 'date_de_mois_4' => '@j@ @nommois@', |
|
| 101 | - 'date_de_mois_5' => '@j@ @nommois@', |
|
| 102 | - 'date_de_mois_6' => '@j@ @nommois@', |
|
| 103 | - 'date_de_mois_7' => '@j@ @nommois@', |
|
| 104 | - 'date_de_mois_8' => '@j@ @nommois@', |
|
| 105 | - 'date_de_mois_9' => '@j@ @nommois@', |
|
| 106 | - 'date_demain' => 'morgaŭ', |
|
| 107 | - 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 108 | - 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 109 | - 'date_fmt_jour' => '@nomjour@ la @jour@a', |
|
| 110 | - 'date_fmt_jour_heure' => '@jour@ je la @heure@', |
|
| 111 | - 'date_fmt_jour_heure_debut_fin' => 'la @jour@ de @heure_debut@ ĝis @heure_fin@', |
|
| 112 | - 'date_fmt_jour_heure_debut_fin_abbr' => 'la @dtstart@@jour@a de @heure_debut@@dtabbr@ ĝis @dtend@@heure_fin@@dtend@', |
|
| 113 | - 'date_fmt_jour_mois' => '@jour@a @nommois@', |
|
| 114 | - 'date_fmt_jour_mois_annee' => '@jour@a @nommois@ @annee@', |
|
| 115 | - 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 116 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 117 | - 'date_fmt_nomjour_date' => 'la @nomjour@ @date@', |
|
| 118 | - 'date_fmt_periode' => 'De @date_debut@ ĝis @date_fin@', |
|
| 119 | - 'date_fmt_periode_abbr' => 'De @dtart@@date_debut@@dtabbr@ ĝis @dtend@@date_fin@@dtabbr@', |
|
| 120 | - 'date_fmt_periode_from' => 'De', |
|
| 121 | - 'date_fmt_periode_to' => 'ĝis', |
|
| 122 | - 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 123 | - 'date_heures' => 'horoj', |
|
| 124 | - 'date_hier' => 'hieraŭ', |
|
| 125 | - 'date_il_y_a' => 'antaŭ @delai@', |
|
| 126 | - 'date_jnum1' => '1', |
|
| 127 | - 'date_jnum10' => '10', |
|
| 128 | - 'date_jnum11' => '11', |
|
| 129 | - 'date_jnum12' => '12', |
|
| 130 | - 'date_jnum13' => '13', |
|
| 131 | - 'date_jnum14' => '14', |
|
| 132 | - 'date_jnum15' => '15', |
|
| 133 | - 'date_jnum16' => '16', |
|
| 134 | - 'date_jnum17' => '17', |
|
| 135 | - 'date_jnum18' => '18', |
|
| 136 | - 'date_jnum19' => '19', |
|
| 137 | - 'date_jnum2' => '2', |
|
| 138 | - 'date_jnum20' => '20', |
|
| 139 | - 'date_jnum21' => '21', |
|
| 140 | - 'date_jnum22' => '22', |
|
| 141 | - 'date_jnum23' => '23', |
|
| 142 | - 'date_jnum24' => '24', |
|
| 143 | - 'date_jnum25' => '25', |
|
| 144 | - 'date_jnum26' => '26', |
|
| 145 | - 'date_jnum27' => '27', |
|
| 146 | - 'date_jnum28' => '28', |
|
| 147 | - 'date_jnum29' => '29', |
|
| 148 | - 'date_jnum3' => '3', |
|
| 149 | - 'date_jnum30' => '30', |
|
| 150 | - 'date_jnum31' => '31', |
|
| 151 | - 'date_jnum4' => '4', |
|
| 152 | - 'date_jnum5' => '5', |
|
| 153 | - 'date_jnum6' => '6', |
|
| 154 | - 'date_jnum7' => '7', |
|
| 155 | - 'date_jnum8' => '8', |
|
| 156 | - 'date_jnum9' => '9', |
|
| 157 | - 'date_jour_1' => 'dimanĉo', |
|
| 158 | - 'date_jour_1_abbr' => 'dim.', |
|
| 159 | - 'date_jour_1_initiale' => 'd.', |
|
| 160 | - 'date_jour_2' => 'lundo', |
|
| 161 | - 'date_jour_2_abbr' => 'lun.', |
|
| 162 | - 'date_jour_2_initiale' => 'l.', |
|
| 163 | - 'date_jour_3' => 'mardo', |
|
| 164 | - 'date_jour_3_abbr' => 'mar.', |
|
| 165 | - 'date_jour_3_initiale' => 'm.', |
|
| 166 | - 'date_jour_4' => 'merkredo', |
|
| 167 | - 'date_jour_4_abbr' => 'mer.', |
|
| 168 | - 'date_jour_4_initiale' => 'm.', |
|
| 169 | - 'date_jour_5' => 'ĵaŭdo', |
|
| 170 | - 'date_jour_5_abbr' => 'jaŭ.', |
|
| 171 | - 'date_jour_5_initiale' => 'j.', |
|
| 172 | - 'date_jour_6' => 'vendredo', |
|
| 173 | - 'date_jour_6_abbr' => 'ven.', |
|
| 174 | - 'date_jour_6_initiale' => 'v.', |
|
| 175 | - 'date_jour_7' => 'sabato', |
|
| 176 | - 'date_jour_7_abbr' => 'sab.', |
|
| 177 | - 'date_jour_7_initiale' => 's.', |
|
| 178 | - 'date_jours' => 'tagoj', |
|
| 179 | - 'date_minutes' => 'minutoj', |
|
| 180 | - 'date_mois' => 'monatoj', |
|
| 181 | - 'date_mois_1' => 'januaro', |
|
| 182 | - 'date_mois_10' => 'oktobro', |
|
| 183 | - 'date_mois_10_abbr' => 'oct.', |
|
| 184 | - 'date_mois_11' => 'novembro', |
|
| 185 | - 'date_mois_11_abbr' => 'nov.', |
|
| 186 | - 'date_mois_12' => 'decembro', |
|
| 187 | - 'date_mois_12_abbr' => 'dec.', |
|
| 188 | - 'date_mois_1_abbr' => 'jan.', |
|
| 189 | - 'date_mois_2' => 'februaro', |
|
| 190 | - 'date_mois_2_abbr' => 'feb.', |
|
| 191 | - 'date_mois_3' => 'marto', |
|
| 192 | - 'date_mois_3_abbr' => 'mar.', |
|
| 193 | - 'date_mois_4' => 'aprilo', |
|
| 194 | - 'date_mois_4_abbr' => 'apr.', |
|
| 195 | - 'date_mois_5' => 'majo', |
|
| 196 | - 'date_mois_5_abbr' => 'majo', |
|
| 197 | - 'date_mois_6' => 'junio', |
|
| 198 | - 'date_mois_6_abbr' => 'jun.', |
|
| 199 | - 'date_mois_7' => 'julio', |
|
| 200 | - 'date_mois_7_abbr' => 'jul.', |
|
| 201 | - 'date_mois_8' => 'aŭgusto', |
|
| 202 | - 'date_mois_8_abbr' => 'aŭg.', |
|
| 203 | - 'date_mois_9' => 'septembro', |
|
| 204 | - 'date_mois_9_abbr' => 'sep.', |
|
| 205 | - 'date_saison_1' => 'vintro', |
|
| 206 | - 'date_saison_2' => 'printempo', |
|
| 207 | - 'date_saison_3' => 'somero', |
|
| 208 | - 'date_saison_4' => 'aŭtuno', |
|
| 209 | - 'date_secondes' => 'sekundoj', |
|
| 210 | - 'date_semaines' => 'semajnoj', |
|
| 211 | - 'date_un_mois' => 'monato', |
|
| 212 | - 'date_une_heure' => 'horo', |
|
| 213 | - 'date_une_minute' => 'minuto', |
|
| 214 | - 'date_une_seconde' => 'sekundo', |
|
| 215 | - 'date_une_semaine' => 'semajno', |
|
| 216 | - 'dirs_commencer' => ' por vere komenci la instalprocezon', |
|
| 217 | - 'dirs_preliminaire' => 'Antaŭfaro : <b>Difinu la alir-rajtojn</b>', |
|
| 218 | - 'dirs_probleme_droits' => 'Alir-rajta problemo', |
|
| 219 | - 'dirs_repertoires_absents' => '<b>La jenaj dosierujoj ne estas trovitaj : <ul>@bad_dirs@.</ul> </b> |
|
| 90 | + // D |
|
| 91 | + 'date_aujourdhui' => 'hodiaŭ', |
|
| 92 | + 'date_avant_jc' => 'a.K.', |
|
| 93 | + 'date_dans' => 'post @delai@', |
|
| 94 | + 'date_de_mois_1' => '@j@ @nommois@', |
|
| 95 | + 'date_de_mois_10' => '@j@ @nommois@', |
|
| 96 | + 'date_de_mois_11' => '@j@ @nommois@', |
|
| 97 | + 'date_de_mois_12' => '@j@ @nommois@', |
|
| 98 | + 'date_de_mois_2' => '@j@ @nommois@', |
|
| 99 | + 'date_de_mois_3' => '@j@ @nommois@', |
|
| 100 | + 'date_de_mois_4' => '@j@ @nommois@', |
|
| 101 | + 'date_de_mois_5' => '@j@ @nommois@', |
|
| 102 | + 'date_de_mois_6' => '@j@ @nommois@', |
|
| 103 | + 'date_de_mois_7' => '@j@ @nommois@', |
|
| 104 | + 'date_de_mois_8' => '@j@ @nommois@', |
|
| 105 | + 'date_de_mois_9' => '@j@ @nommois@', |
|
| 106 | + 'date_demain' => 'morgaŭ', |
|
| 107 | + 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 108 | + 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 109 | + 'date_fmt_jour' => '@nomjour@ la @jour@a', |
|
| 110 | + 'date_fmt_jour_heure' => '@jour@ je la @heure@', |
|
| 111 | + 'date_fmt_jour_heure_debut_fin' => 'la @jour@ de @heure_debut@ ĝis @heure_fin@', |
|
| 112 | + 'date_fmt_jour_heure_debut_fin_abbr' => 'la @dtstart@@jour@a de @heure_debut@@dtabbr@ ĝis @dtend@@heure_fin@@dtend@', |
|
| 113 | + 'date_fmt_jour_mois' => '@jour@a @nommois@', |
|
| 114 | + 'date_fmt_jour_mois_annee' => '@jour@a @nommois@ @annee@', |
|
| 115 | + 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 116 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 117 | + 'date_fmt_nomjour_date' => 'la @nomjour@ @date@', |
|
| 118 | + 'date_fmt_periode' => 'De @date_debut@ ĝis @date_fin@', |
|
| 119 | + 'date_fmt_periode_abbr' => 'De @dtart@@date_debut@@dtabbr@ ĝis @dtend@@date_fin@@dtabbr@', |
|
| 120 | + 'date_fmt_periode_from' => 'De', |
|
| 121 | + 'date_fmt_periode_to' => 'ĝis', |
|
| 122 | + 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 123 | + 'date_heures' => 'horoj', |
|
| 124 | + 'date_hier' => 'hieraŭ', |
|
| 125 | + 'date_il_y_a' => 'antaŭ @delai@', |
|
| 126 | + 'date_jnum1' => '1', |
|
| 127 | + 'date_jnum10' => '10', |
|
| 128 | + 'date_jnum11' => '11', |
|
| 129 | + 'date_jnum12' => '12', |
|
| 130 | + 'date_jnum13' => '13', |
|
| 131 | + 'date_jnum14' => '14', |
|
| 132 | + 'date_jnum15' => '15', |
|
| 133 | + 'date_jnum16' => '16', |
|
| 134 | + 'date_jnum17' => '17', |
|
| 135 | + 'date_jnum18' => '18', |
|
| 136 | + 'date_jnum19' => '19', |
|
| 137 | + 'date_jnum2' => '2', |
|
| 138 | + 'date_jnum20' => '20', |
|
| 139 | + 'date_jnum21' => '21', |
|
| 140 | + 'date_jnum22' => '22', |
|
| 141 | + 'date_jnum23' => '23', |
|
| 142 | + 'date_jnum24' => '24', |
|
| 143 | + 'date_jnum25' => '25', |
|
| 144 | + 'date_jnum26' => '26', |
|
| 145 | + 'date_jnum27' => '27', |
|
| 146 | + 'date_jnum28' => '28', |
|
| 147 | + 'date_jnum29' => '29', |
|
| 148 | + 'date_jnum3' => '3', |
|
| 149 | + 'date_jnum30' => '30', |
|
| 150 | + 'date_jnum31' => '31', |
|
| 151 | + 'date_jnum4' => '4', |
|
| 152 | + 'date_jnum5' => '5', |
|
| 153 | + 'date_jnum6' => '6', |
|
| 154 | + 'date_jnum7' => '7', |
|
| 155 | + 'date_jnum8' => '8', |
|
| 156 | + 'date_jnum9' => '9', |
|
| 157 | + 'date_jour_1' => 'dimanĉo', |
|
| 158 | + 'date_jour_1_abbr' => 'dim.', |
|
| 159 | + 'date_jour_1_initiale' => 'd.', |
|
| 160 | + 'date_jour_2' => 'lundo', |
|
| 161 | + 'date_jour_2_abbr' => 'lun.', |
|
| 162 | + 'date_jour_2_initiale' => 'l.', |
|
| 163 | + 'date_jour_3' => 'mardo', |
|
| 164 | + 'date_jour_3_abbr' => 'mar.', |
|
| 165 | + 'date_jour_3_initiale' => 'm.', |
|
| 166 | + 'date_jour_4' => 'merkredo', |
|
| 167 | + 'date_jour_4_abbr' => 'mer.', |
|
| 168 | + 'date_jour_4_initiale' => 'm.', |
|
| 169 | + 'date_jour_5' => 'ĵaŭdo', |
|
| 170 | + 'date_jour_5_abbr' => 'jaŭ.', |
|
| 171 | + 'date_jour_5_initiale' => 'j.', |
|
| 172 | + 'date_jour_6' => 'vendredo', |
|
| 173 | + 'date_jour_6_abbr' => 'ven.', |
|
| 174 | + 'date_jour_6_initiale' => 'v.', |
|
| 175 | + 'date_jour_7' => 'sabato', |
|
| 176 | + 'date_jour_7_abbr' => 'sab.', |
|
| 177 | + 'date_jour_7_initiale' => 's.', |
|
| 178 | + 'date_jours' => 'tagoj', |
|
| 179 | + 'date_minutes' => 'minutoj', |
|
| 180 | + 'date_mois' => 'monatoj', |
|
| 181 | + 'date_mois_1' => 'januaro', |
|
| 182 | + 'date_mois_10' => 'oktobro', |
|
| 183 | + 'date_mois_10_abbr' => 'oct.', |
|
| 184 | + 'date_mois_11' => 'novembro', |
|
| 185 | + 'date_mois_11_abbr' => 'nov.', |
|
| 186 | + 'date_mois_12' => 'decembro', |
|
| 187 | + 'date_mois_12_abbr' => 'dec.', |
|
| 188 | + 'date_mois_1_abbr' => 'jan.', |
|
| 189 | + 'date_mois_2' => 'februaro', |
|
| 190 | + 'date_mois_2_abbr' => 'feb.', |
|
| 191 | + 'date_mois_3' => 'marto', |
|
| 192 | + 'date_mois_3_abbr' => 'mar.', |
|
| 193 | + 'date_mois_4' => 'aprilo', |
|
| 194 | + 'date_mois_4_abbr' => 'apr.', |
|
| 195 | + 'date_mois_5' => 'majo', |
|
| 196 | + 'date_mois_5_abbr' => 'majo', |
|
| 197 | + 'date_mois_6' => 'junio', |
|
| 198 | + 'date_mois_6_abbr' => 'jun.', |
|
| 199 | + 'date_mois_7' => 'julio', |
|
| 200 | + 'date_mois_7_abbr' => 'jul.', |
|
| 201 | + 'date_mois_8' => 'aŭgusto', |
|
| 202 | + 'date_mois_8_abbr' => 'aŭg.', |
|
| 203 | + 'date_mois_9' => 'septembro', |
|
| 204 | + 'date_mois_9_abbr' => 'sep.', |
|
| 205 | + 'date_saison_1' => 'vintro', |
|
| 206 | + 'date_saison_2' => 'printempo', |
|
| 207 | + 'date_saison_3' => 'somero', |
|
| 208 | + 'date_saison_4' => 'aŭtuno', |
|
| 209 | + 'date_secondes' => 'sekundoj', |
|
| 210 | + 'date_semaines' => 'semajnoj', |
|
| 211 | + 'date_un_mois' => 'monato', |
|
| 212 | + 'date_une_heure' => 'horo', |
|
| 213 | + 'date_une_minute' => 'minuto', |
|
| 214 | + 'date_une_seconde' => 'sekundo', |
|
| 215 | + 'date_une_semaine' => 'semajno', |
|
| 216 | + 'dirs_commencer' => ' por vere komenci la instalprocezon', |
|
| 217 | + 'dirs_preliminaire' => 'Antaŭfaro : <b>Difinu la alir-rajtojn</b>', |
|
| 218 | + 'dirs_probleme_droits' => 'Alir-rajta problemo', |
|
| 219 | + 'dirs_repertoires_absents' => '<b>La jenaj dosierujoj ne estas trovitaj : <ul>@bad_dirs@.</ul> </b> |
|
| 220 | 220 | <p>La problemo verŝajne rilatas al majuskligo de literoj. |
| 221 | 221 | Kontrolu ke la majuskloj ja kongruas kun tio kio estas afiŝita ĉi-supre ; |
| 222 | 222 | se ili ne kongruas, bonvolu renomi la dosierujon per via FTP-programo por korekti la eraron. |
| 223 | 223 | </p><p>Post tio, vi povos</p>', |
| 224 | - 'dirs_repertoires_suivants' => '<b>La jenaj dosierujoj ne estas skribe modifeblaj : |
|
| 224 | + 'dirs_repertoires_suivants' => '<b>La jenaj dosierujoj ne estas skribe modifeblaj : |
|
| 225 | 225 | <ul>@bad_dirs@.</ul></b> |
| 226 | 226 | <p>Por solvi tion, uzu vian FTP-klienton por reguligi la alir-rajtojn de ĉiu |
| 227 | 227 | el tiuj dosierujoj. La proceduron oni detale klarigas en la instalgvidlibro. |
| 228 | 228 | </p><p>Post tio, vi povos </p>', |
| 229 | - 'double_occurrence' => 'Duobla trafo de @balise@', |
|
| 229 | + 'double_occurrence' => 'Duobla trafo de @balise@', |
|
| 230 | 230 | |
| 231 | - // E |
|
| 232 | - 'en_cours' => 'okazanta', |
|
| 233 | - 'envoi_via_le_site' => 'Sendo tra la retejo', |
|
| 234 | - 'erreur' => 'Eraro', |
|
| 235 | - 'erreur_balise_non_fermee' => 'lasta ne fermita marko :', |
|
| 236 | - 'erreur_technique_ajaxform' => 'Aj. Neatendita eraro ne ebligis la sendon de la formularo. Vi povas reprovi denove.', |
|
| 237 | - 'erreur_technique_enregistrement_champs' => 'Teknika eraro neebligis la ĝustan registradon de la kampo @champs@.', |
|
| 238 | - 'erreur_technique_enregistrement_impossible' => 'Teknika eraro neebligis la registradon.', |
|
| 239 | - 'erreur_texte' => 'eraro(j)', |
|
| 240 | - 'etape' => 'Etapo', |
|
| 231 | + // E |
|
| 232 | + 'en_cours' => 'okazanta', |
|
| 233 | + 'envoi_via_le_site' => 'Sendo tra la retejo', |
|
| 234 | + 'erreur' => 'Eraro', |
|
| 235 | + 'erreur_balise_non_fermee' => 'lasta ne fermita marko :', |
|
| 236 | + 'erreur_technique_ajaxform' => 'Aj. Neatendita eraro ne ebligis la sendon de la formularo. Vi povas reprovi denove.', |
|
| 237 | + 'erreur_technique_enregistrement_champs' => 'Teknika eraro neebligis la ĝustan registradon de la kampo @champs@.', |
|
| 238 | + 'erreur_technique_enregistrement_impossible' => 'Teknika eraro neebligis la registradon.', |
|
| 239 | + 'erreur_texte' => 'eraro(j)', |
|
| 240 | + 'etape' => 'Etapo', |
|
| 241 | 241 | |
| 242 | - // F |
|
| 243 | - 'fichier_introuvable' => 'Netrovebla dosiero @fichier@ ', # MODIF |
|
| 244 | - 'form_auteur_confirmation' => 'Konfirmu vian retpoŝtadreso', |
|
| 245 | - 'form_auteur_email_modifie' => 'Via retpoŝtadreso estis modifita.', |
|
| 246 | - 'form_auteur_envoi_mail_confirmation' => 'Konfirmretmesaĝo estis sendita al @email@. Vi devu viziti la menciita retadreso en la retmesaĝo por validigi vian retpoŝtadreson.', |
|
| 247 | - 'form_auteur_mail_confirmation' => 'Saluton, |
|
| 242 | + // F |
|
| 243 | + 'fichier_introuvable' => 'Netrovebla dosiero @fichier@ ', # MODIF |
|
| 244 | + 'form_auteur_confirmation' => 'Konfirmu vian retpoŝtadreso', |
|
| 245 | + 'form_auteur_email_modifie' => 'Via retpoŝtadreso estis modifita.', |
|
| 246 | + 'form_auteur_envoi_mail_confirmation' => 'Konfirmretmesaĝo estis sendita al @email@. Vi devu viziti la menciita retadreso en la retmesaĝo por validigi vian retpoŝtadreson.', |
|
| 247 | + 'form_auteur_mail_confirmation' => 'Saluton, |
|
| 248 | 248 | |
| 249 | 249 | Vi petis ŝanĝi vian retpoŝtadreson. |
| 250 | 250 | Por konfirmi vian novan retadreson, simple ensaluti al |
| 251 | 251 | la retadreso ĉi-sube (alie, via peto estos ignoritaj) : |
| 252 | 252 | |
| 253 | 253 | @url@', |
| 254 | - 'form_deja_inscrit' => 'Vi estas jam registrita.', |
|
| 255 | - 'form_email_non_valide' => 'Via retpoŝtadreso ne validas.', |
|
| 256 | - 'form_forum_access_refuse' => 'Vi ne plu havas alir-rajton al tiu retejo.', |
|
| 257 | - 'form_forum_bonjour' => 'Saluton @nom@,', |
|
| 258 | - 'form_forum_confirmer_email' => 'Por konfirmi vian retpoŝtadreson, iru al tiu retadreso : @url_confirm@', |
|
| 259 | - 'form_forum_email_deja_enregistre' => 'Tiu ĉi retpoŝtadreso estas jam registrita, vi povas do uzi vian kutiman pasvorton.', |
|
| 260 | - 'form_forum_identifiant_mail' => 'Via nova ensalutilo estis ĵus al vi sendita per retletero.', |
|
| 261 | - 'form_forum_identifiants' => 'Personaj ensalutiloj', |
|
| 262 | - 'form_forum_indiquer_nom_email' => 'Indiku ĉi tie vian nomon kaj retpoŝtadreson. Via persona ensalutilo rapide alvenos al vi retletere.', |
|
| 263 | - 'form_forum_login' => 'salutnomo :', |
|
| 264 | - 'form_forum_message_auto' => '(tio estas aŭtomata mesaĝo)', |
|
| 265 | - 'form_forum_pass' => 'pasvorto :', |
|
| 266 | - 'form_forum_probleme_mail' => 'Retpoŝta problemo : la ensalutilo ne sendeblas.', |
|
| 267 | - 'form_forum_voici1' => 'Jen viaj ensalutiloj por partopreni la vivon de la retejo "@nom_site_spip@" (@adresse_site@) :', |
|
| 268 | - 'form_forum_voici2' => 'Jen estas viaj ensalutiloj por proponi artikolojn ĉe la retejo "@nom_site_spip@" (@adresse_login@) :', |
|
| 269 | - 'form_indiquer_email' => 'Bonvolu indiki vian retpoŝtadreson.', |
|
| 270 | - 'form_indiquer_nom' => 'Bonvolu indiki vian nomon.', |
|
| 271 | - 'form_indiquer_nom_site' => 'Bonvolu indiki la nomon de via retejo.', |
|
| 272 | - 'form_pet_deja_enregistre' => 'Tiu retejo estas jam registrita', |
|
| 273 | - 'form_pet_signature_pasprise' => 'Via subskribo ne estas registrita.', |
|
| 274 | - 'form_prop_confirmer_envoi' => 'Konfirmi la sendon', |
|
| 275 | - 'form_prop_description' => 'Priskribo/komento', |
|
| 276 | - 'form_prop_enregistre' => 'Via kontribuo estas registrita, ĝi aperos ĉerete post validigo de la respondeculoj de la retejo.', |
|
| 277 | - 'form_prop_envoyer' => 'Sendi mesaĝon', |
|
| 278 | - 'form_prop_indiquer_email' => 'Bonvolu indiki validan retpoŝtadreson', |
|
| 279 | - 'form_prop_indiquer_nom_site' => 'Bonvolu indiki la nomon de la retejo.', |
|
| 280 | - 'form_prop_indiquer_sujet' => 'Bonvolu indiki temon', |
|
| 281 | - 'form_prop_message_envoye' => 'Mesaĝo sendita', |
|
| 282 | - 'form_prop_non_enregistre' => 'Via propono ne estis registrita.', |
|
| 283 | - 'form_prop_sujet' => 'Temo', |
|
| 284 | - 'form_prop_url_site' => 'URL-adreso de la retejo', |
|
| 285 | - 'format_date_incorrecte' => 'La dato aŭ ĝia formo ne validas', |
|
| 286 | - 'format_heure_incorrecte' => 'La horo aŭ ĝia formo ne validas', |
|
| 287 | - 'forum_non_inscrit' => 'Vi ne estas registrita, aŭ la adreso aŭ la pasvorto ne ĝustas.', |
|
| 288 | - 'forum_par_auteur' => 'de @auteur@', |
|
| 289 | - 'forum_titre_erreur' => 'Eraro...', |
|
| 254 | + 'form_deja_inscrit' => 'Vi estas jam registrita.', |
|
| 255 | + 'form_email_non_valide' => 'Via retpoŝtadreso ne validas.', |
|
| 256 | + 'form_forum_access_refuse' => 'Vi ne plu havas alir-rajton al tiu retejo.', |
|
| 257 | + 'form_forum_bonjour' => 'Saluton @nom@,', |
|
| 258 | + 'form_forum_confirmer_email' => 'Por konfirmi vian retpoŝtadreson, iru al tiu retadreso : @url_confirm@', |
|
| 259 | + 'form_forum_email_deja_enregistre' => 'Tiu ĉi retpoŝtadreso estas jam registrita, vi povas do uzi vian kutiman pasvorton.', |
|
| 260 | + 'form_forum_identifiant_mail' => 'Via nova ensalutilo estis ĵus al vi sendita per retletero.', |
|
| 261 | + 'form_forum_identifiants' => 'Personaj ensalutiloj', |
|
| 262 | + 'form_forum_indiquer_nom_email' => 'Indiku ĉi tie vian nomon kaj retpoŝtadreson. Via persona ensalutilo rapide alvenos al vi retletere.', |
|
| 263 | + 'form_forum_login' => 'salutnomo :', |
|
| 264 | + 'form_forum_message_auto' => '(tio estas aŭtomata mesaĝo)', |
|
| 265 | + 'form_forum_pass' => 'pasvorto :', |
|
| 266 | + 'form_forum_probleme_mail' => 'Retpoŝta problemo : la ensalutilo ne sendeblas.', |
|
| 267 | + 'form_forum_voici1' => 'Jen viaj ensalutiloj por partopreni la vivon de la retejo "@nom_site_spip@" (@adresse_site@) :', |
|
| 268 | + 'form_forum_voici2' => 'Jen estas viaj ensalutiloj por proponi artikolojn ĉe la retejo "@nom_site_spip@" (@adresse_login@) :', |
|
| 269 | + 'form_indiquer_email' => 'Bonvolu indiki vian retpoŝtadreson.', |
|
| 270 | + 'form_indiquer_nom' => 'Bonvolu indiki vian nomon.', |
|
| 271 | + 'form_indiquer_nom_site' => 'Bonvolu indiki la nomon de via retejo.', |
|
| 272 | + 'form_pet_deja_enregistre' => 'Tiu retejo estas jam registrita', |
|
| 273 | + 'form_pet_signature_pasprise' => 'Via subskribo ne estas registrita.', |
|
| 274 | + 'form_prop_confirmer_envoi' => 'Konfirmi la sendon', |
|
| 275 | + 'form_prop_description' => 'Priskribo/komento', |
|
| 276 | + 'form_prop_enregistre' => 'Via kontribuo estas registrita, ĝi aperos ĉerete post validigo de la respondeculoj de la retejo.', |
|
| 277 | + 'form_prop_envoyer' => 'Sendi mesaĝon', |
|
| 278 | + 'form_prop_indiquer_email' => 'Bonvolu indiki validan retpoŝtadreson', |
|
| 279 | + 'form_prop_indiquer_nom_site' => 'Bonvolu indiki la nomon de la retejo.', |
|
| 280 | + 'form_prop_indiquer_sujet' => 'Bonvolu indiki temon', |
|
| 281 | + 'form_prop_message_envoye' => 'Mesaĝo sendita', |
|
| 282 | + 'form_prop_non_enregistre' => 'Via propono ne estis registrita.', |
|
| 283 | + 'form_prop_sujet' => 'Temo', |
|
| 284 | + 'form_prop_url_site' => 'URL-adreso de la retejo', |
|
| 285 | + 'format_date_incorrecte' => 'La dato aŭ ĝia formo ne validas', |
|
| 286 | + 'format_heure_incorrecte' => 'La horo aŭ ĝia formo ne validas', |
|
| 287 | + 'forum_non_inscrit' => 'Vi ne estas registrita, aŭ la adreso aŭ la pasvorto ne ĝustas.', |
|
| 288 | + 'forum_par_auteur' => 'de @auteur@', |
|
| 289 | + 'forum_titre_erreur' => 'Eraro...', |
|
| 290 | 290 | |
| 291 | - // I |
|
| 292 | - 'ical_texte_rss_articles' => 'La abondosiero (backend-dosiero) de la artikoloj de tiu retejo troveblas ĉe la retadreso :', |
|
| 293 | - 'ical_texte_rss_articles2' => 'Sube, vi povas trovi abonligojn por gvati evoluadon de artikoloj el ĉiu rubriko de la retejo :', |
|
| 294 | - 'ical_texte_rss_breves' => 'Krome ekzistas dosiero enhavanta ĉiujn fulm-informojn de la retejo. Precizigante la rubriko-numeron, vi ricevos nur la fulm-informojn el tiu rubriko.', |
|
| 295 | - 'icone_a_suivre' => 'Stabejo', |
|
| 296 | - 'icone_admin_site' => 'Reteja administrado', |
|
| 297 | - 'icone_agenda' => 'Agendo', |
|
| 298 | - 'icone_aide_ligne' => 'Helpilo', |
|
| 299 | - 'icone_articles' => 'Artikoloj', |
|
| 300 | - 'icone_auteurs' => 'Aŭtoroj', |
|
| 301 | - 'icone_brouteur' => 'Rapida retumado', |
|
| 302 | - 'icone_configuration_site' => 'Konfiguro', |
|
| 303 | - 'icone_configurer_site' => 'Konfiguri vian retejon', |
|
| 304 | - 'icone_creer_nouvel_auteur' => 'Krei novan aŭtoron', |
|
| 305 | - 'icone_creer_rubrique' => 'Krei novan rubrikon', |
|
| 306 | - 'icone_creer_sous_rubrique' => 'Krei sub-rubrikon', |
|
| 307 | - 'icone_deconnecter' => 'Elsaluti', |
|
| 308 | - 'icone_discussions' => 'Diskutoj', |
|
| 309 | - 'icone_doc_rubrique' => 'Dokumentoj de la rubrikoj', |
|
| 310 | - 'icone_ecrire_article' => 'Skribi novan artikolon', |
|
| 311 | - 'icone_edition_site' => 'Redaktejo', |
|
| 312 | - 'icone_gestion_langues' => 'Mastrumado de lingvoj', |
|
| 313 | - 'icone_informations_personnelles' => 'Personaj datenoj', |
|
| 314 | - 'icone_interface_complet' => 'kompleta interfaco', |
|
| 315 | - 'icone_interface_simple' => 'Simpla interfaco', |
|
| 316 | - 'icone_maintenance_site' => 'Retejo-bontenado', |
|
| 317 | - 'icone_messagerie_personnelle' => 'Persona mesaĝilo', |
|
| 318 | - 'icone_repartition_debut' => 'Afiŝi la distribuon ekde la komenco', |
|
| 319 | - 'icone_rubriques' => 'Rubrikoj', |
|
| 320 | - 'icone_sauver_site' => 'Savkopii la retejon', |
|
| 321 | - 'icone_site_entier' => 'La tuta retejo', |
|
| 322 | - 'icone_sites_references' => 'Referencigitaj retejoj', |
|
| 323 | - 'icone_statistiques' => 'Statistikoj de la retejo', |
|
| 324 | - 'icone_suivi_activite' => 'Gvati vivon de la retejo', |
|
| 325 | - 'icone_suivi_actualite' => 'Evoluado de la retejo', |
|
| 326 | - 'icone_suivi_pettions' => 'Superrigardi/mastrumi la petskribon', |
|
| 327 | - 'icone_suivi_revisions' => 'Modifoj de artikoloj', |
|
| 328 | - 'icone_supprimer_document' => 'Forigi tiun dokumenton', |
|
| 329 | - 'icone_supprimer_image' => 'Forigi tiun bildon', |
|
| 330 | - 'icone_tous_articles' => 'Ĉiuj viaj artikoloj', |
|
| 331 | - 'icone_tous_auteur' => 'Ĉiuj aŭtoroj', |
|
| 332 | - 'icone_tous_visiteur' => 'Ĉiuj vizitantoj', |
|
| 333 | - 'icone_visiter_site' => 'Vidi la publika spaco', |
|
| 334 | - 'icone_voir_en_ligne' => 'Vidi ĉeretigite', |
|
| 335 | - 'img_indisponible' => 'nedisponebla bildo', |
|
| 336 | - 'impossible' => 'ne eblas', |
|
| 337 | - 'info_a_suivre' => 'STABEJO »', |
|
| 338 | - 'info_acces_interdit' => 'Malpermesata aliro', |
|
| 339 | - 'info_acces_refuse' => 'Rifuzita aliro', |
|
| 340 | - 'info_action' => 'Ago : @action@', |
|
| 341 | - 'info_administrer_rubriques' => 'Vi povas mastrumi tiun rubrikon kaj ties subrubrikojn', |
|
| 342 | - 'info_adresse_non_indiquee' => 'Vi indikis neniun adreson por testi !', |
|
| 343 | - 'info_aide' => 'HELPO :', |
|
| 344 | - 'info_ajouter_mot' => 'Aldoni tiun vorton', |
|
| 345 | - 'info_annonce' => 'ANONCO', |
|
| 346 | - 'info_annonces_generales' => 'Ĝeneralaj anoncoj :', |
|
| 347 | - 'info_article_propose' => 'Proponita artikolo', |
|
| 348 | - 'info_article_publie' => 'Publikigita artikolo', |
|
| 349 | - 'info_article_redaction' => 'Redaktata artikolo', |
|
| 350 | - 'info_article_refuse' => 'Rifuzita artikolo', |
|
| 351 | - 'info_article_supprime' => 'Forviŝita artikolo', |
|
| 352 | - 'info_articles' => 'Artikoloj', |
|
| 353 | - 'info_articles_a_valider' => 'Validigendaj artikoloj', |
|
| 354 | - 'info_articles_nb' => '@nb@ artikoloj', |
|
| 355 | - 'info_articles_proposes' => 'Proponitaj artikoloj', |
|
| 356 | - 'info_articles_un' => '1 artikolo', |
|
| 357 | - 'info_auteurs_nombre' => 'aŭtoro(j) :', |
|
| 358 | - 'info_authentification_ftp' => 'Aŭtentigo (per FTP).', |
|
| 359 | - 'info_breves_2' => 'fulm-informoj', |
|
| 360 | - 'info_breves_nb' => '@nb@ fulm-informoj', |
|
| 361 | - 'info_breves_un' => '1 fulm-informo', |
|
| 362 | - 'info_connexion_refusee' => 'Konektiĝo rifuzata', |
|
| 363 | - 'info_contact_developpeur' => 'Bonvolu kontakti programiston.', |
|
| 364 | - 'info_contenance' => 'Tiu retejo enhavas :', |
|
| 365 | - 'info_contribution' => 'kontribuaĵoj', |
|
| 366 | - 'info_copyright' => '@spip@ estas libera programo distribuata @lien_gpl@.', |
|
| 367 | - 'info_copyright_doc' => 'Por pliaj informoj vidu la retpaĝon <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 368 | - 'info_copyright_gpl' => 'sub licenco GPL', |
|
| 369 | - 'info_cours_edition' => 'Viaj redaktataj artikoloj', # MODIF |
|
| 370 | - 'info_creer_repertoire' => 'Bonvolu krei dosieron aŭ dosierujon kies nomo estu :', |
|
| 371 | - 'info_creer_repertoire_2' => 'ene de la subdosierujo <b>@repertoire@</b>, kaj :', |
|
| 372 | - 'info_creer_vignette' => 'aŭtomata kreo de la vinjeto', |
|
| 373 | - 'info_creerdansrubrique_non_autorise' => 'Vi ne havas sufiĉajn rajtojn por krei enhavo en ĉi tiu rubriko', |
|
| 374 | - 'info_deplier' => 'Malfaldi', |
|
| 375 | - 'info_descriptif_nombre' => 'priskribo(j) :', |
|
| 376 | - 'info_description' => 'Priskribo :', |
|
| 377 | - 'info_description_2' => 'Priskribo :', |
|
| 378 | - 'info_dimension' => 'Dimensioj :', |
|
| 379 | - 'info_documents_nb' => '@nb@ dokumentoj', |
|
| 380 | - 'info_documents_un' => '1 dokumento', |
|
| 381 | - 'info_ecire_message_prive' => 'Skribi privatan mesaĝon', |
|
| 382 | - 'info_email_invalide' => 'Nevalida retpoŝtadreso.', |
|
| 383 | - 'info_en_cours_validation' => 'Viaj redaktataj artikoloj', |
|
| 384 | - 'info_en_ligne' => 'Nun ĉerete :', |
|
| 385 | - 'info_envoyer_message_prive' => 'Sendi privatan mesaĝon al tiu ĉi aŭtoro', |
|
| 386 | - 'info_erreur_requete' => 'Eraro en la peto : ', |
|
| 387 | - 'info_erreur_squelette2' => 'Neniu skeleto <b>@fichier@</b> disponeblas...', |
|
| 388 | - 'info_erreur_systeme' => 'Sistemo-eraro (errno @errsys@)', |
|
| 389 | - 'info_erreur_systeme2' => 'Eble la fiksdisko plenas, aŭ la datenbazo estas difektita.<br /> |
|
| 291 | + // I |
|
| 292 | + 'ical_texte_rss_articles' => 'La abondosiero (backend-dosiero) de la artikoloj de tiu retejo troveblas ĉe la retadreso :', |
|
| 293 | + 'ical_texte_rss_articles2' => 'Sube, vi povas trovi abonligojn por gvati evoluadon de artikoloj el ĉiu rubriko de la retejo :', |
|
| 294 | + 'ical_texte_rss_breves' => 'Krome ekzistas dosiero enhavanta ĉiujn fulm-informojn de la retejo. Precizigante la rubriko-numeron, vi ricevos nur la fulm-informojn el tiu rubriko.', |
|
| 295 | + 'icone_a_suivre' => 'Stabejo', |
|
| 296 | + 'icone_admin_site' => 'Reteja administrado', |
|
| 297 | + 'icone_agenda' => 'Agendo', |
|
| 298 | + 'icone_aide_ligne' => 'Helpilo', |
|
| 299 | + 'icone_articles' => 'Artikoloj', |
|
| 300 | + 'icone_auteurs' => 'Aŭtoroj', |
|
| 301 | + 'icone_brouteur' => 'Rapida retumado', |
|
| 302 | + 'icone_configuration_site' => 'Konfiguro', |
|
| 303 | + 'icone_configurer_site' => 'Konfiguri vian retejon', |
|
| 304 | + 'icone_creer_nouvel_auteur' => 'Krei novan aŭtoron', |
|
| 305 | + 'icone_creer_rubrique' => 'Krei novan rubrikon', |
|
| 306 | + 'icone_creer_sous_rubrique' => 'Krei sub-rubrikon', |
|
| 307 | + 'icone_deconnecter' => 'Elsaluti', |
|
| 308 | + 'icone_discussions' => 'Diskutoj', |
|
| 309 | + 'icone_doc_rubrique' => 'Dokumentoj de la rubrikoj', |
|
| 310 | + 'icone_ecrire_article' => 'Skribi novan artikolon', |
|
| 311 | + 'icone_edition_site' => 'Redaktejo', |
|
| 312 | + 'icone_gestion_langues' => 'Mastrumado de lingvoj', |
|
| 313 | + 'icone_informations_personnelles' => 'Personaj datenoj', |
|
| 314 | + 'icone_interface_complet' => 'kompleta interfaco', |
|
| 315 | + 'icone_interface_simple' => 'Simpla interfaco', |
|
| 316 | + 'icone_maintenance_site' => 'Retejo-bontenado', |
|
| 317 | + 'icone_messagerie_personnelle' => 'Persona mesaĝilo', |
|
| 318 | + 'icone_repartition_debut' => 'Afiŝi la distribuon ekde la komenco', |
|
| 319 | + 'icone_rubriques' => 'Rubrikoj', |
|
| 320 | + 'icone_sauver_site' => 'Savkopii la retejon', |
|
| 321 | + 'icone_site_entier' => 'La tuta retejo', |
|
| 322 | + 'icone_sites_references' => 'Referencigitaj retejoj', |
|
| 323 | + 'icone_statistiques' => 'Statistikoj de la retejo', |
|
| 324 | + 'icone_suivi_activite' => 'Gvati vivon de la retejo', |
|
| 325 | + 'icone_suivi_actualite' => 'Evoluado de la retejo', |
|
| 326 | + 'icone_suivi_pettions' => 'Superrigardi/mastrumi la petskribon', |
|
| 327 | + 'icone_suivi_revisions' => 'Modifoj de artikoloj', |
|
| 328 | + 'icone_supprimer_document' => 'Forigi tiun dokumenton', |
|
| 329 | + 'icone_supprimer_image' => 'Forigi tiun bildon', |
|
| 330 | + 'icone_tous_articles' => 'Ĉiuj viaj artikoloj', |
|
| 331 | + 'icone_tous_auteur' => 'Ĉiuj aŭtoroj', |
|
| 332 | + 'icone_tous_visiteur' => 'Ĉiuj vizitantoj', |
|
| 333 | + 'icone_visiter_site' => 'Vidi la publika spaco', |
|
| 334 | + 'icone_voir_en_ligne' => 'Vidi ĉeretigite', |
|
| 335 | + 'img_indisponible' => 'nedisponebla bildo', |
|
| 336 | + 'impossible' => 'ne eblas', |
|
| 337 | + 'info_a_suivre' => 'STABEJO »', |
|
| 338 | + 'info_acces_interdit' => 'Malpermesata aliro', |
|
| 339 | + 'info_acces_refuse' => 'Rifuzita aliro', |
|
| 340 | + 'info_action' => 'Ago : @action@', |
|
| 341 | + 'info_administrer_rubriques' => 'Vi povas mastrumi tiun rubrikon kaj ties subrubrikojn', |
|
| 342 | + 'info_adresse_non_indiquee' => 'Vi indikis neniun adreson por testi !', |
|
| 343 | + 'info_aide' => 'HELPO :', |
|
| 344 | + 'info_ajouter_mot' => 'Aldoni tiun vorton', |
|
| 345 | + 'info_annonce' => 'ANONCO', |
|
| 346 | + 'info_annonces_generales' => 'Ĝeneralaj anoncoj :', |
|
| 347 | + 'info_article_propose' => 'Proponita artikolo', |
|
| 348 | + 'info_article_publie' => 'Publikigita artikolo', |
|
| 349 | + 'info_article_redaction' => 'Redaktata artikolo', |
|
| 350 | + 'info_article_refuse' => 'Rifuzita artikolo', |
|
| 351 | + 'info_article_supprime' => 'Forviŝita artikolo', |
|
| 352 | + 'info_articles' => 'Artikoloj', |
|
| 353 | + 'info_articles_a_valider' => 'Validigendaj artikoloj', |
|
| 354 | + 'info_articles_nb' => '@nb@ artikoloj', |
|
| 355 | + 'info_articles_proposes' => 'Proponitaj artikoloj', |
|
| 356 | + 'info_articles_un' => '1 artikolo', |
|
| 357 | + 'info_auteurs_nombre' => 'aŭtoro(j) :', |
|
| 358 | + 'info_authentification_ftp' => 'Aŭtentigo (per FTP).', |
|
| 359 | + 'info_breves_2' => 'fulm-informoj', |
|
| 360 | + 'info_breves_nb' => '@nb@ fulm-informoj', |
|
| 361 | + 'info_breves_un' => '1 fulm-informo', |
|
| 362 | + 'info_connexion_refusee' => 'Konektiĝo rifuzata', |
|
| 363 | + 'info_contact_developpeur' => 'Bonvolu kontakti programiston.', |
|
| 364 | + 'info_contenance' => 'Tiu retejo enhavas :', |
|
| 365 | + 'info_contribution' => 'kontribuaĵoj', |
|
| 366 | + 'info_copyright' => '@spip@ estas libera programo distribuata @lien_gpl@.', |
|
| 367 | + 'info_copyright_doc' => 'Por pliaj informoj vidu la retpaĝon <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 368 | + 'info_copyright_gpl' => 'sub licenco GPL', |
|
| 369 | + 'info_cours_edition' => 'Viaj redaktataj artikoloj', # MODIF |
|
| 370 | + 'info_creer_repertoire' => 'Bonvolu krei dosieron aŭ dosierujon kies nomo estu :', |
|
| 371 | + 'info_creer_repertoire_2' => 'ene de la subdosierujo <b>@repertoire@</b>, kaj :', |
|
| 372 | + 'info_creer_vignette' => 'aŭtomata kreo de la vinjeto', |
|
| 373 | + 'info_creerdansrubrique_non_autorise' => 'Vi ne havas sufiĉajn rajtojn por krei enhavo en ĉi tiu rubriko', |
|
| 374 | + 'info_deplier' => 'Malfaldi', |
|
| 375 | + 'info_descriptif_nombre' => 'priskribo(j) :', |
|
| 376 | + 'info_description' => 'Priskribo :', |
|
| 377 | + 'info_description_2' => 'Priskribo :', |
|
| 378 | + 'info_dimension' => 'Dimensioj :', |
|
| 379 | + 'info_documents_nb' => '@nb@ dokumentoj', |
|
| 380 | + 'info_documents_un' => '1 dokumento', |
|
| 381 | + 'info_ecire_message_prive' => 'Skribi privatan mesaĝon', |
|
| 382 | + 'info_email_invalide' => 'Nevalida retpoŝtadreso.', |
|
| 383 | + 'info_en_cours_validation' => 'Viaj redaktataj artikoloj', |
|
| 384 | + 'info_en_ligne' => 'Nun ĉerete :', |
|
| 385 | + 'info_envoyer_message_prive' => 'Sendi privatan mesaĝon al tiu ĉi aŭtoro', |
|
| 386 | + 'info_erreur_requete' => 'Eraro en la peto : ', |
|
| 387 | + 'info_erreur_squelette2' => 'Neniu skeleto <b>@fichier@</b> disponeblas...', |
|
| 388 | + 'info_erreur_systeme' => 'Sistemo-eraro (errno @errsys@)', |
|
| 389 | + 'info_erreur_systeme2' => 'Eble la fiksdisko plenas, aŭ la datenbazo estas difektita.<br /> |
|
| 390 | 390 | <span style="color:red;">Provu<a href=\'@script@\'>ripari la datenbazon</a>, |
| 391 | 391 | aŭ kontaktu vian retgastiganton.</span>', |
| 392 | - 'info_fini' => 'Finite !', |
|
| 393 | - 'info_format_image' => 'Bildaj formatoj uzeblaj por krei vinjetojn : @gd_formats@.', |
|
| 394 | - 'info_format_non_defini' => 'nedefinita formato', |
|
| 395 | - 'info_grand_ecran' => 'Granda ekrano', |
|
| 396 | - 'info_image_aide' => 'HELPILO', |
|
| 397 | - 'info_image_process_titre' => 'Metodo pri vinjet-farado', |
|
| 398 | - 'info_impossible_lire_page' => '<b>Eraro !</b> Ne eblas legi la paĝon <tt> <html>@test_proxy@</html> </tt> tra la prokura servilo <tt>', |
|
| 399 | - 'info_installation_systeme_publication' => 'Instalo de la publikiga sistemo...', |
|
| 400 | - 'info_installer_documents' => 'Vi povas aŭtomate instali ĉiujn dokumentojn troviĝantajn en la dosiero @upload@.', |
|
| 401 | - 'info_installer_ftp' => 'Kiel mastrumanto, vi povas instali (FTP-e) dosierojn en la dosierujon @upload@ kaj poste rekte selekti ilin ĉi tie.', |
|
| 402 | - 'info_installer_images' => 'Vi povas instali bildojn je la formatoj JPEG, GIF kaj PNG.', |
|
| 403 | - 'info_installer_images_dossier' => 'Instali bildojn en la dosierujon @upload@ por povi ilin selekti ĉi tie.', |
|
| 404 | - 'info_interface_complete' => 'kompleta interfaco', |
|
| 405 | - 'info_interface_simple' => 'Simpla interfaco', |
|
| 406 | - 'info_joindre_document_article' => 'Vi povas ligi kun tiu artikolo dokumentojn tiajn, kiaj', |
|
| 407 | - 'info_joindre_document_rubrique' => 'Vi povas ligi kun tiu rubriko dokumentojn tiajn, kiaj', |
|
| 408 | - 'info_joindre_documents_article' => 'Vi povas ligi kun tiu artikolo dokumentojn tiajn, kiaj :', |
|
| 409 | - 'info_l_article' => 'la artikolo', |
|
| 410 | - 'info_la_breve' => 'la fulm-informo', |
|
| 411 | - 'info_la_rubrique' => 'la rubriko', |
|
| 412 | - 'info_langue_principale' => 'Ĉefa lingvo de la retejo', |
|
| 413 | - 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ bilderoj', |
|
| 414 | - 'info_les_auteurs_1' => 'de @les_auteurs@', |
|
| 415 | - 'info_logo_format_interdit' => 'Nur vinjetoj je formatoj @formats@ estas permesataj.', |
|
| 416 | - 'info_logo_max_poids' => 'Vinjetoj devige pezu malpli ol @maxi@ (tiu dosiero pezas @actuel@).', |
|
| 417 | - 'info_mail_fournisseur' => '[email protected]', |
|
| 418 | - 'info_message_2' => 'MESAĜO', |
|
| 419 | - 'info_message_supprime' => 'FORIGITA MESAĜO', |
|
| 420 | - 'info_messages_nb' => '@nb@ mesaĝoj', |
|
| 421 | - 'info_messages_un' => '1 mesaĝo', |
|
| 422 | - 'info_mise_en_ligne' => 'Dato de ĉeretigo : ', |
|
| 423 | - 'info_modification_parametres_securite' => 'modifoj de la sekuraj parametroj', |
|
| 424 | - 'info_mois_courant' => 'En la kuranta monato :', |
|
| 425 | - 'info_mot_cle_ajoute' => 'La jena ŝlosilvorto estas ligita kun', |
|
| 426 | - 'info_multi_herit' => 'Defaŭlta lingvo', |
|
| 427 | - 'info_multi_langues_soulignees' => 'Por la <u>substrekitaj lingvoj</u>, ĉiuj tekstoj de la interfaco estas tute aŭ parte tradukitaj. Kiam vi elektas tiujn lingvojn, multaj elementoj de la publika retejo (datenoj, formularoj) estos aŭtomate tradukitaj. Por la nesubstrekitaj lingvoj, tiuj elementoj afiŝiĝos en la ĉefa lingvo de la retejo.', |
|
| 428 | - 'info_multilinguisme' => 'Multlingvismo', |
|
| 429 | - 'info_nom_non_utilisateurs_connectes' => 'Via nomo ne aperas en la listo de la ensalutintaj uzantoj.', |
|
| 430 | - 'info_nom_utilisateurs_connectes' => 'Via nomo aperas en la listo de la ensalutintaj uzantoj.', |
|
| 431 | - 'info_nombre_en_ligne' => 'Nun ensalutintaj :', |
|
| 432 | - 'info_non_resultat' => 'Neniu rezulto por "@cherche_mot@"', |
|
| 433 | - 'info_non_utilisation_messagerie' => 'Vi ne uzas la internan mesaĝilon de tiu retejo.', |
|
| 434 | - 'info_nouveau_message' => 'VI HAVAS NOVAN MESAĜON', |
|
| 435 | - 'info_nouveaux_messages' => 'VI HAVAS @total_messages@ NOVA(J)N MESAĜO(J)N', |
|
| 436 | - 'info_numero_abbreviation' => 'N° ', |
|
| 437 | - 'info_obligatoire' => 'Tiu ĉi informo estas deviga', |
|
| 438 | - 'info_pense_bete' => 'MEMORIGILO', |
|
| 439 | - 'info_petit_ecran' => 'Eta ekrano', |
|
| 440 | - 'info_petition_close' => 'Petskribo fermita', |
|
| 441 | - 'info_pixels' => 'bilderoj', |
|
| 442 | - 'info_plusieurs_mots_trouves' => 'Pluraj ŝlosilvortoj trovitaj por "@cherche_mot@" :', |
|
| 443 | - 'info_portfolio_automatique' => 'Aŭtomata dokumentujo :', |
|
| 444 | - 'info_premier_resultat' => '[@debut_limit@ unuaj rezultoj el @total@]', |
|
| 445 | - 'info_premier_resultat_sur' => '[@debut_limit@ unuaj rezultoj el @total@]', |
|
| 446 | - 'info_propose_1' => '[@nom_site_spip@] Proponas : @titre@', |
|
| 447 | - 'info_propose_2' => 'Proponita artikolo |
|
| 392 | + 'info_fini' => 'Finite !', |
|
| 393 | + 'info_format_image' => 'Bildaj formatoj uzeblaj por krei vinjetojn : @gd_formats@.', |
|
| 394 | + 'info_format_non_defini' => 'nedefinita formato', |
|
| 395 | + 'info_grand_ecran' => 'Granda ekrano', |
|
| 396 | + 'info_image_aide' => 'HELPILO', |
|
| 397 | + 'info_image_process_titre' => 'Metodo pri vinjet-farado', |
|
| 398 | + 'info_impossible_lire_page' => '<b>Eraro !</b> Ne eblas legi la paĝon <tt> <html>@test_proxy@</html> </tt> tra la prokura servilo <tt>', |
|
| 399 | + 'info_installation_systeme_publication' => 'Instalo de la publikiga sistemo...', |
|
| 400 | + 'info_installer_documents' => 'Vi povas aŭtomate instali ĉiujn dokumentojn troviĝantajn en la dosiero @upload@.', |
|
| 401 | + 'info_installer_ftp' => 'Kiel mastrumanto, vi povas instali (FTP-e) dosierojn en la dosierujon @upload@ kaj poste rekte selekti ilin ĉi tie.', |
|
| 402 | + 'info_installer_images' => 'Vi povas instali bildojn je la formatoj JPEG, GIF kaj PNG.', |
|
| 403 | + 'info_installer_images_dossier' => 'Instali bildojn en la dosierujon @upload@ por povi ilin selekti ĉi tie.', |
|
| 404 | + 'info_interface_complete' => 'kompleta interfaco', |
|
| 405 | + 'info_interface_simple' => 'Simpla interfaco', |
|
| 406 | + 'info_joindre_document_article' => 'Vi povas ligi kun tiu artikolo dokumentojn tiajn, kiaj', |
|
| 407 | + 'info_joindre_document_rubrique' => 'Vi povas ligi kun tiu rubriko dokumentojn tiajn, kiaj', |
|
| 408 | + 'info_joindre_documents_article' => 'Vi povas ligi kun tiu artikolo dokumentojn tiajn, kiaj :', |
|
| 409 | + 'info_l_article' => 'la artikolo', |
|
| 410 | + 'info_la_breve' => 'la fulm-informo', |
|
| 411 | + 'info_la_rubrique' => 'la rubriko', |
|
| 412 | + 'info_langue_principale' => 'Ĉefa lingvo de la retejo', |
|
| 413 | + 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ bilderoj', |
|
| 414 | + 'info_les_auteurs_1' => 'de @les_auteurs@', |
|
| 415 | + 'info_logo_format_interdit' => 'Nur vinjetoj je formatoj @formats@ estas permesataj.', |
|
| 416 | + 'info_logo_max_poids' => 'Vinjetoj devige pezu malpli ol @maxi@ (tiu dosiero pezas @actuel@).', |
|
| 417 | + 'info_mail_fournisseur' => '[email protected]', |
|
| 418 | + 'info_message_2' => 'MESAĜO', |
|
| 419 | + 'info_message_supprime' => 'FORIGITA MESAĜO', |
|
| 420 | + 'info_messages_nb' => '@nb@ mesaĝoj', |
|
| 421 | + 'info_messages_un' => '1 mesaĝo', |
|
| 422 | + 'info_mise_en_ligne' => 'Dato de ĉeretigo : ', |
|
| 423 | + 'info_modification_parametres_securite' => 'modifoj de la sekuraj parametroj', |
|
| 424 | + 'info_mois_courant' => 'En la kuranta monato :', |
|
| 425 | + 'info_mot_cle_ajoute' => 'La jena ŝlosilvorto estas ligita kun', |
|
| 426 | + 'info_multi_herit' => 'Defaŭlta lingvo', |
|
| 427 | + 'info_multi_langues_soulignees' => 'Por la <u>substrekitaj lingvoj</u>, ĉiuj tekstoj de la interfaco estas tute aŭ parte tradukitaj. Kiam vi elektas tiujn lingvojn, multaj elementoj de la publika retejo (datenoj, formularoj) estos aŭtomate tradukitaj. Por la nesubstrekitaj lingvoj, tiuj elementoj afiŝiĝos en la ĉefa lingvo de la retejo.', |
|
| 428 | + 'info_multilinguisme' => 'Multlingvismo', |
|
| 429 | + 'info_nom_non_utilisateurs_connectes' => 'Via nomo ne aperas en la listo de la ensalutintaj uzantoj.', |
|
| 430 | + 'info_nom_utilisateurs_connectes' => 'Via nomo aperas en la listo de la ensalutintaj uzantoj.', |
|
| 431 | + 'info_nombre_en_ligne' => 'Nun ensalutintaj :', |
|
| 432 | + 'info_non_resultat' => 'Neniu rezulto por "@cherche_mot@"', |
|
| 433 | + 'info_non_utilisation_messagerie' => 'Vi ne uzas la internan mesaĝilon de tiu retejo.', |
|
| 434 | + 'info_nouveau_message' => 'VI HAVAS NOVAN MESAĜON', |
|
| 435 | + 'info_nouveaux_messages' => 'VI HAVAS @total_messages@ NOVA(J)N MESAĜO(J)N', |
|
| 436 | + 'info_numero_abbreviation' => 'N° ', |
|
| 437 | + 'info_obligatoire' => 'Tiu ĉi informo estas deviga', |
|
| 438 | + 'info_pense_bete' => 'MEMORIGILO', |
|
| 439 | + 'info_petit_ecran' => 'Eta ekrano', |
|
| 440 | + 'info_petition_close' => 'Petskribo fermita', |
|
| 441 | + 'info_pixels' => 'bilderoj', |
|
| 442 | + 'info_plusieurs_mots_trouves' => 'Pluraj ŝlosilvortoj trovitaj por "@cherche_mot@" :', |
|
| 443 | + 'info_portfolio_automatique' => 'Aŭtomata dokumentujo :', |
|
| 444 | + 'info_premier_resultat' => '[@debut_limit@ unuaj rezultoj el @total@]', |
|
| 445 | + 'info_premier_resultat_sur' => '[@debut_limit@ unuaj rezultoj el @total@]', |
|
| 446 | + 'info_propose_1' => '[@nom_site_spip@] Proponas : @titre@', |
|
| 447 | + 'info_propose_2' => 'Proponita artikolo |
|
| 448 | 448 | ---------------', |
| 449 | - 'info_propose_3' => 'La artikolo "@titre@" estas proponita por publikigo.', |
|
| 450 | - 'info_propose_4' => 'Vi estas petata konsulti ĝin kaj doni vian opinion', |
|
| 451 | - 'info_propose_5' => 'en la forumo ligita al ĝi. Ĝi estas disponebla el la adreso :', |
|
| 452 | - 'info_publie_01' => 'La artikolo "@titre@" estis validigita de @connect_nom@.', |
|
| 453 | - 'info_publie_1' => '[@nom_site_spip@] PUBLIKIGAS : @titre@', |
|
| 454 | - 'info_publie_2' => 'Artikolo publikigita |
|
| 449 | + 'info_propose_3' => 'La artikolo "@titre@" estas proponita por publikigo.', |
|
| 450 | + 'info_propose_4' => 'Vi estas petata konsulti ĝin kaj doni vian opinion', |
|
| 451 | + 'info_propose_5' => 'en la forumo ligita al ĝi. Ĝi estas disponebla el la adreso :', |
|
| 452 | + 'info_publie_01' => 'La artikolo "@titre@" estis validigita de @connect_nom@.', |
|
| 453 | + 'info_publie_1' => '[@nom_site_spip@] PUBLIKIGAS : @titre@', |
|
| 454 | + 'info_publie_2' => 'Artikolo publikigita |
|
| 455 | 455 | --------------', |
| 456 | - 'info_rechercher' => 'Serĉi', |
|
| 457 | - 'info_rechercher_02' => 'Serĉi :', |
|
| 458 | - 'info_remplacer_vignette' => 'Anstataŭi la defaŭltan vinjeton per propra vinjeto :', |
|
| 459 | - 'info_rubriques_nb' => '@nb@ rubrikoj', |
|
| 460 | - 'info_rubriques_un' => '1 rubriko', |
|
| 461 | - 'info_sans_titre_2' => 'sen titolo', |
|
| 462 | - 'info_selectionner_fichier' => 'Vi povas selekti dosieron el la dosierujo @upload@', |
|
| 463 | - 'info_selectionner_fichier_2' => 'Elektu dosieron :', |
|
| 464 | - 'info_sites_nb' => '@nb@ retejoj', |
|
| 465 | - 'info_sites_un' => '1 retejo', |
|
| 466 | - 'info_supprimer_vignette' => 'forigi la vinjeton', |
|
| 467 | - 'info_symbole_bleu' => 'La <b>blua</b> simbolo indikas <b>memorigilon</b> : tio estas al vi persone adresata memoriga mesaĝo.', |
|
| 468 | - 'info_symbole_jaune' => 'La <b>flava</b> simbolo indikas <b>anoncon al ĉiuj redaktantoj</b> : modifebla de ĉiuj mastrumantoj, kaj videbla de ĉiuj redaktantoj.', |
|
| 469 | - 'info_symbole_vert' => 'La <b>verda</b> simbolo indikas la <b>mesaĝojn interŝanĝitajn kun aliaj uzantoj</b> de la retejo.', |
|
| 470 | - 'info_telecharger_nouveau_logo' => 'Alŝuti novan vinjeton :', |
|
| 471 | - 'info_telecharger_ordinateur' => 'Alŝuti ekde via komputilo :', |
|
| 472 | - 'info_tous_resultats_enregistres' => '[ĉiuj rezultoj estas registritaj]', |
|
| 473 | - 'info_tout_afficher' => 'Ĉion afiŝi', |
|
| 474 | - 'info_travaux_texte' => 'Tiu retejo ne jam estas konfigurita. Bonvolu reveni poste...', |
|
| 475 | - 'info_travaux_titre' => 'Retejo prilaborata ', |
|
| 476 | - 'info_trop_resultat' => 'Tro da rezultoj por "@cherche_mot@" ; bonvolu fajnigi la serĉokriteriojn.', |
|
| 477 | - 'info_utilisation_messagerie_interne' => 'Vi uzas la internan poŝton de tiu ĉi retejo.', |
|
| 478 | - 'info_valider_lien' => 'validigi tiun ĉi ligilon', |
|
| 479 | - 'info_verifier_image' => ', bonvolu kontroli ĉu viaj bildoj estas trafe transigitaj.', |
|
| 480 | - 'info_vignette_defaut' => 'Defaŭlta vinjeto', |
|
| 481 | - 'info_vignette_personnalisee' => 'Persona vinjeto', |
|
| 482 | - 'info_visite' => 'vizito :', |
|
| 483 | - 'info_vos_rendez_vous' => 'Viaj estontaj rendevuoj', |
|
| 484 | - 'infos_vos_pense_bete' => 'Viaj memorigiloj', |
|
| 456 | + 'info_rechercher' => 'Serĉi', |
|
| 457 | + 'info_rechercher_02' => 'Serĉi :', |
|
| 458 | + 'info_remplacer_vignette' => 'Anstataŭi la defaŭltan vinjeton per propra vinjeto :', |
|
| 459 | + 'info_rubriques_nb' => '@nb@ rubrikoj', |
|
| 460 | + 'info_rubriques_un' => '1 rubriko', |
|
| 461 | + 'info_sans_titre_2' => 'sen titolo', |
|
| 462 | + 'info_selectionner_fichier' => 'Vi povas selekti dosieron el la dosierujo @upload@', |
|
| 463 | + 'info_selectionner_fichier_2' => 'Elektu dosieron :', |
|
| 464 | + 'info_sites_nb' => '@nb@ retejoj', |
|
| 465 | + 'info_sites_un' => '1 retejo', |
|
| 466 | + 'info_supprimer_vignette' => 'forigi la vinjeton', |
|
| 467 | + 'info_symbole_bleu' => 'La <b>blua</b> simbolo indikas <b>memorigilon</b> : tio estas al vi persone adresata memoriga mesaĝo.', |
|
| 468 | + 'info_symbole_jaune' => 'La <b>flava</b> simbolo indikas <b>anoncon al ĉiuj redaktantoj</b> : modifebla de ĉiuj mastrumantoj, kaj videbla de ĉiuj redaktantoj.', |
|
| 469 | + 'info_symbole_vert' => 'La <b>verda</b> simbolo indikas la <b>mesaĝojn interŝanĝitajn kun aliaj uzantoj</b> de la retejo.', |
|
| 470 | + 'info_telecharger_nouveau_logo' => 'Alŝuti novan vinjeton :', |
|
| 471 | + 'info_telecharger_ordinateur' => 'Alŝuti ekde via komputilo :', |
|
| 472 | + 'info_tous_resultats_enregistres' => '[ĉiuj rezultoj estas registritaj]', |
|
| 473 | + 'info_tout_afficher' => 'Ĉion afiŝi', |
|
| 474 | + 'info_travaux_texte' => 'Tiu retejo ne jam estas konfigurita. Bonvolu reveni poste...', |
|
| 475 | + 'info_travaux_titre' => 'Retejo prilaborata ', |
|
| 476 | + 'info_trop_resultat' => 'Tro da rezultoj por "@cherche_mot@" ; bonvolu fajnigi la serĉokriteriojn.', |
|
| 477 | + 'info_utilisation_messagerie_interne' => 'Vi uzas la internan poŝton de tiu ĉi retejo.', |
|
| 478 | + 'info_valider_lien' => 'validigi tiun ĉi ligilon', |
|
| 479 | + 'info_verifier_image' => ', bonvolu kontroli ĉu viaj bildoj estas trafe transigitaj.', |
|
| 480 | + 'info_vignette_defaut' => 'Defaŭlta vinjeto', |
|
| 481 | + 'info_vignette_personnalisee' => 'Persona vinjeto', |
|
| 482 | + 'info_visite' => 'vizito :', |
|
| 483 | + 'info_vos_rendez_vous' => 'Viaj estontaj rendevuoj', |
|
| 484 | + 'infos_vos_pense_bete' => 'Viaj memorigiloj', |
|
| 485 | 485 | |
| 486 | - // L |
|
| 487 | - 'label_ajout_id_rapide' => 'Rapida aldono', |
|
| 488 | - 'label_poids_fichier' => 'Grandeco', |
|
| 489 | - 'lien_afficher_icones_seuls' => 'Afiŝi nur la piktogramojn', |
|
| 490 | - 'lien_afficher_texte_icones' => 'Afiŝi la piktogramojn kaj la tekston', |
|
| 491 | - 'lien_afficher_texte_seul' => 'Afiŝi nur la tekston', |
|
| 492 | - 'lien_liberer' => 'liberigi', |
|
| 493 | - 'lien_liberer_tous' => 'Liberigi ĉiujn', |
|
| 494 | - 'lien_nouvea_pense_bete' => 'NOVA MEMORIGILO', |
|
| 495 | - 'lien_nouveau_message' => 'NOVA MESAĜO', |
|
| 496 | - 'lien_nouvelle_annonce' => 'NOVA ANONCO', |
|
| 497 | - 'lien_petitions' => 'PETSKRIBO', |
|
| 498 | - 'lien_popularite' => 'populareco : @popularite@%', |
|
| 499 | - 'lien_racine_site' => 'RADIKO DE LA RETEJO', |
|
| 500 | - 'lien_reessayer' => 'reprovi', |
|
| 501 | - 'lien_repondre_message' => 'Respondi al tiu mesaĝo', |
|
| 502 | - 'lien_supprimer' => 'forigi', |
|
| 503 | - 'lien_tout_afficher' => 'Afiŝi ĉion', |
|
| 504 | - 'lien_visite_site' => 'viziti tiun retejon', |
|
| 505 | - 'lien_visites' => '@visites@ vizitoj', |
|
| 506 | - 'lien_voir_auteur' => 'Vidi tiun aŭtoron', |
|
| 507 | - 'ligne' => 'Linio', |
|
| 508 | - 'login' => 'Ensaluti', |
|
| 509 | - 'login_acces_prive' => 'aliro al la privata spaco', |
|
| 510 | - 'login_autre_identifiant' => 'ensaluti per alia salutnomo', |
|
| 511 | - 'login_cookie_accepte' => 'Bonvolu agordi vian retumilon por ke ĝi akceptu ilin (almenaŭ por tiu ĉi retejo).', |
|
| 512 | - 'login_cookie_oblige' => 'Por sekure ensalutiĝi en tiu retejo, vi devas akcepti la kuketojn.', |
|
| 513 | - 'login_deconnexion_ok' => 'Elsalutinta.', |
|
| 514 | - 'login_erreur_pass' => 'Pasvort-eraro.', |
|
| 515 | - 'login_espace_prive' => 'privata spaco', |
|
| 516 | - 'login_identifiant_inconnu' => 'La salutnomo « @login@ » estas nekonata.', |
|
| 517 | - 'login_login' => 'Salutnomo :', |
|
| 518 | - 'login_login2' => 'Salutnomo aŭ retpoŝtadreso :', |
|
| 519 | - 'login_login_pass_incorrect' => '(Salutnomo aŭ pasvorto ne valida.)', |
|
| 520 | - 'login_motpasseoublie' => 'ĉu pasvorto forgesita ?', |
|
| 521 | - 'login_non_securise' => 'Atentu, tiu formularo ne estas sekurigita ;. |
|
| 486 | + // L |
|
| 487 | + 'label_ajout_id_rapide' => 'Rapida aldono', |
|
| 488 | + 'label_poids_fichier' => 'Grandeco', |
|
| 489 | + 'lien_afficher_icones_seuls' => 'Afiŝi nur la piktogramojn', |
|
| 490 | + 'lien_afficher_texte_icones' => 'Afiŝi la piktogramojn kaj la tekston', |
|
| 491 | + 'lien_afficher_texte_seul' => 'Afiŝi nur la tekston', |
|
| 492 | + 'lien_liberer' => 'liberigi', |
|
| 493 | + 'lien_liberer_tous' => 'Liberigi ĉiujn', |
|
| 494 | + 'lien_nouvea_pense_bete' => 'NOVA MEMORIGILO', |
|
| 495 | + 'lien_nouveau_message' => 'NOVA MESAĜO', |
|
| 496 | + 'lien_nouvelle_annonce' => 'NOVA ANONCO', |
|
| 497 | + 'lien_petitions' => 'PETSKRIBO', |
|
| 498 | + 'lien_popularite' => 'populareco : @popularite@%', |
|
| 499 | + 'lien_racine_site' => 'RADIKO DE LA RETEJO', |
|
| 500 | + 'lien_reessayer' => 'reprovi', |
|
| 501 | + 'lien_repondre_message' => 'Respondi al tiu mesaĝo', |
|
| 502 | + 'lien_supprimer' => 'forigi', |
|
| 503 | + 'lien_tout_afficher' => 'Afiŝi ĉion', |
|
| 504 | + 'lien_visite_site' => 'viziti tiun retejon', |
|
| 505 | + 'lien_visites' => '@visites@ vizitoj', |
|
| 506 | + 'lien_voir_auteur' => 'Vidi tiun aŭtoron', |
|
| 507 | + 'ligne' => 'Linio', |
|
| 508 | + 'login' => 'Ensaluti', |
|
| 509 | + 'login_acces_prive' => 'aliro al la privata spaco', |
|
| 510 | + 'login_autre_identifiant' => 'ensaluti per alia salutnomo', |
|
| 511 | + 'login_cookie_accepte' => 'Bonvolu agordi vian retumilon por ke ĝi akceptu ilin (almenaŭ por tiu ĉi retejo).', |
|
| 512 | + 'login_cookie_oblige' => 'Por sekure ensalutiĝi en tiu retejo, vi devas akcepti la kuketojn.', |
|
| 513 | + 'login_deconnexion_ok' => 'Elsalutinta.', |
|
| 514 | + 'login_erreur_pass' => 'Pasvort-eraro.', |
|
| 515 | + 'login_espace_prive' => 'privata spaco', |
|
| 516 | + 'login_identifiant_inconnu' => 'La salutnomo « @login@ » estas nekonata.', |
|
| 517 | + 'login_login' => 'Salutnomo :', |
|
| 518 | + 'login_login2' => 'Salutnomo aŭ retpoŝtadreso :', |
|
| 519 | + 'login_login_pass_incorrect' => '(Salutnomo aŭ pasvorto ne valida.)', |
|
| 520 | + 'login_motpasseoublie' => 'ĉu pasvorto forgesita ?', |
|
| 521 | + 'login_non_securise' => 'Atentu, tiu formularo ne estas sekurigita ;. |
|
| 522 | 522 | Se vi ne volas ke via pasvorto estu fraŭde |
| 523 | 523 | interkaptita ĉe la reto, bonvolu aktivigi |
| 524 | 524 | Javascript-on en via retumilo', |
| 525 | - 'login_nouvelle_tentative' => 'Nova provo', |
|
| 526 | - 'login_par_ici' => 'Vi estas registrita... ĉi tien...', |
|
| 527 | - 'login_pass2' => 'Pasvorto :', |
|
| 528 | - 'login_preferez_refuser' => '<b>Se vi preferas rifuzi kuketojn</b>, alia konektometodo (malpli sekura) estas je via dispono :', |
|
| 529 | - 'login_recharger' => 'freŝigi tiun ĉi paĝon', |
|
| 530 | - 'login_rester_identifie' => 'Resti ensalutinta kelkajn tagojn', # MODIF |
|
| 531 | - 'login_retour_public' => 'Reen al la publika spaco', |
|
| 532 | - 'login_retour_site' => 'Reen al la publika spaco', |
|
| 533 | - 'login_retoursitepublic' => 'reen al la publika spaco', |
|
| 534 | - 'login_sans_cookie' => 'Ensaluto sen kuketo', |
|
| 535 | - 'login_securise' => 'Sekura salutnomo', |
|
| 536 | - 'login_sinscrire' => 'registriĝi', # MODIF |
|
| 537 | - 'login_test_navigateur' => 'testo retumilo/rekonektiĝo', |
|
| 538 | - 'login_verifiez_navigateur' => '(Kontrolu tamen ke via retumilo ne memoras pri via pasvorto...)', |
|
| 525 | + 'login_nouvelle_tentative' => 'Nova provo', |
|
| 526 | + 'login_par_ici' => 'Vi estas registrita... ĉi tien...', |
|
| 527 | + 'login_pass2' => 'Pasvorto :', |
|
| 528 | + 'login_preferez_refuser' => '<b>Se vi preferas rifuzi kuketojn</b>, alia konektometodo (malpli sekura) estas je via dispono :', |
|
| 529 | + 'login_recharger' => 'freŝigi tiun ĉi paĝon', |
|
| 530 | + 'login_rester_identifie' => 'Resti ensalutinta kelkajn tagojn', # MODIF |
|
| 531 | + 'login_retour_public' => 'Reen al la publika spaco', |
|
| 532 | + 'login_retour_site' => 'Reen al la publika spaco', |
|
| 533 | + 'login_retoursitepublic' => 'reen al la publika spaco', |
|
| 534 | + 'login_sans_cookie' => 'Ensaluto sen kuketo', |
|
| 535 | + 'login_securise' => 'Sekura salutnomo', |
|
| 536 | + 'login_sinscrire' => 'registriĝi', # MODIF |
|
| 537 | + 'login_test_navigateur' => 'testo retumilo/rekonektiĝo', |
|
| 538 | + 'login_verifiez_navigateur' => '(Kontrolu tamen ke via retumilo ne memoras pri via pasvorto...)', |
|
| 539 | 539 | |
| 540 | - // M |
|
| 541 | - 'masquer_colonne' => 'Kaŝi tiun ĉi kolumnon', |
|
| 542 | - 'masquer_trad' => 'kaŝi la tradukojn', |
|
| 543 | - 'message_nouveaux_identifiants_echec' => 'Ne eblas krei novajn ensalutilojn.', |
|
| 544 | - 'message_nouveaux_identifiants_echec_envoi' => 'Ne eblis sendi la novajn ensalutilojn.', |
|
| 545 | - 'message_nouveaux_identifiants_ok' => 'La novaj ensalutilojn estis senditaj al @email@.', |
|
| 546 | - 'module_fichiers_langues' => 'Dosieroj de lingvo', |
|
| 540 | + // M |
|
| 541 | + 'masquer_colonne' => 'Kaŝi tiun ĉi kolumnon', |
|
| 542 | + 'masquer_trad' => 'kaŝi la tradukojn', |
|
| 543 | + 'message_nouveaux_identifiants_echec' => 'Ne eblas krei novajn ensalutilojn.', |
|
| 544 | + 'message_nouveaux_identifiants_echec_envoi' => 'Ne eblis sendi la novajn ensalutilojn.', |
|
| 545 | + 'message_nouveaux_identifiants_ok' => 'La novaj ensalutilojn estis senditaj al @email@.', |
|
| 546 | + 'module_fichiers_langues' => 'Dosieroj de lingvo', |
|
| 547 | 547 | |
| 548 | - // N |
|
| 549 | - 'navigateur_pas_redirige' => 'Se via retumilo ne redirektiĝas, daŭrigu musklakante ĉi tie.', |
|
| 550 | - 'numero' => 'Numero', |
|
| 548 | + // N |
|
| 549 | + 'navigateur_pas_redirige' => 'Se via retumilo ne redirektiĝas, daŭrigu musklakante ĉi tie.', |
|
| 550 | + 'numero' => 'Numero', |
|
| 551 | 551 | |
| 552 | - // O |
|
| 553 | - 'occurence' => 'Trafo', |
|
| 554 | - 'onglet_affacer_base' => 'Forigi la datenbazon', |
|
| 555 | - 'onglet_auteur' => 'La aŭtoro', |
|
| 556 | - 'onglet_contenu_site' => 'Enhavo de la retejo', |
|
| 557 | - 'onglet_evolution_visite_mod' => 'Evoluado', |
|
| 558 | - 'onglet_fonctions_avances' => 'Ampleksaj funkcioj', |
|
| 559 | - 'onglet_informations_personnelles' => 'Personaj datenoj', |
|
| 560 | - 'onglet_interactivite' => 'Interagado', |
|
| 561 | - 'onglet_messagerie' => 'Mesaĝilo', |
|
| 562 | - 'onglet_repartition_rubrique' => 'Distribuo laŭ rubrikoj', |
|
| 563 | - 'onglet_save_restaur_base' => 'Savkopii/restaŭri la datenbazon', |
|
| 564 | - 'onglet_vider_cache' => 'Malplenigi la staplon', |
|
| 552 | + // O |
|
| 553 | + 'occurence' => 'Trafo', |
|
| 554 | + 'onglet_affacer_base' => 'Forigi la datenbazon', |
|
| 555 | + 'onglet_auteur' => 'La aŭtoro', |
|
| 556 | + 'onglet_contenu_site' => 'Enhavo de la retejo', |
|
| 557 | + 'onglet_evolution_visite_mod' => 'Evoluado', |
|
| 558 | + 'onglet_fonctions_avances' => 'Ampleksaj funkcioj', |
|
| 559 | + 'onglet_informations_personnelles' => 'Personaj datenoj', |
|
| 560 | + 'onglet_interactivite' => 'Interagado', |
|
| 561 | + 'onglet_messagerie' => 'Mesaĝilo', |
|
| 562 | + 'onglet_repartition_rubrique' => 'Distribuo laŭ rubrikoj', |
|
| 563 | + 'onglet_save_restaur_base' => 'Savkopii/restaŭri la datenbazon', |
|
| 564 | + 'onglet_vider_cache' => 'Malplenigi la staplon', |
|
| 565 | 565 | |
| 566 | - // P |
|
| 567 | - 'pass_choix_pass' => 'Bonvolu elekti vian novan pasvorton :', |
|
| 568 | - 'pass_erreur' => 'Eraro', |
|
| 569 | - 'pass_erreur_acces_refuse' => '<b>Eraro :</b> vi ne plu havas aliron al tiu retejo.', |
|
| 570 | - 'pass_erreur_code_inconnu' => '<b>Eraro :</b> tiu kodo kongruas kun neniu el la vizitantoj rajtantaj aliri tiun ĉi retejon.', |
|
| 571 | - 'pass_erreur_non_enregistre' => '<b>Eraro :</b> la retpoŝtadreso <tt>@email_oubli@</tt> ne estas registrita ĉi tie.', |
|
| 572 | - 'pass_erreur_non_valide' => '<b>Eraro :</b> tiu retpoŝtadreso <tt>@email_oubli@</tt> ne validas !', |
|
| 573 | - 'pass_erreur_probleme_technique' => '<b>Eraro :</b> pro teknika problemo, la retmesaĝo ne povas esti sendata.', |
|
| 574 | - 'pass_espace_prive_bla' => 'La privata spaco de tiu ĉi retejo estas malfermita al |
|
| 566 | + // P |
|
| 567 | + 'pass_choix_pass' => 'Bonvolu elekti vian novan pasvorton :', |
|
| 568 | + 'pass_erreur' => 'Eraro', |
|
| 569 | + 'pass_erreur_acces_refuse' => '<b>Eraro :</b> vi ne plu havas aliron al tiu retejo.', |
|
| 570 | + 'pass_erreur_code_inconnu' => '<b>Eraro :</b> tiu kodo kongruas kun neniu el la vizitantoj rajtantaj aliri tiun ĉi retejon.', |
|
| 571 | + 'pass_erreur_non_enregistre' => '<b>Eraro :</b> la retpoŝtadreso <tt>@email_oubli@</tt> ne estas registrita ĉi tie.', |
|
| 572 | + 'pass_erreur_non_valide' => '<b>Eraro :</b> tiu retpoŝtadreso <tt>@email_oubli@</tt> ne validas !', |
|
| 573 | + 'pass_erreur_probleme_technique' => '<b>Eraro :</b> pro teknika problemo, la retmesaĝo ne povas esti sendata.', |
|
| 574 | + 'pass_espace_prive_bla' => 'La privata spaco de tiu ĉi retejo estas malfermita al |
|
| 575 | 575 | vizitantoj, post ties registriĝo. Tio farita, vi povos |
| 576 | 576 | konsulti la redaktatajn artikolojn, proponi artikolojn |
| 577 | 577 | kaj partopreni en ĉiuj forumoj.', |
| 578 | - 'pass_forum_bla' => 'Vi petis por kontribui en forumo |
|
| 578 | + 'pass_forum_bla' => 'Vi petis por kontribui en forumo |
|
| 579 | 579 | rezervita al registritaj vizitantoj.', |
| 580 | - 'pass_indiquez_cidessous' => 'Indiku ĉi-sube la retpoŝtadreson laŭ kiu vi |
|
| 580 | + 'pass_indiquez_cidessous' => 'Indiku ĉi-sube la retpoŝtadreson laŭ kiu vi |
|
| 581 | 581 | antaŭe registriĝis. Vi |
| 582 | 582 | ricevos retmesaĝon kiu indikos al vi kion fari por |
| 583 | 583 | reakiri vian alir-rajton.', |
| 584 | - 'pass_mail_passcookie' => '(tio ĉi estas aŭtomata mesaĝo) |
|
| 584 | + 'pass_mail_passcookie' => '(tio ĉi estas aŭtomata mesaĝo) |
|
| 585 | 585 | Por reakiri alireblon al la retejo |
| 586 | 586 | @nom_site_spip@ (@adresse_site@) |
| 587 | 587 | |
@@ -593,145 +593,145 @@ discard block |
||
| 593 | 593 | kaj ensaluti. |
| 594 | 594 | |
| 595 | 595 | ', |
| 596 | - 'pass_mot_oublie' => 'Pasvorto forgesita', |
|
| 597 | - 'pass_nouveau_enregistre' => 'Via nova pasvorto estas registrita.', |
|
| 598 | - 'pass_nouveau_pass' => 'Nova pasvorto', |
|
| 599 | - 'pass_ok' => 'JES', |
|
| 600 | - 'pass_oubli_mot' => 'Pasvorto-forgeso', |
|
| 601 | - 'pass_procedure_changer' => 'Por ŝanĝi vian pasvorton, specifu al ni la asociitan retpoŝtadreson el via konto.', |
|
| 602 | - 'pass_quitter_fenetre' => 'Forlasi tiun fenestron', |
|
| 603 | - 'pass_rappel_login' => 'Memoru : via ensalutilo (salutnomo) estas « @login@ ».', |
|
| 604 | - 'pass_recevoir_mail' => 'Vi ricevos retmesaĝon indikantan al vi kiel retrovi vian aliron al la retejo.', # MODIF |
|
| 605 | - 'pass_retour_public' => 'Reen al la publika spaco', |
|
| 606 | - 'pass_rien_a_faire_ici' => 'Nenion por fari ĉi tie.', |
|
| 607 | - 'pass_vousinscrire' => 'Registriĝi ĉe tiu retejo', |
|
| 608 | - 'precedent' => 'antaŭan', |
|
| 609 | - 'previsualisation' => 'Antaŭrigardo', |
|
| 610 | - 'previsualiser' => 'Antaŭrigardi', |
|
| 596 | + 'pass_mot_oublie' => 'Pasvorto forgesita', |
|
| 597 | + 'pass_nouveau_enregistre' => 'Via nova pasvorto estas registrita.', |
|
| 598 | + 'pass_nouveau_pass' => 'Nova pasvorto', |
|
| 599 | + 'pass_ok' => 'JES', |
|
| 600 | + 'pass_oubli_mot' => 'Pasvorto-forgeso', |
|
| 601 | + 'pass_procedure_changer' => 'Por ŝanĝi vian pasvorton, specifu al ni la asociitan retpoŝtadreson el via konto.', |
|
| 602 | + 'pass_quitter_fenetre' => 'Forlasi tiun fenestron', |
|
| 603 | + 'pass_rappel_login' => 'Memoru : via ensalutilo (salutnomo) estas « @login@ ».', |
|
| 604 | + 'pass_recevoir_mail' => 'Vi ricevos retmesaĝon indikantan al vi kiel retrovi vian aliron al la retejo.', # MODIF |
|
| 605 | + 'pass_retour_public' => 'Reen al la publika spaco', |
|
| 606 | + 'pass_rien_a_faire_ici' => 'Nenion por fari ĉi tie.', |
|
| 607 | + 'pass_vousinscrire' => 'Registriĝi ĉe tiu retejo', |
|
| 608 | + 'precedent' => 'antaŭan', |
|
| 609 | + 'previsualisation' => 'Antaŭrigardo', |
|
| 610 | + 'previsualiser' => 'Antaŭrigardi', |
|
| 611 | 611 | |
| 612 | - // R |
|
| 613 | - 'retour' => 'Reen', |
|
| 612 | + // R |
|
| 613 | + 'retour' => 'Reen', |
|
| 614 | 614 | |
| 615 | - // S |
|
| 616 | - 'spip_conforme_dtd' => 'SPIP konsideras tiun dokumenton konforma al sia DOCTYPE :', |
|
| 617 | - 'squelette' => 'skeleto', |
|
| 618 | - 'squelette_inclus_ligne' => 'skeleto inkluzivita, linio', |
|
| 619 | - 'squelette_ligne' => 'skeleto, linio', |
|
| 620 | - 'stats_visites_et_popularite' => '@visites@ vizitoj ; populareco : @popularite@', |
|
| 621 | - 'suivant' => 'sekvanta', |
|
| 615 | + // S |
|
| 616 | + 'spip_conforme_dtd' => 'SPIP konsideras tiun dokumenton konforma al sia DOCTYPE :', |
|
| 617 | + 'squelette' => 'skeleto', |
|
| 618 | + 'squelette_inclus_ligne' => 'skeleto inkluzivita, linio', |
|
| 619 | + 'squelette_ligne' => 'skeleto, linio', |
|
| 620 | + 'stats_visites_et_popularite' => '@visites@ vizitoj ; populareco : @popularite@', |
|
| 621 | + 'suivant' => 'sekvanta', |
|
| 622 | 622 | |
| 623 | - // T |
|
| 624 | - 'taille_go' => '@taille@ Go', |
|
| 625 | - 'taille_ko' => '@taille@ kb', |
|
| 626 | - 'taille_mo' => '@taille@ Mb', |
|
| 627 | - 'taille_octets' => '@taille@ bitokoj', |
|
| 628 | - 'taille_octets_bi' => '@taille@ bitokoj', |
|
| 629 | - 'texte_actualite_site_1' => 'Kiam vi estos kutimiĝinta kun la interfaco, vi povos musklaki sur « ', |
|
| 630 | - 'texte_actualite_site_2' => 'kompleta interfaco', |
|
| 631 | - 'texte_actualite_site_3' => ' » por malfermi pliajn eblecojn.', |
|
| 632 | - 'texte_creation_automatique_vignette' => 'La aŭtomata kreado de antaŭrigardaj vinjetoj estas aktivigita ĉe tiu ĉi retejo. Se vi instalas pere de tiu ĉi formularo bildojn je la formato(j) @gd_formats@, ili estos akompanataj de vinjeto kun maksimuma grandeco de @taille_preview@ bilderoj.', |
|
| 633 | - 'texte_documents_associes' => 'La sekvantaj dokumentoj estas asociitaj al la artikolo, |
|
| 623 | + // T |
|
| 624 | + 'taille_go' => '@taille@ Go', |
|
| 625 | + 'taille_ko' => '@taille@ kb', |
|
| 626 | + 'taille_mo' => '@taille@ Mb', |
|
| 627 | + 'taille_octets' => '@taille@ bitokoj', |
|
| 628 | + 'taille_octets_bi' => '@taille@ bitokoj', |
|
| 629 | + 'texte_actualite_site_1' => 'Kiam vi estos kutimiĝinta kun la interfaco, vi povos musklaki sur « ', |
|
| 630 | + 'texte_actualite_site_2' => 'kompleta interfaco', |
|
| 631 | + 'texte_actualite_site_3' => ' » por malfermi pliajn eblecojn.', |
|
| 632 | + 'texte_creation_automatique_vignette' => 'La aŭtomata kreado de antaŭrigardaj vinjetoj estas aktivigita ĉe tiu ĉi retejo. Se vi instalas pere de tiu ĉi formularo bildojn je la formato(j) @gd_formats@, ili estos akompanataj de vinjeto kun maksimuma grandeco de @taille_preview@ bilderoj.', |
|
| 633 | + 'texte_documents_associes' => 'La sekvantaj dokumentoj estas asociitaj al la artikolo, |
|
| 634 | 634 | sed ili ne estis rekte enmetitaj en ĝin. |
| 635 | 635 | Laŭ la enpaĝigo de la publika spaco, |
| 636 | 636 | ili povos aperi en formo de alkroĉitaj dokumentoj.', |
| 637 | - 'texte_erreur_mise_niveau_base' => 'Datenbazo-eraro dum la alniveligo. |
|
| 637 | + 'texte_erreur_mise_niveau_base' => 'Datenbazo-eraro dum la alniveligo. |
|
| 638 | 638 | La bildo <b>@fichier@</b> ne transŝutiĝis (artikolo @id_article@). |
| 639 | 639 | Bone notu tiun referencon, reprovu la alniveligon, |
| 640 | 640 | kaj fine kontrolu ke la bildoj plu aperu |
| 641 | 641 | en la artikoloj.', |
| 642 | - 'texte_erreur_visiteur' => 'Vi provis eniri la privatan spacon pere de ne alir-rajtiga salutnomo.', |
|
| 643 | - 'texte_inc_auth_1' => 'Vi ensalutis laŭ la |
|
| 642 | + 'texte_erreur_visiteur' => 'Vi provis eniri la privatan spacon pere de ne alir-rajtiga salutnomo.', |
|
| 643 | + 'texte_inc_auth_1' => 'Vi ensalutis laŭ la |
|
| 644 | 644 | salutnomo <b>@auth_login@</b>, sed tiu ne/ne plu ekzistas en la datenbazo. |
| 645 | 645 | Provu', |
| 646 | - 'texte_inc_auth_2' => 'rekonektiĝi', |
|
| 647 | - 'texte_inc_auth_3' => ', post esti eventuale ferminta kaj |
|
| 646 | + 'texte_inc_auth_2' => 'rekonektiĝi', |
|
| 647 | + 'texte_inc_auth_3' => ', post esti eventuale ferminta kaj |
|
| 648 | 648 | restartiginta via retumilon.', |
| 649 | - 'texte_inc_config' => 'La ŝanĝoj faritaj en tiuj ĉi paĝoj influas grave la |
|
| 649 | + 'texte_inc_config' => 'La ŝanĝoj faritaj en tiuj ĉi paĝoj influas grave la |
|
| 650 | 650 | funkciadon de via retejo. Ni konsilas al vi ne plu interveni antaŭ ol esti pli |
| 651 | 651 | kutimiĝinta pri la funkciado de la SPIP-sistemo. <br /><br /><b>Pli |
| 652 | 652 | ĝenerale, estas tre konsilinde lasi la mastrumadon de tiuj ĉi paĝoj |
| 653 | 653 | sub la respondeco de la ĉefa retejestro .</b>', |
| 654 | - 'texte_inc_meta_1' => 'La sistemo detektis eraron dum skribado de la dosiero <code>@fichier@</code>. Bonvolu, kiel mastrumanto de la retejo,', |
|
| 655 | - 'texte_inc_meta_2' => 'kontroli la skriborajtojn', |
|
| 656 | - 'texte_inc_meta_3' => 'en la dosierujo <code>@repertoire@</code>.', |
|
| 657 | - 'texte_statut_en_cours_redaction' => 'Redaktataj', |
|
| 658 | - 'texte_statut_poubelle' => 'en rubujo', |
|
| 659 | - 'texte_statut_propose_evaluation' => 'proponita por taksado', |
|
| 660 | - 'texte_statut_publie' => 'rete publikigita', |
|
| 661 | - 'texte_statut_refuse' => 'rifuzita', |
|
| 662 | - 'titre_ajouter_mot_cle' => 'ALDONI ŜLOSILVORTON :', |
|
| 663 | - 'titre_cadre_raccourcis' => 'RAPIDAJ ALIROJ :', |
|
| 664 | - 'titre_changer_couleur_interface' => 'Ŝanĝi la koloron de la interfaco', |
|
| 665 | - 'titre_image_admin_article' => 'Vi povas mastrumi tiun ĉi artikolon', |
|
| 666 | - 'titre_image_administrateur' => 'Mastrumanto', |
|
| 667 | - 'titre_image_aide' => 'Helpo pri tiu elemento', |
|
| 668 | - 'titre_image_auteur_supprime' => 'Aŭtoro forigita', |
|
| 669 | - 'titre_image_redacteur' => 'Redaktanto sen alireblo', |
|
| 670 | - 'titre_image_redacteur_02' => 'Redaktanto', |
|
| 671 | - 'titre_image_selecteur' => 'Montri la liston', |
|
| 672 | - 'titre_image_visiteur' => 'Vizitanto', |
|
| 673 | - 'titre_joindre_document' => 'ALDONI DOKUMENTON', |
|
| 674 | - 'titre_mots_cles' => 'ŜLOSILVORTOJ', |
|
| 675 | - 'titre_probleme_technique' => 'Atentu : teknika problemo (SQL-servilo) malhelpas la aliron al tiu parto de la retejo. Dankon pro via komprenemo.', |
|
| 676 | - 'titre_publier_document' => 'PUBLIKIGI DOKUMENTON EN TIU ĈI RUBRIKO', |
|
| 677 | - 'titre_signatures_attente' => 'Subskriboj validotaj', |
|
| 678 | - 'titre_signatures_confirmees' => 'Subskriboj konfirmitaj', |
|
| 679 | - 'titre_statistiques' => 'Statistikoj de la retejo', |
|
| 680 | - 'titre_titre_document' => 'Titolo de la dokumento :', |
|
| 681 | - 'todo' => 'venonta', |
|
| 682 | - 'trad_definir_reference' => 'Elekti „@titre@“ kiel referenco de la tradukoj', |
|
| 683 | - 'trad_reference' => '(referenco de la traduktoj)', |
|
| 654 | + 'texte_inc_meta_1' => 'La sistemo detektis eraron dum skribado de la dosiero <code>@fichier@</code>. Bonvolu, kiel mastrumanto de la retejo,', |
|
| 655 | + 'texte_inc_meta_2' => 'kontroli la skriborajtojn', |
|
| 656 | + 'texte_inc_meta_3' => 'en la dosierujo <code>@repertoire@</code>.', |
|
| 657 | + 'texte_statut_en_cours_redaction' => 'Redaktataj', |
|
| 658 | + 'texte_statut_poubelle' => 'en rubujo', |
|
| 659 | + 'texte_statut_propose_evaluation' => 'proponita por taksado', |
|
| 660 | + 'texte_statut_publie' => 'rete publikigita', |
|
| 661 | + 'texte_statut_refuse' => 'rifuzita', |
|
| 662 | + 'titre_ajouter_mot_cle' => 'ALDONI ŜLOSILVORTON :', |
|
| 663 | + 'titre_cadre_raccourcis' => 'RAPIDAJ ALIROJ :', |
|
| 664 | + 'titre_changer_couleur_interface' => 'Ŝanĝi la koloron de la interfaco', |
|
| 665 | + 'titre_image_admin_article' => 'Vi povas mastrumi tiun ĉi artikolon', |
|
| 666 | + 'titre_image_administrateur' => 'Mastrumanto', |
|
| 667 | + 'titre_image_aide' => 'Helpo pri tiu elemento', |
|
| 668 | + 'titre_image_auteur_supprime' => 'Aŭtoro forigita', |
|
| 669 | + 'titre_image_redacteur' => 'Redaktanto sen alireblo', |
|
| 670 | + 'titre_image_redacteur_02' => 'Redaktanto', |
|
| 671 | + 'titre_image_selecteur' => 'Montri la liston', |
|
| 672 | + 'titre_image_visiteur' => 'Vizitanto', |
|
| 673 | + 'titre_joindre_document' => 'ALDONI DOKUMENTON', |
|
| 674 | + 'titre_mots_cles' => 'ŜLOSILVORTOJ', |
|
| 675 | + 'titre_probleme_technique' => 'Atentu : teknika problemo (SQL-servilo) malhelpas la aliron al tiu parto de la retejo. Dankon pro via komprenemo.', |
|
| 676 | + 'titre_publier_document' => 'PUBLIKIGI DOKUMENTON EN TIU ĈI RUBRIKO', |
|
| 677 | + 'titre_signatures_attente' => 'Subskriboj validotaj', |
|
| 678 | + 'titre_signatures_confirmees' => 'Subskriboj konfirmitaj', |
|
| 679 | + 'titre_statistiques' => 'Statistikoj de la retejo', |
|
| 680 | + 'titre_titre_document' => 'Titolo de la dokumento :', |
|
| 681 | + 'todo' => 'venonta', |
|
| 682 | + 'trad_definir_reference' => 'Elekti „@titre@“ kiel referenco de la tradukoj', |
|
| 683 | + 'trad_reference' => '(referenco de la traduktoj)', |
|
| 684 | 684 | |
| 685 | - // U |
|
| 686 | - 'upload_limit' => 'Tiu dosiero estas tro granda por la servilo : la maksimuma dosiergrando, kiam oni alŝutas, estas @max@.', |
|
| 685 | + // U |
|
| 686 | + 'upload_limit' => 'Tiu dosiero estas tro granda por la servilo : la maksimuma dosiergrando, kiam oni alŝutas, estas @max@.', |
|
| 687 | 687 | |
| 688 | - // Z |
|
| 689 | - 'zbug_balise_b_aval' => ' : posta B marko', |
|
| 690 | - 'zbug_balise_inexistante' => 'Marko @balise@ malbone deklarita por @from@', |
|
| 691 | - 'zbug_balise_sans_argument' => 'Mankas argumento en la marko @balise@', |
|
| 692 | - 'zbug_boucle' => 'iteracio', |
|
| 693 | - 'zbug_boucle_recursive_undef' => 'Nedifinita rekursia iteracio : @nom@', |
|
| 694 | - 'zbug_calcul' => 'komputado', |
|
| 695 | - 'zbug_champ_hors_boucle' => 'Kampo @champ@ eksteras iteracion', |
|
| 696 | - 'zbug_champ_hors_motif' => 'Kampo @champ@ eksteras kontekston @motif@', |
|
| 697 | - 'zbug_code' => 'kodo', |
|
| 698 | - 'zbug_critere_inconnu' => 'Nekonata kriterio @critere@', |
|
| 699 | - 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} pri tabelo sen atoma ĉefŝlosilo', |
|
| 700 | - 'zbug_distant_interdit' => 'Ago ĉe tiu ekstera datenbazo malpermesata', |
|
| 701 | - 'zbug_doublon_table_sans_cle_primaire' => 'Duobloj uzitaj ĉe tabelo, kiu ne havas simplan ĉefŝlosilon', |
|
| 702 | - 'zbug_doublon_table_sans_index' => 'Duoblaĵoj en la datentabelo sen indekso', |
|
| 703 | - 'zbug_erreur_boucle_double' => 'Duobla difino de la interacio @id@', |
|
| 704 | - 'zbug_erreur_boucle_fermant' => 'Iteracio @id@ ne fermita', |
|
| 705 | - 'zbug_erreur_boucle_syntaxe' => 'Sintakso de la iteracia @id@ ne valida', |
|
| 706 | - 'zbug_erreur_compilation' => 'Kompil-eraro', |
|
| 707 | - 'zbug_erreur_execution_page' => 'Eraro dum plenumo', |
|
| 708 | - 'zbug_erreur_filtre' => 'Filtrilo @filtre@ nedifinita', |
|
| 709 | - 'zbug_erreur_meme_parent' => 'La kriterio {meme_parent} nur aplikiĝas je iteracioj (FORUMS) aŭ (RUBRIQUES)', |
|
| 710 | - 'zbug_erreur_squelette' => 'Eraro(j) en la skeleto', |
|
| 711 | - 'zbug_hors_compilation' => 'Ne kompilita', |
|
| 712 | - 'zbug_info_erreur_squelette' => 'Eraro ĉe la retejo', |
|
| 713 | - 'zbug_inversion_ordre_inexistant' => 'Inversigo de ne ekzistanta ordo', |
|
| 714 | - 'zbug_pagination_sans_critere' => 'Marko #PAGINATION senkriteria {pagination} aŭ uzata en rekursia iteracio', |
|
| 715 | - 'zbug_parametres_inclus_incorrects' => 'Ne korektaj inkludaj parametroj : @param@', |
|
| 716 | - 'zbug_profile' => 'Kalkuldaŭro : @time@', |
|
| 717 | - 'zbug_resultat' => 'rezulto', |
|
| 718 | - 'zbug_serveur_indefini' => 'Nedifinata SQL-servilo', |
|
| 719 | - 'zbug_statistiques' => 'statistikoj pri SQL-informpetoj ordigitaj laŭ daŭro', |
|
| 720 | - 'zbug_table_inconnue' => 'nekonata SQL « @table@ » tabelo', |
|
| 721 | - 'zxml_connus_attributs' => 'konataj atributoj', |
|
| 722 | - 'zxml_de' => 'de', |
|
| 723 | - 'zxml_inconnu_attribut' => 'nekonataj atributoj', |
|
| 724 | - 'zxml_inconnu_balise' => 'ne konita marko', |
|
| 725 | - 'zxml_inconnu_entite' => 'ne konata ento', |
|
| 726 | - 'zxml_inconnu_id' => 'ne konata ID', |
|
| 727 | - 'zxml_mais_de' => 'sed', |
|
| 728 | - 'zxml_non_conforme' => 'ne kongrua kun la motivo', |
|
| 729 | - 'zxml_non_fils' => 'ne estas filo de', |
|
| 730 | - 'zxml_nonvide_balise' => 'ne malplena marko', |
|
| 731 | - 'zxml_obligatoire_attribut' => 'deviga atributo sed foresta en', |
|
| 732 | - 'zxml_succession_fils_incorrecte' => 'sinsekvo de filoj korekta', |
|
| 733 | - 'zxml_survoler' => 'superflugi por ekvidi korektaĵojn', |
|
| 734 | - 'zxml_valeur_attribut' => 'atributa valoro', |
|
| 735 | - 'zxml_vide_balise' => 'malplena marko', |
|
| 736 | - 'zxml_vu' => 'antaŭe vidita' |
|
| 688 | + // Z |
|
| 689 | + 'zbug_balise_b_aval' => ' : posta B marko', |
|
| 690 | + 'zbug_balise_inexistante' => 'Marko @balise@ malbone deklarita por @from@', |
|
| 691 | + 'zbug_balise_sans_argument' => 'Mankas argumento en la marko @balise@', |
|
| 692 | + 'zbug_boucle' => 'iteracio', |
|
| 693 | + 'zbug_boucle_recursive_undef' => 'Nedifinita rekursia iteracio : @nom@', |
|
| 694 | + 'zbug_calcul' => 'komputado', |
|
| 695 | + 'zbug_champ_hors_boucle' => 'Kampo @champ@ eksteras iteracion', |
|
| 696 | + 'zbug_champ_hors_motif' => 'Kampo @champ@ eksteras kontekston @motif@', |
|
| 697 | + 'zbug_code' => 'kodo', |
|
| 698 | + 'zbug_critere_inconnu' => 'Nekonata kriterio @critere@', |
|
| 699 | + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} pri tabelo sen atoma ĉefŝlosilo', |
|
| 700 | + 'zbug_distant_interdit' => 'Ago ĉe tiu ekstera datenbazo malpermesata', |
|
| 701 | + 'zbug_doublon_table_sans_cle_primaire' => 'Duobloj uzitaj ĉe tabelo, kiu ne havas simplan ĉefŝlosilon', |
|
| 702 | + 'zbug_doublon_table_sans_index' => 'Duoblaĵoj en la datentabelo sen indekso', |
|
| 703 | + 'zbug_erreur_boucle_double' => 'Duobla difino de la interacio @id@', |
|
| 704 | + 'zbug_erreur_boucle_fermant' => 'Iteracio @id@ ne fermita', |
|
| 705 | + 'zbug_erreur_boucle_syntaxe' => 'Sintakso de la iteracia @id@ ne valida', |
|
| 706 | + 'zbug_erreur_compilation' => 'Kompil-eraro', |
|
| 707 | + 'zbug_erreur_execution_page' => 'Eraro dum plenumo', |
|
| 708 | + 'zbug_erreur_filtre' => 'Filtrilo @filtre@ nedifinita', |
|
| 709 | + 'zbug_erreur_meme_parent' => 'La kriterio {meme_parent} nur aplikiĝas je iteracioj (FORUMS) aŭ (RUBRIQUES)', |
|
| 710 | + 'zbug_erreur_squelette' => 'Eraro(j) en la skeleto', |
|
| 711 | + 'zbug_hors_compilation' => 'Ne kompilita', |
|
| 712 | + 'zbug_info_erreur_squelette' => 'Eraro ĉe la retejo', |
|
| 713 | + 'zbug_inversion_ordre_inexistant' => 'Inversigo de ne ekzistanta ordo', |
|
| 714 | + 'zbug_pagination_sans_critere' => 'Marko #PAGINATION senkriteria {pagination} aŭ uzata en rekursia iteracio', |
|
| 715 | + 'zbug_parametres_inclus_incorrects' => 'Ne korektaj inkludaj parametroj : @param@', |
|
| 716 | + 'zbug_profile' => 'Kalkuldaŭro : @time@', |
|
| 717 | + 'zbug_resultat' => 'rezulto', |
|
| 718 | + 'zbug_serveur_indefini' => 'Nedifinata SQL-servilo', |
|
| 719 | + 'zbug_statistiques' => 'statistikoj pri SQL-informpetoj ordigitaj laŭ daŭro', |
|
| 720 | + 'zbug_table_inconnue' => 'nekonata SQL « @table@ » tabelo', |
|
| 721 | + 'zxml_connus_attributs' => 'konataj atributoj', |
|
| 722 | + 'zxml_de' => 'de', |
|
| 723 | + 'zxml_inconnu_attribut' => 'nekonataj atributoj', |
|
| 724 | + 'zxml_inconnu_balise' => 'ne konita marko', |
|
| 725 | + 'zxml_inconnu_entite' => 'ne konata ento', |
|
| 726 | + 'zxml_inconnu_id' => 'ne konata ID', |
|
| 727 | + 'zxml_mais_de' => 'sed', |
|
| 728 | + 'zxml_non_conforme' => 'ne kongrua kun la motivo', |
|
| 729 | + 'zxml_non_fils' => 'ne estas filo de', |
|
| 730 | + 'zxml_nonvide_balise' => 'ne malplena marko', |
|
| 731 | + 'zxml_obligatoire_attribut' => 'deviga atributo sed foresta en', |
|
| 732 | + 'zxml_succession_fils_incorrecte' => 'sinsekvo de filoj korekta', |
|
| 733 | + 'zxml_survoler' => 'superflugi por ekvidi korektaĵojn', |
|
| 734 | + 'zxml_valeur_attribut' => 'atributa valoro', |
|
| 735 | + 'zxml_vide_balise' => 'malplena marko', |
|
| 736 | + 'zxml_vu' => 'antaŭe vidita' |
|
| 737 | 737 | ); |