...

пятница, 27 сентября 2013 г.

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

Доброго времени суток Хабрачеловек! Публикую пост по просьбе программиста 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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий