Настройка мультиязычности и мультивалютности Magento 2
Magento 2 предоставляет полноценную архитектуру Store View для управления несколькими языками и валютами в рамках одной инсталляции. Правильная настройка требует понимания иерархии Global → Website → Store → Store View и того, как каждый уровень влияет на каталог, цены и транзакции.
Иерархия Store View и локализация
Каждый Store View в Magento 2 соответствует одной локали. Базовая структура для мультиязычного магазина:
- Website — домен или группа доменов (example.com)
- Store — корневая категория каталога
-
Store View — язык:
en_US,de_DE,ru_RU
Создание Store View через CLI:
bin/magento store:website:create --code=eu --name="Europe" --sort-order=10
bin/magento store:group:create --website-id=2 --name="EU Store" --root-category-id=2
bin/magento store:store:create --name="German" --code=de --website-id=2 --group-id=2 --locale=de_DE --sort-order=10
После создания Store View необходимо установить языковые пакеты. Magento использует i18n CSV-файлы, Composer-пакеты для основных языков публикуются в репозитории magento/language-*:
composer require magento/language-de_de
composer require magento/language-ru_ru
bin/magento setup:upgrade
bin/magento setup:static-content:deploy de_DE ru_RU en_US -f
Конфигурация мультивалютности
Magento 2 работает с базовой валютой (Base Currency) и отображаемыми валютами (Display Currencies). Курсы обновляются через провайдеры: встроенный Webservicex устарел, рекомендуется fixer.io или currencyconverterapi.com.
Настройка через app/etc/config.php или Admin Panel:
<!-- app/etc/env.php — не хранить API ключи в VCS -->
'currency' => [
'options' => [
'base' => 'EUR',
'default' => 'EUR',
'allow' => 'EUR,USD,GBP,PLN,RUB'
]
]
Настройка провайдера курсов через core_config_data:
INSERT INTO core_config_data (scope, scope_id, path, value) VALUES
('default', 0, 'currency/import/service', 'Magento_CurrencySymbol/service/fixerio'),
('default', 0, 'currency/import/api_key', 'YOUR_FIXER_KEY'),
('default', 0, 'currency/import/time', '00:00:00');
Автоматическое обновление курсов через cron:
<!-- etc/crontab.xml -->
<group id="default">
<job name="currency_rates_update" instance="Magento\CurrencySymbol\Model\System\Currencysymbol" method="scheduledUpdateCurrencyRates">
<schedule>0 */6 * * *</schedule>
</job>
</group>
Переводы контента: продукты и категории
Атрибуты товаров переводятся на уровне Store View. Для массового перевода используется механизм импорта с указанием store_view_code:
sku,store_view_code,name,description,short_description
product-001,de,Produkt Eins,"Vollständige Beschreibung","Kurze Beschreibung"
product-001,ru,Продукт Один,"Полное описание","Краткое описание"
Импорт через CLI:
bin/magento import:run --entity=catalog_product --behavior=update \
--validation-strategy=validation-stop-on-errors \
--allowed-error-count=0 \
--input-file=var/import/products_de.csv \
--import-dir=var/import
URL-структура и hreflang
Для SEO критично правильно настроить URL-структуру. Magento 2 поддерживает два подхода:
| Подход | Пример | Конфигурация |
|---|---|---|
| Поддомен | de.example.com |
Отдельный Website |
| Подпапка | example.com/de/ |
Store View с Base URL |
| GET-параметр | example.com?___store=de |
Не рекомендуется |
Настройка hreflang через XML layout:
<!-- view/frontend/layout/default_head_blocks.xml -->
<page>
<head>
<block class="Vendor\Module\Block\Hreflang" name="hreflang" template="Vendor_Module::hreflang.phtml"/>
</head>
</page>
Ценообразование по Store View и Website
Цены в Magento 2 задаются на уровне Website. Для разных цен по регионам используются catalog_product_entity_decimal записи с привязкой к website_id. Специфическое ценообразование реализуется через Tier Prices и Customer Group Prices:
// Программная установка цены для website
$product->setPrice(99.99);
$product->setWebsiteIds([1, 2]);
$product->setData('price', 89.99); // overwrite for scope
// Через repository с учётом scope
$this->productRepository->save($product, true); // saveOptions = true
Налоги и отображение цен: настройте Tax Zones по странам и привяжите к Customer Groups. Для ЕС обязательна поддержка инклюзивных/эксклюзивных цен с НДС — конфигурация в Stores → Configuration → Tax → Price Display Settings.
Типичные сроки внедрения
- Базовая настройка 2 языков + 2 валют: 2–3 дня
- Перевод каталога (1000–5000 SKU): 3–5 дней (включая валидацию импорта)
- SEO-конфигурация с hreflang и canonical: 1–2 дня
- Настройка автоматического обновления курсов + мониторинг: 1 день







