Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров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
Теги:
Хабы:
Всего голосов 23: ↑16 и ↓7+9
Комментарии8

Публикации

Истории

Ближайшие события

24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань