Plusieurs langues pour un site

cs_depression Messages postés 100 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 13 juillet 2009 - 8 août 2006 à 15:36
YEBOKOLO Messages postés 46 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 13 septembre 2010 - 14 août 2006 à 18:51
Salut tout le monde!


Voila, pour un site, je cherche à mettre un choix de langues : Français et Anglais pour l'instant.


Bien évidemment, je ne compte pas tout coder deux fois.


Comment puis-je faire?


La solution que j'ai trouvé pour l'instant est de mettre toutes les
chaînes de caractères dans une classe ou une interface de langue, mais
n'existerait-il pas mieux?


Merci d'avance!

8 réponses

cs_depression Messages postés 100 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 13 juillet 2009
8 août 2006 à 15:53
Mouais.


A la réflexion, je préfère rester sur mon idée de classe et d'interface, c'est beaucoup moins lourd qu'un SGBDR.


Sinon, je viens d'y penser: autant utiliser un fichier XML!


Bon, je teste ce soir!
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 août 2006 à 16:01
"Sinon, je viens d'y penser: autant utiliser un fichier XML!"
Tu vas faire sourire Mala avec un truc comme ca :p
0
cs_depression Messages postés 100 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 13 juillet 2009
8 août 2006 à 16:05
Gne???


Pour quelle raison?


Ce n'est pas une bonne idée?
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 août 2006 à 17:51
Mala est un fervant défenseur du XML :p
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 août 2006 à 18:18
Hello,
héhé...

cherche dans mes codes, tu verras que ça marche pas mal :
- j'ai un code exemple très basique : exemple de site multilingue avec xml...un truc dans le genre
- et j'ai un code localisé (un peu plus complexe) basé sur le même principe : classdoc, documentation automatique de classes et de fonctions.
0
franco_se Messages postés 151 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 juillet 2018 2
9 août 2006 à 21:12
pq ne pas simplement faire 2 fichiers french.php et english.php contenant toutes les phrases sous forme d'un tableau ( par ex $lang['hello'] = "Bonjour" ) ou de constantes ( define("_HELLO", "Bonjour").

Pour selectionner la langue, il suffit de creer un cookie ac le nom de la langue choisi.
Pour appeller le bon fichier, il suffit de d'un code du type

$settings['default_langue'] = "french";
if (isset($_COOKIE['perso_langue']) and $_COOKIE['perso_langue'] != $settings['langue'] and file_exists("language/".$_COOKIE['perso_langue'].".php") )
{ include("language/".$_COOKIE['perso_langue'].".php");
}else{
include("language/".$settings['default_langue'].".php");
}

c'est sur, ça vaut pas de XML ms ça marche, et c'est simple ..........
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 août 2006 à 09:13
Crois-le ou non, mais c'est beaucoup plus simple avec du xml : tu crées une classe qui gère la localisation, et après, c'est fini. Pour ajouter une langue, il suffit de copier un fichier xml de localisation, et de changer les traductions. C'est nettement plus simple à utiliser qu'une localisation à base de variables. Et quelqu'un ne connaissant rien au php peut le faire.
Mon package de documentation automatique de classes et de fonctions utilise cette classe : (personnalisée, là) :

<?php
class olocale {


 private $aMessages = array ();


 private $locale = '';


 public function __construct ($loc) {
  $this -> locale = $loc;
  $this -> setaMessages ();
 }


 private function  setaMessages () {
  $aFiles = scandir ('locales/'.$this -> locale);
  $aForbid = array ('.', '..');
  $aFiles = array_diff ($aFiles, $aForbid);
  foreach ($aFiles as $file) {
   $cat = substr ($file, 0, strlen ($file) -4);
   $xml = simplexml_load_file('locales/'.$this -> locale.'/'.$file);
   foreach ($xml  as $clef => $val) {
    $this -> aMessages[$cat][$clef] = $val;
   }
  }
 }


 public function getMsg ($cat, $clef) {
  return (string)$this -> aMessages[$cat][$clef];
 }


 public function getLoc () {
  return (string)$this -> locale;
 }
}
?>

Mes fichiers xml sont placés ainsi :
locales/english/fichiers.xml
locales/french/fichiers.xml

