Estimados, luego de darle vueltas al tema durante unos días e investigar por Internet y con algunos colegas he decidido consultarles mi problema esperando leer sus valiosas opiniones y consejos.
El tema es el siguiente: se quiere desarrollar un sitio web multilenguaje de un tamaño considerable; esto es muchas palabras, frases y textos en un mínimo de 3 lenguajes diferentes. Además se necesita que el usuario del sistema (usualmente redactores del sitio) tenga la posibilidad de añadir en un futuro nuevas palabras, frases y textos al repertorio sin que el proceso resulte demasiado dificultoso para él.
Dadas las características de los requerimientos creo que las aproximaciones más comunes utilizadas en estos casos como una serie de define o un array con las traducciones no resultarían convenientes ya que cargar a memoria una vasta cantidad de frases de las que solo se utilizarían algunas pocas sería bastante costoso para el servidor.
Tampodo me parece conveniente manejar las traducciones en base de datos y mediante un SELECT recuperar las correspondientes al idioma que se requiera ya que otra vez estaría cargando la memoria con muchos datos inútiles. Por otra parte realizar un SELECT solo por aquellas palabras, frases o textos que se van a utilizar en la página que se quiere cargar podría resultar dolorosamente lento ya que con facilidad la página podría incluir 50 palabras y en consecuencia serían 50 consultas.
He estado estudiando el hecho de colocar en las vistas algo como esto: $translator->registerTranslation("Buen día") y luego haciendo uso de los buffers generar, una vez que ya se han llamado a todos los registerTranslation(), una consulta del tipo SELECT english FROM translation WHERE english IN("Buen día", "Buenas noches", "Otras muchas frases y/o textos") logrando así consultar una sola vez a base de datos y solamente por aquellas frases que necesito. Pero siendo que el IN no retorna los resultados en el orden en cual se consultaron se requeriría algo de lógica adicional para ordenar los resultados y luego para reemplazar el texto de las vistas por su traducción correspondiente... osea otra vez muchos recursos para cada impresión del sitio.
Si no los aburrí y han leído hasta aquí mi pregunta es entonces ¿cuál podría ser la mejor aproximación para construir un sitio de estas características? He visto que el Zend Framework utiliza, entre otros adaptadores, archivos de texto plano INI y parece funcionar consultando al archivo por cada llamada a $translate->_("Frase") (o quizá carga todo en memoria).
Cualquier ayuda, consejo, opinión será muy valorada.
Agradezco de antemano.
Saludos.