Prima di tutto, gettext
è un buon modo per andare, quindi non ignorare se all'inizio non sembra facile; Tuttavia ci sono anche altre opzioni utili da sapere. Prima di spiegare, diamo un'occhiata prima ai tuoi suggerimenti:
Nel tuo array
-way di questo, hai una soluzione praticamente semplice. La cosa buona è che puoi memorizzare le tue traduzioni in una memoria dati, quindi caricarle nel tuo script PHP come una matrice, e il gioco è fatto. Tuttavia, se si desidera archiviare staticamente il proprio array in un file PHP, la modifica richiede un programmatore PHP o un utente exprienced che abbia familiarità con la sintassi PHP, solo per modificare il file b) sincronizzando anche quattro o cinque file di lingua diversi potrebbe essere abbastanza fastidioso e soggetto a errori.
Quello che devi considerare qui è: come aggiungere in seguito nuovi elementi al file della lingua? Posso lasciarlo a un traduttore o ci dovrebbe essere un programmatore PHP?
Il tuo variable
-way di farlo non è pratico. Perché? Presumo che avrai almeno un paio di funzioni nella tua applicazione, giusto? Quindi devi passare tutte queste variabili quando chiami la funzione o devi global
di esse. Se pensi di avere più di dieci variabili come questa, ti sconsiglio vivamente di farlo. Potrebbero esserci anche conflitti tra nomi: è possibile sovrascrivere il valore di un'altra variabile con lo stesso nome, tuttavia ciò potrebbe essere risolto aggiungendo un prefisso anche semplice come un trattino basso, quindi ad esempio $_welcome
per esempio . Ad ogni modo, se fossi in te non ci penserei nemmeno; Non farlo.
Un buon modo per farlo è definire Costanti con un prefisso. Ad esempio, nel tuo en.lang.php
avrai qualcosa come define( 'LABEL_WELCOME', 'Welcome' );
e nel tuo no.lang.php
avrai define ( 'LABEL_WELCOME', 'Velkommen' );
. L'aspetto positivo dell'utilizzo costante anziché di variabili è che sono sempre disponibili nel tuo script. Quindi non è necessario iniettarli o globalizzarli. Rispetto agli array e alle variabili, sono più veloci grazie al modo in cui vengono gestiti da PHP: occupano meno spazio nella memoria. Lo svantaggio è che non è possibile passarli al traduttore, quindi ancora una volta hai bisogno di uno sviluppatore PHP. Anche la sincronizzazione tra i file potrebbe essere un po 'di dolore.
L'altra opzione è avere una Funzione o Classe / Metodo per recuperare la traduzione. Sarà meno efficiente, ma non credo che tu abbia bisogno di quel tipo di micro-ottimizzazione, ma il vantaggio ulteriore è che puoi applicare una logica personalizzata mentre recuperi la traduzione. Ad esempio, immagina che un giorno il tuo amato project manager venga a chiederti se potresti nascondere tutti quei testi in maiuscolo. Non puoi rifiutarti di farlo, quindi avere una funzione nel mezzo potrebbe aiutarti molto quando devi applicare / modificare un pattern a tutte le tue traduzioni.
Per riassociare:
-
Pensa a come i traduttori possono usarlo e trovare una soluzione KISS funzionante per loro.
-
Pensa a come puoi rimanere sincronizzato tra lingue diverse.
-
Pensa se potrebbe essere necessaria la stessa traduzione, diciamo per l'app per dispositivi mobili. Una soluzione multipiattaforma potrebbe farti risparmiare tempo. Non ignorare JSON e database ordinari.
-
Pensa a come puoi applicare / modificare la logica quando recuperi le traduzioni.
-
Hai dimenticato la performance. Il 99,9% delle volte non si arriva così lontano a fare micro-ottimizzazione come Costante contro Variabili contro Funzione Chiamate . Presumo che il tuo tempo come sviluppatore / staff sia più costoso piuttosto che un tempo di processore.
Aggiornamento # 1
Mio Dio, posto una risposta per una domanda di un anno. Perché nessuno sta dicendo qualcosa qui? Abbiamo bisogno di avvisi per questi casi.
Aggiornamento n. 2
Sul lato destro dice che è una domanda vecchia di un anno; Comunque è stato chiesto due anni fa! Tutto è fuorviante qui!