Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрипт перевод с русский на украинский
 
 автор: 27   (01.04.2007 в 21:36)   письмо автору
 
 

Здравствуйте,
У меня задача такова:
Пользователь вводить в строку поиска текст на русском, поскольку в базе большая часть на украинском, следовательно нужно перевести с русского на украинский и начинать поиск.

перевод слов(а) должно проходить не заметно для посетителя.
Сразу в голову "пришела" мысль:
зайти на онлайн переводчик, автоматом заполнить формы и с полученным ответом начанить искать.

Нашел сайт, на котором доступно переводить рус => укр. Вот
http://trident.com.ua/translation/online.html

но ни как не могу написать код, не представляю как. Нужна Ваша помощь, надеюсь.

   
 
 автор: NIK   (01.04.2007 в 22:11)   письмо автору
 
   для: 27   (01.04.2007 в 21:36)
 

тут видимо нужно отправлять данные через POST на эту страницу непосредственно из твоего скрипта через сокеты. И извлекать из ответа переведённый текст через регулярные выражения...

   
 
 автор: 27   (01.04.2007 в 22:20)   письмо автору
 
   для: NIK   (01.04.2007 в 22:11)
 

Если можно привести код этого действа, я php знаю "по стольку по скольку".
Сегодня весь день на это потратил, а результата не достиг.

   
 
 автор: Disable   (01.04.2007 в 23:53)   письмо автору
 
   для: 27   (01.04.2007 в 22:20)
 

Делается это примерно вот так:
1) чтобы не возиться с ява скриптами (тем более лично я их почти не знаю :) ) пишем скрипт просмотра передающихся данных:


<?php

