Настройка мультиязычности и мультивалютности PrestaShop

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

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка мультиязычности и мультивалютности PrestaShop
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка мультиязычности и мультивалютности PrestaShop

PrestaShop спроектирован с мультиязычностью как core-функцией: таблицы _lang существуют для большинства сущностей (Product, Category, CMS-страницы, атрибуты). Мультивалютность реализована через систему конвертации относительно базовой валюты. Обе функции поддерживаются нативно без сторонних модулей.

Добавление языков

Языки в PrestaShop соответствуют локалям PHP и поставляются с языковыми пакетами (переводы back-office + front-office):

# Установка русского языка через CLI
php bin/console prestashop:language:install ru-RU

# Или через объект Language
$language = new Language();
$language->name        = 'Русский';
$language->iso_code    = 'ru';
$language->locale      = 'ru-RU';
$language->language_code = 'ru-RU';
$language->date_format_lite  = 'd.m.Y';
$language->date_format_full  = 'd.m.Y H:i:s';
$language->is_rtl    = false;
$language->active    = true;
$language->add();

Структура хранения переводов:

-- Пример: переводы товаров
SELECT p.id_product, pl.name, pl.description_short, l.iso_code
FROM ps_product p
JOIN ps_product_lang pl ON pl.id_product = p.id_product
JOIN ps_lang l ON l.id_lang = pl.id_lang
WHERE p.id_product = 42;

URL-структура для SEO

PrestaShop поддерживает несколько URL-стратегий для мультиязычных сайтов:

Стратегия URL Конфигурация
GET-параметр /product?id_lang=2 По умолчанию, не рекомендуется
Языковый префикс /ru/product PS_LANGUAGE_DETECTION + .htaccess
Поддомен ru.example.com Multishop
Отдельный домен example.ru Multishop

Настройка языкового префикса в app/config/parameters.php и через Admin → International → Localization:

// В .htaccess PrestaShop добавляет правила автоматически
// Для ручного управления в Nginx:
location / {
    rewrite ^/ru/(.*)$ /$1?id_lang=2 last;
    rewrite ^/en/(.*)$ /$1?id_lang=1 last;
    try_files $uri $uri/ /index.php$is_args$args;
}

hreflang в PrestaShop добавляется через хук displayHeader в кастомном модуле:

public function hookDisplayHeader(): string
{
    $languages = Language::getLanguages(true);
    $currentController = $this->context->controller;
    $hreflangs = [];

    foreach ($languages as $lang) {
        $url = $this->context->link->getLanguageLink($lang['id_lang']);
        $hreflangs[] = sprintf(
            '<link rel="alternate" hreflang="%s" href="%s">',
            $lang['language_code'],
            $url
        );
    }

    $hreflangs[] = '<link rel="alternate" hreflang="x-default" href="' .
        $this->context->link->getLanguageLink(Configuration::get('PS_LANG_DEFAULT')) . '">';

    return implode("\n", $hreflangs);
}

Настройка валют

PrestaShop хранит все цены в базовой валюте (конфигурируется в Admin → International → Currencies → Default currency). Конвертация происходит автоматически при отображении.

// Добавление валюты программно
$currency = new Currency();
$currency->name          = 'Польский злотый';
$currency->iso_code      = 'PLN';
$currency->iso_code_num  = '985';
$currency->sign          = 'zł';
$currency->conversion_rate = 0.21; // относительно базовой (EUR)
$currency->decimals      = 2;
$currency->active        = true;
$currency->add();

Автоматическое обновление курсов

PrestaShop поддерживает несколько провайдеров через интерфейс CurrencyRateProviderInterface:

// Кастомный провайдер курсов (например, ЦБ РФ)
namespace MyModule\Provider;

use PrestaShop\PrestaShop\Core\Currency\ExchangeRateProvider\AbstractApiExchangeRateProvider;

class CbRfExchangeRateProvider extends AbstractApiExchangeRateProvider
{
    const API_URL = 'https://www.cbr.ru/scripts/XML_daily.asp';

    public function getRates(array $currencyIsoCodes): array
    {
        $xml = simplexml_load_file(self::API_URL);
        $rates = [];

        foreach ($xml->Valute as $valute) {
            $isoCode = (string) $valute->CharCode;
            if (in_array($isoCode, $currencyIsoCodes)) {
                $nominal = (float) str_replace(',', '.', (string) $valute->Nominal);
                $value   = (float) str_replace(',', '.', (string) $valute->Value);
                $rates[$isoCode] = $value / $nominal;
            }
        }

        return $rates;
    }
}

Cron для обновления курсов:

# Обновление курсов каждые 6 часов
0 */6 * * * www-data php /var/www/prestashop/bin/console prestashop:currencies:update-exchange-rates

Переводы контента каталога

Массовый перевод через импорт CSV (формат PrestaShop):

ID;Active (0/1);Name *;Short description;Description;Meta title;Meta description;URL rewritten
42;1;Куртка зимняя;"Тёплая куртка для зимы";"Полное описание куртки...";"Купить куртку зимнюю";"Куртка зимняя — купить в магазине";kurtka-zimnyaya
# Импорт через веб-интерфейс: Admin → Advanced Parameters → Import
# Или через модуль Webkul/другой импортёр с API

# Прямое обновление через SQL для массовых операций:
UPDATE ps_product_lang
SET name = 'Куртка зимняя',
    description_short = 'Тёплая куртка',
    link_rewrite = 'kurtka-zimnyaya'
WHERE id_lang = 2  -- id русского языка
  AND id_product IN (42, 43, 44);

Форматирование цен и чисел по локали

Каждая валюта имеет собственное форматирование через CurrencyFormatter:

use PrestaShop\PrestaShop\Core\Localization\Locale\Repository as LocaleRepository;

$locale = $localeRepository->getLocale('ru-RU');
$formattedPrice = $locale->formatPrice(1299.99, 'RUB');
// → "1 299,99 ₽"

$formattedPrice = $locale->formatPrice(99.99, 'EUR');
// → "99,99 €" (для ru-RU локали)

Сроки настройки

  • Добавление 1–2 языков + переводы back-office: 1 день
  • Настройка 3–5 валют + автообновление курсов: 1 день
  • SEO-конфигурация hreflang + URL-структура: 1–2 дня
  • Перевод каталога 1 000–10 000 товаров (с проверкой качества): 3–7 дней