Skip to content

2.6. Internacionalización

yaizavalidador edited this page Jun 27, 2023 · 1 revision

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. MAPA
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.1.3. Filtros

    2.3. Plugins

2.4. Paneles

  ■ Creación de panel desde cero sin controles

  ■ Tutorial Panel de un único control

  ■ Tutorial Panel de un único control con más de un botón

  ■ Tutorial Panel con más de un control

2.5. Eventos

  ■ Gestión de eventos
  ■ Gestión de eventos en controles personalizados

    2.6. Internacionalización

    2.7. Configuración

    2.8. Acceso librerías base

3. UTILIDADES

4. PROXY

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

7. SOLUCIÓN DE PROBLEMAS

8. PROCESO DE VERSIONADO

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

Clone this wiki locally