Problema se datorează faptului că încercați să traduceți o variabilă, mai degrabă decât un șir literal:
Drupal.t(object.field_supplier_products)
În Drupal, variabilele nu trebuie traduse, atât din motive de securitate, cât și pentru a menține curat tabelul de traduceri. Acum, pe partea de server în PHP, dacă ar fi să utilizați t()
funcția în jurul unei variabile, de exemplu t($culoare)
ar arunca un avertisment, dar valoarea ar trebui să fie în continuare traducabilă (nu am încercat/verificat de câțiva ani). Dar dacă îmi amintesc bine, cu JS și Drupal.t()
funcția, nu este deloc posibilă traducerea variabilelor. Acest lucru se datorează faptului că scriptul Drupal a analizat de fapt valorile de către Drupal și a fost re-generat cu valorile traduse, stocat în cache cu valorile traduse și acest nou fișier este trimis în browser. Deci, nicio traducere nu are loc în browser, traducerea este de fapt pusă în aplicare de PHP pe server și un fișier nou este generat înainte de a trimite fișierul către browser.
Soluția este să vă asigurați că valorile dvs. sunt traduse în API-ul REST, astfel încât acestea să fie deja traduse atunci când JS-ul dvs. le primește și nu va necesita utilizarea Drupal.t()
funcţie. Din postarea dvs. se pare că punctul final REST este, de asemenea, o instanță Drupal, așa că pentru a face acest lucru pe serverul REST ar trebui:
- Configurați serverul REST API pentru a fi un site multilingv, cu detectarea limbii prin URL.
- Faceți cererea către API folosind adresa URL multilingvă pentru limba care urmează să fie preluată.
De exemplu, dacă site-ul dvs. multilingv diferă prin prefixul căii, veți avea:
http://www.example.com/path/to/restserver
[limba principală]
http://www.example.com/[LANGUAGE_PREFIX]/path/to/restserver
(limbă LANGUAGE_PREFIX)
Apoi, JS-ul dvs. va solicita API-ul REST din calea lingvistică relevantă.
De multe ori găsesc că este benefic să generăm adresa URL pe partea de server și să treci această adresă URL generată de PHP, care va conține prefixul de limbă pentru limba curentă, către JS care apelează apoi URL-ul în mod dinamic.
Acest lucru se face mai întâi prin crearea unei biblioteci care adaugă fișierul dvs. JS și are o dependență de setările Drupal:
bibliotecă_exemplu:
js:
cale/către/fișier.js: {}
dependențe:
- core/drupalSettings
Apoi, elementul de randare ar atașa biblioteca și va transmite URL-ul fișierului JS din bibliotecă:
utilizați Drupal\Core\Url;
$page[
'some_element' => [
'#prefix' => '<div id="example_placeholder">',
'#sufix' => '</div>',
'#markup' => $this->t('Slogan'),
'#attached' => [
'library' => ['[MODULE]/example_library'],
'drupalSettings' => [
'exampleModule' => [
'ajaxCallbackUrl' => Url::fromRoute('[RESTAPI ROUTE]', [], ['absolute' => TRUE])->toString(),
],
],
],
],
];
Acum, scenariul fișier.js
va avea acces la adresa URL a API-ului REST cu prefixul de limbă, în drupalSettings.exampleModule.ajaxCallbackUrl
variabil.
file.js:
function(drupalSettings) {
function do Something() {
console.log(drupalSettings.exampleModule.ajaxCallbackUrl);
}
}(drupalSettings));