====== Localizzazione con gettext ======
Esempio di come creare un file **navit.po** con tutte le stringhe da tradurre a partire dai sorgenti:
xgettext --default-domain=navit --add-comments --keyword=_ --keyword=_n \
../src/main.c ../src/navigation.c ../src/navit.c ../src/popup.c \
../src/country.c ../src/gui/gtk/destination.c \
../src/gui/gtk/gui_gtk_action.c ../src/gui/gtk/gui_gtk_statusbar.c
Il file ottenuto si rinomina in **navit.pot** e verrà usato come template per tutte le nuove traduzioni oppure per aggiornare quelle esistenti.
Come aggiornare un **it.po** esistente a partire dal nuovo **navit.pot**:
msgmerge it.po navit.pot -o it_new.po
====== 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:
msgfmt -o default.mo default.po
Se è necessario è possibile **decompilare** il file **''.mo''** con:
msgunfmt default.mo > default.po
====== 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):
function my_setlocale() {
setlocale(LC_ALL, $_SESSION['locale']);
bindtextdomain('default', './locale');
textdomain('default');
}
Nella stessa directory del programma si deve preparare la gerarchia di directory con i file di traduzione:
├─ my_project
│ └─ locale
│ ├─ it_IT
│ │ └─ LC_MESSAGES
│ ├─ zh_CN
│ │ └─ LC_MESSAGES
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''**.