Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3030 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Variables dynamiques + site multilingue

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Variables dynamiques + site multilingue

n°949360
SatanKoRn
J'T'A'M !
Posté le 08-01-2005 à 22:46:11  profilanswer
 

Voilà mon problème : je veux créer un site en plusieurs langues. Ainsi je crée mon fichier contenant les textes que j'utiliserai :  
Fichier : dico/principal.php

Code :
  1. <?
  2. $ENREGISTREMENT_FR = 'S\'enregistrer';
  3. $ENREGISTREMENT_EN = 'Register';
  4. ?>


 
Ensuite, j'ai le fichier suivant qui défini une fonction permettant de renvoyer un mot du dictionnaire :  
Fichier : dicofonction.php

Code :
  1. <?
  2. function dico($mot) {
  3. if(${$mot.'_'.$lang}) {
  4.  return htmlentities(${$mot.'_'.$lang});
  5. } // le mot existe
  6. if(${$mot.'_FR'}) {
  7.  return htmlentities(${$mot.'_FR'});
  8. } // le mot n'existe pas, donc le mot en français existe-t'il ?
  9. return "BIG_BAD_ERROR";
  10. // ni en français ni en aucune autre langue...
  11. }
  12. ?>


 
Puis dans ma page index.php, je mets simplement le code suivant :  
Fichier : index.php

Code :
  1. <?
  2. include "dico/principal.php";
  3. include "dicofonction.php";
  4. $lang = "FR"; // c'est un exemple pour tester le code...
  5. echo dico("ENREGISTREMENT" );
  6. ?>


 
Le problème, c'est que ça m'affiche "BIG_BAD_ERROR", alors que ce n'est pas censé faire ça. C'est un exemple que j'ai trouvé sur un site, donc je ne suis pas l'auteur du script lui-même. Cependant, j'ai compris le script et je saurais pas trouver d'où vient l'erreur...  
 
Merci d'avance à quiconque qui pourrait m'éclairer !
 
Note : j'utilise PHP/4.3.7


---------------
Matt
mood
Publicité
Posté le 08-01-2005 à 22:46:11  profilanswer
 

n°949366
sielfried
Posté le 08-01-2005 à 23:15:04  profilanswer
 

La fonction dico ne connaît ni les variables $ENREGISTREMENT_* ni la variable $lang si elles ne sont pas passées en paramètres à la fonction (ou déclarées global dans celle-ci).


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°949373
dreameddea​th
Posté le 08-01-2005 à 23:23:22  profilanswer
 

mais plutot que de jouer sur les noms de variables, je partirais plutot sur des tableaux/hash tables pour implémenter les langues...

Code :
  1. $tableau_variables["fr"]["ENREGISTREMENT"] = htmlentites('S\'enregistrer');
  2. $tableau_variables["en"]["ENREGISTREMENT"] = htmlentites('Register');


Je pense que c'est plus performant surtout en précalculant les htmlentites, et comme ça tu règles les problèmes des global (tu n'as qu'à faire global $tableau_variables)...

n°949375
Berceker U​nited
PSN : berceker_united
Posté le 08-01-2005 à 23:23:58  profilanswer
 

Personnellement je te conseillerait d'utiliser un tableau plutot que des variables variable.
 

Code :
  1. $Translate['fr'][0] = 'S\'enregistrer';
  2. $Translate['eng'][0] = 'Register';


Ainsi tu fais passer qu'un variable en paramètre dans ta fonction plutot que de mettre 36000 variable en global.
Dans le cas que je te présente il suffit d'utiliser les fonction de tableau(array) pour faire les recherches, en php il y en tous ce qu'il te faut.  
array_in(); sera ton amie. :jap:

n°949378
Berceker U​nited
PSN : berceker_united
Posté le 08-01-2005 à 23:25:17  profilanswer
 

dreameddeath a écrit :

mais plutot que de jouer sur les noms de variables, je partirais plutot sur des tableaux/hash tables pour implémenter les langues...

Code :
  1. $tableau_variables["fr"]["ENREGISTREMENT"] = htmlentites('S\'enregistrer');
  2. $tableau_variables["en"]["ENREGISTREMENT"] = htmlentites('Register');


Je pense que c'est plus performant surtout en précalculant les htmlentites, et comme ça tu règles les problèmes des global (tu n'as qu'à faire global $tableau_variables)...


 
T'as triché tu m'as fais un croche pate  :fou: c'est pour cela que tu l'as posté avant moi. Tricheur  :kaola:  
 
 
 
:D

n°949381
dreameddea​th
Posté le 08-01-2005 à 23:27:54  profilanswer
 

bon cette fois j'ai gagné ! :p
au prochain post php on remet ça ! :D

n°949385
Berceker U​nited
PSN : berceker_united
Posté le 08-01-2005 à 23:38:20  profilanswer
 

dreameddeath a écrit :

bon cette fois j'ai gagné ! :p
au prochain post php on remet ça ! :D


Attention moi je suis de la team  [:negueu]  
http://mapage.noos.fr/berceker_united/phpman.jpg


Message édité par Berceker United le 08-01-2005 à 23:38:34
n°949428
esox_ch
Posté le 09-01-2005 à 16:50:47  profilanswer
 

C'est pas juste, moi j'etais meme pas la pour la competition :(

n°949429
Berceker U​nited
PSN : berceker_united
Posté le 09-01-2005 à 16:51:49  profilanswer
 

esox_ch a écrit :

C'est pas juste, moi j'etais meme pas la pour la competition :(


Faut pas dormir man  [:negueu]
il faut être dans le coup [:x-oni]


Message édité par Berceker United le 09-01-2005 à 16:52:01
n°949430
esox_ch
Posté le 09-01-2005 à 16:53:05  profilanswer
 

J'etais aller conduire avec ma mere !

mood
Publicité
Posté le 09-01-2005 à 16:53:05  profilanswer
 

n°949447
Hermes le ​Messager
Breton Quiétiste
Posté le 09-01-2005 à 17:24:18  profilanswer
 

Pour la recommandation d'un tableau, j'ai fini par ne plus m'en servir (c'est ce dont je me servais avant) et j'utilise des fichiers de langues genre :
 
$voc_blabla = "blabla";
$voc_zobi = "zobi";
etc...
 
Le tout dans une page appelée par exemple : langue_fr.php que j'inclue bêtement. Si je veux l'allemand, ben j'aurais une page langue_de.php...
 
Je trouve ça très rapide et surtout très pratique à maintenir...

n°949452
esox_ch
Posté le 09-01-2005 à 17:32:05  profilanswer
 

personnellement j'utilise une page : dico.inc.php qui est contiens un switch avec 1 case par langue... le ficher etant généré par une base de donnée et une page dans l'administration c'est assez confortable a maintenir et ca me permet de laisser l'acces aux traductions a des personnes n'aillant aucune notion d'informatique

n°949456
Hermes le ​Messager
Breton Quiétiste
Posté le 09-01-2005 à 17:34:40  profilanswer
 

esox_ch a écrit :

personnellement j'utilise une page : dico.inc.php qui est contiens un switch avec 1 case par langue... le ficher etant généré par une base de donnée et une page dans l'administration c'est assez confortable a maintenir et ca me permet de laisser l'acces aux traductions a des personnes n'aillant aucune notion d'informatique


 
Quel intérêt par rapport à mon système par exemple ?  

n°949459
esox_ch
Posté le 09-01-2005 à 17:37:36  profilanswer
 

Aucun a 1ere vue, c'etais juste une possibilité de plus.

n°949462
Hermes le ​Messager
Breton Quiétiste
Posté le 09-01-2005 à 17:41:23  profilanswer
 

esox_ch a écrit :

Aucun a 1ere vue, c'etais juste une possibilité de plus.


 
 :D  
 
Mon système est plus simple, mais il nécessite de lister les fichiers dans mon répertoire "langue" pour pouvoir changer celle-ci dans mon interface d'admin. Ainsi, dans ma BDD, c'est carrément langue_fr.php que je stocke (le nom). ;)  
 
