Vấn đề là do bạn đang cố dịch một biến, thay vì một chuỗi ký tự:
Drupal.t(object.field_supplier_products)
Trong Drupal, các biến không nên được dịch, vì cả lý do bảo mật và để giữ cho bảng dịch sạch sẽ. Bây giờ, về phía máy chủ trong PHP nếu bạn sử dụng t()
chức năng xung quanh một biến, ví dụ t($màu)
nó sẽ đưa ra một cảnh báo, nhưng giá trị vẫn có thể dịch được (tôi đã không thử/kiểm tra trong một vài năm). Nhưng nếu tôi nhớ không nhầm thì với JS và Drupal.t()
chức năng, không thể dịch các biến nào cả. Điều này là do tập lệnh Drupal thực sự được Drupal phân tích cú pháp cho các giá trị và được tạo lại với các giá trị đã dịch, được lưu vào bộ nhớ cache với các giá trị đã dịch và tệp mới này được gửi tới trình duyệt. Vì vậy, không có bản dịch nào thực sự xảy ra trên trình duyệt, bản dịch thực sự được thực hiện bởi PHP trên máy chủ và một tệp mới được tạo trước khi gửi tệp tới trình duyệt.
Giải pháp là đảm bảo rằng các giá trị của bạn được dịch trong API REST để chúng đã được dịch khi JS của bạn nhận được chúng và sẽ không yêu cầu sử dụng Drupal.t()
chức năng. Từ bài đăng của bạn, có vẻ như điểm cuối REST cũng là một phiên bản Drupal, vì vậy để thực hiện việc này trên máy chủ REST, bạn sẽ:
- Thiết lập máy chủ API REST để trở thành một trang web đa ngôn ngữ, với tính năng phát hiện ngôn ngữ bằng URL.
- Đưa ra yêu cầu của bạn tới API bằng cách sử dụng URL đa ngôn ngữ cho ngôn ngữ sẽ được truy xuất.
Ví dụ: nếu trang web đa ngôn ngữ của bạn khác nhau theo tiền tố đường dẫn, bạn sẽ có:
http://www.example.com/path/to/restserver
[ngôn ngữ chính]
http://www.example.com/[LANGUAGE_PREFIX]/path/to/restserver
(LANGUAGE_PREFIX ngôn ngữ)
Sau đó, JS của bạn sẽ yêu cầu API REST từ đường dẫn ngôn ngữ có liên quan.
Tôi thường thấy việc tạo URL ở phía máy chủ sẽ có lợi và chuyển URL được tạo bằng PHP này, URL này sẽ chứa tiền tố ngôn ngữ cho ngôn ngữ hiện tại, tới JS, sau đó gọi URL động.
Điều này được thực hiện đầu tiên bằng cách tạo một thư viện có thêm tệp JS của bạn và phụ thuộc vào cài đặt Drupal:
ví dụ_library:
js:
đường dẫn/đến/file.js: {}
phụ thuộc:
- lõi/drupalSettings
Sau đó, phần tử kết xuất của bạn sẽ đính kèm thư viện và chuyển URL tới tệp JS trong thư viện:
sử dụng Drupal\Core\Url;
$trang[
'một số_phần tử' => [
'#prefix' => '<div id="example_placeholder">',
'#suffix' => '</div>',
'#markup' => $this->t('Giữ chỗ'),
'#đính kèm' => [
'thư viện' => ['[MODULE]/example_library'],
'drupalSettings' => [
'ví dụMô-đun' => [
'ajaxCallbackUrl' => Url::fromRoute('[RESTAPI ROUTE]', [], ['absolute' => TRUE])->toString(),
],
],
],
],
];
Bây giờ, kịch bản tập tin.js
sẽ có quyền truy cập vào URL API REST với tiền tố ngôn ngữ, trong drupalSettings.exampleModule.ajaxCallbackUrl
Biến đổi.
tệp.js:
chức năng (drupalSettings) {
hàm doS Something () {
console.log(drupalSettings.exampleModule.ajaxCallbackUrl);
}
}(drupalSettings));