Generare automaticamente i file per le traduzioni

Ciao a tutti,

ho iniziato da un paio di giorni con Yii e sto seguendo la strada del "imparare facendo" sviluppando un progetto "vero".

Una delle problematiche che ho affrontato immediatamente è stata l’internazionalizzazione; di conseguenza è sorto il problema di come generare in modo automatico i file per le traduzioni. Problema risolto in modo egregio dal comando


yiic message

Questo comando effettua il parsing di tutti i sorgenti della nostra applicazione alla ricerca delle stringhe di traduzione ovvero Yii::t(‘categoria’, ‘stringa da tradurre’)

Fatto questo crea automaticamente i file di traduzione nella directory protected/message/<codice>/<categoria>.php

dove <codice> è il codice della lingua (ad esempio: it o en) e <categoria> è il primo parametro della funzione Yii:t

Su questo forum non ho trovato niente in merito quindi scrivo come ho risolto, magari può essere utile ad altri

I passi da seguire sono semplicemente due:

  1. Creare un file all’interno di protected/messages/config_translation.php




<?php

return array(

	'sourcePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',

	'messagePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'messages',

	/** qui vanno specificate le lingue: per il mio progetto sto usando al momento solo inglese ed italiano  */

        'languages'=>array('it', 'en'),

        /** se utilizzate file con estensioni diverse da .php, potete aggiungerle qui*/

	'fileTypes'=>array('php'),

    'overwrite'=>true,

	'exclude'=>array(

		'.svn',

		'yiilite.php',

		'yiit.php',

		'/i18n/data',

		'/messages',

		'/vendors',

		'/web/js',

       		/** la riga gii è molto importante se avete creato dei crud custom per il generatore */

                '/gii'

	),

);



  1. posizionarsi nella root dell’applicazione e lanciare il comando



php protected/yiic.php message protected/messages/config_translation.php



(se non avete php nel PATH potete usare il percorso assoluto ad esempio /usr/bin/php)

yiic creerà automaticamente le directory e i file all’interno di protected/messages/

Per aggiornare i file di traduzione (ad esempio perchè avete aggiunto nuove funzionalità alla vostra applicazione) è sufficiente lanciare nuovamente il comando,

yiic manterrà le traduzioni esistenti ed aggiungerà le nuove.

Spero sia utile a qualcun’altro, suggerimenti e correzioni sono ben accette :)

Benvenuto in community.

Accidenti al tuo 2° post ti sei già meitato il primo[size="3"][color="#006400"] +[/color][/size]

Anch’io come te, per imparare, sto costruendo un’applicazione

e dal tuo topic ho capito un grosso errore che sto commettendo:

non sto utilizzando la funzione [color="#1C2837"][size="2"]Yii::t()[/size][/color]

grazie :)

è stata una delle prime cose che ho guardato (insieme alla gestione degli accessi per cui ho utilizzato l’estensione rights), non tanto per il “backend” (che probabilmente sarà sempre e solo in italiano) ma quanto per il frontend (che sarà almeno in quattro lingue). Poi mi sono detto già che lo faccio per il frontend perchè non farlo pure per il backend? Tanto è sufficiente personalizzare i generatori di gii …

un’altra cosa che ho modificato subito è stata la personalizzazione delle icone dell’admin e l’installazione e personalizzazione dell’estensione clearfilters.

preferisco procedere “lentamente” ma implementare tutte le funzionalità che mi servono, già con la sola creazione di Utenti e Clienti ho cambiato i generatori di gii almeno dieci volte :)

ad esempio penso che anche il clearfilters lo metterò nei templates di gii è indispensabile avere la possibilità di fare il reset di una ricerca

L’estensione clearfilters è qui: http://www.yiiframework.com/forum/index.php?/topic/15845-extension-clear-filters-gridview/

Scusa non ho capito il principio di yii message.

Traduce messaggi nei file?

Cioè lo usi per tradurre i file sorgenti stessi?

Ma è in grado di tradurre un testo di una qualsiasi lingua in un’altra lingua di destinazione… una lettera o un testo tecnico??? Troppo bello per essere vero. Dimmi che è vero!

Anche io mi sono posto il problema di come ampliare la base di utenti potenziali da 150 milioni di italiani a x miliardi di popolazione mondiale e sto cercando di fare (le poche volte che mi vien voglia di provarci) una cosa molto strana.

Ho ridefinito CDbMessageSource e l’evento onMissingTranslation

Lo scopo finale è sostituire a qualsiasi testo della view un messaggio archiviato nel database

Popolo il database di CDbMessageSource con la mia lingua nativa o in inglese.

1 - Fare una sezione amministrativa dell’applicazione che partendo dalla lingua di partenza (italiano o inglese) traduce con con applicazioni client o web ( http://translate.google.it/ ) [color="#000000"]ogni messaggio nelle restanti lingue del globo[/color]

2 - Quando l’utente apre la pagina essa mostra la versione tradotta nella lingua di default del browser … tradotta approssimativamente dal traduttore automatico.

3 - L’utente della lingua X (previo consenso dell’admin) dovra essere in grado di migliorare le traduzioni per la sua lingua così ottenute correggendole lui stesso (un tasto traduci in ogni view?)

Per ora sembra che le mie versioni di CDbMessageSource e onMissingTranslation lavorino bene… l’unico problema da risolvere è se mi dimentico di mettere il testo della lingua sorgente… in quel caso onMissingTranslation va in loop infinito!!!

il punto 2 funziona per li fatto che semplicemente esiste YII!

Sto lavorando al punto 1… cercando di generare un file da mandare in pasto a Google Translator e reincollarlo in una pagina web che riparserizza il testo tradotto e aggiorna le tabelle di CDbMessageSource.

Sicuramente ci saranno GROOOSSI problemi di performance ma devo probare a codice finito come si comporta anche sfruttando la cache Yii su file.

… ma se YIIC funziona come dicevo all’inizio ho buttato tanto tempo!!

… a disposizione per condividere codice e soluzioni…

mi dispiace deluderti ma yiic message non traduce proprio niente :)

per le traduzioni utilizzo CPhpMessageSource

yiic message non fa altro che tenermi aggiornato l’elenco delle “stringhe” da tradurre.

Se non ci fosse yiic message dovrei aggiornare i file con le traduzioni ogni volta che ne utilizzo una, ad esempio:

(metti che utilizzo italiano e inglese) modifico la view admin.php e aggiungo da qualche parte


<?php echo Yii::t('app_admin', 'nuovaEtichetta');  ?>

dovrei aprire il file protected/messages/it/app_admin.php e aggiungere "nuovaEtichetta"

stesso procedimento per protected/messages/en/app_admin.php

invece grazie ad yiic message scrivo le mie view utilizzando tutte le etichette di cui ho bisogno, poi periodicamente mi faccio il “translation day” :) lancio il comando di cui parlavo nel primo post e mi vado a tradurre tutte le parti mancanti. Ma la traduzione la faccio io.

Per quanto riguarda il tuo metodo ho dato un’occhiata a questa estensione http://www.yiiframew…sion/translate/ che sembra faccia al caso tuo

ma, personalmente, preferisco avere le traduzioni su file invece che su db quindi gli ho dato solo una lettura veloce.

ho apprezzato molto i tuoi interventi… sei riuscito a fare chiarezza e mi hai risparmiato un botto di tempo in quanto ero scettico nell’utilizzo del comando message.

Rimane ancora un dubbio: non esiste un modo per creare la prima webapp in italiano??? in pratica la traduzione della pagina about, nel caso voglia farla rimanere nel mio progetto, devo farla io utilizzando la funzione yii::t e poi lanciando message??

Ciao!!!

Utilissimo ;) ho provato a:

[list=1]

[*] inserire una yii:t nel codice

[*] fare una prima traduzione con yiic message

[*] eliminare il testo tradotto al punto 1

[*] fare una seconda traduzione con yiic message

[/list]

risultato? sebbene sia capace di sovrascrivere non elimina le voci non più presenti nel codice.

Del resto non si può avere tutto dalla vita ;D ;D ;D

Ho messo anche io un bel + a "ga.n". Ottimo post!