A partir de là, ma solution est la meilleure, car qqu qui veut faire une autre langue, a juste a écrire un fichier langue_sa_langue.php qui sera automatiquement pris en compte.  :D  

n°949464
esox_ch
Posté le 09-01-2005 à 17:43:19  profilanswer
 

Et pour modifier une valeur X mal traduite? Tu as une page php qui parse ta page langue_X.php pour resortir toutes les données ?

n°949467
Berceker U​nited
PSN : berceker_united
Posté le 09-01-2005 à 17:44:54  profilanswer
 

Hermes le Messager: le faite de crééer plusieurs variable je le sens pas trop :/ en terme de gestion de memoire et autre de ce genre qui fait que les perfs peuvent ce sentir arrivé a un certain nombre, certe pas de façon significative.
Je pense que le faire sur de texte brute est plus performant plutot qu'elle soit parsé.
en utilisant pars_ini_file par exemple.

n°949470
SatanKoRn
J'T'A'M !
Posté le 09-01-2005 à 17:45:36  profilanswer
 

Merci beaucoup les gars (et les miss ?) !! Mon problème est résolu et ça marche à merveille !
:-)

n°949472
esox_ch
Posté le 09-01-2005 à 17:46:40  profilanswer
 

Comment ca berceker? Tu peux expliquer un peu plus? parceque je vois pas trop ou tu veux en venir ...
 
P.S: Je te l'ai jms dit mais elle cartonne ta signature :D

n°949481
cerel
Posté le 09-01-2005 à 17:52:26  profilanswer
 

Vous utilisez tous des variables, mais la pluspart du temps que je regarde des systemes similaires ils utilisent des defines.
 
Qu'en pensez-vous ? Variables ? Defines ? Grande difference ou la meme chose ?
 
Perso je prefere les defines, ca me permet de pas "confondre" avec des vars.

n°949482
Berceker U​nited
PSN : berceker_united
Posté le 09-01-2005 à 17:54:56  profilanswer
 

esox_ch a écrit :

Comment ca berceker? Tu peux expliquer un peu plus? parceque je vois pas trop ou tu veux en venir ...
 
P.S: Je te l'ai jms dit mais elle cartonne ta signature :D


Plutt que de faire des variables qui prend de la place surtout pour des données statique il est préférable de le placer en dure sur un fichier de type texte. il est tout aussi gérable que si c'était une variable.
http://www.nexen.net/docs/php/anno [...] i-file.php
 
 
Merci pour la signature ;)


Message édité par Berceker United le 09-01-2005 à 17:55:02
n°949492
Hermes le ​Messager
Breton Quiétiste
Posté le 09-01-2005 à 18:11:50  profilanswer
 

berceker united a écrit :

Plutt que de faire des variables qui prend de la place surtout pour des données statique il est préférable de le placer en dure sur un fichier de type texte. il est tout aussi gérable que si c'était une variable.
http://www.nexen.net/docs/php/anno [...] i-file.php
 
 
Merci pour la signature ;)


 
Oui pour un gros site, c'est en effet une bonne solution.
 
Pour un "petit" site, les variables marchent parfaitement et je n'ai constaté aucun occupation mémoire anormalement élevée sur mon proc (linux).

n°949506
Berceker U​nited
PSN : berceker_united
Posté le 09-01-2005 à 18:18:40  profilanswer
 

Hermes le Messager a écrit :

Oui pour un gros site, c'est en effet une bonne solution.
 
Pour un "petit" site, les variables marchent parfaitement et je n'ai constaté aucun occupation mémoire anormalement élevée sur mon proc (linux).


