Remplacer une ligne dans un fichier

Résolu/Fermé
regitraz Messages postés 89 Date d'inscription vendredi 17 octobre 2014 Statut Membre Dernière intervention 30 mai 2021 - Modifié le 22 juin 2019 à 19:17
regitraz Messages postés 89 Date d'inscription vendredi 17 octobre 2014 Statut Membre Dernière intervention 30 mai 2021 - 22 juin 2019 à 23:52
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
22 juin 2019 à 19:39
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 vendredi 17 octobre 2014 Statut Membre Dernière intervention 30 mai 2021
22 juin 2019 à 19:58
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 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > regitraz Messages postés 89 Date d'inscription vendredi 17 octobre 2014 Statut Membre Dernière intervention 30 mai 2021
22 juin 2019 à 20:45
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 vendredi 17 octobre 2014 Statut Membre Dernière intervention 30 mai 2021
22 juin 2019 à 21:26
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 vendredi 17 octobre 2014 Statut Membre Dernière intervention 30 mai 2021
Modifié le 22 juin 2019 à 22:29
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 22 juin 2019 à 23:55
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 vendredi 17 octobre 2014 Statut Membre Dernière intervention 30 mai 2021
22 juin 2019 à 23:52
simple a comprendre et a utiliser : j'aime beaucoup merci
0