Formulaire trilingue

ViPHP
ViPHP | 4039 Messages

08 sept. 2009, 15:00

J'ai survolé avec un œil las toute cette conversation, alors j'apporte une condition sine qua non d'une bonne gestion multilingue.

Le système doit pouvoir gérer efficacement, d'une façon ou d'une autre, l'absence de traduction.

Et le plantage du site pour absence d'une variable n'est pas ce que j'appelle une gestion efficace.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 5924 Messages

08 sept. 2009, 16:49

Et le plantage du site pour absence d'une variable n'est pas ce que j'appelle une gestion efficace.
C'est obvious :)
C'est pour cela qu'il ne faut pas partir bêtement dans l'inclusion d'un fichier de variables, il y a tout un système à mettre en place. Personnellement, j'ai choisi de wrapper la méthode par un objet doté d'une méthode magique __get.

Mammouth du PHP | 985 Messages

08 sept. 2009, 18:33

J'ai survolé avec un œil las toute cette conversation, alors j'apporte une condition sine qua non d'une bonne gestion multilingue.
Le système doit pouvoir gérer efficacement, d'une façon ou d'une autre, l'absence de traduction.
Et le plantage du site pour absence d'une variable n'est pas ce que j'appelle une gestion efficace.
Depuis quand un site plante pour une variable null de traduction?
Le site ne plantera pas car:
Si variable = null -> le mot ne s'affichera pas.
Puis:
Le minimum c'est de faire une valeur par défaut, ce n'est tout de même pas compliqué, ca prend 10 secondes...

Si tu parles d'absences de variables, une erreur peut arriver avec toutes les méthodes, l'erreur est humaine.

