OVH Community, votre nouvel espace communautaire.

Bug avec fichier de traduction


ddtddt
09/08/2014, 12h24
Jolie débat sur l'écriture des 'echo' en php :-P

Moi je croyais que c'était que le vendredi AM ce genre de querelle !

Gaston_Phone
16/07/2014, 22h12
Merci NouveauEnVille pour les conseils très clairement expliqués.

NouveauEnVille
16/07/2014, 17h43
Bon je dis juste ça comme ça pour l'anecdote, après chacun fait de la manière avec laquelle il se sent le mieux car de toute façon, toutes les routes mènent à Rome. Mais si on veut travailler proprement et de manière structurée, c'est mieux de ne pas mélanger PHP et HTML. On peut avoir des gabaris (templates) en HTML d'un côté, et le code PHP de l'autre qui va les charger, et insérer les données à l'intérieur.

C'est plus simple d'avoir un fichier avec uniquement du PHP, car cela permet une meilleure lisibilité, évolutivité, et ré-utilisabilité. On range les procédures/classes dans des fichiers séparés, que l'on peut utiliser pour d'autres choses.

Maintenant, pourquoi s'embêter à faire des "echo" de code HTML? Tout simplement parce qu'en PHP on peut mettre des indentations, des espaces, qui rendent le code plus lisible, et donc plus facilement modifiable ou corrigeable. Alors que le code HTML qui en sortira sera bien "minified" sans espaces inutiles.

Par exemple:

Code:
echo '
'; echo "blah blah blah..."; echo '
'; echo 'blih blih blih'; echo '
; echo '
';
Bien sûr sur un tel exemple, il n'y a pas un grand intérêt, mais sur une structure HTML plus complexe, cela permet de voir tout de suite, si on ferme bien les balises aux bons endroits, etc. De plus si on a le même fragment HTML qui se répête on met cela dans une procédure une seule fois.

Sinon pour la petite annecdote, à la place de:

Code:
echo "
".TXT."
";
c'est encore mieux de faire:

Code:
echo '
'; echo TXT; echo '
';
car dans le premier cas, avant de faire la sortie, PHP va devoir créer une zone mémoire temporaire dans laquelle il va concaténer les 3 fragments de texte, avant d'afficher le résultat.

Comme "echo" est une structure de langage (et pas une fonction), ça ne consomme pas de ressources de l'appeler 3 fois à la place d'une. (Par contre, si c'était une fonction, ou une procédure PHP, il serait plus intéressant de ne l'appeler qu'une fois en effet).

Et pour finir, des guillemets simples autant que possible. En effet, aucun traitement n'est effectué par PHP lors de l'usage de guillemets simples. En revanche lorsqu'on utilise des guillemets doubles, PHP doit, dans un premier temps, scanner toute la chaîne de caractères, afin de déterminer si des variables y ont été incluses, afin de les remplacer par leurs valeurs.

Attention, je le répète, c'est juste un conseil personnel, pour travailler proprement. Mais PHP permet de faire tout quasi n'importe comment, donc tant qu'on arrive au résultat, chacun peut faire comme il le souhaite bien entendu, c'est juste comme ça. Et bien sûr tout dépend de la taille et de la complexité du projet que l'on doit développer.

jimmyneutron
16/07/2014, 00h12
Je pense qu'il ne faut pas débattre de ça… La doc est claire…

echo n'est pas vraiment une fonction, cela fait que vous n'êtes pas obligé d'utiliser des parenthèses… echo dispose aussi d'une version courte, où vous pouvez faire suivre la balise PHP ouvrante d'un signe égal
Avec ou sans la parenthèse, avec ou sans le short_open_tag… ça fonctionne.

Gaston_Phone
15/07/2014, 19h07
Citation Envoyé par Daniel60
Tu peux travailler en heredoc par exemple. Mais la portabilité n'est pas non plus garantie.
Sinon echo("
TXT
");
Hum! Hum! Je n'ai jamais mis de parenthèses après echo.

J'aurais écrit : echo "
".TXT."
";

Daniel60
15/07/2014, 13h39
Tu peux travailler en heredoc par exemple. Mais la portabilité n'est pas non plus garantie.
Sinon echo("
TXT
");

jimmyneutron
15/07/2014, 13h24
Citation Envoyé par NouveauEnVille
c'est d'ailleurs pour cette raison que les "vrais" développeurs en PHP (ou autre langage) ne font pas ainsi.
Comment font-ils ?

NouveauEnVille
14/07/2014, 23h54
Citation Envoyé par jimmyneutron
Sans faire débat :/.../ Pour moi, question lisibilité il n'y a pas photo.
Oui tout à fait d'accord, les deux sont illisibles, c'est d'ailleurs pour cette raison que les "vrais" développeurs en PHP (ou autre langage) ne font pas ainsi.

Daniel60
07/07/2014, 11h22
Citation Envoyé par jimmyneutron
C'est la version PHP Version 5.4.29 déployée par OVH en mutualisé sur son offre Performance. Je ne sais pas quels modules additionnels il peut y avoir.
Par exemple: http://cluster002.ovh.net/infos/test.php54 ou autre cluster

Sans faire débat :

Code PHP:
vs
Code PHP:
echo (TXT); ?>
Pour moi, question lisibilité il n'y a pas photo. Et puis quel serait l'intérêt de cet "alias" si ce n'est pour raccourcir l'écriture du code au sein d'un autre langage ?
Pour la portabilité sur un autre serveur qui ne prendrait pas les short tags.

jimmyneutron
07/07/2014, 10h34
C'est la version PHP Version 5.4.29 déployée par OVH en mutualisé sur son offre Performance. Je ne sais pas quels modules additionnels il peut y avoir.

Sans faire débat :

Code PHP:
vs
Code PHP:
echo (TXT); ?>
Pour moi, question lisibilité il n'y a pas photo. Et puis quel serait l'intérêt de cet "alias" si ce n'est pour raccourcir l'écriture du code au sein d'un autre langage ?

NouveauEnVille
05/07/2014, 15h46
Ça fonction très bien, ce n'est pas un problème. Cependant, c'est à éviter en effet, cela nuit à la lisibilité du code et ça n'apporte aucune amélioration des performances.

Par contre, si ton problème est toujours d'actualité, utilises-tu des modules additionnels? C'est du mod_php, php-fpm ?

Gaston_Phone
03/07/2014, 06h03
Je me méfie toujours des implicites.

jimmyneutron
03/07/2014, 03h22
? Pas besoin... Avec

http://www.php.net/manual/fr/function.echo.php

Gaston_Phone
03/07/2014, 03h19
Où est l'écho?

jimmyneutron
03/07/2014, 02h04
Peux-tu m'expliquer ce que veut dire "passage par référence de variables à des procédures" ?

La seule façon dont j'utilise les constantes est pour générer ma page. Ex:

Code PHP:


<span style="color: #0000CC"><?=TXT_TITRE?></span>





NouveauEnVille
02/07/2014, 23h42
Il faut faire attention aussi, si tu utilises "le passage par référence" de variables à des procédures. Si une procédure attend une référence et que tu lui passes une constante, les conséquences sont imprévisibles.

jimmyneutron
01/07/2014, 23h23
PHP Version 5.4.29
Il est arrivé que ça change la casse de certaines lettres uniquement.
Parfois des mots entiers d'une phrase ont disparu.
Je ne connaissais pas "const" pour définir une constante.
Je vais créer des fichiers indépendants "lang-FR", "lang-EN"… et je vais redéfinir mes constantes.
En espérant que le problème ne revienne pas.

Gaston_Phone
01/07/2014, 18h52
Citation Envoyé par jimmyneutron
Je ne comprends pas ta remarque…
Rassure-toi, moi aussi je ne comprend pas ton problème.

NouveauEnVille
01/07/2014, 17h01
Citation Envoyé par jimmyneutron
Je suis certain à 100% qu'il n'y a pas de bug dans le code. Il n'y a aucun $$, tous les noms des constantes sont bien différents, … Mais le problème arrive bien aléatoirement. Rarement, mais ça arrive.
Et si tu utilises la commande "const" à la place de "define"?

Code:
const TXT_ABC = "Salut, je m'appelle Jimmy Neutron"  ;
Quelle version de PHP ? Des modules additionnels? Il y a peut-être un débordement mémoire... Ca ne change que des minuscules/majuscules? ou bien tu as aussi des lettres totallement autres?

jimmyneutron
01/07/2014, 16h54
Citation Envoyé par NouveauEnVille
Si ça ne "varie" pas, ce sont donc des constantes, ça tombe sous le sens...
Évidemment

Citation Envoyé par NouveauEnVille
Maintenant pour ton problème de variables qui changent toutes seules, c'est qu'il y a un problème au niveau de ton code. Tu dois t’emmêler les pinceaux quelque part, que ce soit avec des guillemets simples ou doubles, des doubles $$, des trucs de ce genre.
Je suis certain à 100% qu'il n'y a pas de bug dans le code. Il n'y a aucun $$, tous les noms des constantes sont bien différents, … Mais le problème arrive bien aléatoirement. Rarement, mais ça arrive.

À la base mon fichier de traduction contient une constante, par exemple :

Code PHP:
define"TXT_ABC""Salut, je m'appelle Jimmy Neutron" ); 
Lors que j'utilise cette constante dans ma page :

Code PHP:
echo ( "Blablabla… " TXT_ABC " …Blablabla" ); 
Il m'est arrivé de voir s'afficher :

Code HTML:
Blablabla… Salut, je m'APElle Neutron …Blablabla
Bref… pas de logique apparente.

Une autre phrase s'afficherait, rien ne s'afficherait, une erreur s'afficherait… je comprendrais. Mais là c'est vraiment n'importe quoi.
D'où ma demande dans ce forum et mes interrogations quand à un possible bug à cause d'une trop grande charge de serveur ou à une utilisation inappropriée des variables/constantes.

Citation Envoyé par Gaston_Phone
Pourquoi ne pas utiliser des constantes telles que $toto, $tata ou si tu es Italien $pipo ?
Je ne comprends pas ta remarque…

Gaston_Phone
29/06/2014, 12h46
Pourquoi ne pas utiliser des constantes telles que $toto, $tata ou si tu es Italien $pipo ?

NouveauEnVille
29/06/2014, 12h06
Si ça ne "varie" pas, ce sont donc des constantes, ça tombe sous le sens... Il faut bien entendu privilégier les constantes aux variables autant que possible. C'est légèrement plus rapide, et la valeur est sûre de ne pas être écrasée à cause du manque de rigueur du programmeur.

De même il vaut mieux éviter d'utiliser "define", c'est une procédure donc bien plus lent que la structure de langage "const".

Maintenant pour ton problème de variables qui changent toutes seules, c'est qu'il y a un problème au niveau de ton code. Tu dois t’emmêler les pinceaux quelque part, que ce soit avec des guillemets simples ou doubles, des doubles $$, des trucs de ce genre. Si t'as un exemple, pas trop long, tu peux le poster ici.

jimmyneutron
28/06/2014, 15h59
le fait que ça se mélange ne me semble pas pouvoir venir "aléatoirement" mais plutôt de problème dans les noms de tes defines. En tout ça, ça semblerait bizarre que ça se mélange.
C'est justement ça qui me rend dingue. Les noms des constantes sont tous différents. De plus le problème vient bien de manière totalement aléatoire.

Dans ton exemple, si tu n'es ni Français, ni Anglais, ça tombe dans le vide.
Pour ça je fais un contrôle pour m'assurer que si une langue n'est pas définie, le français s'affichera par défaut.

Je vais opter pour la solution fichiers séparés. Mais je me pose la question s'il vaut mieux utiliser les constantes ou un tableau pour définir mes traductions.

pl.lamballais
09/06/2014, 00h05
Bonjour,

1) en terme de code, le fait que ça se mélange ne me semble pas pouvoir venir "aléatoirement" mais plutôt de problème dans les noms de tes defines. En tout ça, ça semblerait bizarre que ça se mélange. Dans ton exemple, si tu n'es ni Français, ni Anglais, ça tombe dans le vide.
2) en terme de conception, ça ne me semble pas une bonne idée de faire comme ça. En effet, si tu dois traduire dans une autre langue, tu vas devoir modifier un fichier qui est en cours d'usage. Il me semblerait donc beaucoup plus logique d'avoir des fichiers séparés, comme dans les CMS de type PHPNuke.
Donc par exemple:
// Les textes en Français dans langue/francais.php
define( "TXT_VAR1", "TEXT1_fr" );
define( "TXT_VAR2", "TEXT2_fr" );
define( "TXT_VAR3", "TEXT3_fr" );
?>

// Les textes en Anglais dans langue/anglais.php
define( "TXT_VAR1", "TEXT1_UK" );
define( "TXT_VAR2", "TEXT2_UK" );
define( "TXT_VAR3", "TEXT3_UK" );
?>

Au début de son script, tu testes si on doit être en FR ou en UK et tu includes le fichier correspondant.
L'autre avantage de ça c'est que si ton fichier "francais.php" est abimé (par ex.) , il ne fera pas planter ton site pour les utilisateurs Anglais.

Amitiés
FL

jimmyneutron
28/05/2014, 10h46
Bonjour,

Il y a vraisemblablement plusieurs approches pour les sites multilingues.

Initialement j'ai opté pour un fichier PHP contenant l'ensemble des variables utiles :

Code PHP:
if ( $langue == "fr" )
{
 
define"TXT_VAR1""TEXT1_fr" );
 
define"TXT_VAR2""TEXT2_fr" );
 
define"TXT_VAR3""TEXT3_fr" );
}
else if ( 
$langue == "en" )
{
 
define"TXT_VAR1""TEXT1_en" );
 
define"TXT_VAR2""TEXT2_en" );
 
define"TXT_VAR3""TEXT3_en" );

Bizarrement il arrive que des chaines ne sortent pas du tout comme prévu. Des mots se mélangent. Des espaces s'insèrent ici et là. Toujours sans logique apparente. De façon aléatoire.

Cette méthode poserait-elle problème au niveau de la charge du serveur ?

J'utilise un MUTU chez OVH. PHP 5.2.17.

Merci pour votre aide.