Internationalisation de mon application
Bonjour
J'ai une application que je souhaiterais internationaliser mais pour l'instant j'ai du mal à jongler avec les fichiers de propriétés et les locales; et mon expérience en PHP est assez minime.
J'ai de l'expérience en Java donc c'est peut-être pour çà que j'y arrive pas: peut-être je reproduis des patterns de Java, à vous de me dire si çà change en PHP!
J'ai donc un fichier header.php dans lequel j'ai des menus que je veux internationaliser/localiser : c'est là où je fais un $resourcesReader->getResource('home').
Dans le getResource(), je récupère la locale et j'essaie d'afficher le contenu de $fr[$key], $fr ou $es ou $en dépendant de la locale, et définis dans Resources.php.
Mais rien ne s'affiche....
Voilà j'ai donc mon fichier index.php
Code:
<?php include 'include/header.php';?>
J'ai également mon fichier include/header.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <?php
session_start();
include_once 'resources/Constants.php';
include_once 'include/locale.php';
include_once 'include/ResourcesReader.php';
$resourcesReader = new ResourcesReader();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<div class="header">
<div class="lang">
<!-- defininition des trois liens pour changer de langue -->
<?php foreach ($AVAILABLE_LANGUAGES as $languageKey => $languageValue) { ?>
<a href="?language=<?=$languageKey?>"><?=$languageValue?></a>
<?php }?>
</div>
<!-- links -->
<div class="menu">
<a href="index.html"><?=$resourcesReader->getResource('home')?></a>
<a href="about.html"><?=$resourcesReader->getResource('aboutme')?></a>
|
Voilà mon fichier resources/Constants.php
Code:
1 2 3 4 5 6 7 8 9
| <?php
$AVAILABLE_LANGUAGES = array(
'fr' => 'FR',
'en' => 'EN',
'es' => 'ES' );
$DEFAULT_LOCALE = 'en';
?> |
Voici mon fichier include/locale.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php
include_once 'resources/Constants.php';
// if the language change, set/update the cookie and put the language in session
if (isset($_GET['language'])){
$locale = $_GET['language'];
setcookie('locale',$locale);
$_SESSION['locale'] = $locale;
//setlocale(LC_ALL,$locale);
}
// if the locale is not set in session, then try to get it from a cookie or use the default locale
if (!isset($_SESSION['locale'])){
if (isset($_COOKIE['locale'])){
$_SESSION['locale'] = $_COOKIE['locale'];
} else {
$_SESSION['locale'] = Constants.DEFAULT_LOCALE;
}
}
?> |
Mon fichier include/ResourcesReader.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?php
include_once 'resources/Resources.php';
class ResourcesReader {
private $_map;
public function __construct(){
$this->_map = "";
}
public function getResource($key){
if (isset($_SESSION['locale'])){
switch ($_SESSION['locale']){
case 'fr': return $fr[$key];break;
case 'es': return $es[$key];break;
case 'en': return $en[$key];break;
default: return this::$en[$key];break;
}
} else {
return this::$en[$key];break;
}
}
}
?> |
Mon fichier resources/Resources.php
Code:
1 2 3 4 5 6 7 8 9 10
| <?php
$fr = array(
'home' => 'accueil',
'aboutme' => ' propos de moi');
$en = array(
'home' => 'home',
'aboutme' => 'about me');
?> |