2009-07-28 15 views
5

Ho sempre sentito parlare di gettext: so che si tratta di una sorta di comando unix per cercare una traduzione basata sull'argomento stringa fornito, e quindi produce un file .pot ma qualcuno può spiegarmi in parole povere come questo è preso in considerazione di in una struttura web?Aggiunta del supporto per i18n in PHP con gettext?

Potrei andare in giro a vedere come ha funzionato una certa struttura, ma la spiegazione di un laico sarebbe stata utile perché potrebbe aiutare a chiarire un po 'di più l'immagine prima di approfondire le cose per fornire la mia soluzione.

risposta

12

Il sistema gettext richiama le stringhe da un set di file binari creati da file di testo di origine contenenti le traduzioni in lingue diverse per la stessa frase.

La chiave di ricerca è la frase in una lingua "di base".

nel codice sorgente si avrà qualcosa di simile

echo _("Hello, world!"); 

per ogni lingua si avrà un file di testo corrispondente con la chiave e la versione tradotta (notare la s% che può essere utilizzato con le funzioni printf)

french 
msgid "Hello, world!" 
msgstr "Salut, monde!" 
msgid "My name is %s" 
msgstr "Mon nom est %s" 

italian 
msgid "Hello, world!" 
msgstr "Ciao, mondo!" 
msgid "My name is %s" 
msgstr "Il mio nome è %s" 

Questi sono i principali passaggi che è necessario passare attraverso per la creazione di localizzazioni

  • tutto l'output testo deve utilizzare le funzioni gettext (gettext(), ngettext(), _())
  • uso xgettext (* nix) per analizzare i file PHP e creare il file di testo base .po
  • uso poedit a aggiungi testi di traduzione dei file .po
  • uso msgfmt (* nix) per creare il file .mo binario dal file .po
  • Inserire i file .mo in una struttura di directory come

locale/de_DE/LC_MESSAGES/myPHPApp.mo

locale/it_IT/LC_MESSAGES/myPHPApp.mo

locale/it_IT/LC_MESSAGES/myPHPApp.mo

allora script php deve impostare l'impostazione internazionale che devono essere utilizzati

L'esempio dal php manuale è molto chiaro per quella parte

<?php 
// Set language to German 
setlocale(LC_ALL, 'de_DE'); 

// Specify location of translation tables 
bindtextdomain("myPHPApp", "./locale"); 

// Choose domain 
textdomain("myPHPApp"); 

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now 

// Print a test message 
echo gettext("Welcome to My PHP Application"); 

// Or use the alias _() for gettext() 
echo _("Have a nice day"); 
?> 

sempre dal manuale php aspetto here per un buon tutorial

+0

Ma quanto sopra L'esempio del manuale PHP non sembra tradurre la stringa data. C'è qualcos'altro da fare con l'esempio? –