Сьогоднішній кейс про те, як зробити локалізацію розробленого вами сайту на іншу мовну версію з автоматизацією перекладу мовних фраз за допомогою сервісу Яндекс.Перевод. У кейсі розглядаються два ключових механізму: обробка CSV-файлів з мовними фразами і автоматичний переклад російськомовних фраз на українську мову.
Сьогоднішній кейс про те, як зробити локалізацію розробленого вами сайту на іншу мовну версію з автоматизацією перекладу мовних фраз за допомогою сервісу Яндекс.Перевод. У кейсі розглядаються два ключових механізму: обробка CSV-файлів з мовними фразами і автоматичний переклад російськомовних фраз на українську мову.
Тож почнемо. Зараз я займаюся перенесенням (з серйозною переробкою) одного досить великого сайту на Бітрікс. Процес дуже цікавий і про нього постараюся найближчим часом зробити більш детальний пост з розкриттям ключових моментів. А зараз, про локалізацію.
Для початку була зроблена російськомовна версія сайту (замовник дану версію вибрав основний). Абсоллютная все кириличного напису у всіх компонентах в обов'язковому порядку були винесені в мовні фрази. Дуже рекомеую не залишати в мовних фразах дефолтні заготовки (в стилі "а раптом знадобиться") - не знадобляться! (А якщо будуть потрібні - краще нові створите, зате собі роботу скоротіть в перевірці коректності перекладу). Також рекомендую все загальні фрази, які використовуються у великій кількості шаблонів компонентів, виносити в мовної файл хедера (правда, для сторінок, що підключаються без хедера фрази все одно доведеться дублювати або примусово підключати мовної файл хедера).
У загальному вигляді підключення мовних фраз виглядає, приблизно, так:
Початківці розробники 1С-Бітрікс (хоча і багато хто вже досить досвідчені розробники теж) все залишають кирилицю прямо в шаблоні, вважаючи, що потім, пізніше, перенесуть. І так і залишається вся ця каша на роки в шаблоні. Добре, якщо сайт в одній мовній версії влаштовує своїх відвідувачів роками і виробляти його локалізацію немає необхідності, а че якщо немає, як каже Семен Слєпаков? Тому привчайте себе завжди виносити кирилицю в мовні фрази. Чи не ви, так хтось інший обов'язково висловлять вам за це свою подяку.
Тепер вважаємо, що вся кирилиця зберігається в мовних фразах і переказ не буде такою вже й складною. Для того, щоб витягнути все мовні фрази для перекладу скористаємося модулем "Переклад" системи 1С-Бітрікс (власникам редакцій без даного модуля доведеться писати скрипт, який за вас витягне все мовні файли і сформує CSV-файл).
Якщо у вас інший набір встановлених в системі мовних файлів - останні 3 колонки будуть відрізнятися, але я розглядаю варіант, коли в системі російський, українською та англійською мовами.
Файл кладемо десь в системі (я зазвичай ставлю в upload), а в нашому скрипті-обробнику відразу додаємо першу фразу із зазначенням повної, абсоллютная шляху до файлу:
І файлик, в який запишемо результат:
Далі підключаємо бітріксовий клас для обробки CSV:
Бітріксовую бібліотеку я використовую тільки для запису CSV-файлів. Для читання вже давно (при використанні бітріксового класу близько року тому виявив проблеми для складного файлу, у якого символ-роздільник присутній також і в значеннях) використовую таку функцію:
GetTranslitCode - це обгортка навколо звичайної бітріксовой функції транслітерації:
Проганяємо наш csv-файл через обробку csv-файлу і отримуємо асоціативний масив з рядків файлу з заголовками у вигляді ключів:
Створюємо з перезапис результуючий файл:
Записуємо відразу в результуючий файл заголовки:
Далі приступаємо до перекладу. Для роботи я використовував клас Yandex_Translate. який трохи підправив. тому описаний в хабростатье метод вже Достатньо давно не працює. У класі я виправив урл, на який відправляється запит, а також налаштував відправку персонального ключа, який передається при визначенні класу
Створюємо примірник клас перекладача і проганяє весь масив мовних фраз через функцію перекладу. Кожен рядок відразу ж зберігаємо в файл:
Усе! Тепер мовні фрази створені і можна спокійно займатися реалізацією другої локалізації сайту.
В продовження теми: Для інтернет-магазину дуже важливий момент - відображення значень властивостей, а в багатомовності це один з найскладніших моментів. Властивості відображаються в розумному фільтрі, в списку товарів, в картці товару, але у Бітрікс немає можливості для одного і того ж властивості задати варіації в різних мовних версіях.
Для значень властивостей цей недолік можна обійти за допомогою властивості типу "Довідник", заповнюючи UF_NAME основною мовою, а інше поле (наприклад, UF_DESCRIPTION) - забираємо під другу мову. Але цього не можна зробити для назв властивостей - ні поля, в якому це зберігати.
З усієї цієї проблеми народилося рішення: Створив окремий мовний файл props.php, який підключив поруч з мовним файлом хедера:
Ось таким нехитрим способом завантажуємо свої окремі значення для української мови
Далі, дописуємо функцію отримання значень з довідника:
Функція отримує на вході параметри для вибору, який довідник взяти, і параметри для фільтрації - які значення потрібні. На виході для української мови матимемо україномовні значення (якщо не заповнені - налаштував переклад за допомогою яндекс.перекладач).
Далі - займемося назвами властивостей. Ось приклад для обробки розумного фільтра:
Спочатку проганяє значення довідників через функцію, описану вище, а потім - займаємося обробкою назв свойст.
На підставі символьного коду властивості перевіряємо наявність мовної фрази - якщо фрази немає, то виробляємо автоматичний переклад з допомогою яндекс.перекладач і Записуємо отриманий результат в заготовку для запису в мовної файл. Далі, коли все властивості перебрані в мовної файл виробляємо запис отриманих мовних фраз: зчитуємо наш кастомний мовної файл і дописуємо в нього нові фрази.
Ось таке чудове рішення народилося. Чесно кажучи, довго не міг придумати, як же обійти варіант роботи з властивостями.