Điểm:0

Có thể hiển thị Chế độ xem dựa trên ngôn ngữ Nội dung không?

lá cờ us

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:

nội dung = FR, giao diện = 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:

nội dung = FR, giao diện = 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.

Jaypan avatar
lá cờ de
"Điều này rõ ràng là không chính xác như có thể thấy"
liquidcms avatar
lá cờ us
ok, có lẽ không rõ ràng? Ngôn ngữ nội dung được đặt (tiền tố url) thành tiếng Pháp - vì vậy tôi muốn bảng bằng tiếng Pháp. Tất cả. Các phần duy nhất được đặt thành FR như được đặt bởi ngôn ngữ hiển thị chế độ xem là dữ liệu trong cột (1). Các phần khác: tiêu đề cột, dữ liệu trong cột 2 và cột 3 (ngày) và tiêu đề chế độ xem vẫn hiển thị ở dạng EN. Đầu ra chính xác có thể được nhìn thấy bằng hình ảnh thứ 2 khi tôi đặt ngôn ngữ giao diện thành FR.
Jaypan avatar
lá cờ de
Ngày là giao diện, đó là lý do tại sao tôi tin rằng chúng đang hiển thị theo ngôn ngữ của giao diện, thay vì ngôn ngữ nội dung hiện tại. Thật không may, tôi không có giải pháp cho vấn đề này.
liquidcms avatar
lá cờ us
Không thể nghĩ ra lý do rằng ngày sẽ được coi là bất kể định nghĩa về giao diện của Drupal là gì, nhưng vâng, chúng được dịch không chính xác thành giao diện. Tôi chắc chắn đó là một lỗi; nhưng không phải những gì tôi đang hỏi về. Thay vì gửi một bản vá để chỉ sửa mô-đun Datetime, tôi muốn tìm hiểu cách thực hiện hiển thị hoàn chỉnh chế độ xem bằng một ngôn ngữ đã xác định.
lá cờ ru
Ngày không được dịch, chúng được bản địa hóa (giống như biểu tượng dấu thập phân) và bản địa hóa dựa trên ngôn ngữ giao diện. Ví dụ. `07/12` là `ngày 12 tháng 7` ở Hoa Kỳ, trong khi mọi người châu Âu sẽ đọc nó là `ngày 7 tháng 12`. Nếu không có ngữ cảnh, `1.000` sẽ là `một (không có dấu phẩy)` ở Hoa Kỳ và là `một nghìn` ở các quốc gia nói tiếng Đức. Bản địa hóa của Drupal là tuyệt vời và hoàn toàn ổn.
Jaypan avatar
lá cờ de
Ngày có thể được dịch - chúng là cấu hình và có thể bật tính năng dịch cho chúng.
liquidcms avatar
lá cờ us
@Hudri, tôi hiểu cách hoạt động của ngày tháng. Trên thực tế, có 2 phần: các chuỗi được bản địa hóa như tháng và ngày trong tuần cũng như các định dạng được dịch như Jaypan đã đề cập. Vấn đề là "dựa trên ngôn ngữ giao diện" - vâng, điều đó đúng - và sai. Tại sao bạn lại muốn có một bảng Lượt xem với mọi cột bằng ngôn ngữ chính xác ngoại trừ cột ngày? Tôi đoán bạn đã luôn chạy với mặc định Drupal có bản dịch giao diện/nội dung gắn liền với nhau. Lưu ý: OP của tôi là về việc kiểm soát cách Chế độ xem hiển thị - không phải về ngày tháng. Tôi nghĩ Jaypan hiểu những gì tôi đang cố gắng làm. :)
lá cờ ru
*Vấn đề là "dựa trên ngôn ngữ giao diện" - đúng, điều đó đúng - và sai.* - Tôi hoàn toàn không đồng ý ở đây :-) Công ty chúng tôi tập trung vào các khách hàng du lịch, _tất cả_ các dự án của chúng tôi đều đa ngôn ngữ. Ví dụ. họ cung cấp các gói kỳ nghỉ và điều cần thiết là phải lấy định dạng ngày ở định dạng ngày phổ biến của khách (ngay cả khi nút không được dịch, họ vẫn nhận được ngày được bản địa hóa từ ngôn ngữ giao diện). Điều này tiết kiệm rất nhiều câu hỏi và vấn đề trong kinh doanh của chúng tôi. Về chủ đề: Xin lỗi tôi không biết câu trả lời.
liquidcms avatar
lá cờ us
Vâng, trường hợp sử dụng của chúng tôi là khác nhau. Của tôi là dành cho một trang web của chính phủ liên bang Canada. Không có thứ gọi là trang chưa được dịch. Mục tiêu của tôi là tạo một trang web trong đó nội dung (bao gồm ngày tháng) được xác định bởi ngôn ngữ nội dung của trang web (url); nhưng người chỉnh sửa trang web có thể làm việc bằng ngôn ngữ (giao diện) ưa thích của họ. Nhưng hơn thế nữa; Drupal gần như cho phép các trường hợp sử dụng khác nhau này. Ngay cả đối với Chế độ xem, họ có tùy chọn về cách quyết định ngôn ngữ để hiển thị chế độ xem - nó không hoạt động chính xác. Tôi đoán là trang web của bạn có bộ phát hiện nội dung/giao diện giống nhau, đúng không?
Điểm:0
lá cờ us

Ughh.. rõ ràng câu hỏi của tôi đã có câu trả lời từ lâu. Khi tôi thêm đoạn mã:

  $languageManager = \Drupal::languageManager();
  $langcode = $languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
  $language = $languageManager->getLanguage($langcode);
  $languageManager->setConfigOverrideLanguage($language);

đối với hook _views_pre_render, nó thực hiện những gì tôi muốn và sử dụng ngôn ngữ ghi đè cấu hình để ghi đè ngôn ngữ được sử dụng cho các phần có thể định cấu hình của chế độ xem (tiêu đề, tiêu đề cột, v.v.). Điều duy nhất nó không xử lý là ngày tháng - vì những ngày này được thực hiện sai trong mô-đun Datetime. Không chắc tại sao tôi không thấy điều này hoạt động khi tôi thử nó trước đó.

Và tôi có thể ghi đè dịch vụ lõi DateFormatter để sử dụng ngôn ngữ Nội dung thay vì ngôn ngữ mặc định (là giao diện) và điều này sửa ngày ở mọi nơi trên trang web. Điều này có thể được gửi dưới dạng bản vá cho lõi vì tôi chắc chắn đây là lỗi - tại sao ngày tháng lại được coi là giao diện khác với tất cả nội dung khác?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.