Avec Define : Mettre plusieurs valeurs ?

Fabio
Invité n'ayant pas de compte PHPfrance

21 sept. 2005, 16:06

Hello !

Je débute, et je coince... J'espère que vous pourrez m'aider... :(

Je fais un site en 3 langues (chinois, anglais, français) et j'ai suivi les instructions du tuto :
http://www.phpdebutant.org/article107.php

Le problème est que c'est vraiment laborieux d'avoir 3 fichiers à mettre à jour à chaque fois... :oops: (en-lang.php. / fr-lang.php / ch-lang.php)

Comment puis-je faire pour ne garder qu'un seul fichier (lang.php), et par exemple séparer les données de chaque ligne par des POINT-VIRGULE :?:

Du type :

define ('TXT_1', 'BONJOUR'; 'HELLO'; 'EN CHINOIS);
define ('TXT_2', 'Bienvenue'; 'Welcome'; 'EN CHINOIS);

Et ainsi aller chercher la valeur après :
- le 1er point-virgule si $lang == en
- le 2ème point-virgule si $lang == ch
- etc...

J'espère avoir été clair et que quelqu'un aura la gentillesse de m'aider... Parce-que la je rame grave. Merci d'avance ! :D

Mammouth du PHP | 19672 Messages

21 sept. 2005, 16:38

Je crains que tu n'aies pas vraiment le choix, les constantes ne sont pas des tableaux et je ne crois pas qu'on puisse les définir comme des tableaux.
Il te faudra donc gérer 3 fichiers.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 568 Messages

21 sept. 2005, 16:42

Non, tu ne peux pas faire ce que tu écris... define() te définis une constante, avec une valeure unique...

L'intérêt de la solution proposée par PHPdébutant est de pouvoir avoir le même nom de variable, quelque soit ta langue...

Maintenant, tu peux en faire une variante...

Tu définis une page de langue où tu mettras dans un tableau à 2 dimensions les traductions...

Un truc du genre :
$langue[0][0]="Bonjour";
$langue[0][1]="Hello";
$langue[0][2]="Guten tag";
Et tu définis tes langues par 0, 1 ou 2...
En chargeant ta page.php?lang=1, avec dans le code :
echo $langue[0][$i];
Tu auras :
Hello
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Fabio
Invité n'ayant pas de compte PHPfrance

21 sept. 2005, 17:17

Merci de m'avoir consacré du temps, déjà pour commencer, c'est très sympa d'aider les gens qui pataugent...

heddicmi, vu que je débute, j'ai du mal à comprendre où, et comment, je dois mettre mes autres traductions (par exemple "bienvenue") à la suite de ce tableau à 2 dim :
$langue[0][0]="Bonjour"; 
$langue[0][1]="Hello"; 
$langue[0][2]="Guten tag"; 

Merci encore d'avance

Mammouth du PHP | 568 Messages

21 sept. 2005, 17:36

Je reprends...

Dans le tuto que tu as utilisé, tu as un fichier par langue qui contient, pour chaque variable une traduction du même texte.

Tu avais par exemple un fichier en français fr-lang.php avec :
define('TXT_ACCUEIL_INDEX', 'Bienvenue sur PHP Débutant !'); 
Et un fichier en anglais en-lang.php avec :
define('TXT_ACCUEIL_INDEX', 'Welcome on PHP Débutant !'); 
Ensuite, suivant la langue choisie, tu affichais la constante VAR_ACCUEIL en allant la chercher dans l'un ou l'autre des fichiers.

Maintenant, je te propose de n'avoir plus qu'un fichier langue.

Ce fichier langue lang.php (par exemple), ne contiendrais plus de define(), mais des tableaux (je me suis un peu trop avancé avec mes dimensions... Ca va être plus simple, tu vas voir...) :
$TXT_ACCUEIL_INDEX[0]='Bienvenue sur PHP Débutant !');
$TXT_ACCUEIL_INDEX[1]=''Welcome on PHP Débutant !');
Dans ce nouveau fichier, au lieu de définir une constante avec la traduction, tu définis un tableau qui contiendra toutes tes traductions.

On détermine par avance et pour toute la durée du site une logique comme :
0 --> Français
1 --> Anglais

Maintenant, quand tu charges ta page, tu ne fais plus appel à :
require("decide-lang.php"); 
Tu inclus tous simplement le fichier langue général :
include("lang.php"); 
Et pour appeller ta variable, au lieu de mettre :
<?php echo TXT_ACCUEIL_INDEX; ?> 
Tu mets l'appel au tableau contenant, dans le cas de cet exemple, le texte d'accueil :
<?php echo $TXT_ACCUEIL_INDEX[$lang]; ?> 

Tu noteras donc qu'il ira chercher, dans le tableau $TXT_ACCUEIL_INDEX, le texte à l'indice $lang.

Ce $lang, tu le détermines à l'appel de la page, comme dans l'exemple de PHPdébutant.

AVANT :

Code : Tout sélectionner

index.php?lang=fr et index.php?lang=en
APRES :

Code : Tout sélectionner

index.php?lang=0 et index.php?lang=1
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Fabio
Invité n'ayant pas de compte PHPfrance

21 sept. 2005, 18:02

Merci pour ta patience heddicmi ! :D
Plus clair, on peut pas là je crois ! Je file essayer tt de suite !

MERCI BEAUCOUP pour ton aide :!::!::!: