web-dev-qa-db-ja.com

hook_menuの説明でt()を使用する必要がありますか?

私はいつもこのような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()を使用しないでください。

11
Felix Eve

よく知られている場所の文字列:組み込みのメニュー、権限、ログメッセージ、.infoファイル コミュニティのドキュメント:

Drupal 6および7メニューシステムは、メニュー項目のタイトルと説明を英語で保存します。これにより、システムはデータをキャッシュできますが、オンデマンドでさまざまな言語を使用するユーザーに表示できます。これを機能させるには、hook_menu()実装のメニュー項目のタイトルまたは説明でt()を使用しないでください。さらに、これらの2つのキーには(動的文字列ではなく)リテラル文字列を使用するようにしてください。これにより、翻訳テンプレート抽出機能が使用した文字列を見つけることができます。

鉱山を強調します。

17
Mołot

hook_men 引数のドキュメントを参照した場合。

  • 「タイトル」:必須。メニュー項目の未翻訳のタイトル。
  • 「タイトルコールバック」:タイトルを生成する関数。デフォルトはt()です。生の文字列のみを出力する必要がある場合は、これをFALSEに設定します。
  • "タイトル引数":t()またはカスタムコールバックに送信する引数。上記のパスコンポーネントの置換を使用します。
  • "description":メニュー項目の未翻訳の説明。

デフォルトでは、タイトルコールバックはt関数です。したがって、常に翻訳されます。

11
Anil Sagar

Drupal 6なので、もう必要ありません。

https://drupal.org/node/140311 をお読みください。それを引用すると:

6.x以降、Drupalは、メニュータイトルと説明のユーザーのローカル言語への翻訳を内部的に処理します。説明が提供されている場合、常にt()で翻訳されます。渡す方法はありません。プレースホルダー置換の追加データでは(D5以前では、置換での受け渡しは推奨されていませんでした-この変更により、メニューシステムはそのルールを直接適用します。)タイトルはt()デフォルトですが、新しい「タイトル引数」プロパティを使用して、t()スタイルの文字列置換を行うことができます。t()を独自のカスタムコールバックに置き換えることもできます。

7
penyaskito

t()の実装ではhook_menu()を使用しないでください。これは、後で自動的にt()が呼び出され、それによって二重変換が発生するためです。

6
Aram Boyajyan

これは、hook_menu()のドキュメントページに明記されています。

https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x

"title":必須。メニュー項目の未翻訳のタイトル。

"description":メニュー項目の未翻訳の説明。

したがって、上記の両方にt()関数を使用する必要はありません。

0
webdevfreak