- PVSM.RU - https://www.pvsm.ru -
Acronis — международная компания с основным R&D в России, но основной наш язык — английский. У региональных продуктов свои языки, и их довольно много. Языков сайта ещё больше, чем языков софта.
Поэтому мы сделали такую систему на Друпале, причём не без извращений:
То есть в Мексике (где говорят на языке, произошедшем от испанского), цепочка будет такая: проверить мексиканский; если нет — взять испанский; если нет — поставить английский США. В Великобритании последовательность короче: классический английский, затем — американский английский. При этом цена наследуется по другому пути: сначала проверяется местная, потом берётся американская, а не европейская.
Вторая важная вещь — разбить все целые страницы на куски и токены, чтобы обеспечить зависимость переменных (цены, форматы дат, названия продуктов, отдельные названия кнопок и так далее). Извращения понадобились, потому что из коробки Друпал делал всё куда «деревяннее» и проще.
Много контента, прозрачный, но не короткий процесс редактирования, ревью переводов и пруфридинга. Порядка 30 человек, редактирующих сайт. Всего один инстанс Drupal 7. Разное содержимое на локалях — специальные предложения, скидки, валюты и её формат, а также доступность продуктов и страниц в зависимости от определённых условий. Интересно, правда?
Наверное, так должно быть, но бывает не всегда, правда? У нас, если честно, в этом плане всё весьма упорядоченно и отлажено.
Как известно, в Drupal 7 есть всего два варианта, чтобы переводить содержимое: делать полную копию любой сущности или переводить поля. Первый — более «ядерный», но менее гибкий и откровенно перегруженный способ с помощью модуля locale. Мы пошли по второму пути — Entity Translation, благодаря чему в таблице node у нас не так много записей, как могло бы быть.
Мы очень старались сделать всё, чтобы наши коллеги могли переводить термины таксономии, а виджеты taxonomy term reference умели показывать локализованные заголовки терминов. Нам удалось научить Drupal обходить всю цепочку языков-кандидатов на перевод в разных ситуациях именно так, как нам этого хочется. Также удалось сделать весьма точную и расширяемую систему обработки форматов валют со своим отдельным механизмом наследования. У нас несколько своих собственных Entity-типов, которые также прекрасно управляются, переводятся в едином стиле. Нам удалось сделать гибкий функционал меню, функциональность которого ушла очень далеко за пределы «node/».
Мы переписали немного доработали известный проект Translation Management Tool и научили его фокусам переводить все наши сущности, обрабатывать наши собственные токены, выгружать переводы дел в XLIFF с зависимостями, а также парочке трюков.
Ещё нам пришлось написать собственные опции для скрытия/показа сущностей для нужных локалей, которая умеет правильно возвращать access материала в этапе запроса (примерно так, как это организовано в системе доступа), что сделало эту опцию «сквозной» до самого меню — ссылки на скрытые страницы исчезают из меню для нужной локали. За «скрытыми» страницами последовал собственный delivery callback, чтобы не отдавать 403 клиентам без разбора.
Так случилось, что нам понравилось использовать токены. Изменения — это хорошо, и мы придумали ставить токены, например, в шаблонах или частях body страниц. Токены, как правило, являются сущностями другого, нашего собственного типа — Template. Это позволило нам организовать себя, выработать стандарт по названию и расстановке этих токенов и не бояться изменений. Убрать или изменить телефон на 20 страницах на 1 локали? — Легко! Убрать часть опций из предложения в Австралии? — Конечно!
Мы реализовали свои токены для расстановки правильных URL-ссылок в контенте со своим алгоритмом работы, нацеленным всегда вернуть клиенту локализованную ссылку, даже если с указанной страницы есть редирект, а сама она уже не существует.
И всё, о чём мы говорили, ради этого момента. Наша локализационная команда из Москвы умеет прекрасно взаимодействовать с Drupal. Мы именно к этому и шли — процесс стал практически параллельным. Ребята создают задачи на выгрузку данных из всех полей выбранных страниц, указывая, на какой язык требуется перевод, и забирают XLIFF-файлы, чтобы начать свою работу. Сами переводчики на редкие языки, как правило, удалённые сотрудники или агентства с носителями языка, поэтому выгрузка просто передаётся наружу. Там она переводится, снова загоняется в софт наших переводчиков, а оттуда, после проверки, импортируется в Drupal, где автоматически создаются новые переводы для каждой Entity и добавляются значения переводимых полей. Остаётся отправить ссылку на переведённую версию страницы региональному менеджеру.
У нас есть очень хороший опыт по работе с многоязычной и весьма сложной структурой в рамках одного инстанса системы. Мы, стабильно с Zero Downtime, обновляем релизы сайта. Мы намеренно не разбивали сайт на целую массу маленьких сайтиков, потому что так действительно правильнее, как минимум, с точки зрения обслуживания. Важным пунктом нашего заключения является то, что нам удалось достигнуть всех перечисленных успехов вообще без хакинга ядра Drupal.
Автор: Acronis
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/198390
Ссылки в тексте:
[1] Источник: https://habrahabr.ru/post/312312/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.