2 votes

Gettext ne détecte pas correctement l'utf8 en PHP

J'ai une application PHP qui utilise Gettext comme moteur i18n. La traduction fonctionne bien, le seul problème est que j'ai des problèmes d'encodage avec les caractères UTF8. Mon code PHP pour charger gettext est quelque chose comme ceci :

bindtextdomain( $domain, PATH_BASE . DS . "language" . DS );
$this->utf8Encode = strtolower($encoding) == "utf-8";
bind_textdomain_codeset($domain, $encoding);

textdomain($domain);

Mes modèles rendent les pages en utilisant le jeu de caractères utf8 et j'ai essayé à peu près tout pour charger le jeu de caractères approprié. Pour la locale actuelle, je charge SL_sl, les noms apparaissent correctement mais ont des problèmes avec les caractères UTF8, donc là où il devrait apparaître Država il apparaît Dr?ava

1voto

David Conde Points 2935

Donc, c'est arrivé avant, et maintenant c'est arrivé de nouveau, j'ai trouvé la solution moi-même ! Le problème est que comme je l'ai dit à @bozdoz, je convertissais déjà du texte UTF8, mais je n'avais pas réalisé que la fonction gettext retournait une chaîne UTF8, donc si vous faites ceci :

$encoded = utf8_encode($utf8String);

Alors vous aurez un bug vraiment méchant quand $utf8String est une chaîne UTF8 réelle. J'ai donc apporté quelques modifications à mon code et la méthode de traduction (simplifiée) a abouti à ce qui suit :

$translation = gettext($singular);
$encoded = $this->utf8Encode ? $this->Utf8Encode($translation) : $translation;

Et le Utf8Encode se présente comme suit :

private function Utf8Encode( $text )
{
    if ( mb_check_encoding($text, "utf8") == TRUE ){
        return $text;

    return utf8_encode($text);
}

J'espère que si quelqu'un a la même erreur, cela pourra l'aider !

0voto

0plus1 Points 1471

D'après les informations partielles, je peux vous suggérer de jeter un coup d'œil aux fichiers mo/po actuels. Dans poedit, il y a plusieurs avertissements concernant l'encodage utf8. En supposant que tout le reste est correct (méta, en-têtes, etc.), c'est la seule chose qui reste à vérifier.

0voto

bozdoz Points 4356

Essayez de le coder avec utf8_encode(). Je ne peux pas vraiment le dire à partir de votre code, mais peut-être que cela pourrait être implémenté comme ceci :

utf8_encode($domain);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X