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] – external edit 127.0.0.1doc:appunti:prog:gettext [2018/12/04 11:32] (current) – [gettext con PHP] niccolo
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.txt · Last modified: 2018/12/04 11:32 by niccolo