cs_depression
Messages postés100Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention13 juillet 2009
-
8 août 2006 à 15:36
YEBOKOLO
Messages postés46Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention13 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?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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.
franco_se
Messages postés151Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 juillet 20182 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 ..........
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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 ();
}
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']);
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.
YEBOKOLO
Messages postés46Date d'inscriptionjeudi 10 mars 2005StatutMembreDernière intervention13 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.