私はいつもこのようなhook_menusタイトルと説明に t() を使用しました:
$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',
);
これは私にとって意味があり、ユーザーは必要に応じてタイトルと説明を別の言語に翻訳できます。
ただし、DOのモジュールレビューに関する このコメント は次のように述べています。
いいえ、それは間違っています。それを行わないでください。hook_menu()の記述では、t()を使用しないでください。
これの理由は何ですか?これは実際にベストプラクティスですか?
また、これが当てはまる場合、タイトルにもt()を使用しないでください。
よく知られている場所の文字列:組み込みのメニュー、権限、ログメッセージ、.infoファイル コミュニティのドキュメント:
Drupal 6および7メニューシステムは、メニュー項目のタイトルと説明を英語で保存します。これにより、システムはデータをキャッシュできますが、オンデマンドでさまざまな言語を使用するユーザーに表示できます。これを機能させるには、hook_menu()実装のメニュー項目のタイトルまたは説明でt()を使用しないでください。さらに、これらの2つのキーには(動的文字列ではなく)リテラル文字列を使用するようにしてください。これにより、翻訳テンプレート抽出機能が使用した文字列を見つけることができます。
鉱山を強調します。
hook_men 引数のドキュメントを参照した場合。
デフォルトでは、タイトルコールバックはt関数です。したがって、常に翻訳されます。
Drupal 6なので、もう必要ありません。
https://drupal.org/node/140311 をお読みください。それを引用すると:
6.x以降、Drupalは、メニュータイトルと説明のユーザーのローカル言語への翻訳を内部的に処理します。説明が提供されている場合、常にt()で翻訳されます。渡す方法はありません。プレースホルダー置換の追加データでは(D5以前では、置換での受け渡しは推奨されていませんでした-この変更により、メニューシステムはそのルールを直接適用します。)タイトルはt()デフォルトですが、新しい「タイトル引数」プロパティを使用して、t()スタイルの文字列置換を行うことができます。t()を独自のカスタムコールバックに置き換えることもできます。
t()
の実装ではhook_menu()
を使用しないでください。これは、後で自動的にt()
が呼び出され、それによって二重変換が発生するためです。
これは、hook_menu()のドキュメントページに明記されています。
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x
"title":必須。メニュー項目の未翻訳のタイトル。
"description":メニュー項目の未翻訳の説明。
したがって、上記の両方にt()関数を使用する必要はありません。