Written by nomorelogic Agosto 29, 2014, 06:51:00 pm21276 ViewsRating: 0 (0 Rates)Print
In questo articolo vedremo come implementare un sistema di traduzione dell'applicazione tramite resourcestring.
la traduzione di una applicazione La traduzione di una applicazione può avvenire in vari modi ma, in fondo, tutte le strade conducono ad un bivio fondamentale:
compilare all'interno del binario i messaggi già tradotti
tradurre i messaggi a runtime
In questo articolo verrà trattata la traduzione dei messaggi a runtime e, allo scopo, verrà usato il meccanismo delle resourcestring di Lazarus/fpc Si tratta di un argomento che non si esaurisce con una unica soluzione universale ma è possibile scegliere diversi modi di fare la stessa cosa. Per chi ha voglia di approfondire l'argomento, consiglio la lettura della documentazione su wiki: http://wiki.freepascal.org/Translations_/_i18n_/_localizations_for_programs.
Nel nostro caso utilizzaremo la seguente tecnica:
creeremo all'interno delle unit dell'applicazione una sezione resourcestring e qui andremo a definire le nostre stringhe dei messaggi
imposteremo lazarus in modo che al salvataggio di ogni form, salvi anche in un file tutte le resourcestring in formato .po
andremo alla ricerca delle stringhe da "resourcizzare" (e passatemelo dai) e tramite il menù contestuale, lazarus farà il search/replace automatico
nell'evento OnCreate della superclasse imposteremo la traduzione automatica
nella toolbox andremo a specificare dove si trovano i file delle traduzioni
Per testare il funzionamento, metteremo i messaggi originali in lingua inglese e predisporremo la traduzione in italiano. Mettiamoci al lavoro.
impostazioni preliminari Lazarus ha integrato nelle opzioni del progetto una utilissima voce che permette il salvataggio automatico delle resourcestring quando si salva una form. Per attivarlo:
nell'albero dei sorgenti ho creato una sottocartella destinata a contenere i file .po, il nome è: po
da main menù: Progetto / Opzioni Progetto / i18n, fate le seguenti impostazioni:
mettete la spunta su "Abilita i18n"
selezionate la cartella creata al punto precedente
mettete la spunta su "Crea/Aggiorna file .po quando si salva un file .lfm"
Fatto questo dobbiamo creare una sezione resourcestring. Consiglio di crearla immediatamente sopra la keyword implementation. Questo passaggio è fondamentale per salvare le stringhe in questa stessa unit.
creiamo una resourcestring Basta andare a posizionarsi su una qualsiasi costante stringa nei sorgenti. Dopo averla selezionata per intero:
nella dialog che si apre, mettere la spunta su "Identificatore personalizzato" e dare un nome adatto allo scopo
in selezione resourcestring, andate a selezionare il sorgente in cui la stringa deve essere salvata (in questo caso, allo scopo di avere una unica unit, salverò le resourcestring in ubaseform.pas)
Ripetete la cosa su tutte le stringhe che intendete tradurre, poi salvate il tutto e compilate.
[la traduzione] Nella sottocartella destinata ai file .po, il file sarà ora aggiornato. Nel mio caso il file si chiama TestBaseForm.po e, dopo un po' di prove, ha l'aspetto che segue:
Preparato il file della traduzione, andiamo a modificare l'evento OnCreate in modo che proceda automaticamente alla traduzione a runtime, il codice che ci interessa è il seguente:
Il processo di traduzione è reso semplicissimo da Lazarus:
in uses occorre dichiarare le unit: gettext, translations (interfaccia per GNU gettext e procedure di traduzione di Lazarus)
tramite GetLanguageIDs, interroghiamo il sistema per leggere la lingua di default (ritornerà qualcosa tipo 'it' per italia, 'de' per germania e così via)
tramite la chiamata a 'TranslateUnitResourceStrings', noi chiediamo la traduzione della unit uBaseForm secondo le indicazioni di un certo file .po il cui nome è composto con la sigla dello stato ottenuta sopra
About the author
nomorelogic registered at Italian community of Lazarus and Free Pascal on Marzo 10, 2012, 12:27:59 pm and has posted 2930 posts in the boards since then. Last visit was Dicembre 13, 2024, 06:28:03 pm.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.