if (empty($_POST))
{
//теперь просто копируем код страницы с http://trident.com.ua/translation/online.html
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
<title>Online</title>
<script>
<!-- hide this
var browser;

function init(){
    browser = navigator.appName;
    var src = document.form1.SrcTxt;
    src.focus();
    defaultStatus="Type or Paste any text to the window";

    var cook = document.cookie;
    var i = cook.indexOf("DIR") + 4;
    var lang = cook.substring(i, i + 2);
    i = cook.indexOf("SUB") + 4;
    var subj = cook.substring(i, i + 2);

    var tfr = document.form1.TranFrom;
    for(i = 0; i < tfr.length; i++)
        if(tfr[i].value.charAt(0) == lang.charAt(0))
        {
            tfr[i].selected = true;
            break;
        }

    var tto = document.form1.TranTo;
    for(i = 0; i < tto.length; i++)
        if(tto[i].value.charAt(0) == lang.charAt(1))
        {
            tto[i].selected = true;
            break;
        }

    var sub = document.form1.Subject;
    for(i = 0; i < sub.length; i++)
        if(sub[i].value == subj)
        {
            sub[i].selected = true;
            break;
        }
    return true;
}

function paste_txt(arg) {
    arg.value = "";
    var rng;
    try{
        rng = arg.createTextRange();
    }
    catch(e){
        alert("You have to use Ctrl-V to Paste the text in "+browser);
        arg.focus();
        return false;
    }
    rng.execCommand("paste");
    arg.focus();
    return false;
}

function copy_txt(arg) {
    var rng;
    try{
              rng = arg.createTextRange();
    }
    catch(e){
        alert("You have to use Ctrl-C to Copy the text in "+browser);
        arg.focus();
        return false;
    }
    rng.select();
    rng.execCommand("copy");
    arg.focus();
    return false;
}

function delete_txt(arg) {
    arg.value = "";
    arg.focus();
    return false;
}

function validate(arg) {
    var src = arg.SrcTxt;
    if(src.value.length == 0) {
        alert("Original text window is Empty");
        return false;
    }
    return true;
}
//-->
</script>
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="../css/tsl.css">
</head>

<body bgcolor="#ffffff" lang=EN-US onLoad="init()">
<blockquote>
<table border=0 cellpadding=5>
<tr valign=top><td width=570>

<div id="intro1">
<h2>Pragma on-line translation</h2>
<p><b>NOTE:</b> Original text can be in English, German, Latvian, Russian or Ukrainian.
<br>
Choose language of the original text, its subject and destination language.
</p>
</div>

<div id="trans">
<form name="form1" action="index1.php" method=POST  onSubmit="return validate(this)">
 <input type="hidden" name="Dialog" value="Eng">
 <input type="hidden" name="Format" value="TXT">
 <table border=1 cellspacing=0 cellpadding=5 name="tabl1" width=580>
 <tr>
  <td width=400 colspan=2 valign=top style='border:none;'>
        Original Text: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
             &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
             &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
         <input type="IMAGE" src="/images/paste.gif" onClick="javascript:return paste_txt(document.form1.SrcTxt)">
        <input type="IMAGE" src="/images/copy.gif" onClick="javascript:return copy_txt(document.form1.SrcTxt)">
        <input type="IMAGE" src="/images/delete.gif"  onClick="javascript:return delete_txt(document.form1.SrcTxt)"><br>

  <textarea rows="7" cols="43" name="SrcTxt" wrap="virtual"></textarea>
  </td>
  <td width=220 valign=top align=center style=border:none>
  <br><br>
    <div id="sets">
    Language:
     <select name="TranFrom" style='margin-top:2'>
      <option value="Eng">English
      <option value="Ger">German
      <option value="Lat">Latvian
      <option value="Rus">Russian
      <option value="Ukr">Ukrainian
    </select><br>
    Subject:
     <select name="Subject" style='margin-top:4'>
      <option value="**">Common
      <option value="AN">Anatomy
      <option value="AU">Auto
      <option value="BZ">Business
      <option value="CH">Chemistry
      <option value="IN">Computers
      <option value="EG">Engineering
      <option value="LW">Law
      <option value="MD">Medicine
      <option value="ML">Military
      <option value="SO">Sport
    </select>
    </div>
   <br>
  </td>
 </tr>
</table>

<table border=1 cellspacing=0 cellpadding=5 name="table2" width=580>
 <tr>
  <td width=220 valign=top align=center style='border:none; vertical-align:baseline'>
  <br>
  <div id="funcs">
Translate To:
         <SELECT NAME="TranTo">
          <option value="Eng">English
          <option value="Ger">German
          <option value="Lat">Latvian
          <option value="Rus">Russian
          <option value="Ukr">Ukrainian
        </SELECT>  </div>
  <br><br>
<input type="SUBMIT" value="       Translate       " name="Translate">
  </td>
  <td width=378 colspan=2 valign=top style='border:none'>
  Translated Text: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
             &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
             &nbsp; &nbsp; &nbsp; &nbsp;
         <input type="IMAGE" src="/images/paste.gif" onClick="javascript:return paste_txt(document.form1.DstTxt)">
        <input type="IMAGE" src="/images/copy.gif" onClick="javascript:return copy_txt(document.form1.DstTxt)">
        <input type="IMAGE" src="/images/delete.gif"  onClick="javascript:return delete_txt(document.form1.DstTxt)"><br>

  <textarea rows="7" cols="43" name="DstTxt" wrap="virtual"></textarea>
  </td>
 </tr>
</table>

</form>
</div>

</td><td valign=middle align=right width=250>
<div id="onlinks">
<p>Also you can download and try our trial translator
<b><a href="../download.html">Pragma 4.x</a></b>.<p>
</div>
</td></tr>
</table>

<hr>
<sup><font color=silver><i>Copyright &copy; 1999-2007 Trident Software, Ltd. All rights reserved.</i></font>
<a href='&#77;&#97;&#73;&#76;&#84;o&#58;trident&#64;kagi&#46;com'><font color=gray>trident&copy;kagi&middot;com</font></a></sub>

</blockquote>
</body>
</html>
<?php
exit;
}
print_r($_REQUEST);
?>


там я поменял только строку
<form name="form1" action="index.cgi" method=POST onSubmit="return validate(this)">
на
<form name="form1" action="index1.php" method=POST onSubmit="return validate(this)">
чтобы данные шли куда надо.

сохраняем это как index1.php, запускаем на локалке или хосте, вводим данные и жмем кнопочку TRANSLATE...

   
 
 автор: Disable   (02.04.2007 в 00:02)   письмо автору
 
   для: 27   (01.04.2007 в 22:20)
 

получаем примерно такую картинку

Array
(
[Dialog] => Eng
[Format] => TXT
[SrcTxt] => русский текст
[TranFrom] => Rus
[Subject] => **
[TranTo] => Ukr
[Translate] => Translate
[DstTxt] =>
)

теперь мы знаем что надо отправлять скрипту по методу ПОСТ.
итоговый скрипт модет выглядеть как-то так:

<?php
//эта функция шлет данные методом пост через сокет и возвращает ответ
function post_data($path,$data,$host)
{
    
$fp=fsockopen($host,80,$errno,$errstr,30);
    if (!
$fp)
        {
                        echo 
"$errstr ($errno)";
        }
    else
         {
            
$l='';
            
$out="POST $path HTTP/1.1\r\n";
                             
$out .="Content-Type: application/x-www-form-urlencoded\r\n";
                             
$out.= "Host: $host\r\n";
            
$out.="User-Agent: Opera/9.02 (Windows NT 5.1; U; ru)\r\n";
            
$out.='Content-Length: '.strlen($data)."\r\n";
            
$out.='Connection: close'."\r\n";
                        
$out.="\r\n";
            
$out.=$data;

            
fwrite($fp,$out);
            while (!
feof($fp))
            
$l.=fgets($fp);
            return 
$l;
        }
    }
//что переводим
 
$text='тест украинский';
//это строка данных
$data='TranFrom=Rus&TranTo=Ukr&Subject=**&Dialog=Eng&Format=TXT&Translate=Translate&DstTxt=&SrcTxt='.$text;
$host='trident.com.ua';
$path='/translation/index.cgi';
$page=post_data($path,$data,$host);
//выделяем перевод, который содержится в <textarea>
 
preg_match_all('|<textarea[^>]+>(.+)</textarea>|sU',$page,$arr);
//выводим второе поле
 
echo $arr[1][1];
?>

   
 
 автор: Disable   (02.04.2007 в 00:07)   письмо автору
 
   для: 27   (01.04.2007 в 22:20)
 

только формат переведенного текста выглядит очень интересно :)
&#1090;&#1077;&#1089;&#1090; &#1091;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1080;&#1081;
думаю, что юзать его для поиска по базе довольно проблематично.
Можно, конечно, перегнать, русские буквы я из такой билеберды преобразовывал, а вот с украинскими не пробовал...

   
 
 автор: 27   (02.04.2007 в 09:45)   письмо автору
 
   для: Disable   (02.04.2007 в 00:07)
 

У меня текст отобразился корректно, но все - же перегнать нужно.
Весьма благодарен, за помощь, очень помогли.

   
 
 автор: Disable   (02.04.2007 в 12:35)   письмо автору
 
   для: 27   (02.04.2007 в 09:45)
 

ну при перегоне есть 2 арианта:
первый "в лоб";

<?php
$s
='&#1090;&#1077;&#1089;&#1090; &#1091;&#1082;';
$s=str_replace('&#1090;','т',$s);
$s=str_replace('&#1077;','е',$s);
//и так весь алфавит с большими и алыми буквами, заменяемые буквы в кодировке утф-8
//...........................................
echo $s;
?>


второй способ это найти таблицу перекодировки или готовый скрипт.

можно еще поискать другой сайт переводчик :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования