From 4acb7117aaef7baf4db9f24ea8746014c022d8db Mon Sep 17 00:00:00 2001 From: stefano bovio Date: Wed, 31 May 2023 11:25:07 +0200 Subject: [PATCH] Fix #9193 Add a cache options checks/info also for default WMS tile grid (#9195) --- .../fragments/settings/WMSCacheOptions.jsx | 297 +++++++++++---- .../__tests__/WMSCacheOptions-test.jsx | 337 +++++++++++++++++- web/client/jsapi/__tests__/MapStore2-test.js | 2 +- web/client/translations/data.de-DE.json | 6 +- web/client/translations/data.en-US.json | 6 +- web/client/translations/data.es-ES.json | 6 +- web/client/translations/data.fr-FR.json | 6 +- web/client/translations/data.it-IT.json | 6 +- 8 files changed, 572 insertions(+), 94 deletions(-) diff --git a/web/client/components/TOC/fragments/settings/WMSCacheOptions.jsx b/web/client/components/TOC/fragments/settings/WMSCacheOptions.jsx index c36393ad91..1bc0e5f518 100644 --- a/web/client/components/TOC/fragments/settings/WMSCacheOptions.jsx +++ b/web/client/components/TOC/fragments/settings/WMSCacheOptions.jsx @@ -20,6 +20,174 @@ import { getTileGridFromLayerOptions } from '../../../../utils/WMSUtils'; const Button = tooltip(ButtonRB); +const infoText = { + custom: ({ + tileGrids, + supportFormatCache, + selectedTileGridId, + projection, + supportStyleCache, + hasCustomParams, + tileGridCacheSupport, + layer + }) => { + return ( + <> +

+ {(selectedTileGridId && supportFormatCache && supportStyleCache) && + } +

