TinyButStrong - the PHP Template Engine
Categories > [old] TbsOoo & TinyDoc >

PB d'affichage des mois en français avec le paramètre 'locale'

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs

By: danypoup
Date: 2007-03-05
Time: 21:54

PB d'affichage des mois en français avec le paramètre 'locale'

Si dans un modèle OpenOffice 2.0, j'écris ceci :
Date : [var..now;frm='dddd dd mmm yyyy';locale]

et dans le script PHP qui lance la fusion, j'ajoute :
setlocale(LC_TIME,'French');
avant la fusion du modèle et des données, alors j'obtiens le résultat suivant dans le document fusionné :
Date : mercredi 05 d飮 2007

Je constate le même problème pour le mois de février et pour août la fusion plante carrément.

Pour les autres mois de l'année, ceux-ci s'affiche correctement. Le problème semble donc dû aux mois contenant des caractères accentués.

Alors, quelle est l'origine de ce problème ?

Pour info, configuration utilisée : TBSOOO 0.79 + TBS 3.2 + PHP 5.2.1 + WinXP + IIS 5.1.

Merci.
By: Olivier
Date: 2007-03-06
Time: 10:02

Re: PB d'affichage des mois en français avec le paramètre 'locale'

Bonjour,

C'est sans doute un probleme de conversion en UTF8 lorsque la fonction frm fait appel au formatage de date. Ca va être dur à corriger.

Pour ma part je n'utilise que très rarement le formatage pour les nombres et les dates avec 'frm' de TBS et je préfère le faire en amont, par exemple en SQL dans dans un tableau avant de fusionner.

voir un article intérressant de Nexen sur le formatage des dates sous My
SQL
http://www.nexen.net/actualites/trucs/16629-importer_et_exporter_des_dates_avec_mysql.php

Olivier
By: danypoup
Date: 2007-03-06
Time: 16:21

Re: PB d'affichage des mois en français avec le paramètre 'locale'

Merci pour ta réponse rapide Olivier.

Pour autant, celle-ci ne me satisfaisant pas , j'ai investigué un peu plus. Et, au final, je tombe sur une constatation troublante.

En effet après avoir effectué différents tests et en traçant l'exécution du code dans TBSOOO et TBS, je constate que, finalement, le fichier OpenOffice généré contient les bons caractères, que ce soit pour février, août ou décembre, les caractères accentués sont bien présents !!! Donc le problème ne semble pas être ni du côté PHP, ni du côté TBS/TBSOOO.

En fait, là où c'est vicieux, c'est que lors de l'affichage de ce même document par Writer, ces mêmes caractères accentués sont remplacés par des caractères ésotériques, voire Writer se plante carrément dans le cas du mois d'août.

Intrigué et suspectant un problème d'encodage, j'en suis venu à modifier celui du fichier "content.xml" contenu dans le fichier ODT représentant mon document OpenOffice. Ansi, j'ai remplacé manuellement la ligne <?xml version="1.0" encoding="UTF-8"?> par <?xml version="1.0" encoding="ISO8859-1"?>. Et, ô miracle, les caractères accentués s'affichent maintenant correctement dans Writer ?????

Là où tout ceci me "perturbe" est que, d'une part, ce document qui me sert de modèle est réalisé avec OpenOffice lui-même à l'origine, donc le choix de l'encodage en UTF-8 est fait par OpenOffice, et je n'ai pas trouvé comment modifier ce paramètrage dans OpenOffice et, d'autre part, quand dans un nouveau document Writer on écrit des lettres accentuées et on enregistre ce document, quand on regarde la première ligne du fichier "content.xml", on trouve UTF-8 comme encodage. Et quand on rouvre ce document, les lettres accentuées sont correctement affichées ??? Ce qui semble logique car l'UTF-8 sait gérer ces caractères.

On a donc 2 comportements différents, suivant si le document OpenOffice est modifié par OpenOffice lui-même ou par une source extérieure, en l'occurrence TBSOOO.

Mystère, mystère, quand tu nous tiens !!!

Votre avis m'intéresse...
By: danypoup
Date: 2007-04-07
Time: 16:08

[RESOLU] Re: PB d'affichage des mois en français avec le paramètre 'locale'

Finalement, après quelques investigations plus poussées dans le code de TBS/TBSOOO, j'ai enfin trouvé une solution, un peu brutale il faut l'avouer !!

En effet, en ajoutant  la ligne suivante dans la fonction " meth_Locator_Replace" du fichier "tbs_class.php" :

$Currval = utf8_encode($Currval);

après les lignes :

elseif ($Loc->ConvMode===0) { // Format
        $CurrVal = $this->meth_Misc_Format($CurrVal,$Loc->PrmLst);

et la ligne suivante dans la fonction "_CharsetEncod" du fichier "tbsooo_class.php" :

$string_encode = utf8_encode($string_encode);

après les lignes

switch($this->_charset) {
      // OOo XML charset is utf8
      case 'UTF8': // no encode

les caractères accentués sont à nouveau correctement affichés dans le document fusionné.

!!!

Les quelques tests, non exhaustifs donc, que j'ai mené m'ont permis de valider cette solution. En tous cas, pour l'instant !!!

Bien à vous.


By: taha
Date: 2009-12-10
Time: 14:26

Re: [RESOLU] Re: PB d'affichage des mois en français avec le paramètre 'locale'

j'arrive a trouvé une solution pour les formulaire (les input type text ou textarea)
dans le form de chaque action il faut ajouter la ligne de commande suivante:
la fonction au début
Code:

  1. public function __set($var, $val) {
  2.         $filter = new InputFilter();
  3.         $this->$var = $filter->process($val);
  4.        
  5.     }
==> la fonction
Code:

  1. public function __set($var, $val) {
  2.         $filter = new InputFilter();
  3.         $this->$var = $filter->process($val);
  4.                $this->$var=utf8_decode($this->$var);       
  5.     }
merci