2010-07-29 16 views
5

Io uso gettext per tradurre il mio sito web.Come si usa gettext quando si ha un collegamento nel testo tradotto?

Sarebbe bello avere un collegamento nel testo tradotto, ma non voglio scrivere tag html nei file gettext perché queste traduzioni possono essere utilizzate altrove.

È possibile creare testo solo per il sito Web (con collegamenti) e testo per tutti gli scopi.
Dovrò mantenere 2 versioni. :-(

Potrei anche scrivere un parser personalizzato per inserire i link nel testo ma sembra eccessivo e sono affraid di The Danger of Naïveté

Per coloro che hanno avuto lo stesso problema, come hai fatto a sopportarlo?

risposta

3

Ho usato per mettere i collegamenti come parametri. Il più delle volte l'intero <a> -tag è un parametro. Come Please see %s this link %s for more information. Il primo% s viene passato il tag di collegamento e il secondo viene passato il tag di chiusura </a>.

Ora uso solo frasi intere come collegamenti quando è necessario tradurre un testo del collegamento. Quindi abbiamo solo testo come "Vedi questo link per maggiori informazioni", fallo tradurre e inserisci i tag di collegamento intorno ad esso. È molto più semplice gestire le traduzioni e non hai un traduttore confuso, o hai bisogno di dedicare del tempo a spiegare cosa stai cercando di fare.

1

Onestamente non sarei troppo preoccupato dell'uso di HTML di base (o utilizzare bbCode, textile, markdown, ecc.) Direttamente nei file di traduzione. Gli URL potrebbero sembrare l'unico problema al momento, ma per quanto riguarda l'altro markup di testo ?

Senza contare che l'URL Proprio loro potrebbero potenzialmente essere diversi a seconda della lingua.

Sono d'accordo che i file di traduzione hanno i loro problemi però.

1

a complemento della risposta selezionata, ecco un esempio pratico:

printf(__('Please see %s this link %s for more information.', 'text-domain'), '<a href="http://yolo.io" title="yolo">', '</a>'); 
1

Un'altra soluzione qui: https://zargony.com/2008/01/24/links-in-gettext-translated-strings.

Suggerisce di utilizzare {curly brackets} per i collegamenti. Come per esempio:

_("Please click {here} or {here}") 

E poi scrivere la propria funzione linkify che sostituisce le cose tra parentesi graffe con i parametri indicati.

linkify(
    _("Please click {here} or {here}"), 
    "</a>", 
    "<a href='www.example1.com'>", 
    "<a href='www.example2.com'>" 
) 

Definizione in PHP:

function linkify($string, $closingTag) { 
    $arguments = func_get_args(); 
    return preg_replace_callback(
     '/{(.*?)}/', // Ungreedy (*?) 
     function($matches) use ($arguments, $closingTag) { 
      static $i = 1; 
      $i++; 
      return $arguments[$i] . $matches[1] . $closingTag; 
     }, 
     $string 
    ); 
} 

PS: Si può anche facilmente sostituire il {} per [], come ho notato che in questi poedit parentesi graffe dare avvertimenti ai traduttori e consigliano loro non devono essere tradotti.