+ + + + + + + + + + + {(tileGrids || []).map((tileGrid) => { + const size = (tileGrid.tileSize || tileGrid.tileSizes[0] || [])[0]; + const markClassName = tileGrid.id === selectedTileGridId && supportFormatCache && supportFormatCache + ? 'bg-success' : ''; + return ( + + + + + + ); + })} + +
{tileGrid.id}{tileGrid.crs}{size}
+ {tileGridCacheSupport?.formats && <> + + + + {tileGridCacheSupport.formats.map((format) => { + return ( + + + + ); + })} + +
{format}
+ } +
+ {!selectedTileGridId + ? + + + : (!supportFormatCache || !supportStyleCache) + ? ( + + {!supportFormatCache && } + {!supportStyleCache && } + + ) + : null} + {hasCustomParams && + + } +
+ + ); + }, + standard: ({ + tileGrids, + tileGridCacheSupport, + layer, + supportFormatCache, + projection, + supportStyleCache, + hasCustomParams + }) => { + const normalizedProjection = normalizeSRS(projection); + const tileGridsMatchProjection = tileGrids.filter((tileGrid) => normalizeSRS(tileGrid.crs) === normalizedProjection); + const supportProjection = tileGridsMatchProjection.length > 0; + const tileGridsMatchTileSize = tileGridsMatchProjection.filter((tileGrid) => (tileGrid.tileSize || tileGrid.tileSizes[0] || [])[0] === (layer.tileSize || 256)); + const supportTileSize = tileGridsMatchTileSize.length > 0; + return ( + <> +

+ +

+ + + + + + + + + + + + + + + +
{' '}
{' '}
{' '}
{' '}
+ {tileGrids && <> + + + + + + + + + + + {tileGrids.map((tileGrid) => { + const size = (tileGrid.tileSize || tileGrid.tileSizes[0] || [])[0]; + const projectionClass = supportProjection && !supportTileSize && normalizeSRS(tileGrid.crs) === normalizedProjection + ? 'bg-success' : ''; + const tileSizeClassName = size === (layer.tileSize || 256) && normalizeSRS(tileGrid.crs) === normalizedProjection + ? 'bg-success' : ''; + return ( + + + + + + ); + })} + +
{tileGrid.id}{tileGrid.crs}{size}
+ } + {tileGridCacheSupport?.formats && <> + + + + {tileGridCacheSupport.formats.map((format) => { + return ( + + + + ); + })} + +
{format}
+ } +
+ {hasCustomParams && + + } +
+ + ); + } +}; + /** * Allow to set the cache options for a WMS layer * @memberof components.TOC @@ -38,19 +206,43 @@ function WMSCacheOptions({ const [tileGridLoading, setTileGridLoading] = useState(false); const [tileGridsResponseMsgId, setTileGridsResponseMsgId] = useState(''); const [tileGridsResponseMsgStyle, setTileGridsResponseMsgStyle] = useState(''); + const [standardTileGridInfo, setStandardTileGridInfo] = useState({}); - const selectedTileGridId = layer.tileGridStrategy === 'custom' && getTileGridFromLayerOptions({ + const selectedTileGridId = getTileGridFromLayerOptions({ ...layer, + ...(layer.tileGridStrategy !== 'custom' && standardTileGridInfo), projection })?.id; - const supportFormatCache = !layer.format || !!((layer?.tileGridCacheSupport?.formats || []).includes(layer.format)); - const supportStyleCache = !layer.style || !!((layer?.tileGridCacheSupport?.styles || []).includes(layer.style)); + const cacheSupport = (layer.tileGridCacheSupport || standardTileGridInfo.tileGridCacheSupport); + const supportFormatCache = !layer.format || !!((cacheSupport?.formats || []).includes(layer.format)); + const supportStyleCache = !layer.style || !!((cacheSupport?.styles || []).includes(layer.style)); const hasCustomParams = !!layer.localizedLayerStyles; const tiled = layer && layer.tiled !== undefined ? layer.tiled : true; + const showInfo = ((layer.tileGrids || standardTileGridInfo.tileGrids || [])?.length > 0 && tiled && !layer.singleTile); + const requestUrl = generateGeoServerWMTSUrl(layer); + function handleOnChange(value, isStandard) { + if (!isStandard) { + onChange(value); + } + if (value?.tileGrids !== undefined) { + const tileGrids = value.tileGrids.filter(tileGrid => { + return tileGrid.origin + && tileGrid.tileSize && tileGrid.tileSize[0] === tileGrid.tileSize[1]; + }); + setStandardTileGridInfo({ + ...value, + tileGrids + }); + if (tileGrids.length === 0 && isStandard) { + setTileGridsResponseMsgId('layerProperties.noConfiguredGridSets'); + } + } + } + const onTileMatrixSetsFetch = (options) => { setTileGridLoading(true); setTileGridsResponseMsgId(''); @@ -72,13 +264,15 @@ function WMSCacheOptions({ .catch(() => { setTileGridsResponseMsgId('layerProperties.notPossibleToConnectToWMTSService'); setTileGridsResponseMsgStyle('danger'); - return { }; + return {}; }) // delay the loading phase the show the loader and give a feedback to user // in particular when the request is cached or too fast .finally(() => setTimeout(() => setTileGridLoading(false), 500)); }; + const InfoText = infoText[layer.tileGridStrategy] || infoText.standard; + return (
@@ -90,89 +284,38 @@ function WMSCacheOptions({ {requestUrl && !disableTileGrids &&
- {(layer.tileGridStrategy === 'custom' && layer.tileGrids && tiled && !layer.singleTile) && } + title={} popoverStyle={{ maxWidth: 'none' }} - text={ - <> - - - - - - - - - - {layer?.tileGrids?.map((tileGrid) => { - const size = (tileGrid.tileSize || tileGrid.tileSizes[0] || [])[0]; - const markClassName = supportFormatCache && supportFormatCache ? 'bg-success' : ''; - return ( - - {tileGrid.id === selectedTileGridId - ? <> - - - - - : !selectedTileGridId - ? <> - - - - - : <> - - - - } - - ); - })} - -
{tileGrid.id}{tileGrid.crs}{size}{tileGrid.id}{normalizeSRS(tileGrid.crs) === normalizeSRS(projection) ? {tileGrid.crs} : tileGrid.crs}{size}{tileGrid.id}{tileGrid.crs}{size}
-
- {(selectedTileGridId && supportFormatCache && supportStyleCache) && - - } - {!selectedTileGridId - ? - - - : (!supportFormatCache || !supportStyleCache) - ? ( - - {!supportFormatCache && } - {!supportStyleCache && } - - ) - : null} - {hasCustomParams && - - } -
- - } + text={} />} - {layer.tileGridStrategy === 'custom' && } + }
{!layer.singleTile && tiled && tileGridsResponseMsgId && - + }
); diff --git a/web/client/components/TOC/fragments/settings/__tests__/WMSCacheOptions-test.jsx b/web/client/components/TOC/fragments/settings/__tests__/WMSCacheOptions-test.jsx index 1068b05674..a8754180ee 100644 --- a/web/client/components/TOC/fragments/settings/__tests__/WMSCacheOptions-test.jsx +++ b/web/client/components/TOC/fragments/settings/__tests__/WMSCacheOptions-test.jsx @@ -14,6 +14,7 @@ import WMSCacheOptions from '../WMSCacheOptions'; import MockAdapter from 'axios-mock-adapter'; import axios from '../../../../../libs/ajax'; import WMTSAPI from '../../../../../api/WMTS'; +import { waitFor } from '@testing-library/react'; let mockAxios; describe('WMSCacheOptions', () => { @@ -51,8 +52,9 @@ describe('WMSCacheOptions', () => { const inputs = document.querySelectorAll('input[type="checkbox"]'); expect(inputs.length).toBe(1); const buttons = document.querySelectorAll('button'); - expect(buttons.length).toBe(1); + expect(buttons.length).toBe(2); expect([...buttons].map(button => button.querySelector('.glyphicon').getAttribute('class'))).toEqual([ + 'glyphicon glyphicon-refresh', 'glyphicon glyphicon-grid-regular' ]); }); @@ -104,8 +106,8 @@ describe('WMSCacheOptions', () => { 'EPSG:32122x2\tEPSG:32122\t512', 'EPSG:900913\tEPSG:900913\t256' ]); - const alert = document.querySelector('.alert'); - expect(alert.innerText).toBe('layerProperties.tileGridInUse'); + const paragraph = document.querySelector('p'); + expect(paragraph.innerText).toBe('layerProperties.tileGridInUse'); }); it('should display the tile grid buttons if geoserver wms and tile grid strategy is custom (no match with map projection)', () => { ReactDOM.render( { const inputs = document.querySelectorAll('input[type="checkbox"]'); expect(inputs.length).toBe(1); const buttons = document.querySelectorAll('button'); - expect(buttons.length).toBe(1); + expect(buttons.length).toBe(2); expect([...buttons].map(button => button.querySelector('.glyphicon').getAttribute('class'))).toEqual([ + 'glyphicon glyphicon-refresh', 'glyphicon glyphicon-grid-regular' ]); - Simulate.click(buttons[0]); + Simulate.click(buttons[1]); }); it('should request tile grids (warning no available tile grids)', (done) => { @@ -422,12 +425,13 @@ describe('WMSCacheOptions', () => { const inputs = document.querySelectorAll('input[type="checkbox"]'); expect(inputs.length).toBe(1); const buttons = document.querySelectorAll('button'); - expect(buttons.length).toBe(1); + expect(buttons.length).toBe(2); expect([...buttons].map(button => button.querySelector('.glyphicon').getAttribute('class'))).toEqual([ + 'glyphicon glyphicon-refresh', 'glyphicon glyphicon-grid-regular' ]); - Simulate.click(buttons[0]); + Simulate.click(buttons[1]); }); it('should request tile grids (error)', (done) => { @@ -457,12 +461,13 @@ describe('WMSCacheOptions', () => { const inputs = document.querySelectorAll('input[type="checkbox"]'); expect(inputs.length).toBe(1); const buttons = document.querySelectorAll('button'); - expect(buttons.length).toBe(1); + expect(buttons.length).toBe(2); expect([...buttons].map(button => button.querySelector('.glyphicon').getAttribute('class'))).toEqual([ + 'glyphicon glyphicon-refresh', 'glyphicon glyphicon-grid-regular' ]); - Simulate.click(buttons[0]); + Simulate.click(buttons[1]); }); it('should refresh the tile grids and trigger the onChange', (done) => { mockAxios.onGet().reply(200, ` @@ -742,8 +747,7 @@ describe('WMSCacheOptions', () => { 'EPSG:900913\tEPSG:900913\t256' ]); const alert = [...document.querySelectorAll('.alert')]; - expect(alert[0].innerText).toBe('layerProperties.tileGridInUse'); - expect(alert[1].innerText).toBe('layerProperties.customParamsCacheWarning'); + expect(alert[0].innerText).toBe('layerProperties.customParamsCacheWarning'); }); it('should allow to click the grid button to switch to normal grid', (done) => { ReactDOM.render( { Simulate.click(buttons[1]); }); + it('should check tile grids with standard strategy (success)', (done) => { + mockAxios.onGet().reply(200, ` + + + + USA Population + This is some census data on the states. + + -124.73142200000001 24.955967 + -66.969849 49.371735 + + states + + image/png + image/jpeg + text/plain + application/vnd.ogc.gml + text/xml + application/vnd.ogc.gml/3.1.1 + text/xml + text/html + application/json + + EPSG:32122 + + + EPSG:4326 + + + EPSG:900913 + + + + EPSG:32122 + urn:ogc:def:crs:EPSG::32122 + + EPSG:32122:0 + 2557541.55271451 + 403035.4105968763 414783.0 + 512 + 512 + 1 + 1 + + + EPSG:32122:1 + 1278770.776357255 + 403035.4105968763 414783.0 + 512 + 512 + 2 + 2 + + + EPSG:32122:2 + 639385.3881786275 + 403035.4105968763 323121.0 + 512 + 512 + 4 + 3 + + + + EPSG:4326 + urn:ogc:def:crs:EPSG::4326 + + EPSG:4326:0 + 2.795411320143589E8 + 90.0 -180.0 + 256 + 256 + 2 + 1 + + + EPSG:4326:1 + 1.3977056600717944E8 + 90.0 -180.0 + 256 + 256 + 4 + 2 + + + EPSG:4326:2 + 6.988528300358972E7 + 90.0 -180.0 + 256 + 256 + 8 + 4 + + + + EPSG:900913 + urn:ogc:def:crs:EPSG::900913 + + EPSG:900913:0 + 5.590822639508929E8 + -2.003750834E7 2.0037508E7 + 256 + 256 + 1 + 1 + + + EPSG:900913:1 + 2.7954113197544646E8 + -2.003750834E7 2.0037508E7 + 256 + 256 + 2 + 2 + + + EPSG:900913:2 + 1.3977056598772323E8 + -2.003750834E7 2.0037508E7 + 256 + 256 + 4 + 4 + + + + + + `); + ReactDOM.render(, document.getElementById('container')); + expect(document.querySelector('.ms-wms-cache-options')).toBeTruthy(); + const inputs = document.querySelectorAll('input[type="checkbox"]'); + expect(inputs.length).toBe(1); + const buttons = document.querySelectorAll('button'); + expect(buttons.length).toBe(2); + expect([...buttons].map(button => button.querySelector('.glyphicon').getAttribute('class'))).toEqual([ + 'glyphicon glyphicon-refresh', + 'glyphicon glyphicon-grid-regular' + ]); + + Simulate.click(buttons[0]); + + waitFor(() => expect(document.querySelector('.glyphicon-info-sign')).toBeTruthy()) + .then(() => { + + const info = document.querySelector('.glyphicon-info-sign'); + expect(info).toBeTruthy(); + expect(info.getAttribute('class')).toBe('text-success glyphicon glyphicon-info-sign'); + + const table = document.querySelector('table'); + expect(table).toBeFalsy(); + + Simulate.mouseOver(info); + + const tables = document.querySelectorAll('table'); + expect(tables.length).toBe(3); + + expect([...tables[0].querySelectorAll('tbody > tr')].map((row) => [row.querySelector('.glyphicon').getAttribute('class'), row.innerText])).toEqual([ + [ 'text-success glyphicon glyphicon-ok-sign', 'layerProperties.projection' ], + [ 'text-success glyphicon glyphicon-ok-sign', 'layerProperties.tileSize' ], + [ 'text-success glyphicon glyphicon-ok-sign', 'layerProperties.format.title' ], + [ 'text-success glyphicon glyphicon-ok-sign', 'layerProperties.style' ] + ]); + + expect([...tables[1].querySelectorAll('tbody > tr')].map((row) => [...row.querySelectorAll('td')].map(data => [data.getAttribute('class') || '', data.innerText]))).toEqual([ + [ [ '', 'EPSG:4326' ], [ ' ', 'EPSG:4326' ], [ '', '256' ] ], + [ [ '', 'EPSG:900913' ], [ ' bg-success', 'EPSG:900913' ], [ 'bg-success', '256' ] ] ]); + + expect([...tables[2].querySelectorAll('tbody > tr')].map((row) => [row.getAttribute('class') || '', row.innerText])).toEqual([ + [ 'bg-success', 'image/png' ], + [ '', 'image/jpeg' ] + ]); + + done(); + }) + .catch(done); + + }); + it('should check tile grids with standard strategy (success/mismatch)', (done) => { + mockAxios.onGet().reply(200, ` + + + + USA Population + This is some census data on the states. + + -124.73142200000001 24.955967 + -66.969849 49.371735 + + states + + image/png + image/jpeg + text/plain + application/vnd.ogc.gml + text/xml + application/vnd.ogc.gml/3.1.1 + text/xml + text/html + application/json + + EPSG:4326 + + + + EPSG:4326 + urn:ogc:def:crs:EPSG::4326 + + EPSG:4326:0 + 2.795411320143589E8 + 90.0 -180.0 + 256 + 256 + 2 + 1 + + + EPSG:4326:1 + 1.3977056600717944E8 + 90.0 -180.0 + 256 + 256 + 4 + 2 + + + EPSG:4326:2 + 6.988528300358972E7 + 90.0 -180.0 + 256 + 256 + 8 + 4 + + + + + + `); + ReactDOM.render(, document.getElementById('container')); + expect(document.querySelector('.ms-wms-cache-options')).toBeTruthy(); + const inputs = document.querySelectorAll('input[type="checkbox"]'); + expect(inputs.length).toBe(1); + const buttons = document.querySelectorAll('button'); + expect(buttons.length).toBe(2); + expect([...buttons].map(button => button.querySelector('.glyphicon').getAttribute('class'))).toEqual([ + 'glyphicon glyphicon-refresh', + 'glyphicon glyphicon-grid-regular' + ]); + + Simulate.click(buttons[0]); + + waitFor(() => expect(document.querySelector('.glyphicon-info-sign')).toBeTruthy()) + .then(() => { + + const info = document.querySelector('.glyphicon-info-sign'); + expect(info).toBeTruthy(); + expect(info.getAttribute('class')).toBe('text-danger glyphicon glyphicon-info-sign'); + + const table = document.querySelector('table'); + expect(table).toBeFalsy(); + + Simulate.mouseOver(info); + + const tables = document.querySelectorAll('table'); + expect(tables.length).toBe(3); + + expect([...tables[0].querySelectorAll('tbody > tr')].map((row) => [row.querySelector('.glyphicon').getAttribute('class'), row.innerText])).toEqual([ + [ 'text-success glyphicon glyphicon-ok-sign', 'layerProperties.projection' ], + [ 'text-danger glyphicon glyphicon-remove-sign', 'layerProperties.tileSize' ], + [ 'text-danger glyphicon glyphicon-remove-sign', 'layerProperties.format.title' ], + [ 'text-success glyphicon glyphicon-ok-sign', 'layerProperties.style' ] + ]); + + expect([...tables[1].querySelectorAll('tbody > tr')].map((row) => [...row.querySelectorAll('td')].map(data => [data.getAttribute('class') || '', data.innerText]))).toEqual([ + [ [ '', 'EPSG:4326' ], [ 'bg-success ', 'EPSG:4326' ], [ '', '256' ] ] + ]); + + expect([...tables[2].querySelectorAll('tbody > tr')].map((row) => [row.getAttribute('class') || '', row.innerText])).toEqual([ + [ '', 'image/png' ], + [ '', 'image/jpeg' ] + ]); + + done(); + }) + .catch(done); + + }); }); diff --git a/web/client/jsapi/__tests__/MapStore2-test.js b/web/client/jsapi/__tests__/MapStore2-test.js index 7e03cfb404..fa7a1f3450 100644 --- a/web/client/jsapi/__tests__/MapStore2-test.js +++ b/web/client/jsapi/__tests__/MapStore2-test.js @@ -98,7 +98,7 @@ describe('MapStore2 API', () => { MapStore2.create('container', { ...testConfig }); - MapStore2.onAction(MAP_CONFIG_LOADED, () => done()); + MapStore2.onAction(LOCAL_CONFIG_LOADED, () => done()); }); it('offAction', (done) => { MapStore2.create('container', { diff --git a/web/client/translations/data.de-DE.json b/web/client/translations/data.de-DE.json index 565ea19731..313002404d 100644 --- a/web/client/translations/data.de-DE.json +++ b/web/client/translations/data.de-DE.json @@ -130,9 +130,13 @@ "noTileGridMatchesConfiguration": "Es gibt kein Kachelraster, das mit der aktuellen Kartenprojektion und der ausgewählten Kachelgröße übereinstimmt. In der Tabelle oben werden die verfügbaren Kachelraster hervorgehoben, die mit der aktuellen Kartenprojektion kompatibel sind. Sie können auf die Schaltfläche Aktualisieren klicken, um die Liste der verfügbaren zu aktualisieren Fliesengitter", "noConfiguredGridSets": "Es ist nicht möglich, benutzerdefinierte Kachelraster abzurufen. Diese Ebene verfügt über keinen Rastersatz, der mit den verfügbaren Projektionen kompatibel ist. Bitte überprüfen Sie die Konfigurationsserverseite und versuchen Sie es erneut", "notPossibleToConnectToWMTSService": "Es war nicht möglich, die Kachelraster vom Server abzurufen. Die an {requestUrl} gesendete Anfrage löst einen Fehler aus.", - "notSupportedSelectedFormatCache": "Das ausgewählte Format wird vom Cache nicht unterstützt. Unterstützte Formate: {formats}", + "notSupportedSelectedFormatCache": "Das ausgewählte Format wird vom Cache nicht unterstützt", "notSupportedSelectedStyleCache": "Der ausgewählte Stil wird vom Cache nicht unterstützt", "customParamsCacheWarning": "Für diese Ebene ist der lokalisierte Stil aktiviert. Bitte überprüfen Sie die Konfigurationsserverseite und stellen Sie sicher, dass sie den benutzerdefinierten ENV-Parameter unterstützt", + "supportedFormats": "Unterstützte Formate", + "checkAvailableTileGridsInfo": "Überprüfen Sie die verfügbaren Kachelgitterinformationen", + "tileGridInfoChecksTitle": "Informationen zu Kachelgittern", + "tileGridInfoChecks": "Die folgende Checkliste zeigt einige mögliche Kompatibilitätsprobleme zwischen dem aktuellen Gridset und den Remote-Informationen. Es ist immer noch möglich, dass das Tile Grid den Cache nicht erreicht, selbst wenn alle aufgeführten Prüfungen erfolgreich sind", "visibilityLimits": { "title": "Sichtbarkeitsgrenzen", "serverValuesUpdateUndefined": "Der Server hat keine Skalierungssichtbarkeitsbeschränkungen für diese Ebene angegeben", diff --git a/web/client/translations/data.en-US.json b/web/client/translations/data.en-US.json index e3e4715fa0..b963d09e49 100644 --- a/web/client/translations/data.en-US.json +++ b/web/client/translations/data.en-US.json @@ -130,9 +130,13 @@ "noTileGridMatchesConfiguration": "There is not a tile grid that matches the current map projection and the tile size selected. The table above highlights the tile grids available compatible with the current map projection. You can click the refresh button to update the list of available tile grids", "noConfiguredGridSets": "It is not possible to fetch custom tile grids. This layer do not have any grid set compatible with the available projections. Please review the configuration server side and retry", "notPossibleToConnectToWMTSService": "It was not possible to fetch the tile grids from the server. The request sent to {requestUrl} is throwing an error", - "notSupportedSelectedFormatCache": "The selected format is not supported by the cache. Supported formats: {formats}", + "notSupportedSelectedFormatCache": "The selected format is not supported by the cache.", "notSupportedSelectedStyleCache": "The selected style is not supported by the cache", "customParamsCacheWarning": "This layer has localized style enabled. Please verify the configuration server side and ensure it supports the custom ENV parameter", + "supportedFormats": "Supported formats", + "checkAvailableTileGridsInfo": "Check available tile grids information", + "tileGridInfoChecksTitle": "Tile grids information", + "tileGridInfoChecks": "The following checklist shows some possible compatibility issues between the current gridset and the remote information. It is still possible that the tile grid does not hit the cache even if all the checks listed are successful", "visibilityLimits": { "title": "Visibility limits", "serverValuesUpdateUndefined": "The server did not provided scale visibility limits for this layer", diff --git a/web/client/translations/data.es-ES.json b/web/client/translations/data.es-ES.json index b11ed30697..5273dae4a1 100644 --- a/web/client/translations/data.es-ES.json +++ b/web/client/translations/data.es-ES.json @@ -127,9 +127,13 @@ "noTileGridMatchesConfiguration": "No hay una cuadrícula de mosaicos que coincida con la proyección de mapa actual y el tamaño de mosaico seleccionado. La tabla anterior destaca las cuadrículas de mosaicos disponibles compatibles con la proyección de mapa actual. Puede hacer clic en el botón Actualizar para actualizar la lista de disponibles rejillas de azulejos", "noConfiguredGridSets": "No es posible obtener cuadrículas de mosaico personalizadas. Esta capa no tiene ningún conjunto de cuadrícula compatible con las proyecciones disponibles. Revise el lado del servidor de configuración y vuelva a intentarlo", "notPossibleToConnectToWMTSService": "No fue posible obtener las cuadrículas de mosaicos del servidor. La solicitud enviada a {requestUrl} arroja un error", - "notSupportedSelectedFormatCache": "El formato seleccionado no es compatible con el caché. Formatos admitidos: {formatos}", + "notSupportedSelectedFormatCache": "El formato seleccionado no es compatible con el caché.", "notSupportedSelectedStyleCache": "El estilo seleccionado no es compatible con el caché", "customParamsCacheWarning": "Esta capa tiene activado el estilo localizado. Verifique el lado del servidor de configuración y asegúrese de que sea compatible con el parámetro ENV personalizado", + "supportedFormats": "Formatos compatibles", + "checkAvailableTileGridsInfo": "Verificar la información de cuadrículas de mosaicos disponibles", + "tileGridInfoChecksTitle": "Información de cuadrículas de mosaicos", + "tileGridInfoChecks": "La siguiente lista de verificación muestra algunos posibles problemas de compatibilidad entre el conjunto de cuadrículas actual y la información remota. Todavía es posible que la cuadrícula de mosaicos no llegue al caché incluso si todas las comprobaciones enumeradas son exitosas", "visibilityLimits": { "title": "Límites de visibilidad", "serverValuesUpdateUndefined": "El servidor no proporcionó límites de visibilidad de escala para esta capa", diff --git a/web/client/translations/data.fr-FR.json b/web/client/translations/data.fr-FR.json index 5a55fdc394..70c6357096 100644 --- a/web/client/translations/data.fr-FR.json +++ b/web/client/translations/data.fr-FR.json @@ -130,9 +130,13 @@ "noTileGridMatchesConfiguration": "Aucune grille de tuiles ne correspond à la projection cartographique actuelle et à la taille de tuile sélectionnée. Le tableau ci-dessus met en évidence les grilles de tuiles disponibles compatibles avec la projection cartographique actuelle. Vous pouvez cliquer sur le bouton d'actualisation pour mettre à jour la liste des grilles de tuiles", "noConfiguredGridSets": "Il n'est pas possible de récupérer des grilles de tuiles personnalisées. Cette couche n'a pas de grilles compatibles avec les projections disponibles. Veuillez revoir la configuration côté serveur et réessayer", "notPossibleToConnectToWMTSService": "Il n'a pas été possible de récupérer les grilles de tuiles depuis le serveur. La requête envoyée à {requestUrl} génère une erreur", - "notSupportedSelectedFormatCache": "Le format sélectionné n'est pas pris en charge par le cache. Formats pris en charge : {formats}", + "notSupportedSelectedFormatCache": "Le format sélectionné n'est pas pris en charge par le cache.", "notSupportedSelectedStyleCache": "Le style sélectionné n'est pas supporté par le cache", "customParamsCacheWarning": "Ce calque a un style localisé activé. Veuillez vérifier le côté serveur de configuration et vous assurer qu'il prend en charge le paramètre ENV personnalisé", + "supportedFormats": "Formats pris en charge", + "checkAvailableTileGridsInfo": "Vérifier les informations disponibles sur les grilles de tuiles", + "tileGridInfoChecksTitle": "Informations sur les grilles de tuiles", + "tileGridInfoChecks": "La liste de contrôle suivante montre quelques problèmes de compatibilité possibles entre le jeu de grille actuel et les informations distantes. Il est toujours possible que la grille de tuiles n'atteigne pas le cache même si toutes les vérifications répertoriées sont réussies", "visibilityLimits": { "title": "Limites de visibilité", "serverValuesUpdateUndefined": "Le serveur n'a pas fourni de limites de visibilité d'échelle pour cette couche", diff --git a/web/client/translations/data.it-IT.json b/web/client/translations/data.it-IT.json index 66bf997f0f..e513f3b7c5 100644 --- a/web/client/translations/data.it-IT.json +++ b/web/client/translations/data.it-IT.json @@ -130,9 +130,13 @@ "noTileGridMatchesConfiguration": "Non esiste una tile grid che corrisponda alla proiezione della mappa corrente e alla dimensione di tile selezionata. La tabella sopra evidenzia le tile grids disponibili compatibili con la proiezione della mappa corrente. Puoi fare clic sul pulsante Aggiorna per aggiornare l'elenco delle tile grids", "noConfiguredGridSets": "Non è possibile recuperare tile grids personalizzate. Questo layer non ha alcun tile grid compatibile con le proiezioni disponibili. Per favore controlla la configurazione lato server e riprova", "notPossibleToConnectToWMTSService": "Non è stato possibile recuperare le tile grids dal server. La richiesta inviata a {requestUrl} sta generando un errore", - "notSupportedSelectedFormatCache": "Il formato selezionato non è supportato dalla cache. Formati supportati: {formats}", + "notSupportedSelectedFormatCache": "Il formato selezionato non è supportato dalla cache.", "notSupportedSelectedStyleCache": "Lo stile selezionato non è supportato dalla cache", "customParamsCacheWarning": "Questo livello ha lo stile localizzato abilitato. Verificare la configurazione lato server ed assicurarsi che supporti il parametro ENV personalizzato", + "supportedFormats": "Formati supportati", + "checkAvailableTileGridsInfo": "Controlla le informazioni sulle tile grids disponibili", + "tileGridInfoChecksTitle": "Informationi sulle tile grids", + "tileGridInfoChecks": "La seguente lista di controllo mostra alcuni possibili problemi di compatibilità tra il gridset corrente e le informazioni remote. È ancora possibile che il tile grid non raggiunga la cache anche se tutti i controlli elencati hanno esito positivo", "visibilityLimits": { "title": "Limiti di visibilità", "serverValuesUpdateUndefined": "Il server non ha fornito limiti di visibilità di scala per questo livello",