Доброго времени суток! Публикую пост по просьбе программиста ganjar. Он помог нашему интернет магазину быстро сделать мультиязычность этим самым SLI, о котором пойдет речь. В комментах он ответит на все все вопросы.
SLI (Site Language Injection) — PHP скрипт для быстрого создания мультиязычности на сайте.
Наверное, каждому веб-разработчику хотя бы раз приходилось создавать мультиязычность на сайте. И каждый, кто этим занимался, прекрасно понимает сложности, а также количество времени, которое нужно “убить” на скучную работу по реализации задачи.
Перед тем как начать создавать свое решение перечитал множество статьей о том, как разные программисты решали проблему мультиязычности, и ни в одной из них не нашел универсального способа ее решения. Под каждый новый проект нужно было заново использовать функции “обертки” для текста и ссылок, создавать таблицы с переводами, модернизировать админку для локализации контента. Ни один из описанных вариантов мне не нравился, потому что даже на создание небольших сайтов уходило много времени. Вначале требовалось реализовать функционал для работы сохранения/выбора переведенных текстов, доработать админку для локализации, а потом весь текст и ссылки обернуть в функции для локализации контента.
Задача, которую требовалось решить:
- Решение должно без проблем подключаться к любому сайту, написанному на php, без вмешательства в исходной код системы.
- Никаких “оберток”. Система должна сама понимать, какие ссылки нужно локализировать, какой текст требуется перевести на нужную языковую версию.
- Процесс установки и настройки должен отнимать минимум усилий.
- Локализованная версия должна индексироваться поисковыми системами.
- Должна быть удобная админка с поиском по адресу страницы, оригиналу и переводенным текстам.
- Система не должна иметь ограничений по количеству языков.
- Система должна работать максимально быстро.
- Текст, отличие в котором составляют только символы, должен переводиться 1 раз. Например: «купили 10 раз» и «купили >20 раз» должен переводиться 1 раз.
Решение поставленных задач:
Для подключения системы используем настройку в файле .htaccess “php_value auto_prepend_file”. Таким образом, мы без вмешательства в исходники сайта сможем подключить систему перевода.
Система подключена. Теперь осталось включиться в работу таким образом, чтобы для функционирования сайта “ничего не изменилось”:
- Перехватываем данные из адресной строки. Проверяем их на наличие языкового алиаса, где видно, какой язык сейчас выбран. Если язык выбран, убираем языковой алиас из REQUEST_URI, чтобы «ничего не изменилось» в работе самого сайта.
- Вешаем обработчик на отдачу контента: ob_start('SLITranslate::autoInit');
- Контент, полученный обработчиком, парсится (учитывая настройки системы), вытягивая текст и атрибуты, которые должны быть переведены.
- Переводим массив в индексы для поиска по базе (из текста убираются все символы, которые не нужны для перевода).
- Одним запросом вытягиваем с базы все данные на нужном языке.
- Заменяем оригинальный текст переведенным.
- Добавляем во все локальные ссылки, action в формах и JavaSctipt-й location.href языковой алиас. Это нужно для того, чтобы при использовании сайта человек не вернулся на версию без выбранного языка.
- Отдаем пользователю локализированную страницу.
Заранее отвечу на часто задаваемые вопросы:
- “Как перевести надписи, оформленные в картинке?” — создать картинки на разных языках, после чего создать замену в модуле “переменные”. В поле “оригинал” вписать адрес картинки, в полях перевода ввести адрес картинки с локализированной надписью для каждого используемого языка.
- “Что делать, если у меня на сайте есть блок с комментариями (любой постоянно обновляемый контент, не представляющий особой важности), который я не хочу переводить?“ — обернуть данный контент в комментарии, которые послужат “указателем” для переводчика. Контент, который находится внутри комментариев, контент будет проигнорирован и не попадет на перевод.
- “У меня много страниц на сайте, которые не нужно переводить.” — в настройках парсера есть пункт “Игнорировать адреса”. Записываем туда нужные страницы.
Больше информации о настройке и работе с программой в документации: http://sli.su/documentation/
Скачать программу можно на официальном сайте: http://sli.su/download/
Для тех, кому лень вводить e-mail (для получения обновлений), прямая ссылка: http://sli.su/files/models/Release/2/file/sli_ver1_0.zip
Автор: GenriX