Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
16:49
22 окт
#
?
написал:

Скажите, пожалуйста, каким образом реализуются различные языковые версии сайта на этом движке?
Пока за несколько уже сделанных проектов на импере с этим не сталкивались, но вот пришлось...

20:41
26 окт
#
написал:

Способ 1: использовать встроенную в движок функцию локализации интерфейса.

Такая функция является базовой и существует с самой первой версии движка. До сих пор это не афишировалось, во-первых, потому что ранее просто не поднимался вопрос о мульти языковых магазинах, и во-вторых, данная функция касается локализации шаблона (динамического перевода на другой язык надписей кнопок, типа: Поиск, В корзину и тому подобное, всяких интерфейсных сообщений: "Ваш комментарий принят и отправлен на модерацию" и так далее).

Действие функции обеспечивается языковыми файлами Language.NNN.admin.php, где NNN равен трехсимвольному названию языка (например, rus, eng, ukr и тому подобное). Для каждого языка сайта создается свой языковой файл, в нем перечисляются поименованные поля: переводы разных строк из интерфейса сайта. Фрагмент такого файла Language.rus.admin.php для русского языка показан ниже. Языковые файлы ищите в папке http://сайт/admin

<?php
    class Language {

        // общие
        var $HOME_TEXT = 'На главную';
        var $EMPTY_LIST = 'Пусто';
        var $EDIT = 'Редактировать';
        var $MOVE_UP = 'Вверх';
        var $MOVE_DOWN = 'Вниз';
        var $DELETE_SELECTED = 'Удалить выбранные';
        var $SAVE = 'Сохранить';
        var $ARE_YOU_SURE_TO_DELETE = 'Подтвердите удаление';

        // главная страница
        var $NEWS = 'Новости';
        var $ARTICLES = 'Статьи';
        var $POLLS = 'Опросы';
        var $SETTINGS = 'Настройки';
        var $PRODUCTS_CATEGORIES = 'Категории товаров';
        var $PRODUCTS = 'Товары';
        var $ORDERS = 'Заказы';
        var $PRICELIST_IMPORT = 'Импорт прайса';
        var $PRICELIST_EXPORT = 'Экспорт прайса';
        var $PRODUCTS_IMPORT = 'Импорт товаров';
        var $CURRENCIES = 'Валюты';
        var $STATISTICS = 'Статистика';
        var $USERS = 'Пользователи';
        ...
        ...
        ...
    }
?>


Так как движок всегда передает в шаблон переменную $Lang, содержащую все поля языкового файла, то в шаблоне появляется возможность локализации за счет того, что везде в html-разметке мы не пишем интерфейсные слова напрямую, а заключаем их в smarty-конструкцию {$Lang->ПОЛЕ|default:'Текст по умолчанию'}. Например, если в html-разметке какого-то tpl-файла было следующее

    ...
    ...
    <a href="/">
        На главную
    </a>
    ...
    ...


то фразу На главную заменяем как показано далее

    ...
    ...
    <a href="/">
        {$Lang->HOME_TEXT|default:'На главную'}
    </a>
    ...
    ...


Это позволяет в нужном месте шаблона либо вывести значение конкретного поля из текущего языкового файла, либо если такого файла нет на сайте или в файле не прописано такое поле, то показать соответствующий дефолтный текст (предполагается, что он относится к основному языку сайта, например русскому).

Однако никто еще не вписывал в шаблоны для Имперы такие smarty-конструкции в силу того, что просто не было спроса на мульти языковые шаблоны.

Отмечу и недостаток способа 1: локализуется интерфейсная часть сайта, а названия категорий, статей, новостей, товаров, их текстов, свойств товаров остается без перевода. Выкрутиться из положения можно и здесь. Достаточно в языковом файле добавить поле, скажем var $PRODUCT_MODELS = array( некий набор элементов );, где индексация элементов организована по идентификаторам товаров, и обращаться к нему из шаблона. Например вместо типичного

    ...
    ...
    {* выводим название товара *}
    <h1>
        {$product->model}
    </h1>
    ...
    ...


надо будет писать в шаблоне так

    ...
    ...
    {* выводим название товара *}
    <h1>
        {$Lang->PRODUCT_MODELS[$product->product_id]|default:$product->model}
    </h1>
    ...
    ...


Но можно представить, как вырастет в размерах языковой файл при большом количестве товаров. К тому же нет синхронизации с пополнением товарного состава в админпанели.




Способ 2: используя возможность один движок на несколько доменов, завести на хостинг магазина дополнительно домены вида http://NN.сайт/, где NN является префиксом языка, например en.сайт. Для каждого дополнительного домена создать в корне основного сайта конфигурационные файлы Config_NN.сайт.php с прописью соответствующей базы данных. Каждая база данных отвечает за отдельный язык и содержит локализованные товары.

Достоинство способа в том, что товарный состав в отдельной языковой группе (иными словами, аудитории, на которую ориентирован локализованный сайт) может отличаться от другой группы и клиенты одной группы не "болтаются" в админпанели другой группы (грубо говоря, менеджер по русскоязычному региону не видит в своей админпанели заказы, обратную связь, отзывы и тому подобное посетителей из азиатского региона).

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

Недостаток - необходимость держать в папке шаблонов локализованные копии одного и того же шаблона. Впрочем, совместив этот способ со способом 1, можно устранить данный недостаток.

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.