Dans mon cas, j'ai 3 fichiers par langue, chacun étant dédié à un type de message (erreurs, UI, doc).
Un exemple de fichier (error.xml) :
<?xml version='1.0' encoding="ISO-8859-1"?>
<errors>
 <doc_optional>Optional</doc_optional>
 <doc_mandatory>Mandatory</doc_mandatory>
 <doc_yes>Yes</doc_yes>
 <doc_no>No</doc_no>
 <doc_methods>Methods</doc_methods>
 <doc_properties>Properties</doc_properties>
 <doc_functions>Functions</doc_functions>
 <doc_parameters>Parameters</doc_parameters>
 <doc_seecode>See code</doc_seecode>
 <doc_filesize>Filesize</doc_filesize>
 <doc_filelines>Nb lines</doc_filelines>
 <doc_file_def1>defined in</doc_file_def1>
 <doc_file_def2>from line</doc_file_def2>
 <doc_file_def3>to line</doc_file_def3>
 <doc_returns_ref>Returns reference</doc_returns_ref>
 <doc_comments>Author's comments</doc_comments>
 <doc_owner>Owner</doc_owner>
 <doc_modifiers>Modifiers</doc_modifiers>
 <doc_default_value>Defauls value</doc_default_value>
 <doc_returns>Documented return value</doc_returns>
 <doc_params>Documented parameters value</doc_params>
 <doc_constants>Constants</doc_constants>
</errors>

Puis j'appelle un message comme ça (j'ai un formulaire présent partout de choix de la langue):
// initalisation de la langue
if (!isset ($_SESSION['locale']) || empty ($_SESSION['locale'])) {
 $_SESSION['locale'] = 'francais';
}


// instanciation de ma classe
$oloc = new olocale ($_SESSION['locale']);

// appel d'un message :
$sError = $oloc -> getMsg ('errors', 'failed_upload');

Changer une localisatioon est simple (ou en ajouter une plutôt ) :
on crée le dossier : locales/ouzbeque
On y copie les 3 fichiers xml , et on modifie les valeurs :

<doc_constants>Constants</doc_constants>
=>
<doc_constants>ktabebkgalkl</doc_constants>
(désolé, mon ouzbèque n'est pas terrible...)

Et on ajoute la le choix de l'ouzbeque dans le formulaire. C'est tout. Le package est localisé en ouzbeque.
0
YEBOKOLO Messages postés 46 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 13 septembre 2010
14 août 2006 à 18:51
bonjour
tu peux aussi tiliser un fichier langue du genre ci-après :

code :
<?php
$lang = array();
$lang[0]['fr'] = 'Nom du Serveur*';
$lang[0]['en'] = 'Name of the server*';
$lang[1]['fr'] = 'Nom de l\'utilisateur*';
$lang[1]['en'] = 'Name of user*';
$lang[2]['fr'] = 'Mot de passe';
$lang[2]['en'] = 'Password';
?>

ensuite dans ton fichier index : tu inclus le code suivant :

<?php
session_start();
include('inc/langues.php');
include('inc/fonctions.php');
// gestion basique des langues
// basic management of the languages
// création de la variable de langue (1er chargement de la page)
// creation of the variable of language (1st loading of the page)
if(!isset($_SESSION['lg'])){
//création et = à 'fr'
$_SESSION['lg'] = 'fr';
}
else{
if(!empty($_GET['lang'])){
//switch
switch($_GET['lang']){
case 'fr':
$_SESSION['lg'] = 'fr';
break;
case 'en':
$_SESSION['lg'] = 'en';
break;
}
}
}
// fin de la gestion des langues

en ensuite dans le même fichier tu mets deux liens pour changer de langue :

<!-- liens pour changer de langue -->
<!-- bonds to change language -->
[index.php?lang=fr ] FRANCAIS

[index.php?lang =en ] ENGLISH

et toujours dans le même fichier voici une utilisation des variables "langues" :

<!-- formulaire de connection -->
<!-- form of connection -->
<form name="connect" method="post" action="trait_connect.php">
<!-- champ concernant le serveur -->
<!-- field concerning the SGDB -->
<?php echo $lang[0][$_SESSION['lg']]; ?>



bien entendu il faut ouvrir session_start() pour chaque fichier.
J'espère que c'est sufisemment clair et que cela pourra te servir.
0
Rejoignez-nous