Oui sur un petit site l'occupation mémoir est vraiment minime cela depend de plein de chose aussi. Par contre sur un gros site ou il y a beaucoup de visiteur là il faut que le systeme soit optimisé limite un db genre LDAP (je crois). Pire! a ne pas faire c'est de placer ces variables en session c'est une erreur. là par contre ça va bouffer.

n°950144
ratibus
Posté le 10-01-2005 à 16:34:39  profilanswer
 

Salut
 
Pour les appli multilingues y a gettext aussi.

n°950158
Berceker U​nited
PSN : berceker_united
Posté le 10-01-2005 à 16:54:30  profilanswer
 

exacte ! je l'avais complétement oublié  

n°950161
ratibus
Posté le 10-01-2005 à 17:00:22  profilanswer
 

A mon avis c'est le plus rapide au niveau des performances (les fichiers de traductions sont compilés).
 
Ensuite il faut le support gettext dans PHP.

n°950162
Xav_
The only one...
Posté le 10-01-2005 à 17:02:11  profilanswer
 

berceker united a écrit :

Merci pour la signature ;)


ça serait pas du Clint Eastwood par hasard ??? ;)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
n°950164
Berceker U​nited
PSN : berceker_united
Posté le 10-01-2005 à 17:04:38  profilanswer
 

Xav_ a écrit :

ça serait pas du Clint Eastwood par hasard ??? ;)


Oui du film, le bon la brute et le tryant, il y a d'autre dans le meme genre que tuko repliquait

n°951623
helain
Posté le 12-01-2005 à 13:57:12  profilanswer
 

Hermes le Messager a écrit :

Pour la recommandation d'un tableau, j'ai fini par ne plus m'en servir (c'est ce dont je me servais avant) et j'utilise des fichiers de langues genre :
 
$voc_blabla = "blabla";
$voc_zobi = "zobi";
etc...
 
Le tout dans une page appelée par exemple : langue_fr.php que j'inclue bêtement. Si je veux l'allemand, ben j'aurais une page langue_de.php...
 
Je trouve ça très rapide et surtout très pratique à maintenir...


 
Bonjour Hermès,
 
après quelques jours de recherche sur le net, je suis convaincu que la méthode des fichiers de langue que tu utilises est la meilleure : ils sont légers à charger et faciles à gérer (envoi par mail à un traducteur et chargement sur le site dès réception du fichier traduit).
 
Il y a une page qui explique cette méthode de manière générale, http://www.aidejavascript.com/article117.html , mais pourrais-tu publier tes fichiers php pour exemple.
 
Merci

n°951669
helain
Posté le 12-01-2005 à 14:49:13  profilanswer
 

en voila deja un qui marche
 
[code]
<?php // config.inc.php
 
$default_lang = 'en';
$language_codes = array('en',  // English
                        'es',  // Spanish
                        'fr'); // French
 
function set_lang()
{
   if(isset($_GET['lang']) &&
      in_array($_GET['lang'], $GLOBALS['language_codes']))
   {
       $GLOBALS['lang'] = $_GET['lang'];
   }
   else
   {
       $GLOBALS['lang'] = $GLOBALS['default_lang'];
   }
}
 
set_lang();
require_once("lang.{$lang}.inc.php" ); // include proper resource file
?>
 
<?php // lang.en.inc.php
$hello_str = "Hello, world!";
$submit_str = "Submit";
$language_names = array("en" => "English",
                        "es" => "Spanish",
                        "fr" => "French" );
?>
 
<?php // lang.es.inc.php
$hello_str = "¡Hola, el mundo!";
$submit_str = "Sométase";
$language_names = array("en" => "Inglés",
                        "es" => "Español",
                        "fr" => "Francés" );
?>
 
<?php // lang.fr.inc.php
$hello_str = "Bonjour, le monde!";
$submit_str = "Soumettre";
$language_names = array("en" => "Anglais",
                        "es" => "Espagnol",
                        "fr" => "Français" );
?>
 
 
<?php // main.php
 
