Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 25-04-2010 16:31:52

Otomatic
Régisseur

Modification (presque) automatique des fichiers de langue

Bonjour,

Je suis assez partisan du moindre effort et j'aime bien pouvoir automatiser les tâches fastidieuses ou répétitives.
Vous avez pu le constater, par exemple avec :
- Modification "URL de base" automatique en fonction de l'hébergeur
  http://www.punbb.fr/forums/viewtopic.php?id=4866
  http://www.punbb.fr/forums/viewtopic.php?id=6746
- Cohabitation site iso-8859-1 et forum FluxBB 1.4 utf-8 avec includes communs
  http://www.punbb.fr/forums/viewtopic.php?id=10366
 
Maintenant on va aborder les modifications et ajouts aux fichiers de localisation linguistique.
Vous modifiez ou ajoutez des chaînes de caractères aux différents tableaux des fichiers de langage comme lang\French\common.php ou lang\French\topic.php et, comme moi, vous pestez devoir le faire à chaque évolution de version ou modification.
Et bien, je vous propose un « truc » qui vous évitera de modifier manuellement les fichiers de langue originaux.

Si vous devez modifier un fichier de langue (Modification ou ajout de chaîne), je vous propose d'ajouter un fichier, du même nom que le fichier originel, mais avec un suffixe (ici "_oto", mais ce peut être autre chose), par exemple :
Fichier "topic_oto.php" pour les chaînes modifiées ou ajoutées au fichier "lang/French/topic.php" :

<?php
//modif oto ajout 'Change order' = 'Changer l\'ordre des messages',
//modif oto ajout 'Order asc' = 'Plus ancien en premier'
//modif oto ajout 'Order desc' = 'Plus récent en premier'

$lang_topic['Change order'] = 'Changer l\'ordre des messages';
$lang_topic['Order asc'] = 'Plus ancien en premier';
$lang_topic['Order desc'] = 'Plus récent en premier';
?>

Fichier "profile_oto.php" pour les chaînes modifiées ou ajoutées au fichier "lang/French/profile.php" :

<?php
//[modif oto] 'Section personal' = 'Personnel & Promo'
//[modif oto] 'Personal details legend' = 'Informations personnelles et votre Promotion (19xx-19yy) ou votre Fonction'
//[modif oto] Ajout 'Promotion' = 'Promotion ou Fonction'

$lang_profile['Section personal'] = 'Personnel & Promo';
$lang_profile['Personal details legend'] = 'Informations personnelles et votre Promotion (19xx-19yy) ou votre Fonction';
$lang_profile['Promotion'] = 'Promotion ou Fonction';
?>

Et ainsi de suite pour les autres fichiers de langue comme "lang/French/common.php" ou "lang/French/register.php" en prenant bien soin de mettre dans chaque nouveau fichier (avec toujours le même suffixe), les modifications ou ajouts n'intéressant que le fichier d'origine.

Ceci fait que chaque mise à jour des fichiers langue n'écrase pas les modifications et ajouts.

Maintenant, comment faire pour ajouter les fichiers contenant les modifications ?
Dans le dossier lang/French, mettre un fichier "updates_files.php" qui contient :

<?php
/* Lecture des fichiers langage à modifier
   Vérification si déjà modifié
   Vérification si ?> à la fin
   Ajout de include('fichier$suffixe.php')
   Sauvegarde du fichier modifié
   
----- Liste des fichiers langue à modifier ------- */
$suffixe = "_oto"; //À modifier éventuellement
$a_modifier = array();
$dir = opendir(getcwd());
while ($f = readdir($dir)) {
  if(is_file($f)) if($pos = strpos($f,$suffixe)) $a_modifier[] = substr($f,0,$pos);
}
closedir($dir);

if(count($a_modifier) > 0 ) {
  for($i=0;$i< count($a_modifier);$i++) {
    echo "A modifier : <b>".$a_modifier[$i]."</b> - ";
    if(file_exists($a_modifier[$i].'.php')) {
      $fichier = file_get_contents($a_modifier[$i].'.php');
      $cherche = "include('".$a_modifier[$i].$suffixe.".php')";
      //Regarde si déjà modifié
      if(strpos($fichier,$cherche) === false) {
        //Suppression éventuelle de la fermeture php
        if(strpos($fichier,"?>")) $fichier = str_replace('?>','',$fichier);
        //Ajout ligne include
        $fichier .= "\n".$cherche.";\n\n?>\n";
        //Écriture du fichier modifié
        file_put_contents($a_modifier[$i].'.php',$fichier);
        echo "<i>modification faite</i><br>";
      }
      else echo "<i>modification existe</i><br>";
    }
    else echo "<b> ERREUR le fichier ".$a_modifier[$i].".php n'existe pas</b><br>";
  }
  unset($fichier);
}
?>

Après exécution de "updates_files.php", à la fin de chaque fichier de langue originel qui doit être modifié, il sera ajouté une instruction include qui sera fonction du nom du fichier, par exemple :
include('topic_oto.php');
à la fin du fichier "topic.php".

Vous n'avez plus à vous préoccuper de savoir quels fichiers originels il faut modifier ou quels appels supplémentaires aux dits fichiers il faut ajouter dans les scripts. Vos modifications seront appelés automatiquement avec chaque require du fichier langue originel.

Et voilà.

Dernière modification par Otomatic (25-04-2010 17:19:35)


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

Pied de page des forums