source: spip-zone/_plugins_/gettext/formulaires/gettext_repertoire.php

Last change on this file was 41660, checked in by marcimat@…, 10 years ago

Plugin (mal nommé) «gettext» pour passer des fichiers de langue SPIP en fichiers PO et inversement.

Cela permet ainsi des éditions plus faciles pour les traducteurs avec des outils comme POEDIT ou encore GTranslate (ce dernier permettant d'afficher plusieurs langues à la fois (en activant un greffon) lorsqu'on sélectionne une clé de traduction)...

Nécéssite :

  • SPIP 2.1 (squelettes privés, mais certainement utilisable en 2.0 aussi, pas testé)
  • Bonux (boucle POUR)
  • Saisies (#SAISIE)
  • CVT Multi Page

Utilisation :

  • ?exec=gettext

Fourni un formulaire pour passer des fichiers situés dans un répertoire défini, du format SPIP au format PO ou inversement.

Les fichiers peuvent être créés dans le même répertoire que celui sélectionné à condition qu'il soit accessible en écriture (ex : plugins/agenda/lang), ou, par défaut, dans un répertoire «locale» à créer à la racine de SPIP (à rendre accessible en écriture).

Les fichiers de lang SPIP créés ont une globale définie supplémentaire pour enregistrer les méta-informations des fichiers PO ( $GLOBALS[$GLOBALSidx_lang_meta?] ).

File size: 3.7 KB
Line 
1<?php
2
3function formulaires_gettext_repertoire_charger_dist() {
4        return array(
5                'repertoire'=>'',
6                'repertoire_propose'=>'',
7                'fichiers'=>array(),
8                'todo'=>'',
9                'exporter_dans_selection'=>'', //
10                '_etapes'=>2,
11        );
12}
13
14function formulaires_gettext_repertoire_verifier_1_dist() {
15        $dir = _request('repertoire');
16        $dir2 = _request('repertoire_propose');
17        $erreurs = array();
18        if ($dir and $dir2) {
19                $erreurs['repertoire'] = _T('gettext:erreur_chemin_un_seul');
20                $erreurs['repertoire_propose'] = _T('gettext:erreur_chemin_un_seul');
21        } elseif(!$dir and !$dir2) {
22                $erreurs['repertoire'] = _T('gettext:erreur_chemin_a_definir');
23                $erreurs['repertoire_propose'] = _T('gettext:erreur_chemin_a_definir');
24        } else {
25                $dir = _DIR_RACINE . ($dir ? $dir : $dir2);
26               
27                if (!is_dir($dir)) {
28                        $erreurs['repertoire'] = _T('gettext:erreur_chemin_pas_repertoire');
29                }
30                if (!is_readable($dir)) {
31                        $erreurs['repertoire'] = _T('gettext:erreur_chemin_pas_accessible_lecture');
32                }
33                if (_request('exporter_dans_selection') and !is_writable($dir)) {
34                        $erreurs['exporter_dans_selection'] = _T('gettext:erreur_reperoire_pas_accessible_ecriture', array('dir'=>joli_repertoire($dir)));
35                }
36        }
37       
38        if (!_request('exporter_dans_selection')) {
39                if (!is_dir(_DIR_RACINE . 'locale')) {
40                        $erreurs['exporter_dans_selection'] = _T('gettext:erreur_reperoire_pas_accessible_ecriture', array('dir'=>'locale'));
41                }
42        }
43       
44        if (count($erreurs)) {
45                $erreurs['message_erreur'] = _T('gettext:erreur_presente');
46        }
47       
48        return $erreurs;
49       
50}
51
52
53function formulaires_gettext_repertoire_verifier_2_dist() {
54        $erreurs = array();
55        $dir = _DIR_RACINE . sinon(_request('repertoire_propose'), _request('repertoire'));
56       
57        return $erreurs;
58}
59
60
61function formulaires_gettext_repertoire_traiter_dist() {
62        $dir = sinon(_request('repertoire_propose'), _request('repertoire'));
63        $message_erreur = '';
64       
65        include_spip('inc/gettext');
66        $todo = _request('todo');
67        $files = _request('fichiers');
68        foreach ($files as $n=>$nom) {
69                $files[$n] = _DIR_RACINE . $dir . '/' . $nom;
70        }
71
72        $dir_dest = _DIR_RACINE . (_request('exporter_dans_selection') ? $dir : 'locale');
73        if ($todo == 'to_po') {
74                # $files = trouver_langues_spip_chemin($chemin); // tout le dossier
75                list($ok, $message_erreur) = creer_fichiers_langues_po_depuis_spip($files, $dir_dest);
76        }
77        elseif ($todo == 'to_spip') {
78                # $files = trouver_langues_po_chemin($chemin); // tout le dossier
79                list($ok, $message_erreur) = creer_fichiers_langues_spip_depuis_po($files, $dir_dest);
80        }
81
82        $retour = array(
83                'editable' => true,
84        );
85       
86        if ($message_erreur) {
87                $retour['message_erreur'] = $message_erreur;
88        } else {
89                $retour['message_ok'] = _T('gettext:operation_reussie');
90        }
91       
92        return $retour;
93}
94
95
96function liste_repertoire_lang_spip() {
97        $lieux = array();
98        $langs = find_all_in_path("lang/", ".*[.]php");
99        foreach ($langs as $file=>$lieu) {
100                $dir = joli_repertoire(dirname($lieu));
101                $lieux[ $dir ] = $dir;
102        }
103        ksort($lieux);
104       
105        // ajouter un éventuel repertoire locale/ à la racine de SPIP
106        if (is_dir(_DIR_RACINE . 'locale')) {
107                $lieux = array('locale'=>'locale') + $lieux;
108        }
109       
110        return $lieux;
111}
112
113
114function liste_fichiers_lang_spip($dir) {
115        include_spip('inc/gettext');
116        $fichiers = array();
117        $files = trouver_langues_spip_chemin(_DIR_RACINE . $dir);
118        foreach($files as $f) {
119                $file = basename($f);
120                $fichiers[$file] = $file;
121        }
122        ksort($fichiers);
123        return $fichiers;
124}
125
126
127function liste_fichiers_lang_po($dir) {
128        include_spip('inc/gettext');
129        $fichiers = array();
130        $files = trouver_langues_po_chemin(_DIR_RACINE . $dir);
131        foreach($files as $f) {
132                $file = basename($f);
133                $dir = basename(dirname(dirname($f))) . '/' . basename(dirname($f)) . '/';
134                $fichiers[$dir.$file] = $dir.$file;
135        }
136        ksort($fichiers);
137        return $fichiers;
138}
139
140
141?>
Note: See TracBrowser for help on using the repository browser.