Pour éviter ce type d'erreurs, rien de plus simple:
Vérifier s'il existe une erreur de Type Notice après avoir finis un script de traduction...
Ou vérifier si la valeur par défaut existe...
Ou un simple test: if(!isset(

Au niveau gestion, rien de plus simple donc... Surtout au niveau correction...
Donc en fait tu soulèves un autre point positif de l'inclusion de variables, car en y réfléchissant bien, la gestion est encore bien plus simple finalement :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 4039 Messages

08 sept. 2009, 19:49

C'est pour cela qu'il ne faut pas partir bêtement dans l'inclusion d'un fichier de variables, il y a tout un système à mettre en place. Personnellement, j'ai choisi de wrapper la méthode par un objet doté d'une méthode magique __get.
C'est pas mal non plus.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 sept. 2009, 20:07

J'ai survolé avec un œil las toute cette conversation, alors j'apporte une condition sine qua non d'une bonne gestion multilingue.
Le système doit pouvoir gérer efficacement, d'une façon ou d'une autre, l'absence de traduction.
Et le plantage du site pour absence d'une variable n'est pas ce que j'appelle une gestion efficace.
Depuis quand un site plante pour une variable null de traduction?
Le site ne plantera pas car:
Si variable = null -> le mot ne s'affichera pas.
Puis:
Le minimum c'est de faire une valeur par défaut, ce n'est tout de même pas compliqué, ca prend 10 secondes...

Si tu parles d'absences de variables, une erreur peut arriver avec toutes les méthodes, l'erreur est humaine.

Pour éviter ce type d'erreurs, rien de plus simple:
Vérifier s'il existe une erreur de Type Notice après avoir finis un script de traduction...
Ou vérifier si la valeur par défaut existe...
Ou un simple test: if(!isset(

Au niveau gestion, rien de plus simple donc... Surtout au niveau correction...
Donc en fait tu soulèves un autre point positif de l'inclusion de variables, car en y réfléchissant bien, la gestion est encore bien plus simple finalement :wink:
Un script ne "plante" pas, mais il y a levée de Notice. Et c'est crade de cacher sous le tapis les notices en ce disant que ce n'est pas grave.
Et partir du fait que jamais, au travers d'un développement, une valeur sera en attente de traduction, ou que tu oublieras le fichier néerlandais lorsque tu ajouteras une valeur, c'est assez présomptueux.
Même si je valide toujours plusieurs fois mes développements, je prévois toujours le cas d'erreur, et je pense que c'est une bonne pratique de développement.

Ensuite, pour moi (toujours), une bonne pratique de mise en place de traduction est, comme l'a indiqué Sekiltoyai, de prévoir une langue par défaut et de permettre de toujours afficher un texte, même s'il manque une traduction.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3300 Messages

09 sept. 2009, 16:09

personellement, quand je code je me débrouille pour que notice = die avec erreur, juste pour etre sur de pas en oublier, les notices c'est mal. Bon sinon je me demandais pourquoi tout ce discours qui n'a finalement pas beaucoup de rapport avec le message de départ?
Fait du php depuis que ca existe ou presque :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 sept. 2009, 16:21

Bon sinon je me demandais pourquoi tout ce discours qui n'a finalement pas beaucoup de rapport avec le message de départ?
Bien au contraire, puisque l'on y trouve tout une série d'avis sur la meilleure manière de traduire un site.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 985 Messages

09 sept. 2009, 16:27

Bien que je sois entièrement d'accord avec le Post de Zeus.
j'aimerais tout de même préciser ( car cela me chicotte) qu'il n'a jamais été question de cacher les erreurs Notices.
Un site ne plante pas à cause d'une variable Null.
Par contre, une erreur de Type Notice est levée -> pratique à mon avis car il suffit de lire l'erreur attentivement, elle nous donne même le nom de la variable qui fait défaut -> que demander de mieux au niveau gestion.

Ensuite Nagol, pour répondre à ta question, nous discutions au sujet des formulaires trilingues ou de traductions.
Et donc des avantages et inconvénients (erreurs possibles...) des différentes méthodes.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 2287 Messages

09 sept. 2009, 17:12

Et partir du fait que jamais, au travers d'un développement, une valeur sera en attente de traduction, ou que tu oublieras le fichier néerlandais lorsque tu ajouteras une valeur, c'est assez présomptueux.
Même si je valide toujours plusieurs fois mes développements, je prévois toujours le cas d'erreur, et je pense que c'est une bonne pratique de développement.

Ensuite, pour moi (toujours), une bonne pratique de mise en place de traduction est, comme l'a indiqué Sekiltoyai, de prévoir une langue par défaut et de permettre de toujours afficher un texte, même s'il manque une traduction.

Je me permets d'appuyer, je fais des sites multilingues toute l'année et l'absence d'une traduction est une réalité de tous les jours sur chacun d'eux pour les raisons mentionnées. C'est un point très important à observer dans la conception de l'i18n d'un site.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 sept. 2009, 18:00

Un site ne plante pas à cause d'une variable Null.
se passe quoi pour
$foo->bar()
si $foo = null

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 985 Messages

09 sept. 2009, 18:11

LoL
Je l'avais précisé dans mon avant-dernier Post, mais oublié de le re-préciser dans le dernier Post.
Truc on parle des variables de traductions qui sont affichées par echo :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
ViPHP | 2287 Messages

09 sept. 2009, 18:25

LoL
Je l'avais précisé dans mon avant-dernier Post, mais oublié de le re-préciser dans le dernier Post.
Truc on parle des variables de traductions qui sont affichées par echo :wink:
Tu peux rajouter echo devant le code d'exemple de Truc, et sa remarque reste valide.

D'ou l'intérêt d'être précis (ou mieux encore, mesuré ;) ) quand on assène des arguments-massue tels que "Un site ne plante pas à cause d'une variable null", ce qui formulé tel quel est faux.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 985 Messages

09 sept. 2009, 18:31

Tout à fait sauf comme précisé dans mes premiers Posts, je parle d'un script de traduction:
Je donne donc un exemple non complet que je vais redonner:
function mon_header($langue = 'fr.inc')
{
require_once($langue);
//...
echo 'hey ' . $bonjour . ', ' . $bonsoir;
//...
}

$langue=explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);

if ($langue[0] === 'fr') {
function mon_header();
}
else {
function mon_header('us.inc');
}
Comme tu peux voir les seules erreurs pour une variable manquante de traduction, car c'est de cela qu'il est question ici, ne donneront qu'une erreur Notice.
On ne parle pas d'erreurs typiques de variables qui peuvent arriver avec n'importe quel script et/ou méthodes :wink:

[EDIT]
Et donc pour finir de recentrer le débat:
Sans forcement reparler des performances évidentes et de la fiabilité de la méthode d'inclusion de variables pour un script de traduction.
Il existe aussi le coté maintenance et gestion, et donc rien de plus simple, pratique et rapide qu'être alerter par une Erreur Notice qu'une variable de traduction est absente à la fin de la création ou d'une mis à jour des traductions-> l'erreur nous donnant même le nom de la variable -> que demander de mieux...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

09 sept. 2009, 19:24

Bonjour,

Il y a quelques temps j'ai du choisir une méthode pour rendre un site multilingue, et comme il y des questions sur le sujet de temps en temps je vais vous montrer quelle solution j'ai choisi.
Cette méthode est un exemple, il y a d'autres façons d'y arriver.
J'ai opté pour des tableaux dans un switch(), l'avantage à mon sens est qu'il est trés simple de rajouter des langues aux sites et cela sans devoir modifier des pages et des pages.
La page qui contient les différentes langues

:arrow: language.php
<?php
 //-->Déclaration de la variable $Langue, et ici le fraçais par défaut en cas d'absence de valeur $_GET['language'].
 $Langue = (isSet($_GET['language'])) ? $_GET['language'] : 'FR' ;

        switch ($Langue)
         {
           case 'FR': //-->Partie français.--//
                   $Language = array('text_bonjour'      => 'Bonjour',
                                     'text_bonsoir'      => 'Bonsoir',
                                     'text_accueil'      => 'Accueil',
                                     'text_login'        => 'Votre nom d\'utilisateur',
                                     'text_pass'        => 'Votre mot de passe',
                                     'text_oublie_pass'  => 'Mot de passe oublier cliquez ici svp',
                                     'text_send'         => 'Envoie');
             break;


           case 'US'://-->Partie Anglais.--//
                  $Language = array('text_bonjour'       => 'Hello',
                                     'text_bonsoir'      => 'Good evening',
                                     'text_accueil'      => 'Home',
                                     'text_login'        => 'Your username',
                                     'text_pass'        => 'Your password',
                                     'text_oublie_pass'  => 'Forget password Please click here',
                                     'text_send'         => 'Send');
             break;

           case 'ES'://-->Partie Espagnol.--//
                 $Language = array('text_bonjour'      => 'Hola',
                                   'text_bonsoir'      => 'Buenas tardes',
                                   'text_accueil'      => 'Inicio',
                                   'text_login'        => 'Su nombre de usuario',
                                   'text_pass'        => 'Su contraseña',
                                   'text_oublie_pass'  => 'Olvido de contraseña Por favor, haga clic aquí',
                                   'text_send'         => 'Enviar');
             break;
         }
?>
Dans l’exemple ci-dessus il y trois tableaux français, anglais, et espagnol et suivant la valeur de la variable $_GET['language'] php va aller chercher les valeurs demandées dans tel ou tel tableau.

Pour afficher les valeurs rien de plus simple.
Voici un exemple de formulaire trilingue.
:arrow: index.php
<?php
include_once 'commun/language.php'; //-->Ont va chercher le fichier language.php
$Titre = (isSet($Language['text_accueil'])) ? $Language['text_accueil'] : 'Index';

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type" />
<title><?php echo $Titre; ?></title>
</head>

<body>

<?php
echo '<p>Langue : <a href="index.php?language=FR">FR</a> | <a href="index.php?language=US">US</a> | <a href="index.php?language=ES">ES</a></p>';

echo '<form action="" method="post" style="width: 524px">
	<table style="width: 99%">
		<tr>
			<td style="width: 191px">'.$Language['text_login'].' :</td>
			<td style="width: 289px"><input name="Text1" type="text" /></td>
		</tr>
		<tr>
			<td style="width: 191px">'.$Language['text_pass'].' :</td>
			<td style="width: 289px"><input name="Password1" type="password" /></td>
		</tr>
		<tr>
			<td style="width: 191px">&nbsp;</td>
			<td style="width: 289px"><input name="Submit1" type="submit"
			value="'.$Language['text_send'].'" /></td>
		</tr>
		<tr>
			<td style="width: 191px">&nbsp;</td>
			<td style="width: 289px">'.$Language['text_oublie_pass'].'.</td>
		</tr>
	</table>
</form>';
?>
</body>

</html>
Voilà un exemple simple très facile à faire évoluer.
Bien que HS par rapport à la suite du topic (surtout vers la fin lol) Bonne idée ce script,
je pense qu'il peut être aprécié ;)

@+ ;)

ViPHP
ViPHP | 2291 Messages

12 sept. 2009, 19:16

Merci :wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.