Aide - Recherche - Membres - Calendrier
Version complète : Site multilingue
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
Xav
Bonjour!

J'ai trouvé quelques topics sur ce forum concernant les sites multilingues, mais pas de réponse à cette question précise: quelle est la meilleure méthode à utiliser?

Actuellement, je me sers d'un paramètre de mon url pour déterminer la langue choisie, et ouvrir ainsi un fichier dictionnaire qui contient un array avec toutes les variables de mon site!

Mais je sais que bcp de gens proposent pour les sites multilingues de mettre le contenu dans une base de données.

Alors, BD vs Fichier, une préférence? Pourquoi? Y a-t-il des limitations de la part de l'une ou l'autre méthode?

Merci d'avance.
jep
Il n'y as pas vraiment de solution miracle. L'utilisation de fichiers texte est interressante car l'accès est très rapide par contre, dès que tu as beaucoup de texte, la charge mémoire augmente rapidement... Pour les BDD, c'est plutot l'inverse

Mais dans tous les cas, cela va ennormément dépendre des volumes de donnés à traduire.

Sinon, PHP s'interface bien avec gettext qui offre sans doute le meilleur compromis entre vitesse et charge mémoire icon_wink.gif
Xav
Salut Jep!

Merci pour ta réponse. Peux-tu m'expliquer ce que tu entends exactement par 'charge mémoire'? Le temps de réaction de la page?

En réalité, mon fichier dico n'est pas un fichier texte, mais un fichier php dans lequel j'ai un array...


Sinon, entre les deux, que me conseilles-tu pour un site qui ne contiendrait que 4 pages (présentation de la société, références, etc) d'une 30aine de lignes chacune?

Enfin, dans le cas de l'utilisation d'un fichier externe, puis-je mettre dans une seule variable de mon tableau toute la présentation de l'entreprise, ou bien vaut-il mieux le découper (en paragraphes par exemple)??

Merci wink.gif

PS: je vais aller regarder ton truc de gettext
Antoine
Moi perso, j'aime bien l'idée du full PHP avec une classe.

Php
$texte = new Texte("fr");
$texte->introduction();


Php
class Texte {
private _lang = "";
function __construct($langue) {
$this->_lang = $langue;
}
 
function introduction() {
if($this->_lang == "fr") {
echo "Bonjour";
} elseif ($this->_lang == "en") {
echo "Hello";
}
}
 
}


Y'a pe une erreur, j'ai fait ça comme ça smile.gif
Xav
C'est gentil, mais j'ai déjà parfois du mal comme ça, alors les classes, soyons clairs, j'y comprend vraiment que dalle icon_confused.gif

Mais c'est gentil de proposer wink.gif

Si je fais comme ça, je peux mettre sans problème un texte de 30 lignes comme intro par exemple???
Antoine
echo "tes trente ligne"

ou alors, tu fais plusieur dossier genre fr, en, es, nl ... avec des fichiers textes portant le même nom dans tous les dossier et tu en fais l'appel dans la classe smile.gif
qwix
Antoine (May 24 2005, 05:09 PM) a dit :
Moi perso, j'aime bien l'idée du full PHP avec une classe.

<!--cssStart--><div class='phptop'>Php</div><div class='phpmain'><pre>$texte = new Texte("fr");
$texte->introduction();</pre></div><!--cssEnd-->

<!--cssStart--><div class='phptop'>Php</div><div class='phpmain'><pre>class Texte {
  private _lang = "";
  function __construct($langue) {
    $this->_lang = $langue;
  }

  function introduction() {
    if($this->_lang == "fr") {
        <a target="_blank" href="http://www.php.net/echo" >echo</a> "Bonjour";
    } elseif ($this->_lang == "en") {
        <a target="_blank" href="http://www.php.net/echo" >echo</a> "Hello";
    }
  }

}</pre></div><!--cssEnd-->

Y'a pe une erreur, j'ai fait ça comme ça smile.gif
*



Mouais sauf que dans ton cas, tu te retrouve avec un classe énorme et des switchs dans tous les sens wink.gif

smile.gif
Antoine
Php
class Texte {
private _lang = "";
function __construct($langue) {
$this->_lang = $langue;
}

function introduction() {
$filename = "./textes/".$this->_lang."/introduction.txt";
$handle = fopen ($filename, "rb");
$contenu = fread ($handle, filesize ($filename));
fclose ($handle);
echo $contenu;
}

}
Antoine
grillé... mais j'y ait pensé c'est pour ça que ma deuxième soluce est meilleure smile.gif
qwix
Ou alors avec une interface ça fait plus propre wink.gif

smile.gif
Antoine
Ouep mais ça te fait vite bcp de classe à écrire. Mais c'est plus propre et surtout plus rapide que l'ouverture de fichier texte.
qwix
Mais c'est plus simple à maintenir wink.gif
De toute façon après il faut faire tes choix en fonctions de tes besoins wink.gif

smile.gif
Antoine
Sur

mais perso, j'opterais pour un systeme de classes indépendantes avec interrogation d'une base de données. Comme ça, j'ai la facilité des classes indépendantes avec la souplesse de mise à jour de la BDD. Le tout chapeauté par une interface pour être sur.

(tiens, ca ferait un bon sujet de tutos)
Xav
Euh ouais, mais bon, vu que j'y comprends rien aux classes, je vais oublier dans un premier temps icon_razz.gif

Tout ce que je veux savoir, c'est ce que vous me conseillez réellement pour un site de 4 ou 5 pages contenant une trentaine de ligne chacune.

- Soit un fichier dico_$ln.php par langue contenant par exemple
Code

$lang = array (
"welcome" => "BIENVENUE ! ",
"page1" => "30 lignes",
"page2 => "30 lignes"
);

avec un petit
Code
<?php echo $lang["page1"]; ?>
dans ma page1 par exemple

- Soit une BD contenant le contenu des mes pages dans chaque langue et une requête pour les afficher!

Merci wink.gif
jep
Bon revenons au problème initial du monsieur icon_wink.gif

Xav (May 24 2005, 05:53 PM) a dit :
Peux-tu m'expliquer ce que tu entends exactement par 'charge mémoire'? Le temps de réaction de la page?

Lorsque tu définies une variable, celle-ci prend de la place dans la mémoire vive... or, pour éviter que le serveur ralentisse la taille de la mémoire alloué a un script PHP est limité (à 8Mo par deffaut). Donc, si tu veux traduire un gros volume de données, avec un fichier texte contenant un tableau, en théorie, tu risque de rencontré un problème de mémoire !

Dans les faits, il faut avoir un enorme volume de texte à traduire pour arriver à saturer la mémoire de cette manière... mais ça peut arriver assez vite tout de même !

Xav (May 24 2005, 05:53 PM) a dit :
En réalité, mon fichier dico n'est pas un fichier texte, mais un fichier php dans lequel j'ai un array...

C'est la même choses icon_wink.gif

Xav (May 24 2005, 05:53 PM) a dit :
Sinon, entre les deux, que me conseilles-tu pour un site qui ne contiendrait que 4 pages (présentation de la société, références, etc) d'une 30aine de lignes chacune?

Dans ce cas, tu peut parfaitement continuer à utiliser la méthode du fichier PHP contenant un tableau des traductions (mais n'utilise qu'un seul fichier par langue et appelle uniquement le fichier necessaire n fonction de la langue choisie par l'internaute.)

Xav (May 24 2005, 05:53 PM) a dit :
Enfin, dans le cas de l'utilisation d'un fichier externe, puis-je mettre dans une seule variable de mon tableau toute la présentation de l'entreprise, ou bien vaut-il mieux le découper (en paragraphes par exemple)??

Ça, c'est comme tu veux, ça depend surtout de ce que tu compte faire des textes.

icon_smile.gif
Xav
Eh bé! Quelle précision! icon_razz.gif

Merci beaucoup Jep! Non seulement, tu réponds parfaitement et précisément à toutes mes interrogations, mais en plus, c'est rassurant de constater qu'avec l'expérience, on finit par choisir la bonne direction tout seul. icon_lol.gif
J'avais en effet déjà 4 fichiers (dico_fr.php, dico_de.php,...) pour mes arrays contenant les textes à afficher. Et je n'appelle bien sûr que celui qui est utile.

Je continue donc dans la même direction.

Un tout grand merci! wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.