Досить часто сайти мають декілька мов. В цій статті я опишу як перекладати текст використовуючи 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!

Події дуже популярний тип постів в WordPress. Отже користувачам часто потрібно експортувати подію до своїх календарів.

Це може бути Apple iCal або Google Calendar. В цьому пості, я опишу рішення для кожного з них.

Як створити посилання до Google Calendar?

Для цього потрібен PHP. 
Наприклад: 

Ми створюємо функцію make_google_calendar_link, яка приймає такі параметри – name, begin, end, location, details.

Name – ім’я події(заголовок).
Begin – дата початку події.
End – дата закінчення події.
Location – місце проведення події.
Details – опис події.

				
					function make_google_calendar_link($name, $begin, $end, $location, $details) {
	$params = array('&dates=', '/', '&location=', '&details=', '&sf=true&output=xml');
	$url = 'https://www.google.com/calendar/render?action=TEMPLATE&text=';
	$arg_list = func_get_args();
	for ($i = 0; $i < count($arg_list); $i++) {
		$current = $arg_list[$i];
		if(is_int($current)) {
			$t = new DateTime('@' . $current, new DateTimeZone('UTC'));
			if($i == 2){
				$current = $t->format('Ymd\THis');
			}else{
				$current = $t->format('Ymd\THis\Z');
			}
			unset($t);
		}
		else {
			$current = urlencode($current);
		}
		$url .= (string) $current . $params[$i];
	}
	return $url;
}
				
			

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

				
					$linkGoogle = make_google_calendar_link('Event name', strtotime('26 Oct, 10:30 pm'), strtotime('26 Oct, 11:30 pm'), "Khmelnytskyi", 'Test description');
				
			

Ми отримаємо лінк до Google Calendar. 

				
					https://www.google.com/calendar/render?action=TEMPLATE&text=Event+name&dates=20231026T223000Z/20231026T233000&location=Khmelnytskyi&details=Test+description&sf=true&output=xml
				
			

Створимо html і добавимо отриманий лінк до атрибуту “href” тега “<a>”. Наприклад:

				
					<a href="<?php echo $linkGoogle; ?>" target="_blank">Add to Google Calendar</a>
				
			

Якщо ми перейдемо по лінку, ми потрапимо на сторінку форми Google Calendar з вже заповненими нашими данними.

Це працює:)

Як створити експорт до Apple iCal?

Процес експорту події до Apple’s calendar є дещо складніший. Для цього нам потрібно використати сторонню бібліотеку.

Необхідно скачати Zap Calendar iCalendar Library

Використовуючи PHP. 
Наприклад: 

Ми створюємо функцію makeAppleCalendar, яка приймає параметри – namebeginend,  details,  namefile.

Name – ім’я події(заголовок).
Begin – дата початку події.
End – дата закінчення події.
Details – опис події.
Namefile – ім’я файлу в який буде експортовано подію.

				
					function makeAppleCalendar($name, $begin, $end, $details, $namefile){
    require('./icalendar-master/zapcallib.php');//include library
    $icalobj = new ZCiCal();
    $eventobj = new ZCiCalNode("VEVENT", $icalobj->curnode);
    $eventobj->addNode(new ZCiCalDataNode("SUMMARY:" . $name));
    $eventobj->addNode(new ZCiCalDataNode("PRODID:-//WordPress - MECv6.6.5//EN"));
    $eventobj->addNode(new ZCiCalDataNode("DTSTART:" . ZCiCal::fromSqlDateTime($begin) . 'Z'));
    $eventobj->addNode(new ZCiCalDataNode("DTEND:" . ZCiCal::fromSqlDateTime($end) . 'Z'));
    $uid = date('Y-m-d-H-i-s') . "@demo.icalendar.org";
    $eventobj->addNode(new ZCiCalDataNode("DTSTAMP:" . ZCiCal::fromSqlDateTime()));
    $eventobj->addNode(new ZCiCalDataNode("DESCRIPTION:" . $details));
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename=$namefile.ics");
    echo $icalobj->export();
}
				
			

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

				
					makeAppleCalendar("Event name", "2023-11-11 22:30:00", "2023-11-11 23:30:00", "Event description", "calendar");
				
			

Ми отримаємо файл calendar.ics
Коли ми відкриємо файл, то відкриється форма Apple Calendar  з нашими данними.