Esta publicación es la continuación a:
La solución multilenguaje en MyFamilyServer (Parte 2, generación de plantillas)
La solución multilenguaje en MyFamilyServer (Parte 2, generación de plantillas)
En la parte uno y dos ya hemos visto:
- Como proceder en el momento del desarrollo.
- Que ocurre en el momento de generar la traducción.
- Que ocurre en ejecución.
Si has llegado hasta este punto, ya dispones de.
- Un conjunto de plantillas html que hacen la función de 'máster'.
- Un diccionario por cada idioma que necesitas.
- Un conjunto de plantillas, copia del 'máster' traducidas a cada idioma y
- Un árbol de directorios que te permite tener las plantillas ordenadas por idiomas.
(Recuerda que, cualquier cambio que necesites realizar, debes hacerlo en el 'máster' y el proceso de traducción lo propagará a todos los idiomas)
En este post, vamos a ver, paso a paso, como seleccionar y utilizar las plantillas del idioma adecuado (vamos a ver como esta realizado en MyFamilyServer).
En MyFamilyServer hay pantallas que están realizadas en partes (una parte es la cabecera, otra el menú izquierdo, otra el contenido, y otra el pie) y pantallas que están realizadas con una sola plantilla. En este ejemplo vamos a ver como funciona para ambos casos, que son muy parecidos.
MyFamilyServes es una aplicación privada (no para uso publico) que requiere de un usuario y contraseña para utilizarse, en este caso, sabemos que usuario esta utilizando la aplicación, ya que la misma requiere login..... Que bueno, según haces login en la aplicación (validas tu usuario y contraseña), recuperamos del registro de usuarios cual es el idioma en el quieres trabajar... fácil.
El idioma (como algún otro dato) lo dejamos en sesión y de este modo esta disponible en cualquier momento que necesitemos.
Supongo que en tu aplicación puedes saber que idioma quiere utilizar el usuario. Una vez dispones del idioma a utilizar, el proceso es el siguiente:
Las plantillas se encuentran todas en los mismos arboles de directorio, cada conjunto dentro del su arbol de idioma pero dentro del idioma todos los sub-arboles son iguales (de esto estamos seguros por que el árbol lo copia el proceso de traducción).
La selección del conjunto de plantillas la realizo con estas porciones de código:
El idioma lo recupero de sesión con esa función (tu puedes utilizar esta o cualquier otra)
function recuperar_de_sesion($parametro) {
$valor = $_SESSION[$parametro];
return $valor;
}
La selección del directorio la realizo con esta función (el directorio de las plantillas html en MyFamilyServer esta compuesto por el idioma, el modelo y la funcionalidad):
function seleccionar_directorio($modelo, $funcionalidad, $idioma) {
$directorio = $idioma.'/'.$modelo.'/'.$modelo.$funcionalidad.'/';
return $directorio;
}
Con estas dos funciones ya puedo recuperar la plantilla adecuada, primero obtengo el valor del idioma:
$idioma = recuperar_de_sesion('idioma');
luego identifico el directorio de la plantilla:
$directorio = seleccionar_directorio($modelo, $funcionalidad, $idioma);
y finalmente recupero la plantilla:
$htmlCuerpoObjeto = file_get_contents('html/'.$directorio. $plantilla . '.html');
Cuando una pantalla esta compuesta por varias plantillas las concateno despues de haberlas recuperado todas:
$html = $htmlCabeceraGral .
$htmlCabeceraObjeto .
$htmlMenuObjeto .
$htmlMenuGral .
$htmlCuerpoObjeto .
$htmlPieObjeto .
$htmlPieGral;
y finalmente lo presento:
print $html;
Ya esta, esta es la explicación completa de la solución multi idioma en MyFamilyServer.
No hace falta explicar que las plantillas pasan, antes de concatenarlas, por otra transformación, para sustituir las etiquetas de datos por valores en el momento de ejecución, pero eso NO forma parte de la explicación de la solución multi idioma.
Estoy preparando documentación completa de la arquitectura del software y del código en MyFamilyServer, en cuanto este disponible publicare un post explicando como y donde descargarla.
En MyFamilyServer hay pantallas que están realizadas en partes (una parte es la cabecera, otra el menú izquierdo, otra el contenido, y otra el pie) y pantallas que están realizadas con una sola plantilla. En este ejemplo vamos a ver como funciona para ambos casos, que son muy parecidos.
MyFamilyServes es una aplicación privada (no para uso publico) que requiere de un usuario y contraseña para utilizarse, en este caso, sabemos que usuario esta utilizando la aplicación, ya que la misma requiere login..... Que bueno, según haces login en la aplicación (validas tu usuario y contraseña), recuperamos del registro de usuarios cual es el idioma en el quieres trabajar... fácil.
El idioma (como algún otro dato) lo dejamos en sesión y de este modo esta disponible en cualquier momento que necesitemos.
Supongo que en tu aplicación puedes saber que idioma quiere utilizar el usuario. Una vez dispones del idioma a utilizar, el proceso es el siguiente:
Las plantillas se encuentran todas en los mismos arboles de directorio, cada conjunto dentro del su arbol de idioma pero dentro del idioma todos los sub-arboles son iguales (de esto estamos seguros por que el árbol lo copia el proceso de traducción).
La selección del conjunto de plantillas la realizo con estas porciones de código:
El idioma lo recupero de sesión con esa función (tu puedes utilizar esta o cualquier otra)
function recuperar_de_sesion($parametro) {
$valor = $_SESSION[$parametro];
return $valor;
}
La selección del directorio la realizo con esta función (el directorio de las plantillas html en MyFamilyServer esta compuesto por el idioma, el modelo y la funcionalidad):
function seleccionar_directorio($modelo, $funcionalidad, $idioma) {
$directorio = $idioma.'/'.$modelo.'/'.$modelo.$funcionalidad.'/';
return $directorio;
}
Con estas dos funciones ya puedo recuperar la plantilla adecuada, primero obtengo el valor del idioma:
$idioma = recuperar_de_sesion('idioma');
luego identifico el directorio de la plantilla:
$directorio = seleccionar_directorio($modelo, $funcionalidad, $idioma);
y finalmente recupero la plantilla:
$htmlCuerpoObjeto = file_get_contents('html/'.$directorio. $plantilla . '.html');
Cuando una pantalla esta compuesta por varias plantillas las concateno despues de haberlas recuperado todas:
$html = $htmlCabeceraGral .
$htmlCabeceraObjeto .
$htmlMenuObjeto .
$htmlMenuGral .
$htmlCuerpoObjeto .
$htmlPieObjeto .
$htmlPieGral;
y finalmente lo presento:
print $html;
Ya esta, esta es la explicación completa de la solución multi idioma en MyFamilyServer.
No hace falta explicar que las plantillas pasan, antes de concatenarlas, por otra transformación, para sustituir las etiquetas de datos por valores en el momento de ejecución, pero eso NO forma parte de la explicación de la solución multi idioma.
Estoy preparando documentación completa de la arquitectura del software y del código en MyFamilyServer, en cuanto este disponible publicare un post explicando como y donde descargarla.