Back to mnoGoSearch site

Создание многоязычных страниц поиска

Основная идея Craig Small . Небольшие изменения Alex Barkov .

Зачастую требуется поддержка различных языков, что означает использование различных файлов search.htm в зависимости от языка, выбранного в настройках броузера пользователя.

Пожалуйста, устите, что замечания по конфигурированию, даваемы ниже, абсолютно одинаковы для обоих поисковых фронт-ендов search.php и search.cgi.

Замечание: специфика PHP: единственное отличие для search.php заключается в модификации config.inc для изменения файла шаблона:


$template_file= ereg_replace(".php", ".htm", basename(getenv("SCRIPT_FILENAME")));
$template_file = "/etc/somewhere" . $template_file;

Дальнейшая установка проводится в три этапа.

  1. Установка нескольких шаблонов.

    Основная идея состоит в том, чтобы иметь один файл search.php или search.cgi и несколько файлов search.[language].htm. Также, для ипользования по умолчанию необходимо иметь файл search.htm (обычно в качестве символьной ссылки на search.en.htm).

    Если имя скрипта search.en.php (или search.en.cgi), оба CGI и PHP фронт-енды будут искать /somewhere/etc/search.en.htm, мы подразумеваем, чтоassuming /somewhere/etc/ - поддиректория /etc/ корневой директории установки mnoGoSearch.

    Вы должны поместить в /somewhere/etc/ все такие шаблоны search.htm, т.е. /somewhere/etc будет иметь, например:

    search.en.htm Шаблон для английского языка
    search.pl.htm Шаблон для польского языка
    search.ru.htm Шаблон для русского языка
    search.htm Символьная ссылка на шаблон английского языка

  2. Установка фронт-ендов

    Создайте поддиректорию и поместите в неё search.cgi или search.php (отдельно от включаемых файлов, если желаете, указав для PHP include_path и разместив их в другом месте).

    Затем создайте символьные ссылки:

    search.cgi Оригинальный файл
    search.en.cgi символьная ссылка
    search.pl.cgi символьная ссылка
    search.ru.cgi символьная ссылка

    Или для PHP фронт-енда:

    search.php Оригинальный файл
    search.en.php символьная ссылка
    search.pl.php символьная ссылка
    search.ru.php символьная ссылка

  3. Конфигурирование Apache

    Теперь нужно научить apache понимать, что надо здесь делать. Вам нужно включить процесс определения содержимого (negotiation) и изменить индексы. Я использовал файл .htaccess, но вы можете задать это и в файле конфигурации apache.

    
AddLanguage en .en
    AddLanguage pl .pl
    AddLanguage ru .ru
    
    DirectoryIndex search search.cgi  (or search.php)
    Options FollowSymlinks MultiViews
    

Как это работает ?

  1. Вы набираете url http://myhost/mydir/search без слэша на конце !!

  2. Ваш броузер говорит "Я предпочитаю английский язык (т.е. определён язык en) "

  3. Apache находит search.en.cgi (DirectoryIndex даёт search, MultiViews даёт en.cgi)

  4. SCRIPT_FILENAME, используемый обоими search.cgi и search.php равен somepath/search.en.cgi

    Замечание: Большинство других переменных будут иметь неправильные значения, либо search, либо search.cgi)

  5. Вы измезменяете config.inc как указано выше, для использования search.en.htm.

Что случится, если пользователь, к примеру, захочет немецкий ? У нас нет search.de.cgi (search.de.php), т.е. первый элемент в списке DirectoryIndex не отработает, тогда сервер попробует второй, search.php Да, он получит страницу на английском, но это лучше, чем 404.

Это работает, возможно вам понадобиться еще что-то подкрутить в конфигурации apache, - я пробовал на сервере, для которого уже всё было настроено и возможно что-то упустил в описании конфигурирования веб-сервера.

Возможные сложности

У вас могут возникнуть некоторые проблемы с определением языка, вызванные:

Команда разработчиков apache работает над возможностями обхода некоторых из этих трудностей, если это возможно. Для плотно используемого веб-сервера, вы можете ожидать примерно один е-мейл в неделю с описанием подобной проблемы.