require_once('config.inc.php');
  // this require_once() call sets the appropriate language
  // and includes the proper resource file.
  // The main application never outputs anything to the user,
  // it only outputs string variables defined in the resource files.
 
echo $hello_str;
 
 
echo "<hr>\n"; // HTML can be output by the application,
               // since it's not language-dependent.
 
// we'll include a short form to let the user change languages.
echo "<form action=\"{$_SERVER['PHP_SELF']}\" method=\"get\">\n";
echo "  <select name=\"lang\">\n";
foreach($language_codes as $lang_key)
{
   // our form will preselect the current language
   $selected = ($lang == $lang_key)? " selected=\"\"" : "";
   echo "    <option value=\"{$lang_key}\"{$selected}>"
      . $language_names[$lang_key]
      . "</option>\n";
}
echo "  </select>\n";
echo "  <input type=\"submit\" value=\"{$submit_str}\" />\n";
echo "</form>\n";
 
?>

n°951671
Hermes le ​Messager
Breton Quiétiste
Posté le 12-01-2005 à 14:51:22  profilanswer
 

helain a écrit :

Bonjour Hermès,
 
après quelques jours de recherche sur le net, je suis convaincu que la méthode des fichiers de langue que tu utilises est la meilleure : ils sont légers à charger et faciles à gérer (envoi par mail à un traducteur et chargement sur le site dès réception du fichier traduit).
 
Il y a une page qui explique cette méthode de manière générale, http://www.aidejavascript.com/article117.html , mais pourrais-tu publier tes fichiers php pour exemple.
 
Merci


 
Ya rien à publier de spécial hein...  
 
Dans ta page index.php, tu fais une recherche de la langue utilisée que tu stockes soit dans un fichier soit dans ta BDD :
 
Exemple avec une BDD :

Code :
  1. $resultat = mysql_query('SELECT password,langue,etc... FROM preferences') or die('Erreur SQL !');
  2. $langue = mysql_result($resultat,0,'langue');
  3. // Inclusion de la langue
  4. include("../langues/".$langue);


 
$langue contient le NOM de ton fichier de langue, par exemple : francais.php ou encore : langue-fr.php
 
Ensuite ton fichier de langue : langue-fr.php ressemble bêtement à ça :
 

Code :
  1. <?php
  2. // ********************************
  3. // * Fichier de langue : Français *
  4. // ********************************
  5. $dialogue_truc = "Truc !";
  6. $dialogue_machin = "Machin !";
  7. etc...
  8. ?>


 
Ensuite, quand tu as besoin d'un mot traduisible dans tes pages, (sachant qu'un site bien conçu est un site comportant UNE seule page (hormis les pages de traitements des infos), tu fais :
 
... <?php echo $dialogue_truc; ?>  ... par exemple...

n°952011
helain
Posté le 12-01-2005 à 22:04:23  profilanswer
 

Ensuite, quand tu as besoin d'un mot traduisible dans tes pages, (sachant qu'un site bien conçu est un site comportant UNE seule page (hormis les pages de traitements des infos), tu fais :
 
 
Salut Hermès,
 
En effet j'ai compris justement hier qu'un site bien conçu ne comporte qu'une seule page : il faut rajouter des paramètres à index.php et ensuite faire du url rewriting mots-clés pour repasser en html et optimiser le référencement.  
 
A suivre.  

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Variables dynamiques + site multilingue

 

Sujets relatifs
[résolu] problème pour récupérer variables[conseil]Comment créez-vous votre site web?
Test d'un site avec Internet Explorer 5problème redirection site web
Comment passer des variables d'une URL a l'autre???[HTML] Problème de tableaux avec mon site sous Firefox
Comment ajouter un site dans les grands moteurs de rechercheProgramme pour automatiser une connexion a une site tt les 0.1 seconde
Comment peut on faire faire un site comme eurobarre ou prizee, etc...? [BESOIN AIDE Dreamweaver] Créa Site Web avec Panier de Vente en Ligne
Plus de sujets relatifs à : Variables dynamiques + site multilingue


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR