En primer lugar, gettext
es un buen camino a seguir, así que no descarte si no suena fácil al principio; Sin embargo, también hay otras opciones que pueden ser útiles para conocer. Antes de explicar eso, echemos un vistazo a sus sugerencias primero:
En su forma array
de hacer esto, tiene una solución bastante sencilla. Lo bueno es que puede almacenar sus traducciones en un almacenamiento de datos, luego cargarlas en su script PHP como una matriz, y eso es todo. Sin embargo, si desea almacenar su matriz estáticamente en un archivo PHP, entonces la edición necesita a) un programador PHP o un usuario experimentado que esté familiarizado con la sintaxis PHP, solo para editar el archivo b) sincronización entre incluso cuatro o cinco archivos de idiomas diferentes podría ser bastante molesto y propenso a errores.
Lo que debe tener en cuenta aquí es: ¿cómo puede agregar elementos nuevos al archivo de idioma más adelante? ¿Puedo dejarlo en manos de un traductor o debería haber un programador PHP?
Tu forma variable
de hacerlo no es práctica. ¿Por qué? Supongo que tendrá un par de funciones al menos en su aplicación, ¿verdad? Luego debe pasar todas estas variables cuando llama a la función, o las necesita global
. Si cree que tendrá más de diez variables como esta, le recomiendo encarecidamente que haga esto. También puede haber conflicto de nombres: puede anular potencialmente el valor de otra variable con el mismo nombre, sin embargo, esto podría resolverse agregando un prefijo incluso tan simple como un guión bajo, por lo que tendrá, $_welcome
por ejemplo. De todos modos, si yo fuera tú, ni siquiera lo pensaría; No lo hagas
Una buena forma de hacerlo es definir constantes con un prefijo. Entonces, por ejemplo, en tu en.lang.php
tendrás algo como define( 'LABEL_WELCOME', 'Welcome' );
y en tu no.lang.php
tendrás define ( 'LABEL_WELCOME', 'Velkommen' );
. Lo bueno de usar constantes en lugar de variables es que siempre están disponibles en su secuencia de comandos. Por lo tanto, no necesita inyectarlos ni globalizarlos. En comparación con las matrices y las variables, son más rápidas debido a la forma en que PHP las maneja: ocupan menos espacio en la memoria. El inconveniente es que no puede pasarlos al traductor, por lo que nuevamente necesita un desarrollador de PHP. También la sincronización entre archivos podría ser un poco dolorosa nuevamente.
La otra opción es tener una Función o Clase / Método para recuperar la traducción. Será menos eficiente, sin embargo, no creo que necesite ese tipo de micro-optimización, pero la ventaja adicional es que puede aplicar una lógica personalizada mientras recupera la traducción. Por ejemplo, imagina que algún día tu amado gerente de proyecto te pregunta si puedes convertir todos esos textos en mayúsculas. No puede negarse a hacerlo, por lo que tener una función intermedia podría ayudarlo mucho cuando necesite aplicar / cambiar un patrón a todas sus traducciones.
Para concluir:
Piense en cómo los traductores pueden usarlo y encuentre una solución KISS que funcione para ellos.
Piensa en cómo puedes mantener la sincronización entre diferentes idiomas.
Think about if the same translation might be needed, let say for the mobile app. A cross platform solution could save your time. Don't dismiss JSON and ordinary Databases.
Think about how you can apply/change the logic when retrieving the translations.
Forgot about the performance. 99.9% of times you won't get that far to do micro-optimization like Constant vs. Variables vs. Function Calls. I assume your time as a developer/staff is more expensive rather than a processor time.
Update #1
My goodness, I post an answer for a year old question. Why no one is saying anything here? We need alerts for these cases.
Update #2
On the right side it says it's a year old question; However it's been asked two years ago! Everything is misleading here!