OVH Cloud OVH Cloud

PHP & sites en Japonais

19 réponses
Avatar
David
Bonjour,

Je suis actuellement en train de réaliser un site multilingue
FR/US/Japonais.

Le paramètre de langue est transmis en session et, en début de chaque page,
je dispose du code suivant pour charger le bon charset :

if ($_SESSION["langue"] == "jp") {
echo "<meta http-equiv=\"Content-Type\" content=\"text/html;
charset=Shift_JIS\">\n";
} else {
echo "<meta http-equiv=\"Content-Type\" content=\"text/html;
charset=iso-8859-1\">";
}

Les contenus en trois langues sont gérés par un seul et même script par
l'intermédiaire de trois bloc de if successifs :

if ($_SESSION["langue"] == "fr") {
bla bla en fr
}

if ($_SESSION["langue"] == "jp") {
bla bla en us
}

if ($_SESSION["langue"] == "jp") {
bla bla en jp avec les signes qui vont bien
}

Je me heurte à un petit souci :

Quand je passe de la langue français ou de la langue anglaise vers le
japonais, il m'arrive souvant d'avoir une page totalement blanche.
Internet Explorer me donne aucune source.
Si j'appuie sur F5 afin de rafraichir la page, celle si s'affiche
correctement.

Quelqu'un aurait il eu ce souci ? Il y a t'il une config particulière au
niveau du PHP

Précision : Suite à des tests le problème ne se pose pas pour des fichiers
HTML classiques.

D'avance merci pour vos avis !
David

10 réponses

1 2
Avatar
Olivier Miakinen

Je suis actuellement en train de réaliser un site multilingue
FR/US/Japonais.

Le paramètre de langue est transmis en session et, en début de chaque page,
je dispose du code suivant pour charger le bon charset :

if ($_SESSION["langue"] == "jp") {
echo "<meta http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">n";
} else {
echo "<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">";
}


Le paramètre meta c'est déjà pas mal, mais je te conseille vivement
d'envoyer l'info par header() dans les entêtes HTTP.

Les contenus en trois langues sont gérés par un seul et même script par
l'intermédiaire de trois bloc de if successifs :

if ($_SESSION["langue"] == "fr") {
if ($_SESSION["langue"] == "jp") {
if ($_SESSION["langue"] == "jp") {


Je suppose que l'un des trois est « en » au lieu de « jp ». Par
ailleurs, pourquoi utiliser « jp » au lieu du code standard à deux
lettres défini par ISO-639, à savoir « ja » ?

Voir par exemple :
http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/annexe/iso-639.html

Je me heurte à un petit souci :

Quand je passe de la langue français ou de la langue anglaise vers le
japonais, il m'arrive souvant d'avoir une page totalement blanche.
Internet Explorer me donne aucune source.
Si j'appuie sur F5 afin de rafraichir la page, celle si s'affiche
correctement.


Est-ce que quelque chose dans l'URL change, ou bien le navigateur
peut-il croire que la page n'a pas changé ?

Aussi, tu as testé dans IE, mais comment se comportent les autres
navigateurs ?

Enfin, quand tu as le problème, est-ce que le code PHP est exécuté ?


Cordialement,
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
CrazyCat
David wrote:
Les contenus en trois langues sont gérés par un seul et même script par
l'intermédiaire de trois bloc de if successifs :
if ($_SESSION["langue"] == "fr") {
bla bla en fr
}
if ($_SESSION["langue"] == "jp") {
bla bla en us
}
if ($_SESSION["langue"] == "jp") {
bla bla en jp avec les signes qui vont bien
}


Je chipote, mais un switch($_SESSION["langue"]) serait meilleur, te
permettant d'avoir un default.

Quand je passe de la langue français ou de la langue anglaise vers le
japonais, il m'arrive souvant d'avoir une page totalement blanche.
Internet Explorer me donne aucune source.
Si j'appuie sur F5 afin de rafraichir la page, celle si s'affiche
correctement.
Quelqu'un aurait il eu ce souci ? Il y a t'il une config particulière au
niveau du PHP


Comment réalise-tu ce changement? j'ai eu un problème similaire (mais
avec des cookies) tout simplement parce que je modifiais bien la valeur
de mon cookie mais ne la relisais pas.
Je te conseille d'extraire $langue ($langue = $_SESSION["langue"];)de ta
session avant de faire les traitements, ça peut éviter des
fonctionnements hératiques.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
David
Bonsoir,

Le paramètre meta c'est déjà pas mal, mais je te conseille vivement
d'envoyer l'info par header() dans les entêtes HTTP.


Comment je fais ?
Je n'ai pas trouvé d'informations pour passer des infos de ce type par
header().

Je suppose que l'un des trois est « en » au lieu de « jp ». Par
ailleurs, pourquoi utiliser « jp » au lieu du code standard à deux
lettres défini par ISO-639, à savoir « ja » ?


Parce que je reprend en partie un ancien développement...

Est-ce que quelque chose dans l'URL change, ou bien le navigateur
peut-il croire que la page n'a pas changé ?


Rien ne change dans l'URL. J'ai bien pensé à cela mais cela se produit même
si je fais volontairement changer la page en faisant pleins d'echos de
valeurs aléatoires. Vu que je ne peux accéder à la source (la fonction dans
le menu ou dans le clic droit ne me renvoie pas de resultat c.a.d. ne me
lance pas notepad) j'ai plutôt l'impression que quelque chose de "tronqué"
est renvoyé au navigateur.

Aussi, tu as testé dans IE, mais comment se comportent les autres
navigateurs ?


Je teste sur Firefox demain, étant en déplacement, je n'ai qu'une machine
sous XP :-)

Enfin, quand tu as le problème, est-ce que le code PHP est exécuté ?


Rien est affiché, pas d'accès à la source, je serait tenté de dire que
non... non ?

Merci pour ta réponse.

David

Avatar
(¯`·..Yttrium ...·´¯)
Le 04/04/2005 20:59, David nous disait:
Je teste sur Firefox demain, étant en déplacement, je n'ai qu'une machine
sous XP :-)



Bjr,
Pour info, Firefox fonctionne parfaitement sous XP ;-)


--
------------------------------------------------------------------------------
(¯`·..Yttrium ...·´¯)
Ouvrez vos yeux : http://photo.anothersounds.com
Pour me répondre en privé: Passez un coup de balai
------------------------------------------------------------------------------

Avatar
David
Pour faire suite au souci, il semble ne pas se produitre avec Firefox (aussi
bien sous linux que sur XP)...

Pourrais tu me dire comment mettre l'info de charset dans les header à
l'aide de header() ?
Après recherche je n'ai rien trouvé la dessus.

David
Avatar
David
Je sais mais j'évite d'installer trop de choses sous XP ;-)
Avatar
loufoque
David a dit le 04/04/2005 à 15:30:

echo "<meta http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">n";



Comme http-equiv l'indique, cette balise a pour but d'être un équivalent
des entêtes HTTP, mais en moins bien. C'est surtout utile pour visionner
des documents html en dehors d'http.
C'est donc, d'après son nom, "équivalent" à envoyer une entête http
"Content-Type" qui a pour valeur "text/html; charset=Shift_JIS".
Ce qui se fait très bien avec la fonction header comme ceci :
header('Content-Type', 'text/html; charset=Shift_JIS');

Il assez drôle de constater que les entêtes http, pourtant très
importantes, ne sont pas gérés par la plupart des scripts php. Sûrement
parce que les programmeurs php ne connaissent pas bien HTTP, ce qui est
pourtant pour moi un pré-requis pour se lancer dans une application se
basant sur ce protocole.

Autre chose, je serais curieux de voir comment tu gères les données en
Shift_JIS, qui est un charset à manipuler avec attention car non
compatible ASCII.

Avatar
Cleo
Japonais.
charset=Shift_JIS

FR/US
charset=iso-8859-1


Salut, après quelques recherches il ressort que:
- iso-8859-1 est en encodage monooctet (1glyph = 1octet)
- Shift_JIS est en encodage multioctets (1glyph = 2octets)

Du coup j'ai bien du mal à comprendre comment tu peux faire entrer ces 2
types de codage dans un seul fichier qui lui même est encodé d'une certaine
façon (dépendante de l'editeur). Utilise-tu mbstring ? si oui comment ?

Vu la différence, tu dois obligatiorement spécifier l'encodage dans le
header HTTP sous peine de plantange lors de l'interprétation du flux pas le
navigateur.
header("Content-type: text/html; charset=SHIFT_JIS");
header("Content-type: text/html; charset=ISO-8859-1");

Mais tu abortis finalement à une impasse car, en faisant ça, tout le flux
que tu transmets doit être encodé comme indiqué, y compris la structure du
document HTML, ce qui n'est pas le cas vu ta façon de procéder.

La SEULE SOLUTION qui reste à ta disposition, est d'utiliser un encodage te
permettant d'embarquer toutes les langues c-à-d UTF-8. Mais attention tout
doit être UTF-8, tes fichiers php/html ..., les indications meta, les
headers ... les valeurs extraites de ta base ... et surtout ton editeur de
code !.

Bon courage.
--
Cléo.

Avatar
gorrk
Pour faire suite au souci, il semble ne pas se produitre avec Firefox (aussi
bien sous linux que sur XP)...

Pourrais tu me dire comment mettre l'info de charset dans les header à
l'aide de header() ?
Après recherche je n'ai rien trouvé la dessus.

David


Exactement comme dans la balise meta http-equiv :
header('Content-Type: text/html; charset=UTF-8');

Avatar
loufoque
Cleo a dit le 06/04/2005 à 15:35:

La SEULE SOLUTION qui reste à ta disposition, est d'utiliser un encodage te
permettant d'embarquer toutes les langues c-à-d UTF-8.


Ce n'est pas la seule solution.
On peut par exemple utiliser EUC-JP qui est compatible ASCII, et donc on
peut alors écrire des bouts de html ou autres éléments globaux en ASCII
pour que ça passe sur les deux encodages. Quoique de toutes façons, sjis
a quand même un grand bout d'ASCII donc on devrait pouvoir bidouiller et
s'en sortir.

On peut aussi, dans une optique plus généraliste, convertir en leur
équivalent les données ASCII pour les encodages non ASCII.

Enfin on peut utiliser des références numériques Unicode dans un
document ISO-8859-1 pour insérer n'importe quel caractère sans passer
par utf-8.

1 2