source: spip-zone/_plugins_/trad-lang/trad-lang_spip2/export_lang/po.php @ 70913

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

On ajoute dans l'url de trad le lang_cible

File size: 5.3 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('*','spip_tradlang_modules','module='.sql_quote($module));
42        $url_trad = url_absolue(parametre_url(generer_url_entite($info_module['id_tradlang_module'],'tradlang_module'),'lang_cible',$langue));
43       
44        /**
45         * Gestion des auteurs
46         *
47         * On ajoute une liste de traducteurs en entête de fichier (non obligatoire)
48         * On ajoute également l'item "Last-Translator : user <email>" dans les métas ($last_auteur)
49         */
50        $last_auteur = array();
51        if($langue != $info_module['lang_mere']){
52                $traducteur = sql_fetsel('id_tradlang,traducteur','spip_tradlangs',"module=".sql_quote($module)." AND lang=".sql_quote($langue),"",'maj DESC','0,1');
53                if(is_numeric($traducteur['traducteur']))
54                        $id_auteur = $traducteur['traducteur'];
55                else
56                        $id_auteur = sql_select('id_auteur','spip_versions','objet="tradlang" AND id_objet='.intval($traducteur['id_tradlang']),"",'id_version DESC','0,1');
57               
58                $last_auteur = sql_fetsel('nom,email','spip_auteurs','id_auteur='.intval($id_auteur));
59               
60                $traducteurs[$lang] = array();
61                $people_unique = array();
62                $liste_traducteurs = sql_select('DISTINCT(traducteur)','spip_tradlangs','module='.sql_quote($module)." and lang=".sql_quote($langue));
63                while ($t = sql_fetch($liste_traducteurs)){
64                        $traducteurs_lang = explode(',',$t['traducteur']);
65                        foreach($traducteurs_lang as $traducteur){
66                                if(!in_array($traducteur,$people_unique)){
67                                        if(is_numeric($traducteur) AND $id_auteur=intval($traducteur)){
68                                                $traducteur_supp['nom'] = extraire_multi(sql_getfetsel('nom','spip_auteurs','id_auteur='.$id_auteur));
69                                                $traducteur_supp['lien'] = url_absolue(generer_url_entite($id_auteur,'auteur'),$url_site);
70                                        }else if(trim(strlen($traducteur)) > 0){
71                                                $traducteur_supp['nom'] = trim($traducteur);
72                                                $traducteur_supp['lien'] = '';
73                                        }
74                                        if(isset($traducteur_supp['nom']))
75                                                $traducteurs[$lang][] = $traducteur_supp;
76                                        unset($traducteur_supp);
77                                        $people_unique[] = $traducteur;
78                                }
79                        }
80                }
81                foreach($traducteurs as $lang => $peoples) {
82                        $trad_texte = "#\n# Traducteurs :\n";
83                        if ($peoples) {
84                                foreach ($peoples as $people) {
85                                        $trad_texte .= "# ".$people['nom']." (".$people['lien'].")\n";
86                                }
87                        }
88                }
89        }
90
91        /**
92         * Création de l'entête du fichier généré
93         */
94        $contenu .= '# This is a SPIP language file  --  Ceci est un fichier langue de SPIP
95# extrait automatiquement de '.$url_trad.'
96'
97. (isset($trad_texte) ? $trad_texte : '')
98. 'msgid ""
99msgstr ""
100"Project-Id-Version: '.$info_module['nom_mod'].'\n"
101'
102. (defined('_DIR_PLUGIN_TICKETS') ? '"Report-Msgid-Bugs-To: '.url_absolue(generer_url_public('tickets')).'\n"
103':'')
104. '"MIME-Version: 1.0\n"
105"Content-Type: text/plain; charset=UTF-8\n"
106"Content-Transfer-Encoding: 8bit\n"
107"X-Generator: SPIP Trad Lang 2.0.5\n"
108"X-Poedit-SourceCharset: utf-8\n"
109"Language: '.$langue.'\n"
110'
111. (isset($last_auteur['nom'])?'"Last-Translator: '.extraire_multi($last_auteur['nom']).' <'.$last_auteur['email'].'>\n"
112' : '')
113.'"Language-Team: SPIP-trad <spip-trad@rezo.net>\n"
114';
115
116        /**
117         * Les chaines
118         *
119         * On crée un bloc pour chaque chaînes sous la forme
120         *
121         * #, php-format
122         * #| msgid "id_dans_la_base"
123         * msgid "Item dans la langue originale"
124         * msgstr "Item dans la langue actuelle (traduit), si non traduit, vide"
125         */
126        $res=sql_select("id,str,comm,statut","spip_tradlangs","module=".sql_quote($module)." AND lang=".sql_quote($langue),"id");
127        while ($row=sql_fetch($res)) {
128                $tous[$row['id']] = $row;
129        }
130        ksort($tous);
131       
132        foreach ($tous as $row) {
133                if (trim($row['comm'])) $row['comm']=" # ".trim($row['comm']); // on rajoute les commentaires ?
134
135                $str = $row['str'];
136
137                $oldmd5 = md5($str);
138                $str = unicode_to_utf_8(
139                        html_entity_decode(
140                                preg_replace('/&([lg]t;)/S', '&amp;\1', $str),
141                                ENT_NOQUOTES, 'utf-8')
142                );
143                $newmd5 = md5($str);
144
145                if ($oldmd5 !== $newmd5) sql_updateq("spip_tradlangs",array('md5'=>$newmd5), "md5=".sql_quote($oldmd5)." AND module=".sql_quote($module));
146                $str_original = sql_getfetsel('str','spip_tradlangs','id ='.sql_quote($row['id']).' AND module='.sql_quote($module).' AND lang='.sql_quote($info_module['lang_mere']));
147
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        }
155
156        $contenu .= str_replace("\r\n", "\n", join("\n",$x));
157       
158        ecrire_fichier($fichier,$contenu);
159        return $fichier;
160}
161?>
Note: See TracBrowser for help on using the repository browser.