Багатомовна php функція перекладу gtranslate ()

А почну я з того, що перекладач Google досить динамічний сервіс. Крім використання кнопки «Перевести», переклад, що вводяться в форму даних, може здійснюватися і автоматично, тобто на льоту. Кожен такий переклад, це запит до сервера. Таким чином, можна сказати, що наш запит не створить особливої ​​проблеми. Проте, зловживати цією можливістю, мабуть, не варто.

Для отримання результату в форматі JSON параметру client треба привласнити значення x. У параметрі q передається текст, який треба перевести. Параметр sl містить ідентифікатор мови з якого здійснюється переказ, а tl - ідентифікатор мови на який здійснюється переказ. І ще, результат буде в кодуванні UTF-8.

В принципі, нічого складного, а ось і PHP-код функції:

Звертаю Вашу увагу на те, що функція gtranslate () поверне об'єкт з відповідними властивостями. Таким чином, функція виходить досить гнучкою і динамічною.

Нижче я приведу приклад отримання значення рядка перекладу:

$ Gt = gtranslate ( 'приклад використання машинного масла', 'ru', 'en');
echo $ gt-> sentences [ '0'] -> trans; // поверне рядок: example of the use of engine oil

echo '

'; var_dump ($ gt); echo '
';

У випадку з наведеними прикладом, Ви отримаєте наступне:

object (stdClass) # 1 (3) [ "sentences"] =>
array (1) [0] =>
object (stdClass) # 2 (4) [ "trans"] =>
string (32) "example of the use of engine oil"
[ "Orig"] =>
string (69) "приклад використання машинного масла"
[ "Translit"] =>
string (0) ""
[ "Src_translit"] =>
string (38) "primer ispol'zovaniya mashinnogo masla"
>
>
[ "Src"] =>
string (2) "ru"
[ "Server_time"] =>
int (1)
>

Зверніть увагу, що Google перекладач повертає результат розбитий на пропозиції (англ. Sentences). я б назвав фрагменти. При великому обсязі даних, ми отримаємо цілий масив таких пропозицій. Обробити їх можна, наприклад, так:

foreach ($ gt-> sentences as $ sentence) echo '

'. $ Sentence-> trans. '

';
echo '

'. $ Sentence-> orig. '

';
>

З урахуванням того, що в моїй функції тепер використовується метод передачі даних POST, проблем з великими даними виникнути не повинно.

Цікавим тут є і параметр src_translit. яке містить транслит фрагмента, в даному випадку написання російського тексту латинськими літерами. Втім, для цього краще використовувати локальний варіант, см. Php-функцію translit (). Правда остання заточена в більшій мірі для створення ЧПУ.

Повертаючись же до Google перекладачеві, варто ще сказати і про параметр dict. який з'являється при перекладі одного слова. Він буде містити ряд додаткових словникових даних, на кшталт визначення частини мови, варіантів перекладу і т.д. але тут дивіться самі.

На цьому у мене все. Дякуємо за увагу. Успіхів!

Залишилося лише зрозуміти, куди це все присобачить.

@ Максим один з варіантів - генерація ЧПУ. Звичайно, можна використовувати і локальний транслит, але я думаю куди як результативніше розширите ключового слова за рахунок ЧПУ англійською. На blogger цього звичайно не зробити, я сам, вручну, перекладаю в трансліті потрібний фрагмент і прописую постійне посилання. Якщо ж мова йде про своєму хостингу, то цілком можливо робити переклад заголовка і генерувати ЧПУ англійською. До слова, тут буде не зайвим використовувати Ajax, тому що сервіс може бути і не доступний.

Коли пропозицій кілька, чомусь видає тільки перше. Використовую таку конструкцію: $ gt-> sentences [ '0'] -> trans;
Як отримати весь текст цілком в одну змінну? Дякуємо!

2Ya для того щоб відповісти на Ваше питання потрібно розібратися, що таке об'єкт (object) і що таке масив (array). Або все таки варто почати з того, що таке змінна?

Я розібрався, спасибі. Просто не сильний в php, тому вибачайте. Дуже шкода, що великі тексти таким чином в автоматі перевести не вийде. Перекладає тільки короткі.

2Ya. да, GET запит невеликий, але можна використовувати POST. Для цього знадобиться трохи змінити функцію, а точніше значення змінних $ filename і $ options:

Правда слід врахувати, що Google Translate розбиває великий текст на пропозиції. Ось варіант виведення пропозицій перекладу і оригіналу:

foreach ($ gt-> sentences as $ sentence) echo '

'. $ Sentence-> trans. '

';
echo '

'. $ Sentence-> orig. '

';
>

Костянтин, спасибі, Ви мені дуже допомогли. )

чет не працює

2Деніс Сташук що саме не працює. Перевірив, ніби все приклади працюють.

Дивно як здорово все працює. Думаю gtranslate () і справді буде на багато корисніше для чпу ніж translit (). Спасибі вам величезне за вашу роботу.

2Siren DS так, тема цікава, але залежність від онлайн сервісу теж треба враховувати.

У минулому коді транслітерації вирізував пробіл перед словом, що починається з Е | Е ось виправлений варіант:

function translit ($ string) $ string = preg_replace ( '# \ s + # is', '', mb_strtolower ($ string));

$ String = preg_replace ( '# (а | і | про | у | и | е | ю | я | ь | ь | \ s) (е | е) #isu', 'ye', ''. $ String) ;

$ String = trim (preg_replace ( '# \ s + # is', '', $ string));
>

2Назір Гебеков в моїй функції translit () буква "е" теж врахована. Тут просто не потрібно забувати, що код залежимо від кодування через кирилиці.

так я використовую тільки utf-8 кодування це і так повинно бути зрозуміло бо я використовував mb_strtolower а не strtolower.

І ще в цій функції враховуються моменти коли необхідно використовувати "ye" а коли "e" замість російських "е" і "е" що власне і робить гугловський транслітер.

Щодо різних кодувань що заважає використовувати iconv перед застосуванням translit?

2Назір Гебеков згоден для трансліта зійде і локальна функція, а ось для повноцінного перекладу все таки доведеться використовувати сервіс, що і робить моя функція.

2Александр Гентера на жаль і ах, при великій кількості звернень з одного IP йде блокування, тому що функція не використовує офіційного API Google Translate. Як варіант, можна спробувати використовувати проміжний сервер, який знаходиться на іншому IP для отримання даних.

а у мене чомусь ця функція gtranslate () замість російських букв видає суцільні. (((Як з цим впоратися?