[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Переводчик текстов
Sylex
PHP
<?php

// простая функция для построения выпадающего списка SELECT
function getHTMLSelect($name, $mas, $selected)
{
    $s = "<select name=\"{$name}\">\n";
    foreach ($mas as $k => $v) {
        $sel = ($selected == $k) ? ' selected' : '';
        $s .= "<option value=\"{$k}\"{$sel}>{$v}</option>\n";
    }
    return $s . "</select>\n";
}

// используемые языки
$langs = array(
    'en' => 'Английский',
    'ru' => 'Русский',
    'nl' => 'Галладский'
);

// с какого языка
$lang = isset($_POST['lang']) ? $_POST['lang'] : 'en';
// на какой
$lang_to = isset($_POST['lang_to']) ? $_POST['lang_to'] : 'ru';

// проверочка smile.gif
if (!array_key_exists($lang, $langs)) $lang = 'en';
if (!array_key_exists($lang_to, $langs)) $lang_to = 'ru';

// строим выпадающий список
$lang_select = getHTMLSelect('lang', $langs, $lang);
$lang_to_select = getHTMLSelect('lang_to', $langs, $lang_to);

// текст для перевода
$tr_text = 'Enter your text here';
// текст перевода
$translated = 'Здесь будет перевод';

// если отправили текст
if (!empty($_POST['text'])) {
    
    if 
(get_magic_quotes_gpc())    $_POST['text'] = stripslashes($_POST['text']);
    // запоминаем
    $tr_text = $_POST['text'];
    // кодируем
    $text = rawurlencode($_POST['text']);
    
    
// формируем запрос на Google
    $url = 'http://ajax.googleapis.com/ajax/services/language/translate';
    // инициализируем сессию
    $ch = curl_init($url);
    // заголовки не нужны
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // возвращать результат, а не выводить его в stdout
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    // метод отправки POST
    curl_setopt($ch, CURLOPT_POST, 1);
    // данные запроса
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'v=1.0&q='.$text.'&langpair='.$lang.'%7C'.$lang_to);
    // выполняем запрос
    $result = curl_exec($ch);
    // обрабатываем ошибки
    if( curl_errno($ch) != 0 ) {
        die('CURL_error: ' . curl_errno($ch) . ', ' . curl_error($ch));
    };
    // закрываем сессию
    curl_close($ch);
    
    
// раскодируем строку
    $res = json_decode($result, true);
    // получаем текст перевода
    $translated = $res['responseData']['translatedText'];
}


HTML
<form action="" method="post">
<textarea cols="30" rows="10" name="text"><?=htmlspecialchars($tr_text)?></textarea>
<textarea cols="30" rows="10" id="translated_text"><?=$translated?></textarea>
<br /><br />
<?=$lang_select?>
<?=$lang_to_select?>
<input type="submit" value="Перевести" />
</form>


можно довести до ума, и добавить еще кучу языков smile.gif



Спустя 11 минут, 3 секунды (4.08.2009 - 21:09) jetistyum написал(а):
а стоит ли делать на php такой переводчик? и пхп в данном случае выполняет очень маленькую роль.

Спустя 2 минуты, 17 секунд (4.08.2009 - 21:11) Sylex написал(а):
Цитата (jetistyum @ 5.08.2009 - 00:09)
а стоит ли делать на php такой переводчик?

вообще странный вопрос... если тебе не нужно - не делай smile.gif

Спустя 8 минут, 44 секунды (4.08.2009 - 21:20) kirik написал(а):
Джинкуе бардзо, совсем недавно думал об этом smile.gif

Спустя 52 минуты, 4 секунды (4.08.2009 - 22:12) twin написал(а):
А у меня на албанский есть)))

Спустя 1 час, 48 минут, 4 секунды (5.08.2009 - 00:00) kirik написал(а):
Цитата (twin @ 4.08.2009 - 14:12)
А у меня на албанский есть)))

Предложи гуглу как дополнительный язык smile.gif

ЗЫ он Олбанский..

Спустя 1 час, 16 минут, 59 секунд (5.08.2009 - 01:17) FatCat написал(а):
Цитата (Sylex @ 4.08.2009 - 21:58)
// формируем запрос на Google
$url = 'http://ajax.googleapis.com/ajax/services/language/translate';

А лимит частоты запросов с одного айпишника имеется?
Есть классная идея многоязычного форума, и деже видел реализацию на серверном промпте. То есть, таблицы сообщений задублированы в базе форума с разными префиксами имен под каждый язык (видел под 6 языков), и при отправке сообщения производится перевод на все языки системы, и заносится во все дубли.
Таким образом, американец пишет через английский интерфейс, и видит свое сообщение по-английски, как он и написал. Я захожу через русский интерфейс, и читаю по-русски уже переведенное его сообщзение. Я через русский интерфейс пишу ответ по-русски, и он уходит во все языковые базы, и американец читает мой ответ уже переведенным на английский.
Обалденная конструкция...

Спустя 1 час, 47 минут, 48 секунд (5.08.2009 - 03:05) kirik написал(а):
Цитата (FatCat @ 4.08.2009 - 17:17)
Обалденная конструкция...

Завораживающая яб сказал smile.gif Наверное такая каша там.. Примерно такая smile.gif

Цитата
Ехали цыгане, кошку потеряли. Кошка сдохла, хвост облез, кто промолвит тот и съест!

Цитата (http://translate.google.com/)
Traveling gypsies, lost cat. Cat sdohla, tail oblez who say it and eat!

Спустя 21 минута, 20 секунд (5.08.2009 - 03:26) twin написал(а):
laugh.gif

Спустя 3 часа, 43 минуты, 12 секунд (5.08.2009 - 07:09) Sylex написал(а):
Цитата (FatCat @ 5.08.2009 - 04:17)
А лимит частоты запросов с одного айпишника имеется?


вроде как нет, не нашел такого...

Вообще эта система может работать через AJAX, что очень удобно.

Документация здесь:
http://code.google.com/intl/ru-RU/apis/aja.../documentation/

PandoraBox2007
у меня была такая идея, но так добавят туда проверочный код или сменят дизайн - и тебе придется менять свою регулярку, или вообще бриться, т.к. могут быть ограничения по кол-ву запросов и проч. smile.gif

kirik
+5! laugh.gif

Спустя 15 минут, 32 секунды (5.08.2009 - 07:25) kirik написал(а):
Цитата (Sylex @ 4.08.2009 - 23:09)
Цитата (FatCat @ 5.08.2009 - 04:17)
А лимит частоты запросов с одного айпишника имеется?


вроде как нет, не нашел такого...

Вообще этим же сервисом пользуется youtube, хоть он и гугловый, не думаю что для остальных ограничения ставят какие-либо..

Спустя 40 минут, 39 секунд (5.08.2009 - 08:05) PandoraBox2007 написал(а):
PHP
<?php

/**
 * Translate.ru :: General functions
 * v1.00
 * Copyright © 2009, Pandora
 * ICQ: 411-672, 7-133-098
 */

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                   //
// Function:    string to_translate ( string $string [ , string $lang_code = "re", string $category = "General" ] )  //
// Description: Перевод слов через сервис Translate.ru                                                               //
//                                                                                                                   //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function to_translate($text, $lang_code = "re", $category = "General"){
    if (!$fp = @fsockopen('www.translate.ru', 80)){
        return $text;
    } else {
        $str_data = 'lang=ru&status=translate&source='.urlencode($text).'&SResalt=&direction=$lang_code&template=$category&image1=1';
        $head  = "POST /text.asp HTTP/1.0\n";
        $head .= "Host: www.translate.ru\n";
        $head .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007\n";
        $head .= "Accept: application/x-shockwave-flash,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1\n";
        $head .= "Accept-Language: ru,en;q=0.8,en-gb;q=0.5,en-us;q=0.3\n";

        $head .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n";
        $head .= "Keep-Alive: 300\n";
        $head .= "Referer: http://www.translate.ru/text.asp\n";
        $head .= "Content-Type: application/x-www-form-urlencoded\n";
        $head .= "Content-Length: ".strlen($str_data)."\n";
        $head .= "Connection: keep-alive\n\n";
        $head .= $str_data;

        fputs($fp, $head);

        while(!feof($fp)){
            $recieved .= fgets($fp, 500);
        }

        ereg('<span id="r_text" name="r_text">([^<]*)</span>', $recieved, $reg);

        return trim($reg[1]);
    }
}


"translate_langs.php"
PHP
<?php

/**
 * Translate.ru :: Lang Table
 * v1.00
 * Copyright © 2009, Pandora
 * ICQ: 411-672, 7-133-098
 */

$langs_name = array(

    /** С английского на... **/
    'er'     =>    'Англо-Русский перевод',
    'eg'     =>    'Англо-Немецкий перевод',
    'es'     =>    'Англо-Испанский перевод',
    'ef'     =>    'Англо-Французский перевод',
    'ep'     =>    'Англо-Португальский перевод',
    
    
/** С немецкого на... **/
    
    
'gr'     =>    'Немецко-Русский перевод',
    'ge'     =>    'Немецко-Английский перевод',
    'gf'     =>    'Немецко-Французский перевод',
    'gs'     =>    'Немецко-Испанский перевод',
    
    
/** С русского на... **/
    
    
're'     =>    'Русско-Английский перевод',
    'rg'     =>    'Русско-Немецкий перевод',
    'rf'     =>    'Русско-Французский перевод',
    'rs'     =>    'Русско-Испанский перевод',
    
    
/** С французского на... **/
    'fr'     =>    'Французско-Русский перевод',
    'fe'     =>    'Французско-Английский перевод',
    
    
/** С испанского на... **/
    
    
'sr'     =>    'Испанско-Русский перевод',
    'se'     =>    'Испанско-Английский перевод',
    'sf'     =>    'Испанско-Французский перевод',
    'sg'     =>    'Испанско-Немецкий перевод',
    
    
/** С португальского на... **/
    
    
'pe'     =>    'Португальско-Английский перевод',
    
    
/** С итальянского на... **/
    
    
'ir'     =>    'Итальянско-Русский перевод',
    'ie'     =>    'Итальянско-Английский перевод',
);

$langs = array(
    /** С английского на... **/
    
    
// Англо-Русский перевод
    'er' => array(
        'General'    => 'Общая лексика',
        'Automotive' => 'Автомобили',
        'Banking'    => 'Банковское дело',
        'Business'   => 'Деловая корреспонденция',
        'Internet'   => 'Интернет',
        'Logistics'  => 'Логистика',
        'Software'   => 'Программное обеспечение',
        'Sport'      => 'Спорт',
        'Travels'    => 'Путешествия',
    ),
    // Англо-Немецкий перевод
    'eg' => array(
        'General'    => 'Общая лексика',
        'Business'   => 'Деловая корреспонденция',
        'Software'   => 'Программное обеспечение',
        'Football'   => 'Футбол',
    ),
    // Англо-Испанский перевод
    'es' => array(
        'General'    => 'Общая лексика',
    ),
    // Англо-Французский перевод
    'ef' => array(
        'General'    => 'Общая лексика',
    ),
    // Англо-Португальский перевод
    'ep' => array(
        'General'    => 'Общая лексика',
    ),
    
    
/** С немецкого на... **/
    
    
// Немецко-Русский перевод
    'gr' => array(
        'General'    => 'Общая лексика',
        'Automotive' => 'Автомобили',
        'Business'   => 'Деловая корреспонденция',
        'Software'   => 'Программное обеспечение',
        'Internet'   => 'Интернет',
        'Football'   => 'Футбол',
    ),
    // Немецко-Английский перевод
    'ge' => array(
        'General'    => 'Общая лексика',
        'Business'   => 'Деловая корреспонденция',
        'Software'   => 'Программное обеспечение',
        'Football'   => 'Футбол',
    ),
    // Немецко-Французский перевод
    'gf' => array(
        'General'    => 'Общая лексика',
        'Football'   => 'Футбол',
    ),
    // Немецко-Испанский перевод
    'gs' => array(
        'General'    => 'Общая лексика',
        'Football'   => 'Футбол',
    ),
    
    
/** С русского на... **/
    
    
// Русско-Английский перевод
    're' => array(
        'General'    => 'Общая лексика',
        'Automotive' => 'Автомобили',
        'Business'   => 'Деловая корреспонденция',
        'Software'   => 'Программное обеспечение',
        'Internet'   => 'Интернет',
        'Logistics'  => 'Логистика',
        'Travels'    => 'Путешествия',
    ),
    // Русско-Немецкий перевод
    'rg' => array(
        'General'    => 'Общая лексика',
        'Business'   => 'Деловая корреспонденция',
        'Internet'   => 'Интернет',
        'Football'   => 'Футбол',
    ),
    // Русско-Французский перевод
    'rf' => array(
        'General'    => 'Общая лексика',
        'Business'   => 'Деловая корреспонденция',
        'Internet'   => 'Интернет',
    ),
    // Русско-Испанский перевод
    'rs' => array(
        'General'    => 'Общая лексика',
    ),
    
    
/** С французского на... **/
    
    
// Французско-Русский перевод
    'fr' => array(
        'General'    => 'Общая лексика',
        'Business'   => 'Деловая корреспонденция',
        'Internet'   => 'Интернет',
        'Perfumery'  => 'Парфюмерия',
    ),
    // Французско-Английский перевод
    'fe' => array(
        'General'    => 'Общая лексика',
    ),
    
    
/** С испанского на... **/
    
    
// Испанско-Русский перевод
    'sr' => array(
        'General'    => 'Общая лексика',
    ),
    // Испанско-Английский перевод
    'se' => array(
        'General'    => 'Общая лексика',
    ),
    // Испанско-Французский перевод
    'sf' => array(
        'General'    => 'Общая лексика',
    ),
    // Испанско-Немецкий перевод
    'sg' => array(
        'General'    => 'Общая лексика',
        'Football'   => 'Футбол',
    ),
    
    
/** С португальского на... **/
    
    
// Португальско-Английский перевод
    'pe' => array(
        'General'    => 'Общая лексика',
    ),
    
    
/** С итальянского на... **/
    
    
// Итальянско-Русский перевод
    'ir' => array(
        'General'    => 'Общая лексика',
    ),
    
    
// Итальянско-Английский перевод
    'ie' => array(
        'General'    => 'Общая лексика',
    ),
);


PHP
<?php
require("./translate_langs.php");

global $langs, $langs_name;
foreach ($langs as $lang => $lang_data)
{
    echo $langs_name[$lang]." = ";
    //print_r($lang_data);
    echo "<br />";
}
echo "<br />";
var_dump($langs);


_____________
Я думал я буду сеять добро, но у меня не получилось. Во-первых, мне помешали, во-вторых я сам отрекся от этой идеи.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.