2.6. Internacionalización
API-CORE da soporte a la internacionalización (i18n) a través de la clase M.language, permitiendo definir conjuntos de palabras que contengan los textos a mostrar al usuario en función del lenguaje activo, en caso de que queramos que los componentes de la interfaz que vamos a programar estén preparados para ello.
- M.language.getTranslation([nombre_idioma]): Retorna un JSON con todas las traducciones.
- M.plugin.[nombre_plugin].getJSONTranslations([nombre_idioma]): Retorna un JSON con las traducciones de un plugin.
- M.language.addTranslation([nombre_idioma]): Permite establecer un idioma concretro al mapa, se tiene que declarar antes que M.map.
- M.language.getLang(): Devuelve el idioma actual.
- M.language.setLang(): Modifica el idioma.
// Ejemplo ampliando idiomas, en este caso añadiendo el Catalán:
M.language.addTranslation('ca', {
"scale": {
"title": "Escala",
"scale": "Escala",
"level": "Nivel"
},
"attributions": {
"exception": {
"impl": "La implementació no pot crear controls de Attribution.",
"mode": "L'opció 'mode' no s'ha establert correctament. Consell: {mode: 1 | 2 | 3}.",
"type": "L'opció 'type' no ha estat establerta. Quan l'opció 'url' és usada el plugin necessita l'opció 'type'. Valors = geojson | kml | topojson.",
"layer_name": "L'opció 'layerName' no s'ha establert. Quan l'opció 'url' s'utilitza el connector necessita l'opció 'layerName'."
},
"attribution": "atribució",
"tooltip": "Reconeixements"
}
});
M.language.setLang('ca');
const mapa = new M.map({
container: 'map',
bbox: [-1715858.410945638, 4318997.846225591, 632287.0979749766, 4797187.895177655],
controls: ['scale*true'],
});
Los lenguajes predefinidos en el core son "es" para los textos en español, activo por defecto, y "en" para los textos en inglés.
Un lenguaje no es más que un objeto javascript donde se organizan los textos. Por ejemplo:
// Creo el lenguaje Francés, con el método .addTranslation,
// inicialmente vacío de palabras
M.language.addTranslation('fr',{});
// Añadimos el equivalente a 'Información' para los dialogos en francés
let frances = M.language.getTranslation('fr');
frances.dialog = {'info' : 'L\'information'};
// Ahora ya puedo obtener el texto "Información" en cualquiera de los tres idiomas
console.log(M.language.getValue('dialog','es').info); // Información
console.log(M.language.getValue('dialog','en').info); // Information
console.log(M.language.getValue('dialog','fr').info); // L'information
La clave está en que podemos establecer un lenguaje por defecto, de modo que los textos de los componentes (plugins, controles y mapa, etc.) no necesitan conocer ni explicitar qué lenguaje está activo:
M.language.setLang("fr");
M.language.getLang(); //'fr'
console.log(M.language.getValue('dialog').info); // L'information
M.language.setLang("es");
M.language.getLang(); //'es'
console.log(M.language.getValue('dialog').info); // Información
A efectos de aplicarlo en los componentes, ya sean controles o plugins, puede hacerse desde el método que se encarga de compilar la plantilla o template asociada, en la fachada del control/plugin, ya que es ahí donde se le pueden pasar como variables los textos de la interfaz:
// facade/plugin.js
createView(map) {
return compileTemplate(scaleTemplate, {
vars: {
title: M.language.getValue('scale').title,
scale: M.language.getValue('scale').scale,
},
});
}
<!-- templates/plugin.html -->
<div class="m-control m-scale-container" title="{{title}}">
<div class="m-unit g-cartografia-escala3">{{scale}} = 1 : </div>
<div class="m-scale" id="m-scale-span"></div>
</div>
1.INICIO
1.1. Componentes de la API-CNIG
1.2. Documentación y Puntos de acceso
1.3. Primeros pasos
1.4. Diagrama API CNIG
2.1. Capas
■ 2.1.1. Fuentes
• 2.1.1.1. Capas vectoriales
+ Vector
+ WFS
+ GeoJSON
+ KML
+ MVT
+ OGCAPIFeatures
+ MBTilesVector
+ GenericVector
• 2.1.1.2. Capas ráster
+ WMS
+ WMTS
+ TMS
+ XYZ
+ OSM
+ MBTiles
+ GenericRaster
• 2.1.1.3. Capas rápidas
■ 2.1.2. Simbolización
• 2.1.2.1. Genérica
+ Puntos
+ Líneas
+ Polígonos
• 2.1.2.2. Básica
+ Puntos
+ Líneas
+ Polígonos
• 2.1.2.3. Avanzada
+ Coropletas
+ Proporcional
+ Categorías
+ Estadísticos
+ Mapas de Calor
+ Cluster
+ Línea de flujo
+ Composición
2.4. Paneles
■ Creación de panel desde cero sin controles
■ Tutorial Panel de un único control
5. API REST
5.1. Parametrización API-REST
5.2. Base de Datos API-REST
5.3. API REST Actions
5.4. Servicio de correos electrónicos
5.5. Capas rápidas
6. PARAMETRIZACIÓN VISUALIZADORES
9. GUÍA DE DESARROLLO
> Guía de desarrollo de plugins
> Guía de desarrollo de visualizadores con React
> Guía de desarrollo de componentes
> Guía para el desarrollo de API-CNIG
> Compilación proyecto API-CNIG