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


11

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

これの理由は何ですか?これは実際にベストプラクティスですか?

また、これがtrueの場合、タイトルにもt()を使用しないでください。


明らかにこれは使用すべきではありませんが、hook_menuのヘルプページで「description」=> t()を検索すると6つのオカレンスがあるため、これはよくある間違いです!
Felix Eve

1
一般的であろうとなかろうと、それは言い訳ではありません;)そして、これらの出来事はコメントにあります-人々はそこで誤解されるのは自由です。
Mołot

1
@Mołot彼らはそこで誤解するのは自由ですが、多くの新しいユーザーがそのコードをコピーして貼り付けるので、これはよくある間違いであり続けるでしょう。DOの管理者権限を持つユーザーは、それらのコメントを編集してt()を削除する必要があると思います。
Felix Eve

必要に応じて問題提出できます
Mołot

1
良い提案。完了しました
Felix Eve

回答:


17

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

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

強調鉱山。


追加します:title callbackデフォルトでtitle callbackt()関数であるため、が設定されていない場合のみ
milkovsky

1
@milkovskyタイトルコールバックが設定されている場合は、注意する必要がありますが、それをt()使用することはできませんhook menu()
Mołot

11

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

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

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


7

Drupal 6はもう必要ないから。

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

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


6

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


* title callbackhook_menuにを追加した場合、そうでないt場合は、タイトルコールバックが文字列を翻訳します。
AyeshK 2014

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.