diff --git a/js/LayersConfig.js b/js/LayersConfig.js index 8d913d2..73edfab 100644 --- a/js/LayersConfig.js +++ b/js/LayersConfig.js @@ -9,6 +9,7 @@ BR.LayersConfig = L.Class.extend({ this._addLeafletProvidersLayers(); this._customizeLayers(); this.loadDefaultLayers(); + this._addLanguageDefaultLayer(); }, loadDefaultLayers: function() { @@ -80,6 +81,34 @@ BR.LayersConfig = L.Class.extend({ BR.layerIndex['1017'].geometry = BR.confLayers.osmapaPl; }, + _addLanguageDefaultLayer: function() { + // language code -> layer id + var languageLayersMap = {}; + var i; + + for (i = 0; i < BR.confLayers.languageDefaultLayers.length; i++) { + var id = BR.confLayers.languageDefaultLayers[i]; + var layer = BR.layerIndex[id]; + if (layer) { + var layerLanguage = layer.properties['language_code']; + if (layerLanguage) { + languageLayersMap[layerLanguage] = id; + } + } + } + + // iterate language code hierarchy, e.g ["de-DE", "de", "en"] (includes `i18next.options.fallbackLng`) + for (i = 0; i < i18next.languages.length; i++) { + var language = i18next.languages[i]; + var layerId = languageLayersMap[language]; + + if (layerId) { + this.defaultBaseLayers.unshift(layerId); + break; + } + } + }, + isDefaultLayer: function(id, overlay) { var result = false; if (overlay) { diff --git a/layers/config/config.js b/layers/config/config.js index 8ee46f8..2a9df28 100644 --- a/layers/config/config.js +++ b/layers/config/config.js @@ -2,12 +2,18 @@ BR.confLayers = {}; BR.confLayers.defaultBaseLayers = [ 'standard', - 'osm-mapnik-german_style', 'OpenTopoMap', 'Stamen.Terrain', 'Esri.WorldImagery' ]; +// worldwide monolingual layers to add as default when browser language matches +BR.confLayers.languageDefaultLayers = [ + 'osm-mapnik-german_style', + 'osmfr', + '1021' // sputnik.ru +]; + BR.confLayers.defaultOverlays = [ 'HikeBike.HillShading', 'Waymarked_Trails-Cycling',