Переклад тексту використовуючи DeepL API

by | Жов 20, 2023

Досить часто сайти мають декілька мов. В цій статті я опишу як перекладати текст використовуючи API від DeepL для автоматичного перекладу тексту.

Тут буде описаний спосіб який не передбачає використання плагінів чи сторонніх бібліотек. Чистий код з використанням cURL PHP. Цей спосіб підійде як для розробників WordPress так і для сайтів на чистому PHP.

Як перекласти текст за допомогою DeepL API?

Для цього потрібен аккаунт у DeepL з безкоштовним чи Pro тарифом. 

Різницю між планами ви можете побачити в наступному скріні. Актуальність цін і наповненість тарифів на момент публікації.

Щоб перевірити актуальність планів а також список країн в яких працює DeepL API перейдіть по лінку.

 

Створення функцію перекладу

Давайте створимо функцію яка надсилає запит до DeepL і повертає перекладений текст на вибрану мову.

Нехай це буде функція deepLWG яка приймає параметри text i lang.

Text – це власне текст який ви бажаєте перекласти.
Lang – це мова на яку ви бажаєте перекласти текст

				
					function deepLWG($text, $lang){
    $key = 'deepl-api-key';
    $string = "auth_key=$key&text=$text&target_lang=$lang";
    $ch = curl_init();
    $apiLink = 'https://api.deepl.com/v2/translate';
    // $apiLink = 'https://api-free.deepl.com/v2/translate'; //if you use free account
    curl_setopt($ch, CURLOPT_URL, $apiLink);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $string);

    $headers = array();
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    return json_decode($result)->translations[0]->text ? json_decode($result)->translations[0]->text : $text;
}
				
			

$key – це ваш ключ до DeepL API. Ви його отримуєте після реєстрації аккаунта.
В залежності від того який у вас тариф Pro чи Free, ви вказуєте відповідний url. Це для Pro версії:

				
					$apiLink = 'https://api.deepl.com/v2/translate';
				
			

Для Free версії потрібно використовувати цей url

				
					$apiLink = 'https://api-free.deepl.com/v2/translate';
				
			

Остання строка функції:

				
					return json_decode($result)->translations[0]->text ? json_decode($result)->translations[0]->text : $text;
				
			

Перевіряє за допомогою тернарного оператора, чи отримали ми у відповідь перекладений текст. Якщо так то функція повертає його, а якщо ні, то повертає надісланий до того не перекладений текст.

Якщо ми викличемо функцію. Наприклад:

				
					$dpl = deepLWG('Привіт Світ!', 'EN');
				
			

Ми отримаємо у відповідь Hello World!