Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка при переводе... 
:(
    Опции темы
gel10s
  Дата 5.6.2011, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.6.2011

Репутация: нет
Всего: нет



Здравствуйте!

Помогите пожалуйста нубу)

Есть класс для перевода текста, который использует сервис Google Translate...
Работает гуд, но возвращает крокозябры. Как их победить?

Например:
Код

require_once("GoogleTranslater.php");

// Создаем объект
$gt = new GoogleTranslater();

//Устанавливаем параметры
$text = "English literature is the literature written in the English language.";
$fromLanguage = "en";
$tolanguage = "ru";

$translatedText = $gt->translateText($text, $fromLanguage, $tolanguage, $translit = false);

echo $translatedText;


Полные сорцы тут: https://github.com/Andrew8xx8/GoogleTranslater
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



gel10s, ну вроде как очевидно, что кодировки разные на вашей стороне и у гугла. У гугла полюбас utf-8, а у вас наверное cp1251, виндовая.
Поиграйтесь с: http://www.php.net/manual/ru/function.iconv.php
PM   Вверх
gel10s
Дата 5.6.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.6.2011

Репутация: нет
Всего: нет



InfMag,  smile  Спасибо, Бум думать)
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Вроде как так:
Код

echo iconv('UTF-8', 'CP1251', $content);


А лучше уж, если вы работаете с разными языками — в своих проектах используйте UTF-8.
В верхушке сразу:
Код

header('Content-Type: text/html; charset=utf-8');

PM   Вверх
gel10s
Дата 5.6.2011, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.6.2011

Репутация: нет
Всего: нет



Код

echo iconv("UTF-8", "cp1251", $translatedText);


Зомг, всё оказалось гораздо проще... Даже и играться не пришлось) Еще раз спасибо...

 smile А как можно получить значение кодировки входной строки?)
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



gel10s, в вашем случае наверное никак, ну то-есть вам модуль гугла вряд ли кодировку отдаёт, но всем известно что там UTF-8. Вообще поизучать надо cURL. По сути Вам в ответе от сервера приходят заголовки, просто нужно найти из них Content-Type.
Например:
Код

Content-Type: text/html; charset=utf-8

Можете посмотреть исходники модуля, он через cURL-ом работает.
На крайняк можно мету искать к выданом html-коде регами:
/<meta.*?http-equiv=("|')?content-type("|')?.*?>/i
а потом в совпадении найти /charset=(.*?)("|'|>)/i

Добавлено через 1 минуту и 27 секунд
gel10s, ну у входной строки конкретно никак. Во всяком случае стандартными средствами, сколько я могу знать. Может есть какие-нибудь скрипты, которые определяют по заданным сигнатурам.
PM   Вверх
gel10s
Дата 5.6.2011, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.6.2011

Репутация: нет
Всего: нет



InfMag, Спасибо)

Ну вообще я это для общего развития спросил!)) Там куда я это буду прикручивать весь текст преобразовывается в utf-8 языковым движком.
PM MAIL   Вверх
gel10s
Дата 5.6.2011, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.6.2011

Репутация: нет
Всего: нет



А вообще стоит обидеться на google, api переводчика они закрыли придется дописывать код не зная нифига  smile ( 

Метод тыка не помогает, хотя я нуп:
Какие бы значения я не указывал бы в переменной $tolanguage, перевод осуществляется всегда с английского на русский... Тут у мну разрыв шаблона, потому как если бы $response = $this->_curlToGoogle(); неправильно формировал запрос, то была бы ошибка...  smile 

Код

require_once("GoogleTranslater.php");

// Create GT Object
$gt = new GoogleTranslater();
$fromLanguage = "en";
$tolanguage = "sv"; //Судя по URL из переводчика именно так шведский язык обозначается у гугла...
$text = "English literature is the literature written in the English language.";

$translatedText = $gt->translateText($text, $fromLanguage, $tolanguage, $translit = false);

echo iconv("UTF-8", "cp1251", $translatedText);


Собственно сам метод:
Код

public function translateText($text, $fromLanguage, $toLanguage, $translit = false) 
    {
        if (empty($this->_errors)) 
        {
            $result = "";
            
            for($i = 0; $i < strlen($text); $i += 1000)
            {
                $subText = substr($text, $i, 1000);
                $response = $this->_curlToGoogle("http://translate.google.com/translate_a/t?client=te&text=".urlencode($subText)."&hl=ru&sl=".$fromLanguage."&tl=i".$toLanguage."&multires=1&otf=1&ssel=0&tsel=0&uptl=ru&sc=1");
                $result .= $this->_parceGoogleResponse($response, $translit);
            }
            return $result;
        } 
        else
        return false;
    } 

Методы _curlToGoogle(); и _parceGoogleResponse();
Код

private function _curlToGoogle($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        
        if (isset($_SERVER['HTTP_REFERER'])) 
        {
            curl_setopt($curl, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
        }
        curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24");  
        $response = curl_exec($curl);
        
        // Check if any error occured
        if(curl_errno($curl))
        {
            $this->_errors .=  "Curl Error: ".curl_error($curl);
            return false;
        }
        curl_close($curl);
        return $response;
    }

    private function _parceGoogleResponse($response, $translit = false)
    {
        if (empty($this->_errors)) 
        {
            $result = "";            
            $json = json_decode($response);
            
            foreach ($json->sentences as $sentence) 
            {
                $result .= $translit ? $sentence->translit : $sentence->trans;  
            }
            return $result;
        }  
        else 
        {
            return false;
        }
    }


Это сообщение отредактировал(а) gel10s - 5.6.2011, 20:19
PM MAIL   Вверх
InfMag
Дата 5.6.2011, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



l=".$fromLanguage."&tl=i".$toLanguage."&mul

Добавлено через 55 секунд
Код

http://translate.google.ru/translate_a/t?client=t&text=hello%2C%20body.&hl=ru&sl=en&tl=sv&multires=1&otf=2&ssel=0&tsel=4&sc=1

Как видите, тут нет этой i. Так что походу баг модуля.
PM   Вверх
gel10s
Дата 5.6.2011, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 5.6.2011

Репутация: нет
Всего: нет



InfMag,  Спасибо...

Тут вообще беда, например с английского на русский переводит полностью текст. На шведский только 2 первых слова, а на чешский всего лишь 1е слово. json?
smile 

PM MAIL   Вверх
InfMag
Дата 5.6.2011, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



gel10s, я бы посоветовал самому написать модуль, cURL, все дела. Изучите принципы работы cURL, потом как носки штопать грабберы будете ;)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.