2012-08-15 11 views
6

Attualmente sto sviluppando un'applicazione web PHP che deve essere disponibile in francese e inglese. Mi sono guardato intorno e ho scoperto che la funzionalità Gettext() offre le migliori prestazioni.Internazionalizzazione delle applicazioni Web PHP con Gettext();

ho generato il mio file pot con il comando

xgettext PhpFileToTranslate.php -o NameOfTemplateFile.pot 

e con successo ha generato un file pot. Ho usato PoEdit per generare file di messages.po e ha creato messages.mo

qui sono i miei file del server:

/app 
    /locale 
     /en_US 
       /LC_MESSAGES 
       messages.po 
       messages.mo 
     /fr_FR 
       /LC_MESSAGES 
       messages.po 
       messages.mo 
     template.pot 

E ho impostato il locale nel file php in questo modo:

$language = $_SESSION['language']; //session contains 'fr_FR.UTF-8' or 'en_US.UTF-8' 
setlocale(LC_ALL, $language); 
bindtextdomain('messages', './locale'); 
textdomain('messages'); 

ma vedo solo l'etichetta e non la traduzione ... Ho provato a mettere 'fr_FR' invece di 'fr_FR.UTF-8' e tutti i tipi di stringhe ma non funziona.

Mi manca qualcosa? Il mio server è Ubuntu 12.04 Server con Apache e php5

risposta

7

Per compilare i file .mo su linux è necessario avere le versioni locali installate sul server e sulla macchina che lo compila. Le lingue locali sono le lingue supportate dal tuo sistema operativo.

Come indicato in questo tutorial: http://dev.jimdo.com/archive-old-blog/tutorial-for-the-easy-use-of-gettext-for-internationalization-of-php-apps/ Verificare che avete i locali installato sul vostro linux

Assicurarsi che le impostazioni internazionali che si desidera utilizzare sono installati nel vostro Linux e che utilizzano il .UTF-8 (si vuole i18n quindi si prega di utilizzare UTF):!

# Example for debian 
dpkg-reconfigure locales 

- Per installare nuove versioni locali su linux

Lista delle lingue effettivamente installato nel sistema:

locale -a 

Esempio di installare fr_FR:

#List the available i18n locales 
less /usr/share/i18n/SUPPORTED 

Installare il locale (qui fr_FR.utf8)

locale-gen fr_FR.utf8 

Riconfigurare i locali sul sistema

sudo dpkg-reconfigure locales 

ricompilare il .mo file con PoEdit e che dovrebbe fare il trucco. Assicurarsi di installare locales sia sul server che sulla macchina che sta compilando i file .mo.

Speranza che aiuta

+1

Infatti non ho installato fr_FR.utf8 sul mio computer e sul mio server ... Ora funziona! Grazie mille per l'aiuto. –

0

In aggiunta a quanto detto Bruno, non dimenticare di ricaricare la configurazione di Apache (ad esempio, il servizio apache2 reload). Ho perso tempo a cercare di capire perché non funzionava, solo per scoprire che la configurazione di Apache deve essere ricaricata una volta installata la nuova lingua/locale.