OVH Cloud OVH Cloud

Comment gerez vous l'internationalisation ?

10 réponses
Avatar
charly
Bonjour à tous et à toutes,

Je me pose une question de conception :
Comment gèrez vous les msg d'erreurs en plusieurs langues ?
Actuellement j'hésite entre plusieurs solutions :

1 stocke dans la Db genre
tableErreur
idMessage
TexteEnLangueFr
TexteEnLangueen
....
2
$ErreurFr[0] = "Login et/ou Mot de passe incorrects";
$ErreurEn[0] = "Incorrects Login ";


3
2 langues
$Erreurs[0][0] = "Login et/ou Mot de passe incorrects";
$Erreurs[0][1] = "Incorrects Login ";

Pour être franc, aucune solution en me convient actuellement donc je
suis preneur de toute autre solution.

Merci pour vos avis

10 réponses

Avatar
Hugues Peeters
Bonjour Charly,

Tout d'abord, je vous conseille d'utiliser des clés plus explicite que
des clés numériques, sans quoi vous allez vite vous perdre dans la
maintenance du code. Personnellement, je travaille de la manière
suivante. Je définis un ensemble de variable devant contenir les
messages dans l'interface.

$string['incorrect_login']
$string['file_missing' ]

etc.

Ces variables sont initialisées au démarrage du script (à partir d'un
fichier ou d'une base de donnée) en fonction de la langue choisie par
l'utilisateur.

Exemple avec une base de donnée :

$result_pt = mysql_query( "SELECT key, content FROM translation
WHERE key IN ('incorrect_login', 'file_missing') AND language '$userLanguage'");

while ($result = mysql_fetch_array($result_pt) {
string[$result['key']] = $result['content'];
}

Exemple avec des fichiers :

$includeFile = $userLanguage; include
include "application/translation/$includeFile";

Un point important est de proposer une langue mère qui remplit les
trous au cas où une traduction serait incomplète (en général, on
choisit l'Anglais pour ça). On travaille alors en deux passes. La
première initialise les variables avec la langue par défaut, la
deuxième surcharge ces variables avec la langue choisie par
l'utilisateur.

J'ai noté un jour dans une application une implémentation
intéressante. Les clés du tableau de string était faites de phrases
entières.

$string ['Your login is wrong']

Si une traduction n'était pas trouvé pour cette clé là. La clé
devenait le contenu. Ca rendait le code très lisible. Mais par contre,
PHP devait mouliner sec du coté des tables de hashage...

Je me pose une question de conception :
Comment gèrez vous les msg d'erreurs en plusieurs langues ?
Actuellement j'hésite entre plusieurs solutions :

1 stocke dans la Db genre
tableErreur
idMessage
TexteEnLangueFr
TexteEnLangueen
....
2
$ErreurFr[0] = "Login et/ou Mot de passe incorrects";
$ErreurEn[0] = "Incorrects Login ";


3
2 langues
$Erreurs[0][0] = "Login et/ou Mot de passe incorrects";
$Erreurs[0][1] = "Incorrects Login ";

Pour être franc, aucune solution en me convient actuellement donc je
suis preneur de toute autre solution.


Avatar
bimbo
moi j'ai des fichiers nommées genre fr.lang.php, uk.lang.php qui chaqu'un
contiennent un tableau associatif :

$errMsg['badDate'] = "Bad Date"; dans le fichier uk.lang.php
et
$errMsg['badDate'] = "Date incorrect"; dans le fichier fr.lang.php

j'ai fr ou uk en session selon le type de connection dans la variable nommée
$lang

et je fais un include($lang."lang.php");

c'est une solution pê pas la meilleur mais qui marche.

--
E7Team
http://www.expo7.com - Exposez Vos Photos
"charly" a écrit dans le message de
news:c0gcq8$ti9$
Bonjour à tous et à toutes,

Je me pose une question de conception :
Comment gèrez vous les msg d'erreurs en plusieurs langues ?
Actuellement j'hésite entre plusieurs solutions :

1 stocke dans la Db genre
tableErreur
idMessage
TexteEnLangueFr
TexteEnLangueen
....
2
$ErreurFr[0] = "Login et/ou Mot de passe incorrects";
$ErreurEn[0] = "Incorrects Login ";


3
2 langues
$Erreurs[0][0] = "Login et/ou Mot de passe incorrects";
$Erreurs[0][1] = "Incorrects Login ";

Pour être franc, aucune solution en me convient actuellement donc je
suis preneur de toute autre solution.

Merci pour vos avis


Avatar
Guillaume Brocker
charly wrote:
Bonjour à tous et à toutes,

Je me pose une question de conception :
Comment gèrez vous les msg d'erreurs en plusieurs langues ?
Actuellement j'hésite entre plusieurs solutions :

1 stocke dans la Db genre
tableErreur
idMessage
TexteEnLangueFr
TexteEnLangueen
....
2
$ErreurFr[0] = "Login et/ou Mot de passe incorrects";
$ErreurEn[0] = "Incorrects Login ";


3
2 langues
$Erreurs[0][0] = "Login et/ou Mot de passe incorrects";
$Erreurs[0][1] = "Incorrects Login ";

Pour être franc, aucune solution en me convient actuellement donc je
suis preneur de toute autre solution.

Merci pour vos avis


Personnellement, je suggère d'utiliser l'outil *GNU gettext*. Il y a un
module PHP qui permet de s'en servir.

Plutôt que de faire un long discours sur le fonctionnement de cet outil,
voir les liens suivants:
<http://www.php.net/manual/en/ref.gettext.php>
<http://www.gnu.org/software/gettext/manual/index.html>

Je ne l'ai enore jamais utilisé dans php. Mais en tout cas, cet outil
fonctionne à merveille dans mes programmes C++.

--
Guillaume Brocker

Avatar
charly
Hugues Peeters wrote:
Bonjour Charly,

Tout d'abord, je vous conseille d'utiliser des clés plus explicite que
des clés numériques, sans quoi vous allez vite vous perdre dans la
maintenance du code. Personnellement, je travaille de la manière
suivante. Je définis un ensemble de variable devant contenir les
messages dans l'interface.

$string['incorrect_login']
$string['file_missing' ]

etc.

Ces variables sont initialisées au démarrage du script (à partir d'un
fichier ou d'une base de donnée) en fonction de la langue choisie par
l'utilisateur.

Exemple avec une base de donnée :

$result_pt = mysql_query( "SELECT key, content FROM translation
WHERE key IN ('incorrect_login', 'file_missing') AND language > '$userLanguage'");

while ($result = mysql_fetch_array($result_pt) {
string[$result['key']] = $result['content'];
}

Finalement, voici la solution retenue :)

Une base de données avec un msg dans chaque langue, la table contient
autant de colonnes que de langue.

un fichier de constantes genre : INCORRECT_LOGIN qui font la
correspondance avec les id de la table.
Et je charge tous les msg au début du script dans la langue choisie par
le user (je recharge s'il change de lanue bien sûr)

Je rejoins donc ce que vous proposez (j'aurais du attendre votre
réponse, mais trop impatient d'avoir une réponse :) )

Merci bcp cpdt !

Avatar
Stephane
"charly" a écrit
Bonjour à tous et à toutes,

Je me pose une question de conception :
Comment gèrez vous les msg d'erreurs en plusieurs langues ?
Actuellement j'hésite entre plusieurs solutions :

1 stocke dans la Db genre
tableErreur
idMessage
TexteEnLangueFr
TexteEnLangueen
....
2
$ErreurFr[0] = "Login et/ou Mot de passe incorrects";
$ErreurEn[0] = "Incorrects Login ";


3
2 langues
$Erreurs[0][0] = "Login et/ou Mot de passe incorrects";
$Erreurs[0][1] = "Incorrects Login ";

Pour être franc, aucune solution en me convient actuellement donc je
suis preneur de toute autre solution.

Merci pour vos avis


Salut,

J'ai un fichier par langue comme suit:

$textes_script = array (
"bouton_annuler" => "Annuler",
"bouton_envoyer" => "Envoyer");


Puis l'appel dans la page se fait comme suit:

include("include/class.multilingue.php");
$tx = new TextesMultilingues("lang/text_". $langue .".php");

echo $tx->tmlValeur("bouton_envoyer");

C'est tout et c'est extensible au nombre de langue que tu désires.

Tous ce trouve sur le lien suivant:

http://www.aidejavascript.com/article117.html



Stéphane
La souplesse d'esprit permet de s'adapter dans toutes circonstances.

http://www.velo-passion.com pour les fans de vélo
http://www.lorimier.com/chemin-des-cretes-du-jura une ballade à pied d'une semaine à 2

Avatar
Hugues Peeters
Personnellement, je suggère d'utiliser l'outil *GNU gettext*. Il y a un
module PHP qui permet de s'en servir.

Je ne l'ai enore jamais utilisé dans php. Mais en tout cas, cet outil
fonctionne à merveille dans mes programmes C++.


Gnu gettext à l'air intéressant en effet. Mais cela ne pose-t'il pas des
problèmes de portabilité ?

Cordialement,

Hugues Peeters


Avatar
Guillaume Brocker
Hugues Peeters wrote:

Gnu gettext à l'air intéressant en effet. Mais cela ne pose-t'il pas des
problèmes de portabilité ?


gettext existeaussi bien pour les systèmes unix/linux ainsi que sous
windows. Voici d'ailleur deux liens pour la version windows:

<http://ftp.gnu.org/pub/gnu/gettext/gettext-runtime-0.13.1.bin.woe32.zip>
<http://ftp.gnu.org/pub/gnu/gettext/gettext-tools-0.13.1.bin.woe32.zip>

--
Guillaume Brocker

Avatar
nospam
Guillaume Brocker wrote:

gettext existeaussi bien pour les systèmes unix/linux ainsi que sous
windows. Voici d'ailleur deux liens pour la version windows:


Je pense que Hugues parlait notamment de la disponibilité de cette
extension chez les hébergeurs mutualisés par exemple.

--
Romuald Brunet, ICQ 33033393, http://mog.online.fr

Remplacez nospam par mon prénom pour me contacter par email

Avatar
Michel BILLAUD
charly writes:

Finalement, voici la solution retenue :)
Une base de données avec un msg dans chaque langue, la table contient
autant de colonnes que de langue.


Houla, c'est pas bon. le jour où on ajoute une langue ...

--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)

Avatar
Thibaut Allender

Finalement, voici la solution retenue :)
Une base de données avec un msg dans chaque langue, la table contient
autant de colonnes que de langue.


Houla, c'est pas bon. le jour où on ajoute une langue ...


...on ajoute un champ

--
thibaut allender | freelance | web|system developer|designer
+32 496 26 75 76 | http://capsule.org