Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Мультиязычность

Видеоурок

Система мультиязычности позволяет с минимальными усилиями перевести back-office системы (интерфейс администрирования) на требуемый язык. По умолчанию система NetCat содержит русский и английский языки.

Для подключения нового языка необходимо в папку /netcat/admin/lang/ положить файл вида язык.php (например, esperanto.php). Лучше скопировать уже существующий русскоязычный файл, переименовать его и перевести в нем все константы. Система подключит файл автоматически. В результате в интерфейсе администрирования в верхней части страницы появится переключатель на новый язык.

В блоке MAIN языкового файла содержится общая информация для работы с языком:

Константа Описание
MAIN_DIR направление языка - LTR - Left-To-Right, RTL - Right-To-Left
MAIN_LANG 2-х символьный код языка по ISO 639-1
MAIN_COUNTRY 2-х символьный код страны
MAIN_NAME название языка на английском
MAIN_NAMELOC название языка в натуральном виде
MAIN_ENCODING кодировка данного файла и интерфейса администрирования
MAIN_EMAIL_ENCODING кодировка писем, которые будут оправляться из системы

Стоит учесть, что при добавлении нового языка потребуется добавить соответствующий язык и во все установленные модули. Файл вида язык.lang.php (находится в папке модуля) содержит все тестовые константы, используемые в модуле для обеспечения мультиязычности. Если Ваш сайт, скажем, имеет еще и немецкий интерфейс, Вам необходимо создать файл ger.lang.php (в папке / netcat/admin/lang/ должен присутствовать файл ger.php).

Пример содержимого файла язык.lang.php:

define("NETCAT_MODULE_AUTH", "Интерфейс пользователя");
define("NETCAT_MODULE_AUTH_DESCRIPTION", "Интерфейс пользователя в системе ввода-вывода. Возможность регистрации внешней группы пользователей, изменение собственной анкеты, пароля, восстановление пароля. Данный модуль может интегрироваться с другими модулями системы.");

Организация многоязычного сайта.

1. Вам необходимо определиться, как вы хотите организовать адресацию сайтов на другом языке:

  • http://example.com/ - основной, английский
  • http://example.com/ru - русский
  • http://example.com/de - немецкий
  • http://example.com/fr - французский

или

  • http://example.com/ - основной, английский
  • http://ru.example.com/ - русский
  • http://de.example.com/ - немецкий
  • http://fr.example.com/ - французский

2. В первом случае в системе будет один сайт, а все остальные языки будут организованы как подразделы. Под каждый сайт будут свои макеты дизайна. Шаблоны можно создать одни, только учесть, что в оформлении шаблона необходимо вставить проверки, чтобы показывать нужный язык статических элементов дизайна. Например, на странице необходимо вывести "Дата: 01.01.2005". Слово "Дата" жестко прописано в шаблоне. Мы ставим проверку:

<?=opt($parent_sub_tree[$sub_level_count-1][Subdivision_ID]==123,"Дата")?>
<?=opt($parent_sub_tree[$sub_level_count-1][Subdivision_ID]==456,"Date")?>

Здесь 123 - ID корневого раздела русского сайта, т.е. http://example.com/ru, а 456 - немецкого, http://example.com/de. При этом в Системных настройках каждого такого шаблона надо указать:

GLOBAL $parent_sub_tree, $sub_level_count;

Во втором случае сайты организованы на разных доменах, это позволит нам создать в системе несколько сайтов под каждый язык. Под каждый сайт будут свои макеты дизайна. Шаблоны можно тоже создать одни, только учесть, что в оформлении шаблона необходимо вставить проверки, чтобы показывать нужный язык статических элементов дизайна. Например, на странице необходимо вывести "Дата: 01.01.2005". Слово "Дата" жестко прописано в шаблоне. Мы вставим проверку:

<?= opt($catalogue==1,"Дата")?>
<?= opt($catalogue==2,"Date")?>

Здесь 1 - ID русского сайта, т.е. http://ru.example.com/, а 2 - немецкого, http://de.example.com/.

3. Если вы пошли по второму пути, то необходимо правильно настроить домены. У всех сайтов в системе должны быть корректно указаны домены. Все домены должны ссылаться на одну папку на сервере - папку с системой NetCat. В настройках сервера можно указать следующее:

<VirtualHost XX.XX.XX.XX>
    ServerAdmin info@example.com
    DocumentRoot "/usr/local/etc/httpd/htdocs/example"
    ServerName example.com
    ServerAlias ru.example.com de.example.com fr.example.com
    ErrorDocument 404 /netcat/require/e404.php
    CharsetRecodeMultipartForms Off
    CharsetSourceEnc cp1251
</VirtualHost>

4. Если вы решили сделать мультиязычность через подразделы, то вам необходимо задуматься о реализации страницы Ошибки 404 и Карты сайта.

Один из вариантов Ошибки 404:
Заводим для 404 раздела отдельный макет. В нем, в Шаблонах вывода навигации пишем:

global $REQUEST_URI,$HTTP_HOST;

В самом макете вместо какого-то сообщения примерно следующее:

<?=opt(strpos($HTTP_HOST.$REQUEST_URI,"/ru/"),"на русском")?>
<?=opt(strpos($HTTP_HOST.$REQUEST_URI,"/en/"),"на английском")?>
<?=opt(!strpos($HTTP_HOST.$REQUEST_URI,"/ru/") && !strpos($HTTP_HOST.$REQUEST_URI,"/en/"),"на дефолтовом")?>

Один из вариантов Карты сайта:
В макете Карта сайта выполняется функция ".s_browse_sub(0,$browse_map).". Используя проверку, аналогичную Ошибке 404, получим:

<?=opt(strpos($HTTP_HOST.$REQUEST_URI,"/ru/"),s_browse_sub(123,$browse_map))?>
<?=opt(strpos($HTTP_HOST.$REQUEST_URI,"/en/"),s_browse_sub(456,$browse_map))?>
<?=opt(!strpos($HTTP_HOST.$REQUEST_URI,"/ru/") && !strpos($HTTP_HOST.$REQUEST_URI,"/en/"),s_browse_sub(0,$browse_map))?>

Здесь 123 и 456 - ID разделов /ru/ и /en/

Комментарии 1

Gleb Mesheryakov  Студия "АРАССА" 14 ноября 2014, 04:45:37
Очень интересная штука! Хотя малоподготовленному, наверное, будет тяжеловато разобраться.
   

Описание проекта