Налаштування мультимовності та мультивалютності 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          = 'Polish Zloty';
$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;Winter Jacket;"Warm jacket for winter";"Full jacket description...";"Buy winter jacket";"Winter jacket — buy in store";winter-jacket
# Імпорт через веб-інтерфейс: Admin → Advanced Parameters → Import
# Або через модуль Webkul або кастомний імпортер з API

# Прямого оновлення через SQL для масових операцій:
UPDATE ps_product_lang
SET name = 'Winter Jacket',
    description_short = 'Warm jacket',
    link_rewrite = 'winter-jacket'
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 днів