Pull to refresh

SLI — быстрое создание мультиязычности на сайте

Reading time 3 min
Views 17K
Доброго времени суток Хабрачеловек! Публикую пост по просьбе программиста ganjar. Он помог нашему интернет магазину быстро сделать мультиязычность этим самым SLI, о котором пойдет речь. В комментах он ответит на все все вопросы.

SLI (Site Language Injection) — PHP скрипт для быстрого создания мультиязычности на сайте.

Наверное, каждому веб-разработчику хотя бы раз приходилось создавать мультиязычность на сайте. И каждый, кто этим занимался, прекрасно понимает сложности, а также количество времени, которое нужно “убить” на скучную работу по реализации задачи.

Перед тем как начать создавать свое решение перечитал множество статьей о том, как разные программисты решали проблему мультиязычности, и ни в одной из них не нашел универсального способа ее решения. Под каждый новый проект нужно было заново использовать функции “обертки” для текста и ссылок, создавать таблицы с переводами, модернизировать админку для локализации контента. Ни один из описанных вариантов мне не нравился, потому что даже на создание небольших сайтов уходило много времени. Вначале требовалось реализовать функционал для работы сохранения/выбора переведенных текстов, доработать админку для локализации, а потом весь текст и ссылки обернуть в функции для локализации контента.

Задача, которую требовалось решить:

  • Решение должно без проблем подключаться к любому сайту, написанному на php, без вмешательства в исходной код системы.
  • Никаких “оберток”. Система должна сама понимать, какие ссылки нужно локализировать, какой текст требуется перевести на нужную языковую версию.
  • Процесс установки и настройки должен отнимать минимум усилий.
  • Локализованная версия должна индексироваться поисковыми системами.
  • Должна быть удобная админка с поиском по адресу страницы, оригиналу и переводенным текстам.
  • Система не должна иметь ограничений по количеству языков.
  • Система должна работать максимально быстро.
  • Текст, отличие в котором составляют только символы, должен переводиться 1 раз. Например: «купили 10 раз» и «купили >20 раз» должен переводиться 1 раз.

Решение поставленных задач:

Для подключения системы используем настройку в файле .htaccess “php_value auto_prepend_file”. Таким образом, мы без вмешательства в исходники сайта сможем подключить систему перевода.

Система подключена. Теперь осталось включиться в работу таким образом, чтобы для функционирования сайта “ничего не изменилось”:

  1. Перехватываем данные из адресной строки. Проверяем их на наличие языкового алиаса, где видно, какой язык сейчас выбран. Если язык выбран, убираем языковой алиас из REQUEST_URI, чтобы «ничего не изменилось» в работе самого сайта.
  2. Вешаем обработчик на отдачу контента: ob_start('SLITranslate::autoInit');
  3. Контент, полученный обработчиком, парсится (учитывая настройки системы), вытягивая текст и атрибуты, которые должны быть переведены.
  4. Переводим массив в индексы для поиска по базе (из текста убираются все символы, которые не нужны для перевода).
  5. Одним запросом вытягиваем с базы все данные на нужном языке.
  6. Заменяем оригинальный текст переведенным.
  7. Добавляем во все локальные ссылки, action в формах и JavaSctipt-й location.href языковой алиас. Это нужно для того, чтобы при использовании сайта человек не вернулся на версию без выбранного языка.
  8. Отдаем пользователю локализированную страницу.

Заранее отвечу на часто задаваемые вопросы:

  • “Как перевести надписи, оформленные в картинке?” — создать картинки на разных языках, после чего создать замену в модуле “переменные”. В поле “оригинал” вписать адрес картинки, в полях перевода ввести адрес картинки с локализированной надписью для каждого используемого языка.
  • “Что делать, если у меня на сайте есть блок с комментариями (любой постоянно обновляемый контент, не представляющий особой важности), который я не хочу переводить?“ — обернуть данный контент в комментарии, которые послужат “указателем” для переводчика. Контент, который находится внутри комментариев, контент будет проигнорирован и не попадет на перевод.
  • У меня много страниц на сайте, которые не нужно переводить.” — в настройках парсера есть пункт “Игнорировать адреса”. Записываем туда нужные страницы.


Больше информации о настройке и работе с программой в документации: http://sli.su/documentation/
Скачать программу можно на официальном сайте: http://sli.su/download/
Для тех, кому лень вводить e-mail (для получения обновлений), прямая ссылка: http://sli.su/files/models/Release/2/file/sli_ver1_0.zip

GitHub: https://github.com/ganjar/sli
Tags:
Hubs:
+9
Comments 8
Comments Comments 8

Articles