Решение головоломки с переводами Open Atrium

Мы запустили на этой неделе сайт translate.openatrium.com, который позволяет переводить Open Atrium на разные языки. В настоящее время поддерживается английская, испанская и арабская версии сборки, но мы хотим увеличить количество языков. Чтобы сделать это, мы сделали сервер переводов, на котором происходит автоматическая перепаковка переводов каждый несколько часов и который позволяет скачивать свежие версии переведённых строк.

Инструменты, которые позволяют это делать продолжают дорабатываться. Localization Client позволяет переводить строки интерфейса не покидая открытую страницу, а Localization Server позволяет создать централизованное хранилище переводов для всех модулей, версий и языков. В случае Open Atrium, мы не говорим о каком-либо модуле для Друпала или сайте. Open Atrium это сборка, которая построена на основе ядра Друпала, дополнительных и специальных модулей и на которой могут быть развёрнуты многие сайты.

Мы хотим реализовать для Open Atrium следующие вещи:

  • Обеспечить скачивание пакетов для отдельных установок и любого количества языков
  • Обеспечить канал связи, используя который пользователи смогут легко добавлять и улучшать переводы
  • Обеспечить своевременное обновление
  • Обеспечить поддержку актуальности переводов для последней версии

Это не так просто. С подобной системой переводов, которая основана на добровольном участии переводчиков, мы не можем включать обновлённые переводы в новые версии сразу и код сборки становится доступен раньше переводов. Поэтому мы сначала обновляем модули, ждём для них переводы и затем уже обновляем сами переводы. Другого способа получить переводы одновременно с новой версией нет, только если выделять отдельную команду, которая будет заниматься переводом новой версии до её выхода.

Кроме стандартных проектов, Open Atium включает около 50 других проектов, что делает обновление отдельного модуля неудобным. Для решения этого вопроса, мы использовали идею мета-упаковки — разбивку переводов по различным пакетам, строки извлекаются и импортируются, создаётся какой-либо вымышленный проект (и версии) который может быть переведён, обработан и собран отдельно от других пакетов. Это дало нам пакеты atrium_features, atrium_themes, atrium_custom и big_atrium, который включает все другие вместе.

Теперь о том, как обновлять переводы. Есть одна особенность встроенная в Localization Client и Localization Server, которая позволяет клиенту автоматически добавлять переводы используя XML-RPC и ключ, который позволяет идентифицировать клиента на сервере. Это важно.

В то время как Localization Server позволяет скачивать переводы, они собираются каждый раз при скачивании и таким образом не очень подходят для общедоступного скачивания (особенно если вы скачиваете большое количество переводов для разных проектов). Чтобы решить этот вопрос, мы разработали дополнительный модуль, который автоматически перепаковывает все переводы через заданное время и делает их доступными для скачивания.

Мы продолжаем тестировать этот модуль и продолжаем работу над ним в качестве одного из вариантов обработки переводов стандартных и дополнительных модулей. Надеемся, что наша работа в дальнейшем сможет многим пригодиться. В скором будущем — автоматическое обновление переводов на вашем сайте (которое ответит на вопрос, зачем нам в действительности был нужен специальный модуль упаковки переводов).

Ну и наконец вы можете познакомиться с нашим дизайном сервиса translate.openatrium.com, который был создан Саманом.

Метки: