Как сделать переводчик на php
Завалялся у меня скрипт перевода на английский с помощью Google Translate и PHP. Откуда он у меня – долгая история, в общем он не мой. И за корректность на ручаюсь, хотя проверил - вроде работает, и очень шустренько, я думал будут тормоза, курл же все-же используется, но тут все частенько. Может использоваться для перевода ссылок на английский например, или еще чего-то типа такого. Но большие объемы, без интервалов между запросами вряд ли пройдут думаю. Проверялся на PHP 5.3 при кодировке UTF-8.
Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 5 лет назад .
Интересует вопрос, какой метод перевода самый лучший по функциональности, скорости, простоте? Но главное чтобы использовались собственные скрипты, без сторонних плагинов или ресурсов.
Мои варианты:
1. Через файл. ( .txt )
2. Базу данных.
3. Сохранять все слова в массиве PHP.
Видел вариант, в зависимости от страны, php код открывает тот или иной файл .txt, где собственно 2 столбца, слева русские слова а справа перевод на определенный язык.
Если этот способ самый лучший, то был бы признателен помощи в написании скрипта или ссылками на нужную информацию.
Спасибо.
В этой статье я решил показать, как можно перевести русский текст в транслит на PHP. Где это может потребоваться? Например, совсем недавно мне потребовалось сделать следующее: при подписке на обновления сайта, пользователь указывает свои имя и e-mail. Дальше необходимо автоматически зарегистрировать пользователя на сайте (например, для общения на форуме). Но если, например, пароль ещё можно генерировать случайно, то вот логин должен быть осмысленным. А использовать e-mail в качестве логина на том же форуме - плохая идея. Поэтому было принято решение на основании имени сгенерировать логин.
Например, если имя "Михаил", то логин должен быть "mihail". Если такой логин уже занят, то тогда логин "mihail1", если и он уже занят, то "mihail2" и так далее до свободного. Теперь, собственно, возвращаемся к теме статьи. Вот простейшая функция, которая переводит русский текст в транслит:
Думаю, что здесь код очень прозрачный: есть 2 массива с одинаковым числом элементов. В первом массиве буквы русского алфавита, а во втором в соответствующих позициях их написание в транслите. Затем идёт обычная замена с помощью функции str_replace() и возврат результата.
Вот таким образом делается перевод русского текста в транслит на PHP.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Популярность: 1178
Сказал(а) спасибо: 18
В данной теме я попытаюсь описать один из способов получения перевода текстов в виде написания php-скрипта, который далее мы будем использовать на нашем сайте. Если выразиться точнее, то мы разберёмся в том, как написать функцию перевода, которую можно использовать в любом php-скрипте.
Теперь нам нужно узнать, что же за значения отправляются из формы, для этого давайте просмотрим в браузере код элемента(формы), думаю понятно как это делать, потому объяснять не буду и сразу опишу то, что мы должны увидеть. Мы видим, что html нашей формы состоит из очень большого количества строк. В первую очередь нас интересует вот эта:
form id = "gt-form" action = "/" name = "text_form" method = "post" enctype = "application/x-www-form-urlencoded" >
Отсюда мы видим, что страница отправляет содержимое формы самой же себе методом POST. Теперь мы точно знаем куда и как отправлять. Теперь разберёмся ЧТО отправлять.
Смотрим на элементы формы. Здесь имеется множество различных элементов. Выделим самые важные. такие как теги select - элементы для выбора языка текста:
textarea id = "source" name = "text" wrap = "SOFT" tabindex = "0" dir = "ltr" spellcheck = "false" autocapitalize = "off" autocomplete = "off" autocorrect = "off" > Maша ела кашу . Петя гулял с Наташей . Мама мыла Машу с Петей . textarea >
Так же тут есть множество элементов input, у которых присутствует hidden, то есть они нам не видны, но тоже нужны, и их значения тоже отправляются в запросе.
'sl' - это первый элемент select, язык нашего текста, значение его будет в зависимости от выбранного option, соответствие значения и языка можно посмотреть прямо в коде формы, мы установим в 'ru'
'tl' - это язык перевода, второй элемент select, мы укажем 'en'
'js' - значение должно быть установлено в 'n', так как всё происходит без использования JavaScript
'prev' - ну правда, хз что это за параметр он скрытый на форме и установлен в '_t', так и поступим
'hl' - этот параметр говорит гуглу о том, на каком языке нужно возвращать саму страницу в браузер, мы установим в 'ru', хотя это и не важно, нам нужна не вся страница полностью, а только отображаемый на ней перевод. Пусть сама страница будет хоть на китайском, главное перевод на нужном нам языке.
'ie' - судя по установленному значению, кодировка текста, значение устанавливаем в 'UTF-8',
'layout' - не знаю, знать не хочу и не важно - установлено в '2', так и поступим.
'eotf' - анологично предыдущему, установлено в '1'.
'text' - собственно наш текст, который нужно перевести
'file' - отправляется пустым значением, возможно нужен для указания того, что результат нужно записать в файл.
Нам нужно делать этот запрос в ходе выполнения нашей программы, а не так же, как на странице переводчика, иначе наша затея безполезна.
Для POST запросов можно пользоваться AJAX, а мы воспользуемся cURL, так как нам нужен php скрипт на сервере.
Итак, начнём написание нашего скрипта. Я не буду писать текст всего php-файл, так как он у каждого может быть свой а может быть вынесен в отдельный php-файл, так сказать в виде модуля. Мы напишем только функцию, которая нами используется в этом скрипте и которая осуществляет перевод. В эту функцию передаётся наш текст, а возвращается текст перевода:
//Для наглядности запишем все параметры запроса массивом
$post = array(
'sl' => 'ru' ,
'tl' => 'en' ,
'js' => 'n' ,
'prev' => '_t' ,
'hl' => 'ru' ,
'ie' => 'UTF-8' ,
'layout' => '2' ,
'eotf' => '1' ,
'text' => $text ,
'file' => ''
);
Итак мы получили результат, что он из себя представляет? А представляет он из себя html-текст всей страницы, которая должна была по сути отобразиться в браузере, и этот текст помещён в переменную $ansver. Но нам не нужна вся страница, а нужен только перевод, потому мы будем парсить эту текстовую переменную, и вырежем из неё текст перевода. Как я указывал ранее, на странице присутствует тег span:
Он содержит наш перевод. Но, как мы видим, в этом тэге вложено ещё несколько тегов span, содержащих куски перевода. То есть нам вернулся перевод, разрезанный на куски, которые помещены в тэги span. Нам предстоит "вырезать" эти куски и склеить в один текст. Воспользуемся регулярными выражениями и распарсим текстовую переменную $answer.
Результат парсинга помещается в массив $mass, в котором нужен один элемент под индексом 1(в нулевом элементе должна получиться вся страница)
Регулярное выражение говорит о том, что нам нужен кусок текста:
1)после тега span с id равным result_box
2)class равен любому тексту, заключённому в кавычки(на случай если гугловцы изменят его имя)
3)после куска текста сделует закрывающий тег span, после которого сразу же идёт закрывающий div
Совпадением будет только один кусок на всей странице, и будет состоять из нескольких тегов span, содержащих перевод, а именно:
$post = array(
'sl' => 'en' ,
'tl' => 'ru' ,
'js' => 'n' ,
'prev' => '_t' ,
'hl' => 'ru' ,
'ie' => 'UTF-8' ,
'layout' => '2' ,
'eotf' => '1' ,
'text' => $text ,
'file' => ''
);
curl_setopt ( $ch , CURLOPT_POSTFIELDS , http_build_query ( $post ));
$answer = curl_exec ( $ch );
curl_close ( $ch );
preg_match ( "~ (.*?)
, $answer , $mass );
preg_match_all ( "~>([^ , $mass [ 1 ], $mass );
$result = "" ;
for ( $n = 0 ; $n count ( $mass [ 1 ]); $n ++)
<
$result .= $mass [ 1 ][ $n ];
Читайте также: