Проблема связана с тем, что вы пытаетесь перевести переменную, а не литеральную строку:
Drupal.t(object.field_supplier_products)
В Drupal переменные не следует переводить как по соображениям безопасности, так и для поддержания чистоты таблицы переводов. Теперь на стороне сервера в PHP, если бы вы использовали т()
функция вокруг переменной, например т ($ цвет)
это выдаст предупреждение, но значение все равно должно быть переводимым (я не пробовал/не проверял несколько лет). Но если я правильно помню, с JS и Друпал.t()
функции вообще невозможно преобразовать переменные. Это связано с тем, что скрипт Drupal фактически анализирует значения Drupal и повторно генерирует переведенные значения, кэширует переведенные значения, и этот новый файл отправляется в браузер. Таким образом, на самом деле в браузере не происходит перевода, перевод фактически выполняется PHP на сервере, и новый файл генерируется до того, как файл будет отправлен в браузер.
Решение состоит в том, чтобы убедиться, что ваши значения переведены в REST API, чтобы они уже были переведены, когда ваш JS их получает, и не требовалось использование Друпал.t()
функция. Из вашего сообщения видно, что конечная точка REST также является экземпляром Drupal, поэтому, чтобы сделать это на сервере REST, вы должны:
- Настройте сервер REST API как многоязычный сайт с определением языка по URL-адресу.
- Сделайте запрос к API, используя многоязычный URL-адрес для языка, который необходимо получить.
Например, если ваш многоязычный сайт отличается префиксом пути, у вас будет:
http://www.example.com/path/to/restserver
[основной язык]
http://www.example.com/[LANGUAGE_PREFIX]/path/to/restserver
(язык LANGUAGE_PREFIX)
Затем ваш JS запросит REST API из соответствующего языкового пути.
Я часто нахожу полезным генерировать URL-адрес на стороне сервера и передавать этот сгенерированный PHP URL-адрес, который будет содержать языковой префикс для текущего языка, в JS, который затем динамически вызывает URL-адрес.
Сначала это делается путем создания библиотеки, которая добавляет ваш JS-файл и зависит от настроек Drupal:
пример_библиотеки:
js:
путь/к/file.js: {}
зависимости:
- настройки ядра/друпала
Затем ваш элемент рендеринга подключит библиотеку и передаст URL-адрес JS-файлу в библиотеке:
используйте Drupal\Core\Url;
$ страница[
'некоторый_элемент' => [
'#prefix' => '<div id="example_placeholder">',
'#суффикс' => '</div>',
'#markup' => $this->t('Заполнитель'),
'# прикрепленный' => [
'библиотека' => ['[МОДУЛЬ]/example_library'],
'drupalSettings' => [
'примермодуля' => [
'ajaxCallbackUrl' => Url::fromRoute('[МАРШРУТ РЕСТАПИ]', [], ['absolute' => TRUE])->toString(),
],
],
],
],
];
Теперь сценарий файл.js
будет иметь доступ к URL-адресу REST API с языковым префиксом в drupalSettings.exampleModule.ajaxCallbackUrl
переменная.
файл.js:
функция (настройки друпала) {
функция сделать что-то () {
console.log(drupalSettings.exampleModule.ajaxCallbackUrl);
}
}(Настройки друпала));