Досить часто сайти мають декілька мов. В цій статті я опишу як перекладати текст використовуючи API від DeepL для автоматичного перекладу тексту.
Тут буде описаний спосіб який не передбачає використання плагінів чи сторонніх бібліотек. Чистий код з використанням cURL PHP. Цей спосіб підійде як для розробників WordPress так і для сайтів на чистому PHP.
Для цього потрібен аккаунт у 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. В цьому пості, я опишу рішення для кожного з них.
Для цього потрібен 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>”. Наприклад:
Якщо ми перейдемо по лінку, ми потрапимо на сторінку форми Google Calendar з вже заповненими нашими данними.
Це працює:)
Процес експорту події до Apple’s calendar є дещо складніший. Для цього нам потрібно використати сторонню бібліотеку.
Необхідно скачати Zap Calendar iCalendar Library
Використовуючи PHP.
Наприклад:
Ми створюємо функцію makeAppleCalendar, яка приймає параметри – name, begin, end, 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 з нашими данними.