¿Debo usar t () en la descripción de un hook_menu?


11

Siempre he usado t () para el título y la descripción de hook_menus de esta manera:

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

Esto tiene sentido para mí para que los usuarios puedan traducir el título y la descripción a diferentes idiomas si es necesario.

Sin embargo, este comentario en una revisión del módulo sobre DO dice:

No, eso está mal, no hagas eso: las descripciones en hook_menu () nunca deberían usar t ().

¿Cuál es el razonamiento para esto y esta es realmente la mejor práctica?

Además, si esto es cierto, ¿no deberíamos usar t () para el título también?


Claramente, esto no debe usarse, pero si busca en la página de ayuda de hook_menu "description '=> t (" ¡hay 6 ocurrencias, entonces claramente es un error común!
Felix Eve

1
Común o no, no es una excusa;) Y estos sucesos están en los comentarios: las personas son libres de confundirse allí.
Mołot

1
@ Mołot Son libres de equivocarse allí, sin embargo, muchos usuarios nuevos copiarán y pegarán ese código, por lo que esto seguirá siendo un error común. Creo que alguien con privilegios de administrador en DO debería editar esos comentarios para eliminar el t ().
Felix Eve

Puede presentar un problema si lo desea.
Mołot

1
Buena sugerencia. Hecho .
Felix Eve

Respuestas:


17

Consulte Cadenas en lugares conocidos: menús integrados, permisos, mensajes de registro y documentación de la comunidad de archivos .info :

El sistema de menús Drupal 6 y 7 almacena títulos y descripciones de elementos de menú en inglés. Esto permite que el sistema almacene en caché los datos, pero se muestra a los usuarios que usan varios idiomas a pedido. Para que esto funcione, no debe usar t () en el título o la descripción de los elementos del menú en su implementación hook_menu (). Además, debe intentar usar una cadena literal (en lugar de una cadena dinámica) para estas dos claves, de modo que el extractor de plantillas de traducción pueda encontrar la cadena que utilizó.

El énfasis es mío.


Yo agregaría: Solo si title callbackno está configurado porque por defecto title callbackes la t()función
milkovsky

1
@milkovsky si la devolución de llamada de título está configurada, debe tener cuidado t()y aún no debe usarla hook menu(), ya sabes, el almacenamiento en caché.
Mołot

11

Si ve documentación de argumentos de hook_menu ...

  • "título": obligatorio. El título no traducido del elemento del menú.
  • "devolución de llamada de título": función para generar el título; el valor predeterminado es t (). Si solo necesita que se envíe la cadena sin formato, configúrela como FALSO.
  • "argumentos de título": Argumentos para enviar a t () o su devolución de llamada personalizada, con sustitución de componentes de ruta como se describió anteriormente.
  • "descripción": la descripción no traducida del elemento del menú.

De forma predeterminada, la devolución de llamada del título es la función t. Por lo tanto, siempre se traduce.


7

Dado que Drupal 6 ya no es necesario.

Lea https://drupal.org/node/140311 . Citando eso:

A partir de 6.x, Drupal maneja internamente la traducción de títulos y descripciones de menús al idioma local del usuario. Las descripciones, si se proporcionan, siempre se traducen con t (); no hay forma de transferir datos adicionales para la sustitución de marcadores de posición (en D5 y anteriores, la sustitución de sustituciones era una práctica desaconsejada; con este cambio, el sistema de menús aplica esa regla directamente). Los títulos se traducen con t () de forma predeterminada, pero el reemplazo de cadenas de estilo t () es posible mediante el uso de la nueva propiedad 'argumentos de título'. También puede optar por reemplazar t () con su propia devolución de llamada personalizada.


6

No debe usarlo t()en hook_menu()implementaciones porque t()se llama automáticamente más adelante y hacerlo provocaría una doble traducción.


* Tenga en cuenta que si agrega un title callbacken el hook_menu, y si no es así t, la devolución de llamada del título es responsable de traducir la cadena.
AyeshK

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.