Development

#3549 (sfMessageFormat encodage UTF-8 avec les traductions i18n)

You must first sign up to be able to contribute.

Ticket #3549 (new defect)

Opened 2 years ago

Last modified 2 years ago

sfMessageFormat encodage UTF-8 avec les traductions i18n

Reported by: mandragore Assigned to: fabien
Priority: major Milestone:
Component: i18n Version: 1.0.16
Keywords: sfMessageFormat - Cc:
Qualification: Unreviewed

Description

Bonjour, Je préfère expliquer mon bug en français sinon je ne vais pas y arriver en anglais. J'utilise i18n depuis la base de données mysql avec les tables catalogue et trans_unit. Ma base de données est définie comme étant en latin1_swedish_ci. J'ai dans ma table de traduction un titre à traduire évenement en évents. (je met volontairement le é) Lorsque j'essaie d'utiliser la méthode ('évenement') pour traduire cela me renvoie l'erreur

faultCode1faultStringNotice:iconv() [function.iconv]: Detected an incomplete multibyte character in input string in C:\wamp\www\www.soizick.com\lib\symfony\i18n\util.php on line 172

Ci dessous les méthodes ou cela plante dans le fichier util.php. Si je met en commentaire ci dessous les traitement dans ces 2 fonctions toutes mes traductions fonctionnent correctement. Ceci dans les 3 langues que j'ai (italien, francais et anglais).

function I18N_toUTF8($string, $from)
  {
    /*$from = strtoupper($from);
    if ($from != 'UTF-8')
    {
      $s = iconv($from,'UTF-8',$string); //to UTF-8
      return $s !== false ? $s : $string; //it could return false
    }
	*/
    return $string;
  }

function I18N_toEncoding($string, $to)
  {
   /*$to = strtoupper($to);
    if ($to != 'UTF-8')
    {
      $s = iconv('UTF-8', $to, $string);
      return $s !== false ? $s : $string;
    }
	*/
    return $string;
  }

J'ai bien spécifié dans settings.yml de ma partie publique et administration d'utiliser

charset: ISO-8859-1

Pourquoi convertir automatiquement en UTF-8 un texte avec un charset que l'on force dans settings.yml.

Autre bug lié : Si j'essai de traduire ('évenement') en events et bien si je met en commentaire les 2 méthodes du dessus cela fonctionne très bien mais si je laisse comme c'est par défaut cela ne me traduit pas mes textes qui sont accentués.

Change History

05/15/08 13:58:12 changed by mandragore

Précision si j'utilise une source XML et bien là cela fonctionne. Donc il y à un problème si l'on utilise la source de traduction depuis la base de données.

05/15/08 14:18:09 changed by mandragore

Le bug est résolu de la manière suivante en changeant les méthodes suivantes dans la classe sfMessageFormat :: En gros si l'on est dans une source XLIFF alors on décode en utf-8 sinon ben je ne fait pas la traduction. Je pense que la correction pourrait aller.

 public function format($string, $args = array(), $catalogue = null, $charset = null)
  {
    if (empty($charset))
    {
      $charset = $this->getCharset();
    }
    
	if ($this->source instanceof sfMessageSource_XLIFF)
	{
    	$s = $this->formatString(I18N_toUTF8($string, $charset), $args, $catalogue);
	    return I18N_toEncoding($s, $charset);
	}
	else
	{
		$s = $this->formatString($string, $args, $catalogue);
    	return $s;
	}
  }

  public function formatExists($string, $args = array(), $catalogue = null, $charset = null)
  {
    if (empty($charset))
    {
      $charset = $this->getCharset();
    }
    
	if ($this->source instanceof sfMessageSource_XLIFF)
	{
		$s = $this->getFormattedString(I18N_toUTF8($string, $charset), $args, $catalogue);
	    return I18N_toEncoding($s, $charset);
	}
	else 
	{
		$s = $this->getFormattedString($string, $args, $catalogue);
	    return $s;
	}
  }

The Sensio Labs Network

Since 1998, Sensio Labs has been promoting the Open-Source software movement by providing quality web application development, training, consulting.
Sensio Labs also supports several large Open-Source projects.