Tôi có nên sử dụng t () trong mô tả của hook_menu không?


11

Tôi đã luôn sử dụng t () cho tiêu đề và mô tả hook_menus như thế này:

$items['some-path'] = array(
    'title' => t('My Page Title'),
    'description' => t('This is a description about what my page is for'),
    'page callback' => 'profile_user_page',
);

Điều này có ý nghĩa với tôi để người dùng có thể dịch tiêu đề và mô tả sang các ngôn ngữ khác nhau nếu được yêu cầu.

Tuy nhiên nhận xét này về đánh giá mô-đun trên DO nói:

Không, đó là sai, đừng làm điều đó - các mô tả trong hook_menu () không bao giờ nên sử dụng t ().

Lý do cho điều này là gì và đây có phải là thực tế tốt nhất?

Ngoài ra nếu điều này là đúng thì chúng ta cũng không nên sử dụng t () cho tiêu đề chứ?


Rõ ràng điều này không nên được sử dụng sau đó nhưng nếu bạn tìm kiếm trang trợ giúp hook_menu cho "description '=> t (" có 6 lần xuất hiện thì rõ ràng đây là một lỗi phổ biến!
Felix Eve

1
Thông thường hay không, đó không phải là một cái cớ;) Và những sự kiện này là trong các bình luận - mọi người có thể tự do bị nhầm lẫn ở đó.
Mołot

1
@ Mołot Họ có thể bị nhầm ở đó, tuy nhiên rất nhiều người dùng mới sẽ sao chép và dán mã đó để điều này tiếp tục là một lỗi phổ biến. Tôi nghĩ ai đó có quyền quản trị viên trên DO nên chỉnh sửa các nhận xét đó để xóa t ().
Đêm giao thừa

Bạn có thể nộp một vấn đề nếu bạn muốn.
Mołot

1
Gợi ý tốt. Xong rồi .
Đêm giao thừa

Câu trả lời:


17

Xem Chuỗi tại các địa điểm nổi tiếng: menu tích hợp, quyền, thông điệp tường trình và tài liệu cộng đồng tệp .info :

Hệ thống menu Drupal 6 và 7 lưu các tiêu đề và mô tả mục menu bằng tiếng Anh. Điều này cho phép hệ thống lưu trữ dữ liệu, nhưng hiển thị cho người dùng sử dụng các ngôn ngữ khác nhau theo yêu cầu. Để làm việc này, bạn không nên sử dụng t () trên tiêu đề hoặc mô tả các mục menu trong triển khai hook_menu () của bạn. Ngoài ra, bạn nên cố gắng sử dụng một chuỗi ký tự (chứ không phải là một chuỗi động) cho hai khóa này, để trình trích xuất mẫu dịch thuật có thể tìm thấy chuỗi bạn đã sử dụng.

Nhấn mạnh mỏ.


Tôi sẽ thêm: Chỉ khi title callbackkhông được đặt vì theo mặc định title callbackt()chức năng
milkovsky

1
@milkovsky nếu gọi lại tiêu đề được đặt, bạn nên quan tâm t()và bạn vẫn không nên sử dụng nó trong hook menu()- bạn biết đấy, bộ nhớ đệm.
Mołot

11

Nếu bạn thấy tài liệu về các đối số hook_menu ..

  • "tiêu đề": Bắt buộc. Tiêu đề chưa được dịch của mục menu.
  • "gọi lại tiêu đề": Chức năng tạo tiêu đề; mặc định là t (). Nếu bạn chỉ yêu cầu chuỗi thô là đầu ra, hãy đặt chuỗi này thành FALSE.
  • "đối số tiêu đề": Đối số để gửi tới t () hoặc cuộc gọi lại tùy chỉnh của bạn, với sự thay thế thành phần đường dẫn như được mô tả ở trên.
  • "description": Mô tả chưa được dịch của mục menu.

Theo mặc định, tiêu đề gọi lại là chức năng t .. Vì vậy, nó luôn được dịch ..


7

Vì Drupal 6 không còn cần thiết nữa.

Vui lòng đọc https://drupal.org/node/140311 . Trích dẫn rằng:

Kể từ 6.x, Drupal xử lý nội bộ bản dịch tiêu đề và mô tả trình đơn sang ngôn ngữ địa phương của người dùng. Mô tả, nếu được cung cấp, luôn được dịch với t (); không có cách nào để chuyển dữ liệu bổ sung cho thay thế giữ chỗ (trong D5 và trước đó, chuyển qua thay thế là một thực tiễn không được khuyến khích - với thay đổi này, hệ thống menu thực thi quy tắc đó trực tiếp). Các tiêu đề được dịch theo t () theo mặc định, nhưng có thể thay thế chuỗi kiểu t () thông qua việc sử dụng thuộc tính 'đối số tiêu đề' mới. Bạn cũng có thể chọn thay thế t () bằng cuộc gọi lại tùy chỉnh của riêng bạn.


6

Bạn không nên sử dụng t()trong hook_menu()triển khai vì t()được gọi tự động sau này và làm như vậy sẽ gây ra dịch hai lần.


* Lưu ý rằng nếu bạn thêm a title callbacktrong hook_menu và nếu không t, chức năng gọi lại tiêu đề có trách nhiệm dịch chuỗi.
AyeshK

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.