Managers/I18N
Esta librería es la encargada de gestionar los textos internacionalizados de la aplicación que derive del AnP.
I18NManager.sentences
Esta constante es la encargada de almacenar todos los idiomas y sus respectivos textos a partir de dos diccionarios anidados de tal forma que el primer nivel determina la clave del idioma y el segundo almacena las claves con cada uno de los textos en dicho idioma.
- typejson
- characters582
- lines20
{ "english" : { "text_a" : "This is the text A.", "text_b" : "This is the text B.", "text_c" : "This is the text C.", "text_n" : "This is the text N." }, "espanol" : { "text_a" : "Este es el texto A.", "text_b" : "Este es el texto B.", "text_c" : "Este es el texto C.", "text_n" : "Este es el texto N." }, "galego" : { "text_a" : "Iste é o texto A.", "text_b" : "Iste é o texto B.", "text_c" : "Iste é o texto C.", "text_n" : "Iste é o texto N." } }
Con esta estructura podemos hacer uso de esta constante a partir de la clave que determine el idioma y la clave que determine el texto.
A la hora de crear un JSON con textos para su carga sobre la aplicación AnP, éstos pueden dividir los textos en bloques a partir de claves que empiecen por el nombre de la aplicación o cualquier otra clave la cual los desarrolladores hagan uso, seguido de un guión bajo; y acabar con un guión bajo acompañado de un start si éste se iniciar o bien de un end si éste se cierra o se termina.
- typejson
- characters932
- lines27
{ "espanol" : { "AnP_grupo_a_start" : null, "text_a_1" : "Este es el texto 1 del grupo A.", "text_a_2" : "Este es el texto 2 del grupo A.", "text_a_3" : "Este es el texto 3 del grupo A.", "text_a_n" : "Este es el texto N del grupo A.", "AnP_grupo_a_end" : null, "AnP_grupo_b_start" : null, "text_b_1" : "Este es el texto 1 del grupo B.", "text_b_2" : "Este es el texto 2 del grupo B.", "text_b_3" : "Este es el texto 3 del grupo B.", "text_b_n" : "Este es el texto N del grupo B.", "AnP_grupo_b_end" : null, "AnP_grupo_c_start" : null, "text_c_1" : "Este es el texto 1 del grupo C.", "text_c_2" : "Este es el texto 2 del grupo C.", "text_c_3" : "Este es el texto 3 del grupo C.", "text_c_n" : "Este es el texto N del grupo C.", "AnP_grupo_c_end" : null } }
de esta forma, a la hora de agregar los nuevos textos, los bloques son ignorados para renderizar el diccionario que los almacena. Esta práctica sólo es para permitir una mejor visualización de los textos.
Los textos pueden ser Array de Strings por el hecho de que éstos pueden estar fragmentados en Arrays dentro de un JSON por facilidad de visualización cara el o los desarrolladores. También pueden ser valores nulos cuando éstos no quieren ser especificados o bien, para hacer uso de claves de bloque.
I18NManager.data
Esta constante contiene la información necesaria para poder trabajar los idiomas interactuables desde el propio GUI pues estos parámetros no pueden ser aplicados en sentences puesto que si cambia el idioma, éstos cambiarían en el propio GUI por dicha referencia, por lo que se establece esta nueva constante para dicho fin. Su estructura son dos dicciomarios anidados donde el primer nivel establece el idioma y el segundo los datos pertinentes del mismo.
- typejson
- characters1474
- lines52
{ "english" : { "flag" : [ "{anp_root}/images/flags/english.svg", "https://cdn.k3y.pw/data/images/flags/english.svg" ], "language" : "English", "country" : "Unated Kingdom", "language_code" : "en", "country_code" : "UK" }, "espanol" : { "flag" : [ "{anp_root}/images/flags/espanol.svg", "https://cdn.k3y.pw/data/images/flags/espanol.svg" ], "language" : "Español", "country" : "España", "language_code" : "es", "country_code" : "ES" }, "galego" : { "flag" : [ "{anp_root}/images/flags/galego.svg", "https://cdn.k3y.pw/data/images/flags/galego.svg" ], "language" : "Galego", "country" : "España", "language_code" : "gl", "country_code" : "ES" }, "nihongo" : { "flag" : [ "{anp_root}/images/flags/nihongo.svg", "https://cdn.k3y.pw/data/images/flags/nihongo.svg" ], "language" : "日本語", "country" : "日本", "language_code" : "jp", "country_code" : "JP" }, "russkiy" : { "flag" : [ "{anp_root}/images/flags/russkiy.svg", "https://cdn.k3y.pw/data/images/flags/russkiy.svg" ], "language" : "Pусский", "country" : "Россия", "language_code" : "ru", "country_code" : "RU" } }
Los campos que implementan cada idioma son los siguientes:
- flag: URL (String) o conjunto de URLs Array alternativas donde las primeras tienen prioridad sobre las segundas para garantizar que alguna de las URL cargue correctamente la bandera.
- language: Nombre del idioma en el idioma que represente.
- country: Nombre del país del idioma en el idioma que represente.
- language_code: Determina el código del lenguaje en ISO 3166-1.
- country_code: Determina el código del país en ISO 3166-1.
I18NManager.selected
Esta variable determina la clave del idioma que está seleccionada actualmente en la aplicación AnP, ya sea seleccionada por el usuario o que ésta venga configurada por defecto.
En caso de ser un valor nulo nos indica que éste no está configurado ni seleccionado lo que cuando se va a coger un texto, éste irá con otros parámetros para determinar el idioma o bien, dependerá del orden en el que se constituyan los idiomas dentro del diccionario sentences.
I18NManager.default_language
Esta variable determina la clave del idioma por defecto configurada por el desarrollador.
En caso de ser un valor nulo nos indica que éste no está configurado ni seleccionado lo que cuando se va a coger un texto, éste irá con otros parámetros para determinar el idioma o bien, dependerá del orden en el que se constituyan los idiomas dentro del diccionario sentences.
I18NManager.default_overwrite
Esta variable determina si cuando se añade una nueva clave de texto a un idioma determinado y éste ya existe, si éste es sobreescrito (true) o no (false)
I18NManager.default_overwrite_data
Esta variable determina si cuando se añade una nueva clave de información de idioma orientado al GUI determinado y éste ya existe, si éste es sobreescrito (true) o no (false)
I18NManager.default_text
Esta variable determina el texto por defecto para los casos donde se quiera recoger un texto concreto y éste no se encuentre y no se le halla determinado un texto de respuesta por defecto.
I18NManager.add
Método objeto asíncrono que nos permite añadir y sobreescribir idiomas y textos para éstos. La sobreescritura se basa en determinar el argumento overwrite como true.
En lenguajes como Python u otros que pueden determinar cargas externas como síncronas con seguridad, este método podría ser síncrono excepcionalmente a estos casos.
I18NManager.get
Método objeto que nos permite recoger un texto que estemos buscando, ya sea que éste exista, o le demos un texto por defecto para casos de no existir, o que en caso de no ser ninguna de las anteriores éste retorne el valor de la variable que almacena el texto por defecto. Este método también es capaz de gestionar variables dentro del propio texto devuelto a partir del método AnP:string_variables, encapsulando dentro del propio texto entre llaves, las claves de las variables de las cuales se quieran hacer uso.
En caso de que el texto que se selecciona sea un Array, éste lo unirá con Strings vacíos, es decir, que cada separación del mismo ha de ir con los caracteres correspondientes por defecto, normalmente espacios. De esta forma siempre retornará o un String en caso de ser encontrado un texto; o un vcalor nulo.
El método get tiende a ayudarse de otro método privado que lo acompaña por el hecho de que uno procesa el texto a retornar puesto que hay varias vías por las que puede salir; y el principal se encarga de formatear el texto a un String o a un valor nulo.
I18NManager.update
Método objeto que nos permite actualizar los textos del GUI. En este caso, pueden existir más de una forma de actualización de los mismos dependiendo del entorno donde se encuentre.
! Este método sólo existe en lenguajes que sean capaces de interactuar con los GUI que vienen a continuación.
Este método saltará automáticamente cada vez que se cambie el idioma de la aplicación si éste posee las condiciones adecuadas para que éste exista y sea tratable en el entorno de aplicación.
HTML
En el entorno HTML de un nqavegador o aplicación basada en WebView, éste buscará dentro del mismo todas las etiquetas que contengan el atributo data-i18n que contiene la clave de texto a la cual hace referencia. Por cada clave encontrada se recogerá el texto en el idioma establecido mediante el método get, y en caso de existir el atributo data-i18n-veriables, ésta se decodificará en un Objeto Clave-Valor donde la clave será el nombre de la variable y el valor, el valor de la propia variable. En caso de existir el atributo data-i18n-without=true, éste no le dará texto internacionalizado a su contenido, únicamente a los atributos que contenga asociados con textos como puede ser alt, title, placeholder*, etc.
Es posible que se pueda considerar un método tosco y poco renderizado para Webs o Aplicaciones Web relativamente grande, sin embargo, hay que contar que cada elemento puede tener su clave y sus condiciones así como sus variables por lo que se decidió establecer este método para realizar dicha tarea.
I18NManager.create
Este método objeto nos permite crear un selector de idiomas en base a los idiomas implementados en la constante sentences en los entornos que permitan GUI en base a los siguientes que están implementados, retornando el código directo u objeto inicialmente no anidado en el GUI para ser implementado donde el desarrollador desee.
La estructura GUI de este elemento no es más que un selector desplegable donde por defecto sólo muestra el idioma seleccionado pero cuando el puntero o mediante Touch, éste es pulsado, se desplieguen todos los idiomas establecidos en la aplicación para ser seleccionado por el usuario.
! Una vez seleccionado un idioma distinto al que está implementado en ese momento, éste actualizará todos los textos del GUI automáticamente mediante el método update.
Cada idioma estará formateado en base a un formato String con las siguientes variables a usar, las cuales se especificarán en dicho String de formato encapsulándolas entre llaves:
- frag: Determina el Path o URL de la bandera que represente al país y/o idioma.
- name: Determina la clave String del idioma.
- language: Determina el nombre del idioma en el idioma al que hace referencia.
- country: Determina el nombre del país en el idioma a la que hace referencia.
- language_code: Determina el código del lenguaje en ISO 3166-1.
- country_code: Determina el código del país en ISO 3166-1.
Salvo la clave name, que viene siendo un recurso común, la clave del propio idioma, todas las demás claves vienen del diccionario de la constante data.
HTML
En el entorno HTML se creará un element UL que alberba la selección de los idiomas mediante objetos LI, uno por cada idioma, y se determinará el idioma seleccionado mediante el atributo data-selected=true. Su dinamismo se basa plenamente en SASS/CSS.
En la estructura base de una Aplicación Web vía AnP, éste aparecerá en la esquina inferior derecha del GUI, en el Footer de la aplicación.
I18NManager.change
Este método objeto nos permite cambiar el idioma de la aplicación actual al idioma que represente la clave dada. Éste analizará posibles errores los cuales se almacenan binariamente en un valor numérico entero cuyos bits representan:
- Excepción.
- La clave del idioma no está definido.
- La clave del idioma es nulo.
- La clave del idioma no es un String.
- La clave del idioma tiene caracteres no válidos.
- La clave del idioma no es conocido en sentences.
- La clave del idioma es la misma que la del idioma seleccionado actualmente.
Si no posee ningún error, es decir, que le código de error es 0, éste cambiará el idioma de la aplicación, y en caso de tener GUI, cambiará el idioma en todos los selectores de idioma que pueda haber en el GUI y en los elementos del GUI Internacionalizados.