Changeset 119836 in spip-zone


Ignore:
Timestamp:
Jan 20, 2020, 4:38:49 AM (5 weeks ago)
Author:
Cerdic
Message:

la fonction de nettoyage de chaine de langue est commune au lecteur et a l'ecriveur, fonction d'export du fichier php

Location:
_plugins_/trad-lang/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/trad-lang/trunk

    • Property subgit:lock:4fda5e2f69b99bc2343fe812cd9b082270e672db deleted
    • Property subgit:lock:4a818f39ef61a3acce3f8b14c12019cdaa463bcc set to 2020-01-20T09:05:31.167
  • _plugins_/trad-lang/trunk/inc/salvatore.php

    r119833 r119836  
    465465
    466466}
     467
     468/**
     469 * Nettoyer la chaine de langue (venant du fichier PHP en lecture ou de la base en ecriture)
     470 * @param string $chaine
     471 * @param string $lang
     472 * @return string
     473 */
     474function salvatore_nettoyer_chaine_langue($chaine, $lang){
     475        static $typographie_functions = array();
     476
     477        if (!isset($typographie_functions[$lang])){
     478                $typo = (in_array($lang, array('eo', 'fr', 'cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
     479                $typographie_functions[$lang] = charger_fonction($typo, 'typographie');
     480        }
     481
     482        /**
     483         * On enlève les sauts de lignes windows pour des sauts de ligne linux
     484         */
     485
     486        $chaine = str_replace("\r\n", "\n", $chaine);
     487
     488        /**
     489         * protection dans les balises genre <a href="..." ou <img src="..."
     490         * cf inc/filtres
     491         */
     492        if (preg_match_all(_TYPO_BALISE, $chaine, $regs, PREG_SET_ORDER)){
     493                foreach ($regs as $reg){
     494                        $insert = $reg[0];
     495                        // hack: on transforme les caracteres a proteger en les remplacant
     496                        // par des caracteres "illegaux". (cf corriger_caracteres())
     497                        $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
     498                        $chaine = str_replace($reg[0], $insert, $chaine);
     499                }
     500        }
     501
     502        /**
     503         * Protéger le contenu des balises <html> <code> <cadre> <frame> <tt> <pre>
     504         */
     505        define('_PROTEGE_BLOCS_HTML', ',<(html|code|cadre|pre|tt)(\s[^>]*)?>(.*)</\1>,UimsS');
     506        if ((strpos($chaine, '<')!==false) and preg_match_all(_PROTEGE_BLOCS_HTML, $chaine, $matches, PREG_SET_ORDER)){
     507                foreach ($matches as $reg){
     508                        $insert = $reg[0];
     509                        // hack: on transforme les caracteres a proteger en les remplacant
     510                        // par des caracteres "illegaux". (cf corriger_caracteres())
     511                        $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
     512                        $chaine = str_replace($reg[0], $insert, $chaine);
     513                }
     514        }
     515
     516        /**
     517         * On applique la typographie de la langue
     518         */
     519        $chaine = $typographie_functions[$lang]($chaine);
     520
     521        /**
     522         * On remet les caractères normaux sur les caractères illégaux
     523         */
     524        $chaine = strtr($chaine, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
     525
     526        $chaine = unicode_to_utf_8(html_entity_decode(preg_replace('/&([lg]t;)/S', '&amp;\1', $chaine), ENT_NOQUOTES, 'utf-8'));
     527
     528        return $chaine;
     529}
  • _plugins_/trad-lang/trunk/inc/salvatore_ecriveur.php

    r119835 r119836  
    154154        $infos = $commiteurs = array();
    155155        foreach ($liste_lang as $lang){
    156                 salvatore_log("Generation de la langue $lang ");
     156                salvatore_log("Generation de la langue $lang");
    157157                // Proteger les caracteres typographiques a l'interieur des tags html
    158158                $typo = (in_array($lang, array('eo', 'fr', 'cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
     
    187187                        }
    188188
    189                         $str = savlatore_nettoyer_chaine_base($chaine['str'], $lang);
    190 
    191                         /**
    192                          * Calcul du nouveau md5
    193                          */
     189                        // nettoyger la chaine de langue et calcul du md5
     190                        $str = salvatore_nettoyer_chaine_langue($chaine['str'], $lang);
    194191                        $newmd5 = md5($str);
    195192
     
    198195                         */
    199196                        if (($chaine['md5']!==$newmd5) || ($str!=$chaine['str'])){
    200                                 $r = sql_updateq('spip_tradlangs', array('md5' => $newmd5, 'str' => $str), 'id_tradlang = ' . intval($chaine['id_tradlang']));
     197                                $r = sql_updateq('spip_tradlangs', array('md5' => $newmd5, 'str' => $str), 'id_tradlang=' . intval($chaine['id_tradlang']));
    201198                        }
    202199
     
    204201                }
    205202
    206 
    207                 $orig = ($lang==$lang_ref) ? $url_repo : false;
    208 
    209                 salvatore_log(" - traduction ($total_chaines['OK']/$count_trad_reference OK | $total_chaines['RELIRE']/$count_trad_reference RELIRE | $total_chaines['MODIF']/$count_trad_reference MODIFS), export\n");
    210                 // historiquement les fichiers de lang de spip_loader ne peuvent pas etre securises
    211                 $secure = ($module=='tradloader')
    212                         ? ''
    213                         : "if (!defined('_ECRIRE_INC_VERSION')) {
    214 return;
    215 }\n\n";
    216 
    217                 $fd = fopen($dir_module . '/' . $module . '_' . $lang . '.php', 'w');
    218 
    219                 # supprimer la virgule du dernier item
    220                 $php_lines[count($php_lines)-1] = preg_replace('/,([^,]*)$/', '\1', $php_lines[count($php_lines)-1]);
    221 
    222                 $contenu = join("\n", $php_lines);
    223 
    224                 // L'URL du site de traduction
    225                 $url_trad_module = parametre_url($url_trad_module, 'lang_cible', $lang);
    226                 /**
    227                  * Ecrire le fichier de langue complet
    228                  */
    229                 fwrite(
    230                         $fd,
    231                         '<' . '?php
    232 // This is a SPIP language file  --  Ceci est un fichier langue de SPIP
    233 '
    234 
    235                         . ($orig
    236                                 ? '// Fichier source, a modifier dans ' . $orig
    237                                 : '// extrait automatiquement de ' . $url_trad_module . '
    238 // ** ne pas modifier le fichier **
    239 '
    240                         )
    241                         . "\n" . $secure . '$GLOBALS[$GLOBALS[\'idx_lang\']] = array(
    242 '
    243                         . $contenu
    244                         . '
    245 );
    246 '
    247                 );
    248                 fclose($fd);
     203                salvatore_log(" - traduction (".$total_chaines['OK']."/$count_trad_reference OK | ".$total_chaines['RELIRE']."/$count_trad_reference RELIRE | ".$total_chaines['MODIF']."/$count_trad_reference MODIFS), export");
     204                salvatore_exporter_fichier_php($dir_module, $module, $lang, $php_lines, $url_trad_module, ($lang==$lang_ref) ? $url_repo : false);
    249205
    250206                // noter la langue et les traducteurs pour lang/module.xml
     
    386342
    387343/**
    388  * Nettoyer la chaine traduite qui est en base avant export dans le PHP
    389  * @param string $chaine
     344 * Generer un fichier de langue a partir de ses lignes php
     345 * @param string $dir_module
     346 * @param string $module
    390347 * @param string $lang
    391  * @return string
     348 * @param array $php_lines
     349 * @param string $url_trad_module
     350 * @param $origin
    392351 */
    393 function savlatore_nettoyer_chaine_base($chaine, $lang) {
    394         static $typographie_functions = array();
    395 
    396         if (!isset($typographie_functions[$lang])){
    397                 $typo = (in_array($lang, array('eo', 'fr', 'cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
    398                 $typographie_functions[$lang] = charger_fonction($typo, 'typographie');
    399         }
    400 
    401         /**
    402          * On enlève les sauts de lignes windows pour des sauts de ligne linux
    403          */
    404         $chaine = str_replace("\r\n", "\n", $chaine);
    405 
    406         /**
    407          * protection dans les balises genre <a href="..." ou <img src="..."
    408          * cf inc/filtres
    409          */
    410         if (preg_match_all(_TYPO_BALISE, $chaine, $regs, PREG_SET_ORDER)){
    411                 foreach ($regs as $reg){
    412                         $insert = $reg[0];
    413                         // hack: on transforme les caracteres a proteger en les remplacant
    414                         // par des caracteres "illegaux". (cf corriger_caracteres())
    415                         $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
    416                         $chaine = str_replace($reg[0], $insert, $chaine);
    417                 }
    418         }
    419 
    420         /**
    421          * Protéger le contenu des balises <html> <code> <cadre> <frame> <tt> <pre>
    422          */
    423         define('_PROTEGE_BLOCS_HTML', ',<(html|code|cadre|pre|tt)(\s[^>]*)?>(.*)</\1>,UimsS');
    424         if ((strpos($chaine, '<')!==false) and preg_match_all(_PROTEGE_BLOCS_HTML, $chaine, $matches, PREG_SET_ORDER)){
    425                 foreach ($matches as $reg){
    426                         $insert = $reg[0];
    427                         // hack: on transforme les caracteres a proteger en les remplacant
    428                         // par des caracteres "illegaux". (cf corriger_caracteres())
    429                         $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
    430                         $chaine = str_replace($reg[0], $insert, $chaine);
    431                 }
    432         }
    433 
    434         /**
    435          * On applique la typographie de la langue
    436          */
    437         $chaine = $typographie_functions[$lang]($chaine);
    438 
    439         /**
    440          * On remet les caractères normaux sur les caractères illégaux
    441          */
    442         $chaine = strtr($chaine, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
    443 
    444         $chaine = unicode_to_utf_8(html_entity_decode(preg_replace('/&([lg]t;)/S', '&amp;\1', $chaine), ENT_NOQUOTES, 'utf-8'));
    445 
    446         return $chaine;
     352function salvatore_exporter_fichier_php($dir_module, $module, $lang, $php_lines, $url_trad_module, $origin) {
     353        $file_name = $dir_module . '/' . $module . '_' . $lang . '.php';
     354        $file_content = '<' . '?php
     355// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
     356';
     357        if ($origin) {
     358                $file_content .= '// Fichier source, a modifier dans ' . $origin;
     359        }
     360        else {
     361                $file_content .= '// extrait automatiquement de ' . $url_trad_module . '
     362// ** ne pas modifier le fichier **
     363';
     364        }
     365
     366        // historiquement les fichiers de lang de spip_loader ne peuvent pas etre securises
     367        if ($module !== 'tradloader') {
     368                $file_content .= "if (!defined('_ECRIRE_INC_VERSION')) {
     369        return;
     370}\n\n";
     371        }
     372
     373        # supprimer la virgule du dernier item
     374        $php_lines[count($php_lines)-1] = preg_replace('/,([^,]*)$/', '\1', $php_lines[count($php_lines)-1]);
     375
     376        $file_content .= implode("\n", $php_lines);
     377        file_put_contents($file_name, $file_content);
    447378}
  • _plugins_/trad-lang/trunk/inc/salvatore_lecteur.php

    r119823 r119836  
    329329
    330330                                        if ($md5){
    331                                                 $chaines[$id] = salvatore_nettoyer_chaine_php($chaines[$id], $lang);
     331                                                $chaines[$id] = salvatore_nettoyer_chaine_langue($chaines[$id], $lang);
    332332
    333333                                                /**
     
    550550}
    551551
    552 /**
    553  * Nettoyer la chaine de langue venant du fichier PHP
    554  * @param string $chaine
    555  * @param string $lang
    556  * @return string
    557  */
    558 function salvatore_nettoyer_chaine_php($chaine, $lang){
    559         static $typographie_functions = array();
    560 
    561         if (!isset($typographie_functions[$lang])){
    562                 $typo = (in_array($lang, array('eo', 'fr', 'cpf')) || strncmp($lang, 'fr_', 3)==0) ? 'fr' : 'en';
    563                 $typographie_functions[$lang] = charger_fonction($typo, 'typographie');
    564         }
    565 
    566         /**
    567          * On enlève les sauts de lignes windows pour des sauts de ligne linux
    568          */
    569 
    570         $chaine = str_replace("\r\n", "\n", $chaine);
    571 
    572         /**
    573          * protection dans les balises genre <a href="..." ou <img src="..."
    574          * cf inc/filtres
    575          */
    576         if (preg_match_all(_TYPO_BALISE, $chaine, $regs, PREG_SET_ORDER)){
    577                 foreach ($regs as $reg){
    578                         $insert = $reg[0];
    579                         // hack: on transforme les caracteres a proteger en les remplacant
    580                         // par des caracteres "illegaux". (cf corriger_caracteres())
    581                         $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
    582                         $chaine = str_replace($reg[0], $insert, $chaine);
    583                 }
    584         }
    585 
    586         /**
    587          * Protéger le contenu des balises <html> <code> <cadre> <frame> <tt> <pre>
    588          */
    589         define('_PROTEGE_BLOCS_HTML', ',<(html|code|cadre|pre|tt)(\s[^>]*)?>(.*)</\1>,UimsS');
    590         if ((strpos($chaine, '<')!==false) and preg_match_all(_PROTEGE_BLOCS_HTML, $chaine, $matches, PREG_SET_ORDER)){
    591                 foreach ($matches as $reg){
    592                         $insert = $reg[0];
    593                         // hack: on transforme les caracteres a proteger en les remplacant
    594                         // par des caracteres "illegaux". (cf corriger_caracteres())
    595                         $insert = strtr($insert, _TYPO_PROTEGER, _TYPO_PROTECTEUR);
    596                         $chaine = str_replace($reg[0], $insert, $chaine);
    597                 }
    598         }
    599 
    600         /**
    601          * On applique la typographie de la langue
    602          */
    603         $chaine = $typographie_functions[$lang]($chaine);
    604 
    605         /**
    606          * On remet les caractères normaux sur les caractères illégaux
    607          */
    608         $chaine = strtr($chaine, _TYPO_PROTECTEUR, _TYPO_PROTEGER);
    609 
    610         $chaine = unicode_to_utf_8(html_entity_decode(preg_replace('/&([lg]t;)/S', '&amp;\1', $chaine), ENT_NOQUOTES, 'utf-8'));
    611 
    612         return $chaine;
    613 }
Note: See TracChangeset for help on using the changeset viewer.