Як я робив локалізацію сайту з помощю одчіка

Сьогоднішній кейс про те, як зробити локалізацію розробленого вами сайту на іншу мовну версію з автоматизацією перекладу мовних фраз за допомогою сервісу Яндекс.Перевод. У кейсі розглядаються два ключових механізму: обробка CSV-файлів з мовними фразами і автоматичний переклад російськомовних фраз на українську мову.







Сьогоднішній кейс про те, як зробити локалізацію розробленого вами сайту на іншу мовну версію з автоматизацією перекладу мовних фраз за допомогою сервісу Яндекс.Перевод. У кейсі розглядаються два ключових механізму: обробка CSV-файлів з мовними фразами і автоматичний переклад російськомовних фраз на українську мову.

Тож почнемо. Зараз я займаюся перенесенням (з серйозною переробкою) одного досить великого сайту на Бітрікс. Процес дуже цікавий і про нього постараюся найближчим часом зробити більш детальний пост з розкриттям ключових моментів. А зараз, про локалізацію.

Для початку була зроблена російськомовна версія сайту (замовник дану версію вибрав основний). Абсоллютная все кириличного напису у всіх компонентах в обов'язковому порядку були винесені в мовні фрази. Дуже рекомеую не залишати в мовних фразах дефолтні заготовки (в стилі "а раптом знадобиться") - не знадобляться! (А якщо будуть потрібні - краще нові створите, зате собі роботу скоротіть в перевірці коректності перекладу). Також рекомендую все загальні фрази, які використовуються у великій кількості шаблонів компонентів, виносити в мовної файл хедера (правда, для сторінок, що підключаються без хедера фрази все одно доведеться дублювати або примусово підключати мовної файл хедера).

У загальному вигляді підключення мовних фраз виглядає, приблизно, так:

Початківці розробники 1С-Бітрікс (хоча і багато хто вже досить досвідчені розробники теж) все залишають кирилицю прямо в шаблоні, вважаючи, що потім, пізніше, перенесуть. І так і залишається вся ця каша на роки в шаблоні. Добре, якщо сайт в одній мовній версії влаштовує своїх відвідувачів роками і виробляти його локалізацію немає необхідності, а че якщо немає, як каже Семен Слєпаков? Тому привчайте себе завжди виносити кирилицю в мовні фрази. Чи не ви, так хтось інший обов'язково висловлять вам за це свою подяку.

Тепер вважаємо, що вся кирилиця зберігається в мовних фразах і переказ не буде такою вже й складною. Для того, щоб витягнути все мовні фрази для перекладу скористаємося модулем "Переклад" системи 1С-Бітрікс (власникам редакцій без даного модуля доведеться писати скрипт, який за вас витягне все мовні файли і сформує CSV-файл).







Якщо у вас інший набір встановлених в системі мовних файлів - останні 3 колонки будуть відрізнятися, але я розглядаю варіант, коли в системі російський, українською та англійською мовами.

Файл кладемо десь в системі (я зазвичай ставлю в upload), а в нашому скрипті-обробнику відразу додаємо першу фразу із зазначенням повної, абсоллютная шляху до файлу:

І файлик, в який запишемо результат:

Далі підключаємо бітріксовий клас для обробки CSV:

Бітріксовую бібліотеку я використовую тільки для запису CSV-файлів. Для читання вже давно (при використанні бітріксового класу близько року тому виявив проблеми для складного файлу, у якого символ-роздільник присутній також і в значеннях) використовую таку функцію:

GetTranslitCode - це обгортка навколо звичайної бітріксовой функції транслітерації:

Проганяємо наш csv-файл через обробку csv-файлу і отримуємо асоціативний масив з рядків файлу з заголовками у вигляді ключів:

Створюємо з перезапис результуючий файл:

Записуємо відразу в результуючий файл заголовки:

Далі приступаємо до перекладу. Для роботи я використовував клас Yandex_Translate. який трохи підправив. тому описаний в хабростатье метод вже Достатньо давно не працює. У класі я виправив урл, на який відправляється запит, а також налаштував відправку персонального ключа, який передається при визначенні класу

Створюємо примірник клас перекладача і проганяє весь масив мовних фраз через функцію перекладу. Кожен рядок відразу ж зберігаємо в файл:

Усе! Тепер мовні фрази створені і можна спокійно займатися реалізацією другої локалізації сайту.

В продовження теми: Для інтернет-магазину дуже важливий момент - відображення значень властивостей, а в багатомовності це один з найскладніших моментів. Властивості відображаються в розумному фільтрі, в списку товарів, в картці товару, але у Бітрікс немає можливості для одного і того ж властивості задати варіації в різних мовних версіях.

Для значень властивостей цей недолік можна обійти за допомогою властивості типу "Довідник", заповнюючи UF_NAME основною мовою, а інше поле (наприклад, UF_DESCRIPTION) - забираємо під другу мову. Але цього не можна зробити для назв властивостей - ні поля, в якому це зберігати.

З усієї цієї проблеми народилося рішення: Створив окремий мовний файл props.php, який підключив поруч з мовним файлом хедера:

Ось таким нехитрим способом завантажуємо свої окремі значення для української мови

Далі, дописуємо функцію отримання значень з довідника:

Функція отримує на вході параметри для вибору, який довідник взяти, і параметри для фільтрації - які значення потрібні. На виході для української мови матимемо україномовні значення (якщо не заповнені - налаштував переклад за допомогою яндекс.перекладач).

Далі - займемося назвами властивостей. Ось приклад для обробки розумного фільтра:

Спочатку проганяє значення довідників через функцію, описану вище, а потім - займаємося обробкою назв свойст.

На підставі символьного коду властивості перевіряємо наявність мовної фрази - якщо фрази немає, то виробляємо автоматичний переклад з допомогою яндекс.перекладач і Записуємо отриманий результат в заготовку для запису в мовної файл. Далі, коли все властивості перебрані в мовної файл виробляємо запис отриманих мовних фраз: зчитуємо наш кастомний мовної файл і дописуємо в нього нові фрази.

Ось таке чудове рішення народилося. Чесно кажучи, довго не міг придумати, як же обійти варіант роботи з властивостями.







Схожі статті