Remplacer une ligne dans un fichier [Résolu/Fermé]

Signaler
Messages postés
76
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
15 juin 2020
-
Messages postés
76
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
15 juin 2020
-
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

3 réponses

Messages postés
11775
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 août 2020
674
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?
Messages postés
76
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
15 juin 2020

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 ?
Messages postés
11775
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 août 2020
674 >
Messages postés
76
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
15 juin 2020

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?
Messages postés
76
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
15 juin 2020

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
Messages postés
76
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
15 juin 2020

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 ?
Messages postés
29170
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 août 2020
2 674
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é....
Messages postés
76
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
15 juin 2020

simple a comprendre et a utiliser : j'aime beaucoup merci