Variables dynamiques + site multilingue - PHP - Programmation
Marsh Posté le 08-01-2005 à 23:15:04
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).
Marsh Posté le 08-01-2005 à 23:23:22
mais plutot que de jouer sur les noms de variables, je partirais plutot sur des tableaux/hash tables pour implémenter les langues...
Code :
|
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)...
Marsh Posté le 08-01-2005 à 23:23:58
Personnellement je te conseillerait d'utiliser un tableau plutot que des variables variable.
Code :
|
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.
Marsh Posté le 08-01-2005 à 23:25:17
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...
|
T'as triché tu m'as fais un croche pate c'est pour cela que tu l'as posté avant moi. Tricheur
Marsh Posté le 08-01-2005 à 23:27:54
bon cette fois j'ai gagné !
au prochain post php on remet ça !
Marsh Posté le 08-01-2005 à 23:38:20
dreameddeath a écrit : bon cette fois j'ai gagné ! |
Attention moi je suis de la team
Marsh Posté le 09-01-2005 à 16:50:47
C'est pas juste, moi j'etais meme pas la pour la competition
Marsh Posté le 09-01-2005 à 16:51:49
esox_ch a écrit : C'est pas juste, moi j'etais meme pas la pour la competition |
Faut pas dormir man
il faut être dans le coup
Marsh Posté le 09-01-2005 à 17:24:18
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...
Marsh Posté le 09-01-2005 à 17:32:05
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
Marsh Posté le 09-01-2005 à 17:34:40
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 ?
Marsh Posté le 09-01-2005 à 17:41:23
esox_ch a écrit : Aucun a 1ere vue, c'etais juste une possibilité de plus. |
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.
Marsh Posté le 09-01-2005 à 17:43:19
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 ?
Marsh Posté le 09-01-2005 à 17:44:54
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.
Marsh Posté le 09-01-2005 à 17:45:36
Merci beaucoup les gars (et les miss ?) !! Mon problème est résolu et ça marche à merveille !
:-)
Marsh Posté le 09-01-2005 à 17:46:40
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
Marsh Posté le 09-01-2005 à 17:52:26
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.
Marsh Posté le 09-01-2005 à 17:54:56
esox_ch a écrit : Comment ca berceker? Tu peux expliquer un peu plus? parceque je vois pas trop ou tu veux en venir ... |
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
Marsh Posté le 09-01-2005 à 18:11:50
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. |
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).
Marsh Posté le 09-01-2005 à 18:18:40
Hermes le Messager a écrit : Oui pour un gros site, c'est en effet une bonne solution. |
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.
Marsh Posté le 10-01-2005 à 17:00:22
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.
Marsh Posté le 10-01-2005 à 17:02:11
berceker united a écrit : Merci pour la signature |
ça serait pas du Clint Eastwood par hasard ???
Marsh Posté le 10-01-2005 à 17:04:38
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
Marsh Posté le 12-01-2005 à 13:57:12
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 : |
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
Marsh Posté le 12-01-2005 à 14:49:13
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";
?>
Marsh Posté le 12-01-2005 à 14:51:22
helain a écrit : Bonjour Hermès, |
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 :
|
$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 :
|
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...
Marsh Posté le 12-01-2005 à 22:04:23
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.
Marsh Posté le 08-01-2005 à 22:46:11
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
Ensuite, j'ai le fichier suivant qui défini une fonction permettant de renvoyer un mot du dictionnaire :
Fichier : dicofonction.php
Puis dans ma page index.php, je mets simplement le code suivant :
Fichier : index.php
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