JeuWeb - Crée ton jeu par navigateur
Multilingue - les solutions - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Multilingue - les solutions (/showthread.php?tid=551)



Multilingue - les solutions - Yoda54 - 09-05-2008

Bonsoir,

Je me pose actuellement la question sur les possibilités offertes par le php pour faire des sites multilingues.
Vous me direz, tout est prévu à la base et ça s'appelle gettext. Cependant, je vois un défaut majeur à cette possibilité, c'est l'impossibilité d'avoir une interface permettant de traduire "en live".
D'où ma question, quelles solutions pour le multilingue avec php tout en se gardant la possibilité d'une traduction directe?
Utilisation de constantes? Table SQL dédiée :wowowow:? Autres?


RE: Multilingue - les solutions - Eluox - 09-05-2008

Pour dev mes site avec plusieurs langue, j'utilise un petite système,

Les arrays.

J'ai un dossier language, qui contient des sous dossier ( fr, en ect )
Dedan j'ai,
Code PHP :
<?php 
$lang
['home'] = 'Accueil';
$lang['stats'] = 'Statistiques';
$lang['faq'] = 'FAQ';
$lang['contact'] = 'Contact';

Je recupère la langue du navigateur, si le gars n'a pas de SESSION de langue. et j'inclu le sous dossier correspondant.

Recuperation du language :
Code PHP :
<?php 
function BrowserLanguage()
{
$language = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$language = strtolower(substr(chop($language[0]),0,2));
return
$language;
}

function
LanguageRecuperation()
{
$result = (isset($_SESSION['lang'])) ? $_SESSION['lang'] : BrowserLanguage();

return
$result;
}

et inclusion
Code PHP :
<?php 
$_SESSION
['lang'] = LanguageRecuperation();
include(
'languages/'.$_SESSION['lang'].'/index.php');

Biensur, l'exemple de tout a l'heure peut etre mis dans un sous dossier en, avec dedans :

Code PHP :
<?php 
$lang
['home'] = 'Homel'; //Par exemple

Cordialement,


RE: Multilingue - les solutions - Sephi-Chan - 09-05-2008

J'avais ouvert un sujet sur la question qui s'était révélé très intéressant (car apportant plein de réponses de divers intervenant). Il serait intéressant d'en faire la synthèse.

El[u]ox t'as donné une piste pour le contenu statique. Je vais t'en donner une pour le contenu dynamique.

Imaginons que tu travailles sur un jeu de rôle où es joueurs peuvent avoir des objets. Tu as donc une table objets avec les champs suivants :
  • Id (clé primaire)
  • Nom

Il faudra donc traduire le champ Nom.

Pour cela, il faudra une table d'internationalisation : nommons-la objets_i18n qui contiendra les champs :
  • Id
  • Nom
  • Langue

Admettons ensuite que tu ai 2 objets dans ta table objets :
  • 1, Heaume de bataille de porteguerre
  • 2, Lames d'épaules de destructeur

Ta table de localisation contiendra alors quelque chose comme cela :
  • 1, Warbringer Battle-Helm, en
  • 1, Yelmo de batalla belisario, es
  • 2, Destroyer Shoulderblades, en

Chaque objet peut donc avoir plusieurs traduction, différenciée par une locale (fr pour le français, es pour l'espagnol, en pour l'anglais, etc. Tu peux avoir autant de langue que tu le souhaites.

Code :
SELECT O.id,
IF(O2.nom IS NULL, O.nom, O2.nom) AS nom
FROM objets O
LEFT JOIN objets_i18n O2 ON O2.id = O.id AND O2.langue = 'en';

Ainsi, la traduction est transparente (le champ garde le même nom : nom). La locale (en) est donnée par une variable de session par exemple (que tu auras déterminé précédemment).

S'il n'y a pas de traduction pour cet objet ou pour cette langue, alors le nom par défaut (celui indiqué dans la table objets sera utilisé, le jeu reste ainsi utilisable même si tout n'est pas traduit.


Sephi-Chan


RE: Multilingue - les solutions - naholyr - 09-05-2008

Bonne mémoire Sephi Wink


RE: Multilingue - les solutions - Yoda54 - 09-05-2008

Merci de vos réponses.
Je ne vais pas être très crédibles mais j'avais fait une recherche avant d'ouvrir ce sujet et avait été étonné qu'il n'est pas encore été traité. Avant le multilingue, il va peut-être falloir que je m'occupe de l'utilisation de la fonction recherche :heuuu:

Edit: la recherche avec i18n est un peu plus fructueuse
Le sujet de Sephi-Chan: C'est ici
Et un autre avec un très bon lien de naholyr vers le site phpfrance: C'est par là


RE: Multilingue - les solutions - Sephi-Chan - 10-05-2008

naholyr a écrit :Bonne mémoire Sephi Wink
Hey ! Ça m'a beaucoup servi et j'ai beaucoup aimé utiliser cette technique. Ce serait ne pas jouer le jeu que de la garder pour moi. Smile

Pour ma part, le problème vient surtout du contenu statique. Le défaut de l'array, c'est que les vues PHP (ou templates) perdent en clarté… Gettext l'est un peu plus mais il pose d'autres problèmes.


Sephi-Chan


RE: Multilingue - les solutions - Studio Gamboo - 10-05-2008

Problème ardu ^^
Pour ma part j'ai opté pour un fichier xml par langue, interprété par une classe qui va bien.
Il est à noté qu'au delà des débats sur la rapidité fichiers/array/sql, il est surtout très important de lier la localisation avec un cache robuste pour éviter les appels dans tout les sens ^^
Je peut poster la classe en question avec des xml d'exemple si jamais ça intéresse.


RE: Multilingue - les solutions - Roworll - 10-05-2008

Pareil pour moi, j'utilise le XML mais couplé au XSL pour l'interprétation
J'en avais déjà parlé ici pour ceux que ça intéresse.


RE: Multilingue - les solutions - Sephi-Chan - 10-05-2008

Je suis intéressé par la classe dont tu parles, Gamboo. Smile
Ça me permettra de la comparer avec la méthode XSLT.


Sephi-Chan


RE: Multilingue - les solutions - Studio Gamboo - 10-05-2008