Je me disais un truc : Faut-il installer sur le serveur (dans mon cas un serveur dédié avec une Debian 7), les paquets de langues qui manquent:
Dans le cas précis, l'espagnol et l'allemand.
Merci de vos réponses.
Bonjour à tous,
J'ai suivi ce WE le tuto l'internalisation des sites avec gettext et poedit. Tout fonctionne à merveille pour la traduction en anglais (en_US), mais dès que j'essaie de faire une troisième langue, l'espagnol (es_ES), rien ne se passe. Je reste en langue pas défaut, alors que ma variable de session montre bien que je suis en es_ES.
Voici le code :
localization.php
<?php
error_reporting(E_ALL | E_STRICT);
// define constants
define('PROJECT_DIR', realpath('./'));
define('LOCALE_DIR', PROJECT_DIR .'/locale');
define('DEFAULT_LOCALE', 'fr_FR');
require_once('lib/gettext/gettext.inc');
$supported_locales = array('en_US','es_ES','de-DE','fr_FR');
$encoding = 'UTF-8';
if(isset($_GET'lang'])) {
$_SESSION'lang'] = $_GET'lang'];
}
if(!isset($_SESSION'lang'])) {
$_SESSION'lang'] = 'fr_FR'; // default value
}
$locale = $_SESSION'lang'];
// gettext setup
T_setlocale(LC_MESSAGES,"$locale.utf8");
// Set the text domain as 'messages'
$domain = 'trad';
bindtextdomain($domain, LOCALE_DIR);
// bind_textdomain_codeset is supported only in PHP 4.2.0+
if (function_exists('bind_textdomain_codeset'))
bind_textdomain_codeset($domain, $encoding);
textdomain($domain);
header("Content-type: text/html; charset=$encoding");
?>
LE fichier /locale/en_US/LC_MESSAGES/trad.po
msgid ""
msgstr ""
"Project-Id-Version: monsite\n"
"POT-Creation-Date: 2014-06-16 09:23+0100\n"
"PO-Revision-Date: 2014-06-16 09:25+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.6.5\n"
"X-Poedit-Basepath: E:\\wamp\\www\\monsite\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
"X-Poedit-SearchPath-0: E:\\wamp\\www\\dmonsite\n"
#: E:\wamp\www\monsite/includes/header.php:38
msgid "Accueil"
msgstr "Home"
#: E:\wamp\www\monsite/includes/header.php:39
msgid "Gérer Demandes"
msgstr "Handle request"
etc...
le fichier /locale/es_ES/LC_MESSAGES/trad.po
msgid ""
msgstr ""
"Project-Id-Version: monsite\n"
"POT-Creation-Date: 2014-06-16 08:09+0100\n"
"PO-Revision-Date: 2014-06-16 09:57+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.6.5\n"
"X-Poedit-Basepath: E:\\wamp\\www\\monsite\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: _\n"
"Language: es_ES\n"
"X-Poedit-SearchPath-0: E:\\wamp\\www\\monsite\n"
#: E:\wamp\www\monsite/includes/header.php:34
msgid "Accueil"
msgstr "zef"
#: E:\wamp\www\monsite/includes/header.php:35
msgid "Gérer Demandes"
msgstr "hytht"
etc....
Le fichier header.php
<?php
session_start();
require"localization.php";
?>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
.../...
/head>
<body>
<div id="header">
<div class="navigation">
<ul class="menu" id="menu">
<li><span class="home"></span><a href="index.php" class="first"><?php echo _("Accueil"); ?></a></li>
<li><span class="all-demo"></span><a href="documents.php"><?php echo _("Gérer Demandes"); ?></a></li>
etc...
JE ne sais pas où j'ai fait mon erreur et surtout ce qui coince. Auriez vous une petite idée ?
MErci d'avance et bonne semaine à tous
Je me disais un truc : Faut-il installer sur le serveur (dans mon cas un serveur dédié avec une Debian 7), les paquets de langues qui manquent:
Dans le cas précis, l'espagnol et l'allemand.
Merci de vos réponses.
Bonjour,
J'ai trouvé la solution. Effectivement, le problème venait du fait qu'il n'y avait sur le serveur (debian 7) que les langues fr_FR et en_US. Je suppose que sur Windows l'ensemble des paquets linguistiques sont installés nativement, mais pas sur Linux.
Pour ceux qui ont le même problème, il faut procéder comme suit :
Dans un terminal du serveur ou de l'ordinateur si on est en local sur un linux
sudo dpkg-reconfigure -locales
cela vous donne tous les paquets linguistiques qui existent. Il suffit de cocher ceux que vous désirez.
Autre info : Je me suis aussi rendu compte que sur un linux, il est important de mentionner l'encodage des caractères dans le fichier localization.php. Dans le cas précis, il faut faire un :
T_setlocale(LC_MESSAGES,"$locale.utf8");
En résumé, le fichier localization.php se retrouve comme ceci : (j'ai aussi rajouté un manip pour intégrer les langues dans une variable de session)
error_reporting(E_ALL | E_STRICT);
// define constants
define('PROJECT_DIR', realpath('./'));
define('LOCALE_DIR', PROJECT_DIR .'/locale');
define('DEFAULT_LOCALE', 'fr_FR');
require_once('lib/gettext/gettext.inc');
$supported_locales = array('en_US','es_ES','de_DE','fr_FR');
$encoding = 'UTF-8';
if(isset($_GET'lang'])) { $_SESSION'lang'] = $_GET'lang']; }
if(!isset($_SESSION'lang'])) {
$_SESSION'lang'] = 'fr_FR'; // default value
}
$locale = $_SESSION'lang'];
// gettext setup
T_setlocale(LC_MESSAGES,"$locale.utf8");
// Set the text domain as 'messages'
Le reste ne change pas.
Bonne journée à tous et j'espère que cela va pouvoir vous servir.