Haruskah saya menggunakan t () dalam deskripsi hook_menu?

11

Saya selalu menggunakan t () untuk judul dan deskripsi hook_menus seperti ini:

$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',
);

Ini masuk akal bagi saya sehingga pengguna dapat menerjemahkan judul dan deskripsi ke berbagai bahasa jika diperlukan.

Namun komentar ini pada ulasan modul pada DO mengatakan:

Tidak, itu salah, jangan lakukan itu - deskripsi di hook_menu () tidak boleh menggunakan t ().

Apa alasannya dan apakah ini praktik terbaik?

Juga jika ini benar maka haruskah kita tidak menggunakan t () untuk judul juga?

Felix Eve
sumber
Jelas ini tidak boleh digunakan kemudian tetapi jika Anda mencari halaman bantuan hook_menu untuk "description '=> t (" ada 6 kejadian jadi jelas ini adalah kesalahan umum!
Felix Eve
1
Biasa atau tidak, itu bukan alasan;) Dan kejadian ini ada di komentar - orang bebas untuk keliru di sana.
Mołot
1
@ Mołot Mereka bebas untuk dikira di sana, namun banyak pengguna baru akan menyalin dan menempelkan kode itu sehingga ini akan terus menjadi kesalahan umum. Saya pikir seseorang dengan hak admin di DO harus mengedit komentar tersebut untuk menghapus t ().
Felix Eve
Anda dapat mengajukan masalah jika mau.
Mołot
1
Saran yang bagus Selesai .
Felix Eve

Jawaban:

17

Lihat String di tempat-tempat terkenal: menu bawaan, izin, pesan log, dan dokumentasi komunitas .info file :

Sistem menu Drupal 6 dan 7 menyimpan judul dan deskripsi item menu dalam bahasa Inggris. Ini memungkinkan sistem untuk menyimpan data, tetapi menampilkan kepada pengguna menggunakan berbagai bahasa sesuai permintaan. Agar ini berfungsi, Anda tidak boleh menggunakan t () pada judul atau deskripsi item menu dalam implementasi hook_menu () Anda. Selain itu, Anda harus mencoba menggunakan string literal (daripada string dinamis) untuk dua kunci ini, sehingga ekstraktor templat terjemahan dapat menemukan string yang Anda gunakan.

Tekankan milikku.

Mołot
sumber
Saya akan menambahkan: Hanya jika title callbacktidak diatur karena secara default title callbackadalah t()fungsi
milkovsky
1
@ Milkovsky jika judul panggil balik diatur, itu harus diperhatikan t()dan Anda masih tidak boleh menggunakannya di hook menu()- Anda tahu, caching.
Mołot
11

Jika Anda melihat dokumentasi argumen hook_menu ..

  • "title": Diperlukan. Judul item menu yang tidak diterjemahkan.
  • "title callback": Berfungsi untuk menghasilkan judul; default ke t (). Jika Anda hanya membutuhkan string mentah untuk menjadi output, atur ini ke FALSE.
  • "argumen judul": Argumen untuk dikirim ke t () atau panggilan balik khusus Anda, dengan substitusi komponen jalur seperti dijelaskan di atas.
  • "description": Deskripsi item menu yang tidak diterjemahkan.

Secara default judul panggilan balik adalah fungsi t .. Jadi selalu diterjemahkan ..

Anil Sagar
sumber
7

Karena Drupal 6 tidak diperlukan lagi.

Silakan baca https://drupal.org/node/140311 . Mengutip itu:

Pada 6.x, Drupal secara internal menangani terjemahan judul menu dan deskripsi ke dalam bahasa lokal pengguna. Deskripsi, jika disediakan, selalu diterjemahkan dengan t (); tidak ada cara untuk memberikan data tambahan untuk pengganti placeholder (di D5 dan sebelumnya, penggantian substitusi adalah praktik yang tidak disarankan - dengan perubahan ini, sistem menu memberlakukan aturan itu secara langsung). Judul diterjemahkan dengan t () secara default, tetapi penggantian string gaya t () dimungkinkan melalui penggunaan properti 'argumen argumen' baru. Anda juga dapat memilih untuk mengganti t () dengan callback kustom Anda sendiri.

penyaskito
sumber
6

Anda tidak boleh menggunakan t()dalam hook_menu()implementasi karena t()secara otomatis dipanggil nanti dan hal itu akan menyebabkan terjemahan ganda.

Aram Boyajyan
sumber
* Perhatikan bahwa jika Anda menambahkan a title callbackdi hook_menu, dan jika tidak t, judul panggilan balik bertanggung jawab untuk menerjemahkan string.
AyeshK