Cómo crear un sistema multi-lingual sin complicaciones
Muchas aplicaciones empiezan su desarrollo sin pensar en esto. Para cuando consideran agregar idiomas adicionales, la tarea ya implica regresar a páginas y crear frameworks nuevos. Para evitar el retrabajo y los errores, es importante establecer la lógica para hacerlo desde un principio.
Con este ejercicio buscamos resolver lo anterior de la forma más sencilla posible, usando estructuras y servicios que vivan en la aplicación, que se estructuren de forma simple y que no implique gran complejidad implementar. Sobre todo que cuando se revise el código en cada página, se entienda la variable.
Después de muchas pruebas, llegue a la conclusión que el mejor mecanismo es contar cun archivo de idiomas donde se puedan ver las variables disponibles y tenerlas en todos los idiomas necesarios. El idioma es justamente la llave.
lang.json
-----------
{
"SPA" :
{
"general_hello" : "Hola!",
"general_submit" : "Enviar",
"general_help" : "Ayuda",
"general_name" : "Nombre",
"menu_reports" : "Reportes",
"menu_tools" : "Herramientas",
"menu_logout" : "Cerrar"
},
"ENG" :
{
"general_hello" : "Hello!",
"general_submit" : "Send",
"general_help" : "Help",
"general_name" : "Name",
"menu_reports" : "Reports",
"menu_tools" : "Tools",
"menu_logout" : "Logout"
}
}
En lo personal me gusta nombrar mis variables siempre en dos unidades, la primera que me permite agrupar la etiqueta y tener asi variaciones (ej: "general" y "menu") y la segunda la que describe justamente el texto (ej: "help", "name", "tools"), simplemente los separo con un guion bajo.
Me adelanto un poco y les platico como luce esta variable ya implementada en la página. Lo más importante es que no parezca código, sino que se entienda exactamente que se trata de un texto y de cual es ese texto. Un ejemplo se ve así:
<cfoutput>
<ol class="nav>
<li>#Lang["menu_reports"]#</li>
<li>#Lang["menu_tools"]#</li>
<li>#Lang["menu_logout"]#</li>
</ol>
</cfoutput>
Para hacer que esto sea posible, necesitamos definir un par de cosas muy puntuales. Esto sucede a nivel Application.cfc y en un componente donde tengamos funciones administrativas.