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

2 réponses


netchaiev
Auteur
Réponse acceptée

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.

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.