Skip to content

[Bug] Cart toast-нотификации игнорируют локаль страницы: api.php всегда initialize('web') #541

Description

@Ibochkarev

Описание проблемы

Тосты при добавлении/удалении товара из корзины (response.message → iziToast) приходят на языке cultureKey контекста web, даже когда страница открыта в другом контексте с другим cultureKey (Babel / мультиязычность).

UI на странице (чанки, кнопки, {'…'|lexicon}) уже на нужной локали. Ломается только серверный текст в JSON Cart API.

Шаги воспроизведения

  1. Сайт с минимум двумя фронтовыми контекстами, у которых разный cultureKey (например web = ru, en = en).
  2. Открыть каталог в не-web контексте. Убедиться, что кнопки/лейблы корзины на языке этого контекста.
  3. Добавить или удалить товар.
  4. Посмотреть toast и Network → api.php?route=/api/v1/cart/add (или remove) → поле message.

Ожидаемое поведение

message в ответе Cart API и toast используют cultureKey контекста текущей страницы (тот же, что уже в ms3Config.ctx после registerFrontend).

Фактическое поведение

assets/components/minishop3/api.php всегда делает:

$modx->initialize('web');
$ms3->initialize('web');

Utils::success() / error() переводят ключи (ms3_cart_add_success, ms3_cart_remove_success, …) через $modx->lexicon() в локали web. Фронт (ms3Message) строку не переводит — только показывает response.message.

ApiClient не передаёт контекст/культуру страницы в запрос.

Скриншоты

На странице с «правильной» локалью toast всё равно на языке web (часто ru): «Товар успешно добавлен в корзину…» / «Товар успешно удалён из корзины».

Окружение

  • MiniShop3: current beta / mainline
  • MODX: 3.x
  • PHP: 8.2+
  • Браузер: любой (баг на сервере)

Логи ошибок

Логи из core/cache/logs/error.log
Не применимо — ошибки в error.log нет. Симптом в JSON message.

Дополнительный контекст

Ключи лексикона: topic minishop3:cartms3_cart_add_success, ms3_cart_remove_success, ms3_cart_change_success, ms3_cart_clean_success и связанные err-ключи.

Направление фикса (черновик):

  1. Пробрасывать в API контекст страницы из ms3Config.ctx (query/header/body — выбрать один контракт).
  2. В api.php (и/или middleware Web API) инициализировать $modx / $ms3 этим контекстом вместо хардкода web, с безопасным fallback на web.
  3. Убедиться, что lexicon->load('minishop3:cart') и $modx->lexicon(...) идут уже после смены контекста/cultureKey.
  4. Не ломать корзину при ms3_cart_context и draft context.

Временный обход: править переводы topic cart для cultureKey контекста web, либо выровнять cultureKey у web (не подходит для Babel).

Связано по смыслу с multi-app / shared frontend config, но это отдельный баг локали Web API, не #538/#539.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingjavascriptPull requests that update javascript codepriority: mediumСредний приоритет

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions