Drupal hỗ trợ khái niệm Ngôn ngữ giao diện và Ngôn ngữ nội dung. Tôi (và mọi khách hàng mà tôi từng hỏi) dường như có quan điểm khác về "nội dung" và "giao diện" là gì so với Drupal (trong hầu hết các trường hợp). Tôi coi Giao diện là các mục mà quản trị viên hoặc biên tập viên sẽ sử dụng để thực hiện công việc của họ (menu quản trị viên, tab chỉnh sửa, chi tiết trợ giúp trên biểu mẫu, v.v.) và Nội dung là nội dung mà những người không phải quản trị viên (thường là Anon nhưng không phải lúc nào cũng vậy) sẽ thấy.
Một chế độ xem mà tôi tạo để trình bày "nội dung" trên trang web, theo lẽ tự nhiên, tôi nghĩ đó là nội dung - nhưng Drupal có ý tưởng không nhất quán và thường không chính xác về đây là gì.
Để bắt đầu, tôi đã thiết lập trang web sao cho ngôn ngữ Giao diện được xác định bằng ngôn ngữ ưa thích của Người dùng (do quản trị viên/biên tập viên trang web sẽ đặt) và ngôn ngữ Nội dung được xác định bằng tiền tố mã ngôn ngữ URL.
Một ví dụ về chế độ xem thử nghiệm trông như thế này trong FR (url là /fr/test) - Ngôn ngữ giao diện được đặt thành EN:
Điều này rõ ràng là không chính xác như có thể thấy với màn hình phù hợp khi tôi đặt Ngôn ngữ giao diện thành FR:
Chế độ xem có nhiều tùy chọn để đặt cách xác định ngôn ngữ kết xuất "nội dung". Đối với ví dụ của tôi ở trên, nó được đặt để hiển thị dựa trên "ngôn ngữ nội dung" của trang (và do đó là url). Điều này hoạt động đối với hầu hết dữ liệu trường (tiêu đề, thuật ngữ phân loại, trường văn bản đã dịch); nhưng thật đáng buồn là không hoạt động đối với các trường Ngày giờ - chúng dường như được mã hóa cứng để dịch không chính xác bằng Giao diện. Nhưng bạn cũng có thể thấy các phần cấu hình của chế độ xem (tiêu đề chế độ xem, nhãn trường, v.v.) cũng được dịch là Giao diện.
Có cách nào để yêu cầu một chế độ xem dịch bằng ngôn ngữ nội dung không?
Tôi đã sử dụng đoạn mã sau:
$languageManager = \Drupal::languageManager();
$langcode = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
$language = $languageManager->getLanguage($langcode);
$languageManager->setConfigOverrideLanguage($language);
trong chức năng tiền xử lý khối để cho phép một số phần khối sử dụng ngôn ngữ Giao diện không chính xác để dịch sang ngôn ngữ nội dung. Có cách nào tương tự để ghi đè ngôn ngữ giao diện mà chế độ xem sử dụng để dịch không? Tôi hy vọng nó giống như đoạn mã trên nhưng đơn giản là tôi không chèn vào đúng chỗ (tôi đã thử hook cho bản dựng trước, kết xuất trước, query_alter không thành công).
Nếu điều này có thể thực hiện được, tôi rất muốn viết một mô-đun đóng góp để sử dụng giao diện người dùng hiện có trong Chế độ xem để đặt ngôn ngữ kết xuất và để nó kết xuất mọi thứ thay vì chỉ một số trường nhất định.