alcune considerazioni:
1. Traduzioni
che farà le traduzioni? Persone che sono anche collegate al sito? Un'agenzia di traduzione? Quando usi Gettext, lavorerai con i file 'pot' (.po). Questi file contengono l'ID del messaggio e la stringa del messaggio (la traduzione). Esempio:
msgid "A string to be translated would go here"
msgstr ""
Ora, questo sembra più che bene e comprensibile per chiunque abbia bisogno di tradurre questo. Ma cosa succede quando usi parole chiave, come suggerisce Mike, invece di frasi complete? Se qualcuno ha bisogno di tradurre un msgid chiamato "address_home", non ha idea se questo dovrebbe essere un header "Home address" o che sia una frase completa. In questo caso, assicurarsi di aggiungere commenti al file giusto prima di chiamare la funzione gettext, in questo modo:
/// This is a comment that will be included in the pot file for the translators
gettext("ready_for_lost_episode");
Utilizzando xgettext --add-comments=///
durante la creazione dei file .po aggiungerà questi commenti. Tuttavia, non penso che Gettext sia usato in questo modo. Inoltre, se è necessario aggiungere commenti con ogni testo che si desidera visualizzare a) probabilmente si commette un errore ad un certo punto, b) l'intero script verrà comunque riempito con i testi, solo in forma di commento, c) i commenti devono essere posizionati direttamente sopra la funzione Gettext, che non è sempre comoda, a seconda della posizione della funzione nel codice.
2.Manutenzione
Una volta che il tuo sito cresce (anche oltre) e i tuoi file di lingua insieme, potrebbe essere piuttosto difficile mantenere tutte le diverse traduzioni in questo modo. Ogni volta che aggiungi un testo, devi creare nuovi file, inviare i file ai traduttori, ricevere i file, assicurarti che la struttura sia ancora intatta (i traduttori desiderosi sono sempre felici di tradurre anche la sintassi, rendendo l'intero file inutilizzabile :)) e termina con l'importazione delle nuove traduzioni. È fattibile, certo, ma sii consapevole dei possibili problemi a questo proposito con siti di grandi dimensioni e molte lingue diverse.
Un'altra opzione: combinare il 2 ° e 3 ° alternativa:
Personalmente, trovo più utile per gestire la traduzione utilizzando un (semplice) CMS, mantenendo le variabili e le traduzioni in un database ed esportazione i testi pertinenti ai file in lingua:
- aggiungere variabili al database (ad esempio id, pagina, variabile);
- aggiungere traduzioni a queste variabili (ad esempio id, varId, lingua, traduzione);
- selezionare le variabili e le traduzioni rilevanti, scriverle in un file;
- include il file di lingua pertinente nel tuo sito;
- creare la propria funzione per visualizzare un testo variabili:
text('var');
o forse qualcosa di simile __('faq','register','lost_password_text');
punto 3 può essere semplice come la selezione tutte le variabili e le traduzioni rilevanti dal database, mettendoli in un array e scrivere l'array serializzato su un file.
Vantaggi:
manutenzione. Mantenere i testi può essere molto più semplice per i grandi progetti. Puoi raggruppare le variabili per pagina, sezioni o altre parti all'interno del tuo sito, semplicemente aggiungendo una colonna al tuo database che definisce a quale parte del sito appartiene questa variabile. In questo modo puoi rapidamente visualizzare un elenco di tutte le variabili utilizzate ad es. la pagina delle domande frequenti
Traduzione. È possibile visualizzare la variabile con tutte le traduzioni di tutte le lingue diverse su una singola pagina. Questo potrebbe essere utile per le persone che possono tradurre testi in più lingue allo stesso tempo. E potrebbe essere utile vedere altre traduzioni per avere un'idea del contesto in modo che la traduzione sia il migliore possibile. Puoi anche interrogare il database per scoprire cosa è stato tradotto e cosa no. Forse aggiungi timestamp per tenere traccia di possibili traduzioni obsolete.
Accesso. Questo dipende da chi tradurrà. Puoi avvolgere il CMS con un semplice accesso per consentire l'accesso alle persone da un'agenzia di traduzione, se necessario, e consentire loro solo di cambiare alcune lingue o persino alcune parti del sito. Se questa non è un'opzione, è comunque possibile inviare i dati a un file che può essere tradotto manualmente e importarlo in un secondo momento (sebbene ciò potrebbe comportare gli stessi problemi menzionati in precedenza). Puoi aggiungere una delle traduzioni già presenti (inglese o un'altra lingua principale) come contesto per il traduttore.
Tutto sommato, penso che scoprirete che avrete un maggiore controllo sulle traduzioni in questo modo, specialmente nel lungo periodo. Non posso dirvi nulla sulla velocità o l'efficienza di questo approccio rispetto alla funzione gettext nativa. Ma, a seconda delle dimensioni dei file di lingua, non penso che sarà una grande differenza. Se si raggruppano le variabili per pagina o sezione, è sempre possibile includere solo le parti richieste.
Grazie per la risposta completa! Facciamo un paio di traduzioni noi stessi, ma il resto sarà fatto da un'agenzia di traduzioni. Ero a conoscenza del problema con l'uso delle chiavi in gettext, ma se avessi scelto quell'approccio probabilmente avrei creato il mio parser per creare i file PO usati dai traduttori dai file PO creati da xgettext in modo da combinare l'inglese con la lingua tradotta invece delle chiavi. Ho pensato di utilizzare DB, ma mi sembra inefficiente effettuare richieste al DB per quello che praticamente può essere considerato come contenuto statico. – alexteg
Stavo pensando a una soluzione con DB nel backend per la creazione di un frontend per i traduttori, ma poi la generazione di file PO statici-> MO-file o array PHP nei file di lingua inclusi a seconda della lingua richiesta. Quando si tratta di prestazioni, sembra ancora dalla mia ricerca che i file PO siano i più efficienti, dal momento che sono memorizzati nella cache, tradotti automaticamente (file MO) e su un livello inferiore rispetto a ciò che può essere scritto in PHP. Tuttavia, eseguirò alcuni test delle prestazioni sulle diverse tecniche e pubblicherò qui presto. – alexteg