Soll ich t () in der Beschreibung eines hook_menu verwenden?

11

Ich habe immer t () für den Titel und die Beschreibung von hook_menus wie folgt verwendet:

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

Dies ist für mich sinnvoll, damit Benutzer den Titel und die Beschreibung bei Bedarf in verschiedene Sprachen übersetzen können.

Dieser Kommentar zu einer Modulüberprüfung zu DO lautet jedoch:

Nein, das ist falsch, tu das nicht - Beschreibungen in hook_menu () sollten niemals t () verwenden.

Was ist der Grund dafür und ist dies tatsächlich die beste Vorgehensweise?

Auch wenn dies wahr ist, sollten wir dann nicht auch t () für den Titel verwenden?

Felix Eve
quelle
Natürlich sollte dies dann nicht verwendet werden, aber wenn Sie die Hilfeseite von hook_menu nach "description '=> t (" durchsuchen, gibt es 6 Vorkommen, so dass dies eindeutig ein häufiger Fehler ist!
Felix Eve
1
Häufig oder nicht, es ist keine Entschuldigung;) Und diese Vorkommnisse sind in Kommentaren enthalten - Menschen können sich dort frei irren.
Mołot
1
@ Mołot Es ist frei, sich dort zu irren, jedoch werden viele neue Benutzer diesen Code kopieren und einfügen, so dass dies weiterhin ein häufiger Fehler ist. Ich denke, jemand mit Administratorrechten auf DO sollte diese Kommentare bearbeiten, um t () zu entfernen.
Felix Eve
Sie können ein Problem einreichen, wenn Sie möchten.
Mołot
1
Guter Vorschlag. Fertig .
Felix Eve

Antworten:

17

Siehe Zeichenfolgen an bekannten Stellen: integrierte Menüs, Berechtigungen, Protokollnachrichten und Community-Dokumentation zu .info-Dateien :

Das Menüsystem Drupal 6 und 7 speichert Menüelementtitel und -beschreibungen in englischer Sprache. Auf diese Weise kann das System die Daten zwischenspeichern, sie können jedoch Benutzern bei Bedarf in verschiedenen Sprachen angezeigt werden. Damit dies funktioniert, sollten Sie t () nicht für den Titel oder die Beschreibung von Menüelementen in Ihrer hook_menu () -Implementierung verwenden. Darüber hinaus sollten Sie versuchen, für diese beiden Schlüssel eine Literalzeichenfolge (anstelle einer dynamischen Zeichenfolge) zu verwenden, damit der Extraktor der Übersetzungsvorlage die von Ihnen verwendete Zeichenfolge finden kann.

Hervorhebung von mir.

Mołot
quelle
Ich möchte hinzufügen: Nur wenn title callbacknicht gesetzt , weil standardmäßig title callbackist t()Funktion
milkovsky
1
@milkovsky Wenn der Titel-Rückruf festgelegt ist, sollte er sich darum kümmern t()und Sie sollten ihn trotzdem nicht verwenden hook menu()- Sie wissen, Caching.
Mołot
11

Wenn Sie die Dokumentation von hook_menu- Argumenten sehen ..

  • "title": Erforderlich. Der nicht übersetzte Titel des Menüelements.
  • "title callback": Funktion zum Generieren des Titels; Der Standardwert ist t (). Wenn nur die Rohzeichenfolge ausgegeben werden soll, setzen Sie diese auf FALSE.
  • "title-Argumente": Argumente, die an t () oder Ihren benutzerdefinierten Rückruf gesendet werden sollen, mit Ersetzung der Pfadkomponente wie oben beschrieben.
  • "description": Die nicht übersetzte Beschreibung des Menüpunkts.

Standardmäßig ist der Titelrückruf keine Funktion. Er wird also immer übersetzt.

Anil Sagar
quelle
7

Da wird Drupal 6 nicht mehr benötigt.

Bitte lesen Sie https://drupal.org/node/140311 . Zitiert das:

Ab 6.x übernimmt Drupal intern die Übersetzung von Menütiteln und Beschreibungen in die Landessprache des Benutzers. Beschreibungen werden, falls angegeben, immer mit t () übersetzt; Es gibt keine Möglichkeit, zusätzliche Daten für die Platzhalterersetzung einzugeben (in D5 und früher war die Übergabe von Ersetzungen eine entmutigte Praxis - mit dieser Änderung setzt das Menüsystem diese Regel direkt durch). Titel werden standardmäßig mit t () übersetzt, aber das Ersetzen von Zeichenfolgen im t () - Stil ist durch die Verwendung der neuen Eigenschaft 'title arguments' möglich. Sie können t () auch durch Ihren eigenen benutzerdefinierten Rückruf ersetzen.

Penyaskito
quelle
6

Sie sollten es nicht t()in hook_menu()Implementierungen verwenden, da t()es später automatisch aufgerufen wird und dies zu einer doppelten Übersetzung führen würde.

Aram Boyajyan
quelle
* Beachten Sie , dass der Titel-Rückruf für die Übersetzung der Zeichenfolge verantwortlich ist , wenn Sie title callbackim hook_menu ein hinzufügen und wenn dies nicht der Fall tist.
AyeshK