Як ми зробили автоматизацію перекладу на 29 локалей: збірка зоопарку в струнку систему



Acronis — міжнародна компанія з основним R&D в Росії, але основний наш мова — англійська. У регіональних продуктів свої мови, і їх досить багато. Мов сайту ще більше, ніж мов софту.

Тому ми зробили таку систему на Друпалі, причому не без збочень:
  • З'являється майстер-текст англійською (США). Він розкочується на всі сайти як «золотий» образ.
  • Якщо є прямий переклад мовами локалі, використовується він.
  • Якщо немає прямого перекладу на мову локалі, але є переклад на мову спадкування, використовується текст на мові успадкування.

тобто в Мексиці (де говорять мовою, що стався від іспанської), ланцюжок буде така: перевірити мексиканський; якщо ні — взяти іспанська; якщо ні — поставити англійська США. У Великобританії послідовність коротше: класичний англійський, потім — американський англійський. При цьому ціна успадковується по іншому шляху: спочатку перевіряється місцева, потім береться американська, а не європейська.

Друга важлива річ — розбити всі цілі сторінки на шматки і токени, щоб забезпечити залежність змінних (ціни, формати дати, назви продуктів, окремі назви кнопок і так далі). Збочення знадобилися, бо з коробки Друпал робив все куди «деревяннее» і простіше.
Вступна інформація
Багато контенту, прозорий, але не короткий процес редагування, рев'ю переказів і пруфридинга. Близько 30 осіб, редагують сайт. Всього один інстанси Drupal 7. Різний вміст на локалях — спеціальні пропозиції, знижки, валюти і її формат, а також доступність продуктів і сторінок в залежності від певних умов. Цікаво, правда?


Поки хтось пише код, народжується контент
Напевно, так повинно бути, але буває не завжди, правда? У нас, якщо чесно, в цьому плані все досить впорядковано і налагоджено.
  • Ми відштовхуємося від базової мови (англійської) і саме на ньому формуємо перекладні рядка, вміст полів, картинки.
  • Це вміст в процесі розміщення на сайті коригується, проходить первинний рев'ю і стає відправною точкою для подальших дій.
  • На виході ми маємо повністю готові сторінки, у верстці, з вмістом англійською мовою. Варто зазначити, що ця робота поділяється на 2 процесу: просте розміщення тексту в інтерфейсі Drupal і верстка, написання JavaScript-коду і файлів шаблонів, що містять перекладені рядки з використанням функції t() Drupal.


Як перекладати?

Як відомо, в Drupal 7 є всього два варіанти, щоб перекладати вміст: робити повну копію будь сутності або переводити поля. Перший — «ядерний», але менш гнучкий і відверто перевантажений спосіб з допомогою модуляlocale. Ми пішли по другому шляху — Entity Translation, завдяки чому в таблиці node у нас не так багато записів, як могло б бути.

Добре було не відразу
  • Ми пережили величезна кількість неймовірних пригод з пошуку випадкових, дивних і часом лякають багів в Entity Translation.
  • Ми знаходили такий чудовий і охайний код, що ми були змушені стати морально стійкіші.
  • Все це дуже швидко і стабільно і добре працювало під навантаженням.
  • Вивантажувати переклади було дуже зручно.
  • Як і всі коробкові системи, Drupal 7 спочатку був не дуже зручний і приємний, але його гнучкість дала нам шанс.


І нарешті побудували...

Ми дуже старалися зробити все, щоб наші колеги могли перекладати терміни таксономії, а віджети taxonomy term reference вміли показувати локалізовані заголовки термінів. Нам вдалося навчити Drupal обходити весь ланцюжок мов-кандидатів на переклад в різних ситуаціях саме так, як нам цього хочеться. Також вдалося зробити досить точну і розширювану систему обробки форматів валют зі своїм окремим механізмом успадкування. У нас кілька своїх власних Entity-типів, які також прекрасно управляються, переводяться в єдиному стилі. Нам вдалося зробити гнучкий функціонал меню, функціональність якого пішла дуже далеко за межі «node/».



Ми переписали трохи допрацювали відомий проект Translation Management Tool і навчили його фокусів переводити всі наші суті, обробляти наші власні токени, вивантажувати переклади справ XLIFF з залежностями, а також парочку трюків.
Ще нам довелося написати власні опції для приховування/показу сутностей потрібних для локалей, яка вміє правильно повертати access матеріалу на етапі запиту (приблизно так, як це організовано в системі доступу), що зробило цю опцію «наскрізний» до самого меню — посилання на приховані сторінки зникають з меню для потрібної мови. За «прихованими» сторінками пішов власний delivery callback, щоб не віддавати 403 клієнтам без розбору.


Токенизируй це!

Так сталося, що нам сподобалося використовувати токени. Зміни — це добре, і ми придумали ставити токени, наприклад, в шаблонах або частинах body сторінок. Токени, як правило, є сутностями іншого, нашого власного типу — Template. Це дозволило нам організувати себе, виробити стандарт за назвою та розстановці цих токенів і не боятися змін. Забрати або змінити телефон на 20 сторінках на 1 локалі? — Легко! Прибрати частину опцій з пропозиції в Австралії? — Звичайно!


Ми реалізували свої токени для розстановки правильних URL-посилань в контенті зі своїм алгоритмом роботи, націленим завжди повернути клієнту локалізовані посилання, навіть якщо з вказаної сторінки є редирект, а сама вона вже не існує.


найголовніше — локалізація

І все, про що ми говорили, заради цього моменту. Наша локализационная команда з Москви вміє чудово взаємодіяти з Drupal. Ми саме до цього і йшли — процес став практично паралельним. Хлопці створюють завдання на вивантаження даних з усіх полів вибраних сторінок, вказуючи, на яку мову потрібно переклад, і забирають XLIFF-файли, щоб почати свою роботу. Самі перекладачі на рідкісні мови, як правило, віддалені співробітники або агентства з носіями мови, тому вивантаження просто передається назовні. Там вона перекладається, знову заганяється в софт наших перекладачів, а звідти, після перевірки, імпортується в Drupal, де автоматично створюються нові переклади для кожної Особи і додаються значення переводяться полів. Залишається надіслати посилання на перекладену версію сторінки регіональному менеджерові.

Висновок

У нас є дуже хороший досвід по роботі з багатомовної і вельми складною структурою в рамках одного инстанса системи. Ми, стабільно з Zero Downtime, оновлюємо релізи сайту. Ми навмисно не розбивали сайт на цілу масу маленьких сайтик, тому що так дійсно правильніше, як мінімум, з точки зору обслуговування. Важливим пунктом нашого висновку є те, що нам вдалося досягти всіх перерахованих успіхів взагалі без хакінгу ядра Drupal.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.