Dovrei usare t () nella descrizione di hook_menu?


11

Ho sempre usato t () per il titolo e la descrizione di hook_menus in questo modo:

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

Questo ha senso per me, quindi gli utenti possono tradurre il titolo e la descrizione in diverse lingue, se necessario.

Tuttavia questo commento su una recensione del modulo su DO dice:

No, è sbagliato, non farlo - le descrizioni in hook_menu () non dovrebbero mai usare t ().

Qual è il ragionamento per questo e questa è in realtà la migliore pratica?

Anche se questo è vero, allora non dovremmo usare t () anche per il titolo?


Chiaramente questo non dovrebbe essere usato allora, ma se cerchi nella pagina di aiuto hook_menu "description '=> t (" ci sono 6 ricorrenze, quindi chiaramente questo è un errore comune!
Eve Felix,

1
Comune o no, non è una scusa;) E questi eventi sono nei commenti - le persone sono libere di sbagliarsi lì.
Mołot

1
@ Mołot Sono liberi di sbagliarsi lì, tuttavia molti nuovi utenti copieranno e incolleranno quel codice, quindi questo continuerà ad essere un errore comune. Penso che qualcuno con privilegi di amministratore su DO dovrebbe modificare quei commenti per rimuovere t ().
Felix Eve,

Se lo desideri, puoi presentare un problema .
Mołot,

1
Buon consiglio Fatto .
Felix Eve,

Risposte:


17

Vedi Stringhe in luoghi noti: menu integrati, autorizzazioni, messaggi di registro e documentazione della community di file .info :

Il sistema di menu Drupal 6 e 7 memorizza i titoli e le descrizioni delle voci di menu in inglese. Ciò consente al sistema di memorizzare nella cache i dati, ma di visualizzarli agli utenti utilizzando varie lingue su richiesta. Perché ciò funzioni, non dovresti usare t () sul titolo o sulla descrizione delle voci di menu nella tua implementazione hook_menu (). Inoltre, dovresti provare a usare una stringa letterale (piuttosto che una stringa dinamica) per queste due chiavi, in modo che l'estrattore del modello di traduzione possa trovare la stringa che hai usato.

Enfasi mia.


Vorrei aggiungere: Solo se title callbacknon è impostato perché per impostazione predefinita title callbackè la t()funzione
milkovsky

1
@milkovsky se è impostato il callback del titolo, dovrebbe occuparsene t()e non dovresti ancora usarlo hook menu()- sai, cache.
Mołot

11

Se vedi la documentazione degli argomenti hook_menu ..

  • "titolo": obbligatorio. Il titolo non tradotto della voce di menu.
  • "callback del titolo": funzione per generare il titolo; il valore predefinito è t (). Se è necessario solo l'output della stringa non elaborata, impostarlo su FALSE.
  • "argomenti del titolo": argomenti da inviare a t () o al callback personalizzato, con sostituzione del componente del percorso come descritto sopra.
  • "descrizione": la descrizione non tradotta della voce di menu.

Per impostazione predefinita, il callback del titolo non è la funzione .. Quindi è sempre tradotto ..


7

Poiché Drupal 6 non è più necessario.

Si prega di leggere https://drupal.org/node/140311 . Citando che:

A partire da 6.x, Drupal gestisce internamente la traduzione dei titoli e delle descrizioni dei menu nella lingua locale dell'utente. Le descrizioni, se fornite, sono sempre tradotte con t (); non c'è modo di trasferire dati aggiuntivi per la sostituzione di segnaposto (in D5 e precedenti, passare in sostituzione era una pratica scoraggiata - con questa modifica, il sistema di menu applica questa regola direttamente). I titoli vengono tradotti con t () per impostazione predefinita, ma la sostituzione di stringhe in stile t () è possibile mediante l'uso della nuova proprietà "argomenti del titolo". Puoi anche scegliere di sostituire t () con il tuo callback personalizzato.


6

Non è necessario utilizzare t()nelle hook_menu()implementazioni perché t()viene chiamato automaticamente in seguito e ciò comporterebbe una doppia traduzione.


* Nota che se aggiungi a title callbacknel hook_menu e, in caso contrario t, il callback del titolo è responsabile della traduzione della stringa.
AyeshK,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.