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

11

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 a du sens pour moi afin 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?

Felix Eve
la source
De toute évidence, cela ne devrait pas être utilisé alors, mais si vous recherchez dans la page d'aide de hook_menu "description '=> t (" il y a 6 occurrences, il s'agit donc clairement d'une erreur courante!
Felix Eve
1
Commun ou pas, ce n'est pas une excuse;) Et ces événements sont dans les commentaires - les gens sont libres de s'y tromper.
Mołot
1
@ Mołot Ils sont libres de s'y tromper, mais beaucoup de nouveaux utilisateurs copieront et colleront ce code, ce qui continuera à être une erreur courante. Je pense que quelqu'un avec des privilèges d'administrateur sur DO devrait modifier ces commentaires pour supprimer le t ().
Felix Eve du
Vous pouvez déposer un problème si vous le souhaitez.
Mołot
1
Bonne suggestion. C'est fait .
Felix Eve

Réponses:

17

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

Le système de menus Drupal 6 et 7 stocke les titres et descriptions des éléments de menu en anglais. Cela permet au système de mettre en cache les données, mais de les afficher à la demande des utilisateurs dans différentes langues. 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 (). En outre, 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.

Mołot
la source
J'ajouterais: Seulement si title callbackn'est pas défini car par défaut title callbackest la t()fonction
milkovsky
1
@milkovsky si la fonction de rappel de titre est définie, elle doit être prise en compte t()et vous ne devez toujours pas l'utiliser dans hook menu()- vous savez, la mise en cache.
Mołot du
11

Si vous voyez la documentation des arguments hook_menu ..

  • "titre": obligatoire. Titre non traduit de l'élément de menu.
  • "rappel de titre": Fonction pour générer le titre; par défaut, t (). Si vous avez uniquement besoin de la sortie de la chaîne brute, 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 ..

Anil Sagar
la source
7

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 par t (); il n'y a aucun moyen de transmettre des données supplémentaires pour la substitution des espaces réservés (dans D5 et avant, la transmission des substitutions était une pratique découragée - avec ce changement, le système de menus applique directement cette règle). Les titres sont traduits avec t () 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é.

penyaskito
la source
6

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

Aram Boyajyan
la source
* Notez que si vous ajoutez un title callbackdans le hook_menu, et si ce n'est pas le cas t, le rappel de titre est responsable de traduire la chaîne.
AyeshK du