Mysql
 sql >> Database >  >> RDS >> Mysql

L'approccio più efficiente per il sito Web PHP multilingue

Alcune considerazioni:

1. Traduzioni
Chi si occuperà delle traduzioni? Persone che sono anche collegate al sito? Un'agenzia di traduzioni? 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 perfetto e comprensibile per chiunque abbia bisogno di tradurlo. Ma cosa succede quando usi parole chiave, come suggerisce Mike, invece di frasi intere? Se qualcuno ha bisogno di tradurre un msgid chiamato "address_home", lui o lei non ha idea se questo debba essere un'intestazione "Indirizzo di casa" o se sia una frase completa. In questo caso, assicurati di aggiungere commenti al file 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");

Usando xgettext --add-comments=/// durante la creazione dei file .po verranno aggiunti questi commenti. Tuttavia, non credo che Gettext debba essere utilizzato in questo modo. Inoltre, se devi aggiungere commenti con ogni il testo che vuoi visualizzare a) probabilmente commetterai un errore a un certo punto, b) l'intero script verrà comunque riempito con i testi, solo nel modulo dei commenti, c) i commenti devono essere inseriti direttamente sopra il Gettext funzione, che non è sempre conveniente, a seconda della posizione della funzione nel codice.

2. Manutenzione
Una volta che il tuo sito è cresciuto (ancora di più) e i file della tua lingua insieme ad esso, potrebbe diventare 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 indietro i file, assicurarti che la struttura sia ancora intatta (i traduttori desiderosi sono sempre felici di tradurre anche la sintassi, rendendo il file intero inutilizzabile :)) e terminare con l'importazione delle nuove traduzioni. È fattibile, certo, ma tieni presente i possibili problemi a questo proposito con siti di grandi dimensioni e molte lingue diverse.

Un'altra opzione:combina la tua 2a e 3a alternativa:

Personalmente trovo più utile gestire la traduzione utilizzando un (semplice) CMS, mantenendo le variabili e le traduzioni in un database ed esportando tu stesso i testi rilevanti in file di lingua:

  1. aggiungi variabili al database (es.:id, page, variable);
  2. aggiungi traduzioni a queste variabili (es.:id, varId, language, translation);
  3. seleziona le variabili e le traduzioni rilevanti, scrivile in un file;
  4. includi il file della lingua pertinente nel tuo sito;
  5. crea la tua funzione per visualizzare il testo di una variabile:

text('var'); o forse qualcosa come __('faq','register','lost_password_text');

Il punto 3 può essere semplice come selezionare tutte le variabili e le traduzioni rilevanti dal database, metterle in un array e scrivere l'array serializzato in un file.

Vantaggi:

  1. Manutenzione. Mantenere i testi può essere molto più facile 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 visualizzare rapidamente un elenco di tutte le variabili utilizzate ad es. la pagina delle domande frequenti.

  2. Tradurre. Puoi visualizzare la variabile con tutte le traduzioni di tutte le diverse lingue in un'unica pagina. Questo potrebbe essere utile per le persone che possono tradurre testi in più lingue contemporaneamente. E potrebbe essere utile vedere altre traduzioni per avere un'idea del contesto in modo che la traduzione sia la migliore possibile. Puoi anche interrogare il database per scoprire cosa è stato tradotto e cosa no. Magari aggiungi timestamp per tenere traccia di possibili traduzioni obsolete.

  3. Accesso. Questo dipende da chi tradurrà. Puoi avvolgere il CMS con un semplice login per concedere l'accesso alle persone di un'agenzia di traduzioni, se necessario, e consentire loro di cambiare solo alcune lingue o anche alcune parti del sito. Se questa non è un'opzione, puoi comunque inviare i dati in un file che può essere tradotto manualmente e importarlo in un secondo momento (sebbene ciò potrebbe comportare gli stessi problemi menzionati prima). Puoi aggiungere una delle traduzioni già presenti (inglese o un'altra lingua principale) come contesto per il traduttore.

Tutto sommato penso che scoprirai che avrai molto più controllo sulle traduzioni in questo modo, soprattutto a lungo termine. Non posso dirti nulla sulla velocità o sull'efficienza di questo approccio rispetto alla funzione gettext nativa. Ma, a seconda delle dimensioni dei file di lingua, non credo che sarà una grande differenza. Se raggruppi le variabili per pagina o sezione, puoi sempre includere solo le parti richieste.