web-dev-qa-db-fra.com

Dois-je utiliser t() dans la description d'un hook_menu?

J'ai toujours utilisé t () pour le titre et la description de hook_menus comme ceci:

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

Cela me semble logique pour que les utilisateurs puissent traduire le titre et la description dans différentes langues si nécessaire.

Cependant ce commentaire sur une revue de module sur DO dit:

Non, c'est faux, ne faites pas ça - les descriptions dans hook_menu () ne devraient jamais utiliser t ().

Quel est le raisonnement pour cela et est-ce réellement la meilleure pratique?

De plus, si cela est vrai, ne devrions-nous pas également utiliser t() pour le titre?

11
Felix Eve

Voir Chaînes à des endroits bien connus: menus intégrés, autorisations, messages de journal et fichiers .info documentation de la communauté:

Le système de menu Drupal 6 et 7 stocke les titres et les descriptions des éléments de menu en anglais. Cela permet au système de mettre en cache les données, mais de les afficher aux utilisateurs dans différentes langues à la demande. Pour que cela fonctionne, vous ne devez pas utiliser t() sur le titre ou la description des éléments de menu dans votre implémentation hook_menu (). vous devez essayer d'utiliser une chaîne littérale (plutôt qu'une chaîne dynamique) pour ces deux clés, afin que l'extracteur de modèle de traduction puisse trouver la chaîne que vous avez utilisée.

Je souligne.

17
Mołot

Si vous voyez la documentation des arguments hook_men ..

  • "titre": obligatoire. Titre non traduit de l'élément de menu.
  • "callback titre": Fonction pour générer le titre; par défaut à t (). Si vous souhaitez uniquement que la chaîne brute soit sortie, définissez-la sur FALSE.
  • "arguments de titre": arguments à envoyer à t() ou à votre rappel personnalisé, avec substitution de composant de chemin comme décrit ci-dessus.
  • "description": la description non traduite de l'élément de menu.

Par défaut, le rappel du titre est une fonction t. Il est donc toujours traduit ..

11
Anil Sagar

Depuis Drupal 6 n'est plus nécessaire.

Veuillez lire https://drupal.org/node/140311 . Citant que:

Depuis 6.x, Drupal gère en interne la traduction des titres de menu et des descriptions dans la langue locale de l'utilisateur. Les descriptions, si elles sont fournies, sont toujours traduites avec t (); il n'y a aucun moyen de passer dans les données supplémentaires pour la substitution d'espace réservé (en D5 et avant, la transmission des substitutions était une pratique découragée - avec ce changement, le système de menus applique cette règle directement). Les titres sont traduits avec t() par par défaut, mais le remplacement de la chaîne de style t () est possible grâce à l'utilisation de la nouvelle propriété 'title arguments'. Vous pouvez également choisir de remplacer t() par votre propre rappel personnalisé.

7
penyaskito

Vous ne devez pas utiliser t() dans les implémentations hook_menu() car t() est automatiquement appelé plus tard et cela entraînerait une double traduction.

6
Aram Boyajyan

Il est clairement indiqué sur la page de documentation de hook_menu () i.e

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

"title": Obligatoire. Le titre non traduit de l'élément de menu.

"description": la description non traduite de l'élément de menu.

Donc pas besoin d'utiliser la fonction t() pour les deux ci-dessus.

0
webdevfreak