Gettext, locales, séparateur décimal

ViPHP
ViPHP | 3607 Messages

09 sept. 2010, 09:29

Bonjour à tous,

Je viens vers vous pour un problème assez épineux...
J'ai essayer de mettre en place gettext sur notre site, et après pas mal de déboires (le site était en iso-8859-1, je l'ai donc passé en utf8, etc...), j'ai réussit à configurer correctement le code php, et les outils autours afin que se soit utilisable.

Seulement, il y a un soucis, il se trouve qu'il y a pas mal de float utilisé sur le site (prix principalement), et que visiblement le changement de locales change le séparateur décimal en une virgule pour le français par exemple.

Ce qui fait que ça vérole les données, mysql n'y comprend plus rien et voilà.

Alors que faut t'il faire? je ne sais pas si il y a moyen de régler des locales sur mysql?

Faut t'il traiter tout les float avec une fonction dédiée?

Le problème vient-il du reste du site ou de ma méthode?
voici le partie ou je change les locales:
// Initialisation des options de traductions

switch ($lang) {
    case 'en':
      $language = 'en_US';
      break;
    case 'de':
      $language = 'de_DE';
      break;
    default:
      $language = 'fr_FR';
      break;
}


 // On modifie les variables d'environnement
putenv('LANG='.$language);
putenv('LC_ALL='.$language);
putenv('LANGUAGE='.$language);

// On modifie les informations de localisation en fonction de la langue
$locale_set = setlocale(LC_ALL, $language . ".utf8",
                                $language . ".UTF8",
                                $language . ".utf-8",
                                $language . ".UTF-8",
                                $language);


// On indique les chemins vers le fichier global.mo
bindtextdomain('global', ROOT_PATH."/locale");

// Si on essaye de forcer le chargement d'une traduction locale
if(!empty($s_lang_file)){
  
  // si il existe des traductions locales
  if(is_file(ROOT_PATH."/locale/".$language."/LC_MESSAGES/".$s_lang_file.".mo")){

      bindtextdomain($s_lang_file, ROOT_PATH."/locale");
      // Le nom du domaine par défaut
      textdomain($s_lang_file);
  }
}
J'ai essayé d'ajouter ensuite:
setlocale(LC_NUMERIC,'en_US.utf8');
pour simplement laisser les float en anglais, mais ça me foire tout gettext :/

Des idées?
merci d'avance!

ViPHP
ViPHP | 3607 Messages

09 sept. 2010, 10:22

Alors le problème est résolut, j'ai utilisé le code qui suit:
 // On modifie les variables d'environnement
putenv('LANG='.$language);
putenv('LC_ALL='.$language);
putenv('LANGUAGE='.$language);

// On modifie les informations de localisation en fonction de la langue
$locale_set = setlocale(LC_ALL, $language . ".utf8",
                                $language . ".UTF8",
                                $language . ".utf-8",
                                $language . ".UTF-8",
                                $language);

// on remet le . comme séparateur décimal
setlocale(LC_NUMERIC,'en_US.utf8');
Mais je suis tout de même interessé par votre manière de procéder avec ces internationnalisations ;)