Remplacer une ligne dans un fichier [Résolu]

Messages postés
53
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
2 septembre 2019
-
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
Afficher la suite 

3 réponses

Messages postés
8701
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2019
433
0
Merci
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?
regitraz
Messages postés
53
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
2 septembre 2019
-
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 ?
yg_be
Messages postés
8701
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2019
433 > regitraz
Messages postés
53
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
2 septembre 2019
-
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?
regitraz
Messages postés
53
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
2 septembre 2019
-
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
Commenter la réponse de yg_be
Messages postés
53
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
2 septembre 2019
0
Merci
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 ?
Commenter la réponse de regitraz
Messages postés
26497
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 octobre 2019
1825
0
Merci
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é....
regitraz
Messages postés
53
Date d'inscription
vendredi 17 octobre 2014
Statut
Membre
Dernière intervention
2 septembre 2019
-
simple a comprendre et a utiliser : j'aime beaucoup merci
Commenter la réponse de jordane45