Remplacer une ligne dans un fichier

Résolu
regitraz Messages postés 89 Date d'inscription   Statut Membre Dernière intervention   -  
regitraz Messages postés 89 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Alors j'ai fait un site multilingues grâce a des fichier php contenant tout les texte du site dans un tableau associatif :

$lang["menu_AC_prochaine"] = "PROCHAINES ACTIVITÉS ET RENCONTRES";
$lang["menu_ART"] = "SUJETS ET ARTICLES";
$lang["menu_dev_initiative"] = "DÉVELOPPEMENT DE L'INITIATIVE";
$lang["menu_co"] = "CONNEXION";
etc


Et donc je veut faire un ajout automatique de langue. Pour cela je commence par copier-coller / renomer le fichier de langue de base, et ensuite je voudrait effacer le contenu de chaque occurrence du tableau pour avoir quelque chose du genre (avec les retour a la ligne) :

$lang["menu_AC_prochaine"] = "";
$lang["menu_ART"] = "";
$lang["menu_dev_initiative"] = "";
$lang["menu_co"] = "";


Puis les remplacer par les nouveaux textes, dans la nouvelle langue. Par la suite il sera possible de ne modifier qu'une seule ligne de ce fichier de langue, afin de modifier les textes du site.
Pour l'instant j'ai essayer ca :

    
$file = fopen("modele/langue/$_POST[acronyme].php", "r+");

    while ($row = fgets($file,2048)) {
      $avant = $row;
      $res = explode("=", $row);
      $apres = $res[0]."=\"\"";
      str_replace($avant, $apres, $file);
    }


Et une version de ce code utilisant la fonction file() et des tableaux, et la fonction implode, mais il n'y avait pas de retour a la ligne.

merci d'avance pour votre aide
A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, je ne suis pas certain d'avoir compris pourquoi tu faisais cela, et cela me semble une façon très complexe de faire un site multilingue.
as-tu une question?
0
regitraz Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
 
La question est dans le titre, et je veut remplacer : $lang["menu_AC_prochaine"] = "PROCHAINES ACTIVITÉS ET RENCONTRES"; par $lang["menu_AC_prochaine"] = ""; automatiquement.

Sinon il y a quoi comme solutions pour faire un site multilingue ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > regitraz Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
 
le titre explique sommairement ce que tu veux faire, pas ce que tu attends de nous.
souhaites-tu que nous fassions le travail à ta place?
le code que tu nous montres ne fait-il pas ce que tu attends? souhaites-tu l'améliorer? explique-nous.
moi je ferais plutôt ainsi:
$lang["menu_AC_prochaine","fr"] = "PROCHAINES ACTIVITÉS ET RENCONTRES";
$lang["menu_ART","fr"] = "SUJETS ET ARTICLES";
$lang["menu_dev_initiative","fr"] = "DÉVELOPPEMENT DE L'INITIATIVE";
$lang["menu_co","fr"] = "CONNEXION";
$lang["menu_AC_prochaine","uk"] = "incoming... ";
$lang["menu_ART","uk"] = "subjects ...";
$lang["menu_dev_initiative","uk"] = "...";
$lang["menu_co","uk"] = "connection";

pourrais-tu aussi nous expliquer comment tu prévois d'utiliser le fichier php?
quel est le contexte de cet exercice?
0
regitraz Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai plusieurs fichies de langues (fr.php, eng.php, etc), au début de mon site j'inclu le fichier de langue correspondant a la session démarrée, ou par défaut le francais. Dans tous mes fichier de langues j'ai un tableau associatif avec les meme nom pour chaques occurences.

L'idée c'est de faire un espace administrateur qui peut ajouter / modifier des langue (ou les textes).
le code que j'ai donné ne fonctionne pas, et j'aimerai le faire fonctionner / l'améliorer
0
regitraz Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai reussit a faire fonctionner la version avec la fonction file() comme voulut :
    $content = file("modele/langue/$_POST[acronyme].php");

    $text = array();
    array_push($text, "<?php \n");
    foreach($content as $row){
      $res = explode("=", $row);
      if(count($res) > 1)
        array_push($text, $res[0]." = \"\";\n");
    }

    $file = fopen("modele/langue/$_POST[acronyme].php", "w");
    fwrite($file, implode($text));
    fclose($file);


Y a-t-il une solution moin gourmande en ressources du serveur ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,
Oui, ne serait-ce qu'utiliser un fichier JSON pour stocker tes infos et y accéder plus facilement pour les modifier...

Création des variables à stocker dans le json
$lang = array();
$lang["menu_AC_prochaine"] = "PROCHAINES ACTIVITÉS ET RENCONTRES";
$lang["menu_ART"] = "SUJETS ET ARTICLES";
$lang["menu_dev_initiative"] = "DÉVELOPPEMENT DE L'INITIATIVE";
$lang["menu_co"] = "CONNEXION";
etc...

// Ecriture du fichier
 $file = fopen("modele/langue/".$_POST['acronyme'].".json", "w");
 fwrite($file, json_encode($lang));
 fclose($file);


Remise à zéro des variables (si besoin...)
$lang_vide = array();
foreach($lang as $K => $V){
  $lang_vide[$K] = "";
}

// Ecriture du fichier
 $file = fopen("modele/langue/".$_POST['acronyme'].".json", "w");
 fwrite($file, json_encode($lang_vide));
 fclose($file);


</code>

Accéder aux valeurs du fichier :
$json = file_get_contents("modele/langue/".$_POST['acronyme'].".json");
$lang =!empty($json) ?  json_decode($json,true) : array(); // retransforme le json en array...

// ensuite, tu peux accéder aux valeurs de ton array (ça je pense que tu sais faire... )
// par exemple , afficher menu_ART
echo !empty($lang['menu_ART']) ? $lang['menu_ART'] : ""; // affiche la valeur si elle existe.. sinon rien...




Après.. certains CMS utilisent des fichiers CSV pour stocker les données... mais le principe reste assez identique à ce que tu as trouvé comme code.. à coup d'explode et de join... C'est lourd.....
Au moins.. avec le format json tu peux soit l'utiliser directement en tant qu'objet.. soit le transformer facilement en array comme je te l'ai montré....
0
regitraz Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
 
simple a comprendre et a utiliser : j'aime beaucoup merci
0