Google translate api et encodage

Petit nouveau ! | 4 Messages

01 août 2012, 11:07

Bonjour,

Je gère une boutique prestashop que j'essaye d'agrandir, et dans cette politique expansionniste je cherche a traduire mes articles en plusieurs langues.

étant un gros flemmard, je me suis orienté vers google translate pour m'aider dans une grande partie du processus, mais je n'arrive pas dutout à faire marcher mon truc.

D'abord je fais appel a ma base de données pour tirer les text en fr, puis j'essaye de traduire ça en anglais, puis je réinjecte la traduction dans la bdd, la première partie marche, la troisième partie marche, mais pas celle du milieu.

En fait, je n'arrive pas dutout a trouver une méthode qui me donne un résultat correct, chaque fois c'est un problème.

par exemple, j'essaye de travailler avec file_get_contents:

Code : Tout sélectionner

$data = file_get_contents("https://www.googleapis.com/language/translate/v2?key=XXXXXXXXXXXXXXXXXXXXXX&format=html&source=fr&target=en&q=",$sourcery); $data = json_decode ( $data ); echo $data->responseStatus; if ( $data->responseStatus == 200 ) { echo $data->responseData->translatedText; //return $data->responseData->translatedText; } else { //return "Server down."; }
celle ci ne va rien me renvoyer, juste une page blanche.

D'un autre coté, la fonction urlencode ne semble pas donner le même résultat que son équivalent en javascript encodeURIComponent, je trouve ça assez bizarre.

Si quelqu'un a une idée?

Petit nouveau ! | 4 Messages

01 août 2012, 11:21

Comme second exemple j'ai ceci:
<?php


Class GoogleTranslate
{
    public function checkError($result)
    {
        $result = json_decode($result);
 
        if (empty($result))
            return array('error' => true, 'msgError' => 'Empty result');
        if (!empty($result->error))
            return array('error' => true, 'msgError' => $result->error->errors[0]->reason);
 
        return array('error' => false, 'translation' => $result->data->translations[0]->translatedText);
    }
 
    public function translate($content, $from = 'fr', $to = 'en')
    {
        $data = array(
            'key' => "xxxxxxxxxxxxxxxxxxxxxxx",
            'q'  => $content,
            'source'  => $from,
            'target'    => $to,
        );
        $urlTarget = 'https://www.googleapis.com/language/translate/v2';
 
        $ch = curl_init($urlTarget);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-HTTP-Method-Override: GET'));
        $result = curl_exec($ch);
        curl_close($ch);
 
        return $this->checkError($result);
    }
}

mysql_connect("localhost", "durex", "comcom") or die(mysql_error());
mysql_select_db("kikoolol") or die(mysql_error());
// chopper les produits
$result = mysql_query("SELECT * 
FROM ps_product_lang
WHERE id_product =5
AND (
id_lang =1
OR id_lang =2
)")
or die(mysql_error());  
while($row = mysql_fetch_array($result)){
$data[]=$row;
}






$google = new GoogleTranslate();
$result = $google->translate($data[1][4], 'fr', 'en');
if ($result['error'])
    echo $result['msgError'];
else
    echo $result['translation'];
    
    
    ?>

ce code me renvoie ceci :

Code : Tout sélectionner

Content: 200 g ? Candle 100% natural wax and dabeille dhuile vgtale soy
comme traduction de ceci :

Code : Tout sélectionner

Contenu : • 200 g • ?Bougie 100 % naturelle, à base de cire d’abeille et d’huile végétale de soja
donc j'ai un problème avec les accents que je n'arrive pas résoudre, tout en sachant que urlencode et rawurlencode me donnent un résultat blanc, mais vraiment blanc.

Petit nouveau ! | 4 Messages

02 août 2012, 10:13

Et beh, et moi qui pensait mettre mon problème dans la section débutant...

la fonction javascript encodeURIComponent me donne un résultat parfait, mais pour pouvoir l'utiliser faut déclarer un paradoxe temporel, exécution serveur, puis exécution client puis exécution serveur dans le même temps...

Petit nouveau ! | 4 Messages

02 août 2012, 11:01

Bon, j'ai trouvé ma soluce, fallait utiliser utf8_encode