Gettext: Traduzione di stringhe con HTML dentro?
-
13-09-2019 - |
Domanda
Il mio attuale implementazione, che è memorizza matrice a base chiavi e valori in un dizionario, ad esempio:
$arr = array(
'message' => 'Paste a <a href="http://flickr.com/">flickr</a> URL below.',
);
Mi rendo conto che probabilmente era una cattiva idea archiviare codice HTML all'interno di una stringa come questa, ma se sto usando gettext allora nel mio .mo file .po / Come devo gestire la memorizzazione di una stringa simile? Devo solo memorizzare le parole, come 'Paste a' e 'URL di seguito' e 'Flickr' a parte?
Soluzione
È possibile memorizzare qualcosa come
"Paste a %1 URL below"
e sostituire tutti 'vars' con qualcosa di semplice come str_replace ( '% 1', $ link, $ messaggio);
$ link può anche essere traducibile
"<a href="http://flickr.com/">%1</a>"
anche se questo potrebbe essere eccessivo (si fa flickr tradurre tra lingue?)
logica alla base di questo è che lingue diverse hanno diverse strutture grammaticali e l'ordinamento delle parole wont essere sempre lo stesso.
Aggiornamento:
come @alex e menzione @chelmertz nei commenti, provare a utilizzare la funzione sprintf
, che è costruito per questa cosa molto.
Altri suggerimenti
Mi piacerebbe andare per questo:
$arr = array(
'message' => _('Paste a %s URL below.'),
);
Avere tutte le traduzioni come stringhe all'interno di gettext chiamate di funzione permette di utilizzare gli strumenti standard per aggiornare * .po cataloghi.