source: spip-zone/_plugins_/trad-lang/trunk/export_lang/po.php @ 82034

Last change on this file since 82034 was 82034, checked in by kent1@…, 7 years ago

Exporter en CSV

utiliser sql_allfetsel + foreach au lieur de sql_select + while + sql_fetch

Petites améliorations

File size: 5.6 KB
Line 
1<?php
2/**
3 *
4 * Trad-lang v2
5 * Plugin SPIP de traduction de fichiers de langue
6 * © Florent Jugla, Fil, kent1
7 *
8 * Fichier d'export d'un module de langue en .po (Gettext)
9 */
10 
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13/**
14 * Fonction d'export d'une langue d'un module en .po
15 *
16 * Les chaînes avec un statut NEW sont vidées
17 * Les chaînes avec un statut MODIF sont mises en "fuzzy"
18 *
19 * @param string $module
20 *              Le module à exporter (le champ "module" dans la base)
21 * @param string $langue
22 *              La langue à exporter
23 * @param string $dir_lang
24 *              Le répertoire où stocker les fichiers de langue
25 * @return string $fichier
26 *              Le fichier final
27 */
28function export_lang_po_dist($module,$langue,$dir_lang){
29        $x=$tous=array();
30        $contenu = '';
31       
32        /**
33         * Le fichier final
34         * local/cache-lang/module_lang.po
35         */
36        $fichier = $dir_lang."/".$module."_".$langue.".po";
37
38        /**
39         * Les informations du module
40         */     
41        $info_module = sql_fetsel('id_tradlang_module,lang_mere,nom_mod','spip_tradlang_modules','module='.sql_quote($module));
42       
43        $url_trad = url_absolue(parametre_url(generer_url_entite($info_module['id_tradlang_module'],'tradlang_module'),'lang_cible',$langue));
44       
45        /**
46         * Gestion des auteurs
47         *
48         * On ajoute une liste de traducteurs en entête de fichier (non obligatoire)
49         * On ajoute également l'item "Last-Translator : user <email>" dans les métas ($last_auteur)
50         */
51        $last_auteur = array();
52        if($langue != $info_module['lang_mere']){
53                $traducteur = sql_fetsel('id_tradlang,traducteur','spip_tradlangs',"id_tradlang_module=".intval($info_module['id_tradlang_module'])." AND lang=".sql_quote($langue),"",'maj DESC','0,1');
54                if(is_numeric($traducteur['traducteur']))
55                        $id_auteur = $traducteur['traducteur'];
56                else
57                        $id_auteur = sql_getfetsel('id_auteur','spip_versions','objet="tradlang" AND id_objet='.intval($traducteur['id_tradlang']),"",'id_version DESC','0,1');
58
59                $last_auteur = sql_fetsel('nom,email','spip_auteurs','id_auteur='.intval($id_auteur));
60               
61                $traducteurs[$lang] = array();
62                $people_unique = array();
63                $liste_traducteurs = sql_select('DISTINCT(traducteur)','spip_tradlangs','id_tradlang_module='.intval($info_module['id_tradlang_module'])." and lang=".sql_quote($langue));
64                while ($t = sql_fetch($liste_traducteurs)){
65                        $traducteurs_lang = explode(',',$t['traducteur']);
66                        foreach($traducteurs_lang as $traducteur){
67                                if(!in_array($traducteur,$people_unique)){
68                                        if(is_numeric($traducteur) AND $id_auteur=intval($traducteur)){
69                                                $traducteur_supp['nom'] = extraire_multi(sql_getfetsel('nom','spip_auteurs','id_auteur='.$id_auteur));
70                                                $traducteur_supp['lien'] = url_absolue(generer_url_entite($id_auteur,'auteur'),$url_site);
71                                        }else if(trim(strlen($traducteur)) > 0){
72                                                $traducteur_supp['nom'] = trim($traducteur);
73                                                $traducteur_supp['lien'] = '';
74                                        }
75                                        if(isset($traducteur_supp['nom']))
76                                                $traducteurs[$lang][] = $traducteur_supp;
77                                        unset($traducteur_supp);
78                                        $people_unique[] = $traducteur;
79                                }
80                        }
81                }
82                foreach($traducteurs as $lang => $peoples) {
83                        $trad_texte = "#\n# Traducteurs :\n";
84                        if ($peoples) {
85                                foreach ($peoples as $people) {
86                                        $trad_texte .= "# ".$people['nom']." (".$people['lien'].")\n";
87                                }
88                        }
89                }
90        }
91
92        /**
93         * Création de l'entête du fichier généré
94         */
95        $contenu .= '# This is a SPIP language file  --  Ceci est un fichier langue de SPIP
96# extrait automatiquement de '.$url_trad.'
97'
98. (isset($trad_texte) ? $trad_texte : '')
99. 'msgid ""
100msgstr ""
101"Project-Id-Version: '.$info_module['nom_mod'].'\n"
102'
103. (defined('_DIR_PLUGIN_TICKETS') ? '"Report-Msgid-Bugs-To: '.url_absolue(generer_url_public('tickets')).'\n"
104':'')
105. '"MIME-Version: 1.0\n"
106"Content-Type: text/plain; charset=UTF-8\n"
107"Content-Transfer-Encoding: 8bit\n"
108"X-Generator: SPIP Trad Lang 2.0.5\n"
109"X-Poedit-SourceCharset: utf-8\n"
110"Language: '.$langue.'\n"
111'
112. (isset($last_auteur['nom'])?'"Last-Translator: '.extraire_multi($last_auteur['nom']).' <'.$last_auteur['email'].'>\n"
113' : '')
114.'"Language-Team: SPIP-trad <spip-trad@rezo.net>\n"
115';
116
117        /**
118         * Les chaines
119         *
120         * On crée un bloc pour chaque chaînes sous la forme
121         *
122         * #, php-format
123         * #| msgid "id_dans_la_base"
124         * msgid "Item dans la langue originale"
125         * msgstr "Item dans la langue actuelle (traduit), si non traduit, vide"
126         */
127        $res=sql_allfetsel("*","spip_tradlangs","id_tradlang_module=".intval($info_module['id_tradlang_module'])." AND lang=".sql_quote($langue)." AND statut != 'attic'","id");
128        foreach($res as $row){
129                $tous[$row['id']] = $row;
130        }
131        ksort($tous);
132       
133        foreach ($tous as $id => $row) {
134                if (trim($row['comm'])) $row['comm']=" # ".trim($row['comm']); // on rajoute les commentaires ?
135
136                $str = $row['str'];
137
138                $oldmd5 = md5($str);
139                $str = unicode_to_utf_8(
140                        html_entity_decode(
141                                preg_replace('/&([lg]t;)/S', '&amp;\1', $str),
142                                ENT_NOQUOTES, 'utf-8')
143                );
144                $newmd5 = md5($str);
145
146                if ($oldmd5 !== $newmd5) sql_updateq("spip_tradlangs",array('md5'=>$newmd5), "md5=".sql_quote($oldmd5)." AND id_tradlang_module=".intval($info_module['id_tradlang_module']));
147                $str_original = sql_getfetsel('str','spip_tradlangs','id ='.sql_quote($id).' AND id_tradlang_module='.intval($info_module['id_tradlang_module']).' AND lang='.sql_quote($info_module['lang_mere']));
148                $x[]=($row['comm'] ? "#".$row['comm']."\n" : "").
149"
150#, ".(($row['statut'] == 'MODIF') ? "fuzzy, php-format" : "php-format")."
151#| msgid \"".$row['id']."\"
152msgid \"".str_replace('"','\"',$str_original)."\"
153msgstr \"".(($row['statut'] == 'NEW') ? '' : str_replace('"','\"',$str))."\"";
154                unset($tous[$id]);
155        }
156
157        $contenu .= str_replace("\r\n", "\n", join("\n",$x));
158       
159        ecrire_fichier($fichier,$contenu);
160        return $fichier;
161}
162?>
Note: See TracBrowser for help on using the repository browser.