Настройка мультиязичності та мультивалютності 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 днів







