User Tools

Site Tools


doc:appunti:prog:gettext

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
doc:appunti:prog:gettext [2008/04/15 01:18]
127.0.0.1 external edit
doc:appunti:prog:gettext [2018/12/04 11:32] (current)
niccolo [gettext con PHP]
Line 18: Line 18:
 </​code>​ </​code>​
  
 +====== Compilazione e decompilazione del file .mo ======
 +
 +Installare il pacchetto Debian **gettext**.
 +
 +Se si esegue la traduzione con un client tipo **''​poedit''​**,​ al momento del salvataggio del file **''​.po''​** viene creata anche la versione compilata **''​.mo''​**. In ogni caso la versione compilata può essere generata nuovamente con:
 +
 +<​code>​
 +msgfmt -o default.mo default.po
 +</​code>​
 +
 +Se è necessario è possibile **decompilare** il file **''​.mo''​** con:
 +
 +<​code>​
 +msgunfmt default.mo > default.po
 +</​code>​
 +====== gettext con PHP ======
 +
 +Per utilizzare le funzioni **''​gettext()''​** con il PHP bisogna inizializzare l'​ambiente con le seguenti istruzioni (per comodità sono state raggruppate in una funzione ''​my_setlocale()''​ e il locale viene salvato in una variabile di sessione):
 +
 +<code php>
 +function my_setlocale() {
 +    setlocale(LC_ALL,​ $_SESSION['​locale'​]);​
 +    bindtextdomain('​default',​ '​./​locale'​);​
 +    textdomain('​default'​);​
 +}
 +</​code>​
 +
 +Nella stessa directory del programma si deve preparare la gerarchia di directory con i file di traduzione:
 +
 +<​code>​
 +├─ my_project
 +│  └─ locale
 +│     ​├─ it_IT
 +│     ​│ ​ └─ LC_MESSAGES
 +│     ​├─ zh_CN
 +│     ​│ ​ └─ LC_MESSAGES
 +</​code>​
 +
 +In ciascuna directory ''​LC_MESSAGES''​ deve trovarsi il file **''​default.po''​** e **''​default.mo''​**.
 +
 +Inoltre ricordarsi di:
 +
 +  - Creare i locale necessari con **''​dpkg-reconfigure locales''​**.
 +  - Se si sono **aggiornati i locale** disponibili,​ riavviare Apache.
 +  - Se si è **modificato un file ''​.mo''​**,​ riavviare Apache (PHP tiene in cache qualcosa!).
 +  - Nel caso in cui il server sia **Nginx** con **php5-fpm** in modalità **FastCGI socket**, può essere necessario riavviare il servizio **php5-fpm** invece di nginx.
 +  - In alcuni casi la funzione setlocale() vuole la sigla comprensiva di encoding, ad esempio per il cinese semplificato è necessario usare **''​zh_CN.UTF-8''​**.
doc/appunti/prog/gettext.1208215082.txt.gz · Last modified: 2012/06/08 17:03 (external edit)