├── .babelrc.json ├── .eslintrc.js ├── .github └── ISSUE_TEMPLATE │ └── bug_report.md ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── icons └── README.md ├── index.html ├── js ├── IdentifyExtensions.js ├── app.jsx └── appConfig.js ├── package.json ├── static ├── api_examples.js ├── assets │ ├── css │ │ ├── colorschemes.css │ │ └── qwc2.css │ ├── help.html │ ├── img │ │ ├── app_icon.png │ │ ├── app_icon_114.png │ │ ├── app_icon_144.png │ │ ├── app_icon_72.png │ │ ├── favicon.ico │ │ ├── logo-mobile.svg │ │ ├── logo.svg │ │ ├── mapthumbs │ │ │ ├── bluemarble.jpg │ │ │ ├── default.jpg │ │ │ ├── mapnik.jpg │ │ │ └── qwc_demo.jpg │ │ ├── qwc-logo.svg │ │ └── search │ │ │ ├── dataproduct.svg │ │ │ └── feature.svg │ ├── js │ │ └── helloworldplugin.js │ ├── searchProviders.js │ └── templates │ │ ├── heightprofileprint.html │ │ └── legendprint.html ├── config.json ├── themesConfig.json └── translations │ ├── cs-CZ.json │ ├── de-CH.json │ ├── de-DE.json │ ├── en-US.json │ ├── es-ES.json │ ├── fr-FR.json │ ├── it-IT.json │ ├── ja-JP.json │ ├── pl-PL.json │ ├── pt-BR.json │ ├── pt-PT.json │ ├── ro-RO.json │ ├── ru-RU.json │ ├── sv-SE.json │ ├── tr-TR.json │ └── tsconfig.json ├── webpack.config.js └── yarn.lock /.babelrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "@babel/plugin-transform-class-properties", 4 | "@babel/plugin-transform-object-rest-spread" 5 | ], 6 | "presets": [ 7 | [ 8 | "@babel/preset-env", 9 | { 10 | "modules": false 11 | } 12 | ], 13 | "@babel/preset-react" 14 | ], 15 | "env": { 16 | "production": { 17 | "plugins": ["transform-react-remove-prop-types"] 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: "@babel/eslint-parser", // https://github.com/babel/babel/tree/main/eslint/babel-eslint-parser 3 | parserOptions: { 4 | babelOptions: { 5 | configFile: "./.babelrc.json" 6 | }, 7 | ecmaFeatures: { 8 | arrowFunctions: true, 9 | blockBindings: true, 10 | classes: true, 11 | defaultParams: true, 12 | destructuring: true, 13 | forOf: true, 14 | generators: false, 15 | modules: true, 16 | objectLiteralComputedProperties: true, 17 | objectLiteralDuplicateProperties: false, 18 | objectLiteralShorthandMethods: true, 19 | objectLiteralShorthandProperties: true, 20 | spread: true, 21 | superInFunctions: true, 22 | templateStrings: true, 23 | jsx: true 24 | } 25 | }, 26 | plugins: [ 27 | "perfectionist", // https://github.com/azat-io/eslint-plugin-perfectionist 28 | "react" // https://github.com/yannickcr/eslint-plugin-react 29 | ], 30 | extends: [ 31 | "eslint:recommended", 32 | "plugin:react/recommended" 33 | ], 34 | env: { // http://eslint.org/docs/user-guide/configuring.html#specifying-environments 35 | es6: true, 36 | browser: true, // browser global variables 37 | node: true // Node.js global variables and Node.js-specific rules 38 | }, 39 | settings: { 40 | react: { 41 | version: "detect" 42 | } 43 | }, 44 | globals: { 45 | /* MOCHA */ 46 | describe: false, 47 | it: false, 48 | before: false, 49 | beforeEach: false, 50 | after: false, 51 | afterEach: false, 52 | __DEVTOOLS__: false 53 | }, 54 | rules: { 55 | /** 56 | * Strict mode 57 | */ 58 | // babel inserts "use strict"; for us 59 | "strict": [2, "never"], // http://eslint.org/docs/rules/strict 60 | 61 | /** 62 | * ES6 63 | */ 64 | "no-var": 2, // http://eslint.org/docs/rules/no-var 65 | "prefer-const": 2, // http://eslint.org/docs/rules/prefer-const 66 | 67 | /** 68 | * Variables 69 | */ 70 | "no-shadow": 2, // http://eslint.org/docs/rules/no-shadow 71 | "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names 72 | "no-unused-vars": [2, { // http://eslint.org/docs/rules/no-unused-vars 73 | vars: "local", 74 | args: "none" 75 | }], 76 | "no-use-before-define": 2, // http://eslint.org/docs/rules/no-use-before-define 77 | 78 | /** 79 | * Possible errors 80 | */ 81 | "comma-dangle": [2, "never"], // http://eslint.org/docs/rules/comma-dangle 82 | "no-console": 1, // http://eslint.org/docs/rules/no-console 83 | "no-alert": 1, // http://eslint.org/docs/rules/no-alert 84 | "quote-props": [2, "consistent-as-needed"], // https://eslint.org/docs/rules/quote-props 85 | "block-scoped-var": 2, // http://eslint.org/docs/rules/block-scoped-var 86 | 87 | 88 | /** 89 | * Best practices 90 | */ 91 | "consistent-return": 2, // http://eslint.org/docs/rules/consistent-return 92 | "curly": [2, "multi-line"], // http://eslint.org/docs/rules/curly 93 | "default-case": 2, // http://eslint.org/docs/rules/default-case 94 | "dot-notation": [2, { // http://eslint.org/docs/rules/dot-notation 95 | allowKeywords: true 96 | }], 97 | "eqeqeq": 2, // http://eslint.org/docs/rules/eqeqeq 98 | "guard-for-in": 2, // http://eslint.org/docs/rules/guard-for-in 99 | "no-caller": 2, // http://eslint.org/docs/rules/no-caller 100 | "no-eq-null": 2, // http://eslint.org/docs/rules/no-eq-null 101 | "no-eval": 2, // http://eslint.org/docs/rules/no-eval 102 | "no-extend-native": 2, // http://eslint.org/docs/rules/no-extend-native 103 | "no-extra-bind": 2, // http://eslint.org/docs/rules/no-extra-bind 104 | "no-extra-semi": "warn", 105 | "no-floating-decimal": 2, // http://eslint.org/docs/rules/no-floating-decimal 106 | "no-implied-eval": 2, // http://eslint.org/docs/rules/no-implied-eval 107 | "no-lone-blocks": 2, // http://eslint.org/docs/rules/no-lone-blocks 108 | "no-loop-func": 2, // http://eslint.org/docs/rules/no-loop-func 109 | "no-multi-str": 2, // http://eslint.org/docs/rules/no-multi-str 110 | "no-global-assign": 2, // http://eslint.org/docs/rules/no-global-assign 111 | "no-new": 2, // http://eslint.org/docs/rules/no-new 112 | "no-new-func": 2, // http://eslint.org/docs/rules/no-new-func 113 | "no-new-wrappers": 2, // http://eslint.org/docs/rules/no-new-wrappers 114 | "no-octal-escape": 2, // http://eslint.org/docs/rules/no-octal-escape 115 | "no-proto": 2, // http://eslint.org/docs/rules/no-proto 116 | "no-return-assign": 2, // http://eslint.org/docs/rules/no-return-assign 117 | "no-script-url": 2, // http://eslint.org/docs/rules/no-script-url 118 | "no-self-compare": 2, // http://eslint.org/docs/rules/no-self-compare 119 | "no-sequences": 2, // http://eslint.org/docs/rules/no-sequences 120 | "no-throw-literal": 2, // http://eslint.org/docs/rules/no-throw-literal 121 | "radix": 2, // http://eslint.org/docs/rules/radix 122 | "vars-on-top": 2, // http://eslint.org/docs/rules/vars-on-top 123 | "wrap-iife": [2, "any"], // http://eslint.org/docs/rules/wrap-iife 124 | "yoda": 2, // http://eslint.org/docs/rules/yoda 125 | 126 | /** 127 | * Style 128 | */ 129 | "indent": [2, 4], // http://eslint.org/docs/rules/indent 130 | "brace-style": [2, // http://eslint.org/docs/rules/brace-style 131 | "1tbs", { 132 | allowSingleLine: true 133 | }], 134 | "quotes": [ 135 | 0, "single", "avoid-escape" // http://eslint.org/docs/rules/quotes 136 | ], 137 | "camelcase": [2, { // http://eslint.org/docs/rules/camelcase 138 | properties: "never" 139 | }], 140 | "comma-spacing": [2, { // http://eslint.org/docs/rules/comma-spacing 141 | before: false, 142 | after: true 143 | }], 144 | "comma-style": [2, "last"], // http://eslint.org/docs/rules/comma-style 145 | "eol-last": 2, // http://eslint.org/docs/rules/eol-last 146 | "func-names": 0, // http://eslint.org/docs/rules/func-names 147 | "key-spacing": [2, { // http://eslint.org/docs/rules/key-spacing 148 | beforeColon: false, 149 | afterColon: true 150 | }], 151 | "new-cap": [2, { // http://eslint.org/docs/rules/new-cap 152 | newIsCap: true 153 | }], 154 | "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines 155 | max: 2 156 | }], 157 | "no-nested-ternary": 2, // http://eslint.org/docs/rules/no-nested-ternary 158 | "no-new-object": 2, // http://eslint.org/docs/rules/no-new-object 159 | "no-spaced-func": 2, // http://eslint.org/docs/rules/no-spaced-func 160 | "no-trailing-spaces": 2, // http://eslint.org/docs/rules/no-trailing-spaces 161 | "no-undef": 2, // https://eslint.org/docs/rules/no-undef 162 | "no-underscore-dangle": 0, // http://eslint.org/docs/rules/no-underscore-dangle 163 | "one-var": [2, "never"], // http://eslint.org/docs/rules/one-var 164 | "padded-blocks": [0, "never"], // http://eslint.org/docs/rules/padded-blocks 165 | "semi": [2, "always"], // http://eslint.org/docs/rules/semi 166 | "semi-spacing": [2, { // http://eslint.org/docs/rules/semi-spacing 167 | before: false, 168 | after: true 169 | }], 170 | "keyword-spacing": 2, // http://eslint.org/docs/rules/keyword-spacing 171 | "space-before-blocks": 2, // http://eslint.org/docs/rules/space-before-blocks 172 | "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren 173 | "space-infix-ops": 2, // http://eslint.org/docs/rules/space-infix-ops 174 | "spaced-comment": 2, // http://eslint.org/docs/rules/spaced-comment 175 | 176 | /** 177 | * JSX style 178 | */ 179 | "react/jsx-boolean-value": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md 180 | "react/jsx-sort-props": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md 181 | "react/sort-prop-types": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md 182 | "react/no-did-mount-set-state": [2, "disallow-in-func"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md 183 | "react/self-closing-comp": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md 184 | "react/jsx-wrap-multilines": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md 185 | "react/no-access-state-in-setstate": "error", 186 | 187 | /** 188 | * Perfectionist // https://github.com/azat-io/eslint-plugin-perfectionist 189 | */ 190 | "perfectionist/sort-imports": [ // https://eslint-plugin-perfectionist.azat.io/rules/sort-imports 191 | "error", 192 | { 193 | "type": "natural", 194 | "order": "asc", 195 | "groups": [ 196 | "type", 197 | "react", 198 | ["builtin", "external"], 199 | "internal-type", 200 | "internal", 201 | ["parent-type", "sibling-type", "index-type"], 202 | ["parent", "sibling", "index"], 203 | "side-effect", 204 | "style", 205 | "object", 206 | "unknown" 207 | ], 208 | "custom-groups": { 209 | value: { 210 | react: ["react", "react-*"] 211 | } 212 | }, 213 | "newlines-between": "always" 214 | } 215 | ] 216 | } 217 | }; 218 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **NOTE: Please file general issues concerning the QWC2 at [https://github.com/qgis/qwc2/issues](https://github.com/qgis/qwc2/issues). Only file issues which concern the custom application skeleton here.** 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | prod/ 4 | icons/build 5 | npm-debug.log 6 | themes.json 7 | static/assets/img/genmapthumbs/* 8 | static/assets/forms/autogen/* 9 | yarn-error.log 10 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "qwc2"] 2 | path = qwc2 3 | url = https://github.com/qgis/qwc2.git 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015-2016 GeoSolutions Sas 2 | Copyright (c) 2016-2021 Sourcepole AG 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, are 6 | permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this list of 9 | conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 | of conditions and the following disclaimer in the documentation and/or other materials 13 | provided with the distribution. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 16 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 17 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 18 | COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 22 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | 25 | The views and conclusions contained in the software and documentation are those 26 | of the authors and should not be interpreted as representing official policies, 27 | either expressed or implied, of the MapStore2 Project. 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | QGIS Web Client Demo Application 2 | ================================ 3 | 4 | QGIS Web Client (QWC) is a modular next generation responsive web client for QGIS Server, built with ReactJS and OpenLayers. 5 | 6 | **This repository contains an example skeleton for building a custom QWC application based on the [QWC stock application](https://github.com/qgis/qwc2).** 7 | 8 | Consult the [QWC2 README](https://github.com/qgis/qwc2/blob/master/README.md) for information about QWC, and further links to documentation, sample viewers, etc. 9 | 10 | # Quick start 11 | 12 | To build a custom application based on the QWC stock application, follow these steps: 13 | 14 | 1. Clone this repository 15 | 16 | git clone https://github.com/qgis/qwc2-demo-app 17 | 18 | 2. Install dependencies 19 | 20 | yarn install 21 | 22 | 3. Run the development server 23 | 24 | yarn start 25 | 26 | 4. Edit `js/appConfig.js` to include your custom components 27 | 28 | See [Building a custom viewer](https://qwc-services.github.io/master/configuration/ViewerConfiguration/#building-a-custom-viewer) for further information. 29 | 30 | # Issues 31 | 32 | Please report QWC issues at [issues](https://github.com/qgis/qwc2/issues). 33 | 34 | # License 35 | 36 | QWC is released under the terms of the [BSD license](https://github.com/qgis/qwc2-demo-app/blob/master/LICENSE). 37 | -------------------------------------------------------------------------------- /icons/README.md: -------------------------------------------------------------------------------- 1 | The common qwc2 icons were moved to `qwc2/icons`. Add icons for custom components here, or add an icon with the same name as a common qwc2 icon to override it. 2 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | QGIS Web Client 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 53 | 54 | 59 | 60 | 61 |
62 |
63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /js/IdentifyExtensions.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017-2021 Sourcepole AG 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | export function customAttributeCalculator(layer, feature) { 10 | // Here you can dynamically return additional attribute values for the 11 | // identify dialog, possibly depending on the passed layer and feature. 12 | // Return a list of elements i.e.: 13 | // 14 | // return [( 15 | // 16 | // Name 17 | // Value 18 | // 19 | // )]; 20 | return []; 21 | } 22 | 23 | export function attributeTransform(name, value, layer, feature) { 24 | // Here you can transform the attribute value. 25 | return value; 26 | } 27 | export const customExporters = [ 28 | /* 29 | { 30 | id: "myexport", 31 | title: "My Format", 32 | allowClipboard: true, 33 | export: (features, callback) => { 34 | const data = convertToMyFormat(features); 35 | callback({ 36 | data: data, type: "mime/type", filename: "export.ext" 37 | }); 38 | } 39 | } 40 | */ 41 | ]; 42 | -------------------------------------------------------------------------------- /js/app.jsx: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016-2021 Sourcepole AG 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | import React from 'react'; 10 | import {createRoot} from 'react-dom/client'; 11 | import StandardApp from 'qwc2/components/StandardApp'; 12 | import appConfig from './appConfig'; 13 | import '../icons/build/qwc2-icons.css'; 14 | 15 | const container = document.getElementById('container'); 16 | const root = createRoot(container); 17 | root.render(); 18 | -------------------------------------------------------------------------------- /js/appConfig.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016-2021 Sourcepole AG 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. 7 | */ 8 | 9 | import AppMenu from 'qwc2/components/AppMenu'; 10 | import FullscreenSwitcher from 'qwc2/components/FullscreenSwitcher'; 11 | import SearchBox from 'qwc2/components/SearchBox'; 12 | import Toolbar from 'qwc2/components/Toolbar'; 13 | import APIPlugin from 'qwc2/plugins/API'; 14 | import AttributeTablePlugin from 'qwc2/plugins/AttributeTable'; 15 | import AuthenticationPlugin from 'qwc2/plugins/Authentication'; 16 | import BackgroundSwitcherPlugin from 'qwc2/plugins/BackgroundSwitcher'; 17 | import BookmarkPlugin from 'qwc2/plugins/Bookmark'; 18 | import BottomBarPlugin from 'qwc2/plugins/BottomBar'; 19 | import CookiePopupPlugin from 'qwc2/plugins/CookiePopup'; 20 | import CyclomediaPlugin from 'qwc2/plugins/Cyclomedia'; 21 | import EditingPlugin from 'qwc2/plugins/Editing'; 22 | import FeatureFormPlugin from 'qwc2/plugins/FeatureForm'; 23 | import FeatureSearchPlugin from 'qwc2/plugins/FeatureSearch'; 24 | import GeometryDigitizerPlugin from 'qwc2/plugins/GeometryDigitizer'; 25 | import HeightProfilePlugin from 'qwc2/plugins/HeightProfile'; 26 | import HelpPlugin from 'qwc2/plugins/Help'; 27 | import HomeButtonPlugin from 'qwc2/plugins/HomeButton'; 28 | import IdentifyPlugin from 'qwc2/plugins/Identify'; 29 | import LayerCatalogPlugin from 'qwc2/plugins/LayerCatalog'; 30 | import LayerTreePlugin from 'qwc2/plugins/LayerTree'; 31 | import LocateButtonPlugin from 'qwc2/plugins/LocateButton'; 32 | import MapPlugin from 'qwc2/plugins/Map'; 33 | import MapComparePlugin from 'qwc2/plugins/MapCompare'; 34 | import MapCopyrightPlugin from 'qwc2/plugins/MapCopyright'; 35 | import MapExportPlugin from 'qwc2/plugins/MapExport'; 36 | import MapFilterPlugin from 'qwc2/plugins/MapFilter'; 37 | import MapInfoTooltipPlugin from 'qwc2/plugins/MapInfoTooltip'; 38 | import MapLegendPlugin from 'qwc2/plugins/MapLegend'; 39 | import MapTipPlugin from 'qwc2/plugins/MapTip'; 40 | import MeasurePlugin from 'qwc2/plugins/Measure'; 41 | import NewsPopupPlugin from 'qwc2/plugins/NewsPopup'; 42 | import PortalPlugin from 'qwc2/plugins/Portal'; 43 | import PrintPlugin from 'qwc2/plugins/Print'; 44 | import ProcessNotificationsPlugin from 'qwc2/plugins/ProcessNotifications'; 45 | import RedliningPlugin from 'qwc2/plugins/Redlining'; 46 | import ReportsPlugin from 'qwc2/plugins/Reports'; 47 | import RoutingPlugin from 'qwc2/plugins/Routing'; 48 | import ScratchDrawingPlugin from 'qwc2/plugins/ScratchDrawing'; 49 | import SettingsPlugin from 'qwc2/plugins/Settings'; 50 | import SharePlugin from 'qwc2/plugins/Share'; 51 | import StartupMarkerPlugin from 'qwc2/plugins/StartupMarker'; 52 | import TaskButtonPlugin from 'qwc2/plugins/TaskButton'; 53 | import ThemeSwitcherPlugin from 'qwc2/plugins/ThemeSwitcher'; 54 | import TimeManagerPlugin from 'qwc2/plugins/TimeManager'; 55 | import TopBarPlugin from 'qwc2/plugins/TopBar'; 56 | import View3DPlugin from 'qwc2/plugins/View3D'; 57 | import {ZoomInPlugin, ZoomOutPlugin} from 'qwc2/plugins/ZoomButtons'; 58 | import EditingSupport from 'qwc2/plugins/map/EditingSupport'; 59 | import LocateSupport from 'qwc2/plugins/map/LocateSupport'; 60 | import MeasurementSupport from 'qwc2/plugins/map/MeasurementSupport'; 61 | import OverviewSupport from 'qwc2/plugins/map/OverviewSupport'; 62 | import RedliningSupport from 'qwc2/plugins/map/RedliningSupport'; 63 | import ScaleBarSupport from 'qwc2/plugins/map/ScaleBarSupport'; 64 | import SnappingSupport from 'qwc2/plugins/map/SnappingSupport'; 65 | import BufferSupport from 'qwc2/plugins/redlining/RedliningBufferSupport'; 66 | 67 | import defaultLocaleData from '../static/translations/en-US.json'; 68 | import {customAttributeCalculator, attributeTransform, customExporters} from './IdentifyExtensions'; 69 | 70 | export default { 71 | defaultLocaleData: defaultLocaleData, 72 | initialState: { 73 | defaultState: {}, 74 | mobile: {} 75 | }, 76 | pluginsDef: { 77 | plugins: { 78 | MapPlugin: MapPlugin({ 79 | EditingSupport: EditingSupport, 80 | MeasurementSupport: MeasurementSupport, 81 | LocateSupport: LocateSupport, 82 | OverviewSupport: OverviewSupport, 83 | RedliningSupport: RedliningSupport, 84 | ScaleBarSupport: ScaleBarSupport, 85 | SnappingSupport: SnappingSupport 86 | }), 87 | APIPlugin: APIPlugin, 88 | AttributeTablePlugin: AttributeTablePlugin(/* CustomEditingInterface */), 89 | AuthenticationPlugin: AuthenticationPlugin, 90 | BackgroundSwitcherPlugin: BackgroundSwitcherPlugin, 91 | BookmarkPlugin: BookmarkPlugin, 92 | BottomBarPlugin: BottomBarPlugin, 93 | CookiePopupPlugin: CookiePopupPlugin, 94 | CyclomediaPlugin: CyclomediaPlugin, 95 | EditingPlugin: EditingPlugin(/* CustomEditingInterface */), 96 | FeatureFormPlugin: FeatureFormPlugin(/* CustomEditingInterface */), 97 | GeometryDigitizerPlugin: GeometryDigitizerPlugin, 98 | HeightProfilePlugin: HeightProfilePlugin, 99 | HelpPlugin: HelpPlugin(), 100 | HomeButtonPlugin: HomeButtonPlugin, 101 | IdentifyPlugin: IdentifyPlugin, 102 | LayerCatalogPlugin: LayerCatalogPlugin, 103 | LayerTreePlugin: LayerTreePlugin, 104 | LocateButtonPlugin: LocateButtonPlugin, 105 | MapComparePlugin: MapComparePlugin, 106 | MapCopyrightPlugin: MapCopyrightPlugin, 107 | MapExportPlugin: MapExportPlugin, 108 | MapFilterPlugin: MapFilterPlugin, 109 | MapInfoTooltipPlugin: MapInfoTooltipPlugin(), 110 | MapLegendPlugin: MapLegendPlugin, 111 | MapTipPlugin: MapTipPlugin, 112 | MeasurePlugin: MeasurePlugin, 113 | NewsPopupPlugin: NewsPopupPlugin, 114 | PortalPlugin: PortalPlugin, 115 | PrintPlugin: PrintPlugin, 116 | ProcessNotificationsPlugin: ProcessNotificationsPlugin, 117 | RedliningPlugin: RedliningPlugin({ 118 | BufferSupport: BufferSupport 119 | }), 120 | ReportsPlugin: ReportsPlugin, 121 | RoutingPlugin: RoutingPlugin, 122 | FeatureSearchPlugin: FeatureSearchPlugin, 123 | ScratchDrawingPlugin: ScratchDrawingPlugin, 124 | SettingsPlugin: SettingsPlugin, 125 | SharePlugin: SharePlugin, 126 | StartupMarkerPlugin: StartupMarkerPlugin, 127 | TaskButtonPlugin: TaskButtonPlugin, 128 | ThemeSwitcherPlugin: ThemeSwitcherPlugin, 129 | TimeManagerPlugin: TimeManagerPlugin, 130 | TopBarPlugin: TopBarPlugin({ 131 | AppMenu: AppMenu, 132 | Search: SearchBox, 133 | Toolbar: Toolbar, 134 | FullscreenSwitcher: FullscreenSwitcher 135 | }), 136 | View3DPlugin: View3DPlugin, 137 | ZoomInPlugin: ZoomInPlugin, 138 | ZoomOutPlugin: ZoomOutPlugin, 139 | }, 140 | cfg: { 141 | IdentifyPlugin: { 142 | attributeCalculator: customAttributeCalculator, 143 | attributeTransform: attributeTransform, 144 | customExporters: customExporters 145 | } 146 | } 147 | }, 148 | actionLogger: (action) => { 149 | /* Do something with action, i.e. Piwik/Mamoto event tracking */ 150 | } 151 | /* 152 | themeLayerRestorer: (missingLayers, theme, callback) => { 153 | // Invoked for layers specified in the l url parameter which are missing in the specified theme 154 | // Could be used to query a search provider for the missing theme layers 155 | 156 | // A list of theme layers to merge into the theme 157 | const newLayers = []; 158 | 159 | // A dictionary mapping the name of the searched layer name with the resulting layer name(s) as an array, i.e. 160 | // {searchlayername: ["resultlayername1", "resultlayername2"], ...} 161 | const newLayerNames = {}; 162 | 163 | callback(newLayers, newLayerNames); 164 | }*/ 165 | /* externalLayerRestorer: (externalLayers, themes, callback) => { 166 | // Optional function to handle restoring of external layers from the l URL parameter 167 | // If omitted, the default handler is used which downloads capabilities for each service to restore the layer 168 | }*/ 169 | }; 170 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "qwc2-demo-app", 3 | "version": "2025.04.03", 4 | "description": "Demo application based on QGIS Web Client", 5 | "author": "Sourcepole", 6 | "license": "BSD-2-Clause", 7 | "repository": "git@github.com:sourcepole/qwc2-demo-app.git", 8 | "private": true, 9 | "dependencies": { 10 | "qwc2": "2025.4.3" 11 | }, 12 | "devDependencies": { 13 | "@babel/core": "^7.26.0", 14 | "@babel/eslint-parser": "^7.25.9", 15 | "@babel/plugin-transform-class-properties": "^7.25.9", 16 | "@babel/plugin-transform-object-rest-spread": "^7.25.9", 17 | "@babel/preset-env": "^7.26.0", 18 | "@babel/preset-react": "^7.26.3", 19 | "@furkot/webfonts-generator": "^2.0.2", 20 | "@microsoft/eslint-formatter-sarif": "^3.1.0", 21 | "@types/react": "^18.3.1", 22 | "babel-loader": "^9.2.1", 23 | "babel-plugin-transform-react-remove-prop-types": "^0.4.24", 24 | "clean-webpack-plugin": "^4.0.0", 25 | "copy-webpack-plugin": "^12.0.2", 26 | "css-loader": "^7.1.2", 27 | "eslint": "^8.56.0", 28 | "eslint-plugin-perfectionist": "^2.10.0", 29 | "eslint-plugin-react": "^7.37.2", 30 | "html-webpack-plugin": "^5.6.3", 31 | "mkdirp": "^3.0.1", 32 | "object-path": "^0.11.8", 33 | "react-docgen": "^5.4.3", 34 | "source-map-loader": "^5.0.0", 35 | "style-loader": "^4.0.0", 36 | "typescript": "^5.7.2", 37 | "webpack": "^5.97.1", 38 | "webpack-bundle-size-analyzer": "^3.1.0", 39 | "webpack-cli": "^5.1.4", 40 | "webpack-dev-server": "^5.1.0" 41 | }, 42 | "scripts": { 43 | "prod": "npm run tsupdate && npm run themesconfig && npm run iconfont && webpack --mode production --progress", 44 | "start": "npm run tsupdate && npm run themesconfig && npm run iconfont && webpack serve --mode development --progress --host 0.0.0.0 --port 8081", 45 | "iconfont": "npx qwc_build_iconfont", 46 | "themesconfig": "npx qwc_gen_themesconfig", 47 | "tsupdate": "npx qwc_update_translations", 48 | "build": "npm run prod", 49 | "analyze": "webpack --mode production --json | webpack-bundle-size-analyzer", 50 | "release": "node -e \"process.exit(require('os').platform() === 'win32' ? 0 : 1)\" && qwc2\\scripts\\package-commands.bat release || ./qwc2/scripts/package-commands.sh release" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /static/api_examples.js: -------------------------------------------------------------------------------- 1 | function addmarker(ev) { 2 | let layer = { 3 | id: "myselectionlayer", 4 | role: window.qwc2.LayerRole.SELECTION 5 | }; 6 | let feature = { 7 | id: 'mymarker', 8 | geometry: { 9 | type: 'Point', 10 | coordinates: [2684267, 1247815] 11 | }, 12 | properties: { label: "Text" }, 13 | crs: "EPSG:2056", 14 | styleName: 'marker' 15 | }; 16 | window.qwc2.addLayerFeatures(layer, [feature]); 17 | } 18 | function removemarker(ev) { 19 | window.qwc2.removeLayerFeatures("myselectionlayer", ["mymarker"]); 20 | } 21 | function addpoly(ev) { 22 | let layer = { 23 | id: "myselectionlayer", 24 | role: window.qwc2.LayerRole.SELECTION 25 | }; 26 | let feature = { 27 | id: 'mypoly', 28 | geometry: { 29 | type: 'Polygon', 30 | coordinates: [[[2684267, 1247815], [2686897, 1246706], [2683829, 1243509], [2677152, 1245933]]] 31 | }, 32 | properties: { label: "Polygon" }, 33 | crs: "EPSG:2056", 34 | styleName: 'default', 35 | styleOptions: { 36 | strokeColor: [255, 0, 0, 1], 37 | strokeWidth: 4, 38 | strokeDash: [4], 39 | fillColor: [255, 255, 255, 0.33], 40 | textFill: "blue", 41 | textStroke: "white", 42 | textFont: '20pt sans-serif' 43 | } 44 | }; 45 | window.qwc2.addLayerFeatures(layer, [feature]); 46 | } 47 | function removepoly(ev) { 48 | window.qwc2.removeLayerFeatures("myselectionlayer", ["mypoly"]); 49 | } 50 | function removeall(ev) { 51 | window.qwc2.removeLayer("myselectionlayer"); 52 | } 53 | function pantohb(ev) { 54 | window.qwc2.panTo([2683002, 1248093], "EPSG:2056"); 55 | } 56 | function zoomtohb(ev) { 57 | window.qwc2.zoomToExtent([2682576, 1247916, 2683339, 1248222], "EPSG:2056"); 58 | } 59 | function drawpoint(ev) { 60 | window.qwc2.drawGeometry("Point", "Draw a point", function(result, crs) { console.log(result); console.log(crs); }, {drawMultiple: true}); 61 | } 62 | function drawline(ev) { 63 | window.qwc2.drawGeometry("LineString", "Draw a line", function(result, crs) { console.log(result); console.log(crs); }, { 64 | snapping: true, 65 | drawMultiple: true, 66 | initialFeatures: [{ 67 | type: "Feature", 68 | geometry: { 69 | type: "LineString", 70 | coordinates: [ 71 | [2682632, 1247832], 72 | [2692632, 1247832] 73 | ] 74 | } 75 | }] 76 | }); 77 | } 78 | function drawpoly(ev) { 79 | window.qwc2.drawGeometry("Polygon", "Draw a polygon", function(result, crs) { console.log(result); console.log(crs); }, { 80 | borderColor: [0, 0, 255, 1], 81 | size: 2, 82 | fillColor: [255, 255, 255, 0.5] 83 | }); 84 | } 85 | function drawcircle(ev) { 86 | window.qwc2.drawGeometry("Circle", "Draw a circle", function(result, crs) { console.log(result); console.log(crs); }, { 87 | borderColor: [0, 0, 255, 1], 88 | size: 2, 89 | fillColor: [255, 255, 255, 0.5] 90 | }); 91 | } 92 | function drawbox(ev) { 93 | window.qwc2.drawGeometry("Box", "Draw a box", function(result, crs) { console.log(result); console.log(crs); }, { 94 | borderColor: [0, 0, 255, 1], 95 | size: 2, 96 | fillColor: [255, 255, 255, 0.5] 97 | }); 98 | } 99 | 100 | function toggleapidemo(ev) { 101 | let apidemo = document.getElementById("apidemo"); 102 | apidemo.style.display = apidemo.style.display ? "" : "none"; 103 | } 104 | 105 | window.onload = function() { 106 | let apiFrame = document.createElement("div"); 107 | apiFrame.style.position = 'fixed'; 108 | apiFrame.style.left = 0; 109 | apiFrame.style.top = '4em'; 110 | apiFrame.style.zIndex = 1000; 111 | apiFrame.style.padding = '0.5em'; 112 | apiFrame.style.backgroundColor = 'rgba(255, 255, 0, 0.75)'; 113 | 114 | apiFrame.innerHTML = "\ 115 |
Toggle API demo
\ 116 | "; 140 | document.body.appendChild(apiFrame); 141 | }; 142 | -------------------------------------------------------------------------------- /static/assets/css/colorschemes.css: -------------------------------------------------------------------------------- 1 | :root.highcontrast { 2 | /* Base colors */ 3 | --text-color: black; 4 | --text-color-link: blue; 5 | --text-color-disabled: #999; 6 | --container-bg-color: white; 7 | --input-bg-color: white; 8 | --input-bg-color-disabled: white; 9 | --border-color: black; 10 | --color-active: blue; 11 | --focus-outline: 2px solid black; 12 | /* Tooltips */ 13 | --tooltip-bg-color: rgba(0, 0, 0, 0.75); 14 | --tooltip-text-color: white; 15 | --tooltip-border-color: black; 16 | /* Map buttons */ 17 | --map-button-bg-color: black; 18 | --map-button-text-color: white; 19 | --map-button-hover-bg-color: white; 20 | --map-button-hover-text-color: black; 21 | --map-button-active-bg-color: white; 22 | --map-button-active-text-color: black; 23 | /* Panels (topbar and bottom bar) */ 24 | --panel-bg-color: rgba(255, 255, 255, 0.85); 25 | --panel-text-color: black; 26 | /* Titlebars */ 27 | --titlebar-bg-color: black; 28 | --titlebar-text-color: white; 29 | /* Button */ 30 | --button-bg-color: white; 31 | --button-bg-color-hover: #ddd; 32 | --button-bg-color-active: black; 33 | --button-bg-color-active-hover: #222; 34 | --button-bg-color-disabled: white; 35 | --button-text-color: black; 36 | --button-text-color-hover: black; 37 | --button-text-color-active: white; 38 | --button-text-color-active-hover: white; 39 | --button-text-color-disabled: #999; 40 | /* List */ 41 | --list-bg-color: white; 42 | --list-section-bg-color: black; 43 | --list-section-text-color: white; 44 | --list-item-bg-color-even: #eee; 45 | --list-item-bg-color-hover: #ddd; 46 | --list-item-bg-color-active: #aaa; 47 | --list-item-bg-color-active-hover: #bbb; 48 | --list-item-text-color-hover: black; 49 | --list-item-text-color-active: black; 50 | --list-item-text-color-active-hover: black; 51 | /* App menu */ 52 | --app-menu-bg-color: white; 53 | --app-menu-text-color: black; 54 | --app-menu-bg-color-hover: #ddd; 55 | --app-menu-text-color-hover: black; 56 | --app-submenu-bg-color: black; 57 | --app-submenu-text-color: white; 58 | --app-submenu-bg-color-hover: #222; 59 | --app-submenu-text-color-hover: white; 60 | } 61 | 62 | :root.dark { 63 | /* Base colors */ 64 | --text-color: white; 65 | --text-color-link: #AAAAFF; 66 | --container-bg-color: #333; 67 | --input-bg-color: #3f3f3f; 68 | --input-bg-color-disabled: #252526; 69 | --text-color-disabled: #999; 70 | --border-color: #2c2c2c; 71 | --color-active: #AAAAFF; 72 | --focus-outline: 2px solid #007acc; 73 | /* Tooltips */ 74 | --tooltip-bg-color: rgba(0, 0, 0, 0.75); 75 | --tooltip-text-color: white; 76 | --tooltip-border-color: black; 77 | /* Map buttons */ 78 | --map-button-bg-color: #595959; 79 | --map-button-text-color: white; 80 | --map-button-hover-bg-color: #f2f2f2; 81 | --map-button-hover-text-color: #595959; 82 | --map-button-active-bg-color: #f2f2f2; 83 | --map-button-active-text-color: #595959; 84 | /* Panels (topbar and bottom bar) */ 85 | --panel-bg-color: rgba(42, 46, 50, 0.85); 86 | --panel-text-color: white; 87 | /* Titlebars */ 88 | --titlebar-bg-color: #475057; 89 | --titlebar-text-color: white; 90 | /* Button */ 91 | --button-bg-color: #3f3f3f; 92 | --button-bg-color-hover: #3a3a3a; 93 | --button-bg-color-active: #202020; 94 | --button-bg-color-active-hover: #1a1a1a; 95 | --button-bg-color-disabled: #333; 96 | --button-text-color: white; 97 | --button-text-color-hover: white; 98 | --button-text-color-active: white; 99 | --button-text-color-active-hover: white; 100 | --button-text-color-disabled: #666; 101 | /* List */ 102 | --list-bg-color: #3f3f3f; 103 | --list-section-bg-color: black; 104 | --list-section-text-color: white; 105 | --list-item-bg-color-even: #393939; 106 | --list-item-bg-color-hover: #292929; 107 | --list-item-bg-color-active: #1f1f1f; 108 | --list-item-bg-color-active-hover: #0f0f0f; 109 | --list-item-text-color-hover: white; 110 | --list-item-text-color-active: white; 111 | --list-item-text-color-active-hover: white; 112 | /* App menu */ 113 | --app-menu-bg-color: #4f4f4f; 114 | --app-menu-text-color: white; 115 | --app-menu-bg-color-hover: #666; 116 | --app-menu-text-color-hover: white; 117 | --app-submenu-bg-color: #222; 118 | --app-submenu-text-color: white; 119 | --app-submenu-bg-color-hover: #404040; 120 | --app-submenu-text-color-hover: white; 121 | } 122 | 123 | -------------------------------------------------------------------------------- /static/assets/css/qwc2.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/css/qwc2.css -------------------------------------------------------------------------------- /static/assets/help.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | 4 |

5 |

6 | Homepage
7 | Documentation 8 |

9 |

QWC2 Build $VERSION$

10 |
11 | -------------------------------------------------------------------------------- /static/assets/img/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/app_icon.png -------------------------------------------------------------------------------- /static/assets/img/app_icon_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/app_icon_114.png -------------------------------------------------------------------------------- /static/assets/img/app_icon_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/app_icon_144.png -------------------------------------------------------------------------------- /static/assets/img/app_icon_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/app_icon_72.png -------------------------------------------------------------------------------- /static/assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/favicon.ico -------------------------------------------------------------------------------- /static/assets/img/logo-mobile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 24 | 26 | 29 | 33 | 34 | 37 | 41 | 42 | 45 | 49 | 50 | 53 | 57 | 58 | 65 | 75 | 76 | 98 | 100 | 101 | 103 | image/svg+xml 104 | 106 | 107 | 108 | 109 | 110 | 115 | 118 | 124 | 142 | 160 | 178 | 196 | 199 | 207 | 215 | 216 | 222 | 223 | 224 | 225 | -------------------------------------------------------------------------------- /static/assets/img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 25 | 28 | 32 | 33 | 36 | 40 | 41 | 44 | 48 | 49 | 52 | 56 | 57 | 64 | 74 | 75 | 100 | 114 | 115 | 117 | 118 | 120 | image/svg+xml 121 | 123 | 124 | 125 | 126 | 131 | 144 | 148 | 155 | 157 | 161 | 166 | 171 | 174 | 178 | 184 | 202 | 220 | 238 | 256 | 260 | 268 | 276 | 277 | 283 | 284 | 287 | 292 | 297 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | -------------------------------------------------------------------------------- /static/assets/img/mapthumbs/bluemarble.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/mapthumbs/bluemarble.jpg -------------------------------------------------------------------------------- /static/assets/img/mapthumbs/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/mapthumbs/default.jpg -------------------------------------------------------------------------------- /static/assets/img/mapthumbs/mapnik.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/mapthumbs/mapnik.jpg -------------------------------------------------------------------------------- /static/assets/img/mapthumbs/qwc_demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qgis/qwc2-demo-app/1632fd0801f3cf6bc22661e86b6de1af70bb2ebb/static/assets/img/mapthumbs/qwc_demo.jpg -------------------------------------------------------------------------------- /static/assets/img/qwc-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 22 | 25 | 29 | 30 | 33 | 37 | 38 | 41 | 45 | 46 | 49 | 53 | 54 | 61 | 71 | 81 | 82 | 103 | 105 | 106 | 108 | image/svg+xml 109 | 111 | 112 | 113 | 114 | 118 | 121 | 128 | 146 | 154 | 172 | 190 | 208 | 216 | 217 | 218 | 219 | -------------------------------------------------------------------------------- /static/assets/img/search/dataproduct.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/assets/img/search/feature.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/assets/js/helloworldplugin.js: -------------------------------------------------------------------------------- 1 | 2 | window.addEventListener("QWC2ApiReady", () => { 3 | 4 | const {React, PropTypes, connect} = window.qwc2.libs; 5 | const {TaskBar} = window.qwc2.components; 6 | 7 | class HelloWorld extends React.Component { 8 | static propTypes = { 9 | active: PropTypes.bool 10 | }; 11 | render() { 12 | if (!this.props.active) { 13 | return null; 14 | } 15 | return React.createElement(TaskBar, {onHide: this.quit, task: "HelloWorld"}, 16 | React.createElement('span', {role: 'body'}, "Hello world") 17 | ); 18 | } 19 | quit = () => { 20 | window.qwc2.setCurrentTask(null); 21 | }; 22 | } 23 | 24 | const HelloWorldPlugin = connect(state => ({ 25 | active: state.task.id === "HelloWorld" 26 | }))(HelloWorld); 27 | 28 | window.qwc2.addPlugin("HelloWorldPlugin", HelloWorldPlugin); 29 | }); 30 | 31 | -------------------------------------------------------------------------------- /static/assets/searchProviders.js: -------------------------------------------------------------------------------- 1 | function usterSearch(text, searchParams, callback, axios) { 2 | const url = "https://webgis.uster.ch/wsgi/search.wsgi?&searchtables=&query=" + encodeURIComponent(text); 3 | axios.get(url).then(response => { 4 | const results = []; 5 | let currentgroup = null; 6 | let groupcounter = 0; 7 | let counter = 0; 8 | (response.data.results || []).map(entry => { 9 | if (!entry.bbox) { 10 | // Is group 11 | currentgroup = { 12 | id: "ustergroup" + (groupcounter++), 13 | title: entry.displaytext, 14 | items: [] 15 | }; 16 | results.push(currentgroup); 17 | } else if (currentgroup) { 18 | currentgroup.items.push({ 19 | id: "usterresult" + (counter++), 20 | text: entry.displaytext, 21 | searchtable: entry.searchtable, 22 | bbox: entry.bbox.slice(0), 23 | x: 0.5 * (entry.bbox[0] + entry.bbox[2]), 24 | y: 0.5 * (entry.bbox[1] + entry.bbox[3]), 25 | crs: "EPSG:21781" 26 | }); 27 | } 28 | }); 29 | callback({results: results}); 30 | }); 31 | } 32 | 33 | 34 | function usterResultGeometry(resultItem, callback, axios) { 35 | const url = "https://webgis.uster.ch/wsgi/getSearchGeom.wsgi?searchtable=" + encodeURIComponent(resultItem.searchtable) + "&displaytext=" + encodeURIComponent(resultItem.text); 36 | axios.get(url).then(response => { 37 | callback({geometry: response.data, crs: "EPSG:21781", hidemarker: false}); 38 | }); 39 | } 40 | 41 | /** ************************************************************************ **/ 42 | 43 | function geoAdminLocationSearch(text, searchParams, callback, axios) { 44 | const viewboxParams = {}; 45 | if (searchParams.filterBBox) { 46 | viewboxParams.bbox = window.qwc2.CoordinatesUtils.reprojectBbox(searchParams.filterBBox, searchParams.mapcrs, "EPSG:2056").map(x => Math.round(x)).join(","); 47 | } 48 | const params = { 49 | searchText: text, 50 | type: "locations", 51 | limit: 20, 52 | sr: 2056, 53 | ...viewboxParams, 54 | ...(searchParams.cfgParams || {}) 55 | }; 56 | const url = "https://api3.geo.admin.ch/rest/services/api/SearchServer"; 57 | axios.get(url, {params}).then(response => { 58 | const categoryMap = { 59 | gg25: "Municipalities", 60 | kantone: "Cantons", 61 | district: "Districts", 62 | sn25: "Places", 63 | zipcode: "Zip Codes", 64 | address: "Address", 65 | gazetteer: "General place name directory" 66 | }; 67 | const parseItemBBox = (bboxstr) => { 68 | try { 69 | const matches = bboxstr.match(/^BOX\s*\(\s*(\d+\.?\d*)\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)\s*(\d+\.?\d*)\s*\)$/); 70 | return matches.slice(1, 5).map(x => parseFloat(x)); 71 | } catch (e) { 72 | return null; 73 | } 74 | }; 75 | const resultGroups = {}; 76 | (response.data.results || []).map(entry => { 77 | if (resultGroups[entry.attrs.origin] === undefined) { 78 | resultGroups[entry.attrs.origin] = { 79 | id: entry.attrs.origin, 80 | title: categoryMap[entry.attrs.origin] || entry.attrs.origin, 81 | items: [] 82 | }; 83 | } 84 | const x = entry.attrs.y; 85 | const y = entry.attrs.x; 86 | resultGroups[entry.attrs.origin].items.push({ 87 | id: entry.id, 88 | text: entry.attrs.label, 89 | x: x, 90 | y: y, 91 | crs: "EPSG:2056", 92 | bbox: parseItemBBox(entry.attrs.geom_st_box2d) || [x, y, x, y] 93 | }); 94 | }); 95 | const results = Object.values(resultGroups); 96 | callback({results: results}); 97 | }); 98 | } 99 | 100 | /** ************************************************************************ **/ 101 | 102 | window.QWC2SearchProviders = { 103 | geoadmin: { 104 | label: "Swisstopo", 105 | onSearch: geoAdminLocationSearch 106 | }, 107 | uster: { 108 | label: "Uster", 109 | onSearch: usterSearch, 110 | getResultGeometry: usterResultGeometry 111 | } 112 | }; 113 | -------------------------------------------------------------------------------- /static/assets/templates/heightprofileprint.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Height profile 5 | 6 | 7 |

Height profile

8 |
9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /static/assets/templates/legendprint.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Legend 5 | 11 | 12 | 13 |

Map legend

14 |
15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /static/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "searchServiceUrl": "http://localhost:8088/api/v2/search/", 3 | "searchDataServiceUrl": "http://localhost:8088/api/v2/search/geom/", 4 | "editServiceUrl": "http://localhost:8088/api/v1/data/", 5 | "mapInfoService": "http://localhost:8088/api/v1/mapinfo/", 6 | "permalinkServiceUrl": "http://localhost:8088/api/v1/permalink/", 7 | "elevationServiceUrl": "http://localhost:8088/elevation/", 8 | "featureReportService": "http://localhost:8088/api/v1/document/", 9 | "authServiceUrl": "http://localhost:8088/api/v1/auth/", 10 | "routingServiceUrl": "https://valhalla1.openstreetmap.de", 11 | "urlPositionFormat": "centerAndZoom", 12 | "urlPositionCrs": "", 13 | "loadTranslationOverrides": false, 14 | "omitUrlParameterUpdates": false, 15 | "preserveExtentOnThemeSwitch": true, 16 | "preserveBackgroundOnThemeSwitch": true, 17 | "preserveNonThemeLayersOnThemeSwitch": false, 18 | "storeAllLayersInPermalink": false, 19 | "allowReorderingLayers": true, 20 | "preventSplittingGroupsWhenReordering": false, 21 | "allowLayerTreeSeparators": false, 22 | "flattenLayerTreeGroups": false, 23 | "allowRemovingThemeLayers": true, 24 | "globallyDisableDockableDialogs": false, 25 | "globallyDisableMaximizeableDialogs": false, 26 | "searchThemes": true, 27 | "searchThemeLayers": true, 28 | "allowAddingOtherThemes": true, 29 | "allowFractionalZoom": false, 30 | "localeAwareNumbers": false, 31 | "geodesicMeasurements": true, 32 | "trustWmsCapabilityURLs": false, 33 | "identifyTool": "Identify", 34 | "wmsDpi": 96, 35 | "wmsHidpi": false, 36 | "wmsMaxGetUrlLength": 2048, 37 | "qgisServerVersion": 3, 38 | "defaultColorScheme": "default", 39 | "username": "admin", 40 | "defaultFeatureStyle": { 41 | "strokeColor": [0, 0, 255, 1], 42 | "strokeWidth": 1, 43 | "strokeDash": [4], 44 | "fillColor": [255, 0, 255, 0.33], 45 | "circleRadius": 10, 46 | "textFill": "black", 47 | "textStroke": "white", 48 | "textFont": "11pt sans-serif" 49 | }, 50 | "importLayerUrlPresets": [ 51 | {"label": "Swisstopo WMTS", "value": "https://wmts10.geo.admin.ch/EPSG/2056/1.0.0/WMTSCapabilities.xml"} 52 | ], 53 | "projections": [ 54 | { 55 | "code": "EPSG:32632", 56 | "proj": "+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs", 57 | "label": "WGS 84 / UTM zone 32N" 58 | }, 59 | { 60 | "code": "EPSG:21781", 61 | "proj": "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs", 62 | "label": "CH1903 / LV03" 63 | }, 64 | { 65 | "code": "EPSG:2056", 66 | "proj": "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs", 67 | "label": "CH1903+ / LV95" 68 | }, 69 | { 70 | "code": "EPSG:25832", 71 | "proj": "+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs", 72 | "label": "ETRS89 / UTM 32N" 73 | }, 74 | { 75 | "code": "EPSG:31983", 76 | "proj": "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs", 77 | "label": "SIRGAS 2000 / UTM zone 23S" 78 | } 79 | ], 80 | "plugins": { 81 | "common": [ 82 | { 83 | "name": "API" 84 | }, 85 | { 86 | "name": "AttributeTable" 87 | }, 88 | { 89 | "name": "BackgroundSwitcher", 90 | "cfg": { 91 | "position": 0 92 | } 93 | }, 94 | { 95 | "name": "Bookmark" 96 | }, 97 | { 98 | "name": "BottomBar", 99 | "cfg": { 100 | "viewertitleUrl": "https://qwc-services.github.io/", 101 | "termsUrl": "https://qwc-services.github.io/", 102 | "viewertitleUrlTarget": "_blank" 103 | } 104 | }, 105 | { 106 | "name": "Editing", 107 | "cfg": { 108 | "allowCloneGeometry": true 109 | } 110 | }, 111 | { 112 | "name": "FeatureForm" 113 | }, 114 | { 115 | "name": "FeatureSearch" 116 | }, 117 | { 118 | "name": "HeightProfile", 119 | "cfg": { 120 | "heightProfilePrecision": 0 121 | } 122 | }, 123 | { 124 | "name": "Help", 125 | "cfg": { 126 | "bodyContentsFragmentUrl": "assets/help.html" 127 | }, 128 | "mapClickAction": "identify" 129 | }, 130 | { 131 | "name": "HomeButton", 132 | "cfg": { 133 | "position": 4 134 | } 135 | }, 136 | { 137 | "name": "Identify", 138 | "cfg": { 139 | "params": { 140 | "FI_POINT_TOLERANCE": 16, 141 | "FI_LINE_TOLERANCE": 8, 142 | "FI_POLYGON_TOLERANCE": 4, 143 | "feature_count": 20, 144 | "region_feature_count": 100 145 | }, 146 | "enableExport": true, 147 | "exportGeometry": true, 148 | "longAttributesDisplay": "wrap", 149 | "displayResultTree": false, 150 | "featureInfoReturnsLayerName": true, 151 | "clearResultsOnClose": true, 152 | "geometry": { 153 | "initialWidth": 480, 154 | "initialHeight": 550, 155 | "initialX": 0, 156 | "initialY": 0 157 | } 158 | } 159 | }, 160 | { 161 | "name": "LayerCatalog", 162 | "cfg": { 163 | "catalogUrl": "https://qwc2.sourcepole.ch/assets/catalog.json" 164 | } 165 | }, 166 | { 167 | "name": "LayerTree", 168 | "cfg": { 169 | "showLegendIcons": true, 170 | "showRootEntry": true, 171 | "showQueryableIcon": true, 172 | "allowMapTips": true, 173 | "mapTipsEnabled": false, 174 | "allowCompare": true, 175 | "allowImport": true, 176 | "groupTogglesSublayers": false, 177 | "grayUnchecked": false, 178 | "layerInfoWindowSize": {"width": 480, "height": 400}, 179 | "bboxDependentLegend": true, 180 | "scaleDependentLegend": "theme", 181 | "showToggleAllLayersCheckbox": true, 182 | "extraLegendParameters": "" 183 | }, 184 | "mapClickAction": "identify" 185 | }, 186 | { 187 | "name": "LocateButton", 188 | "cfg": { 189 | "position": 3 190 | } 191 | }, 192 | { 193 | "name": "Map", 194 | "cfg": { 195 | "mapOptions": { 196 | "zoomDuration": 250, 197 | "enableRotation": true, 198 | "panStepSize": 0.25, 199 | "panPageSize": 0.1, 200 | "constrainExtent": false 201 | }, 202 | "toolsOptions": { 203 | "OverviewSupport": { 204 | "tipLabel": "Overview" 205 | }, 206 | "LocateSupport": { 207 | "keepCurrentZoomLevel": true, 208 | "stopFollowingOnDrag": true, 209 | "startupMode": "DISABLED" 210 | }, 211 | "ScaleBarSupport": { 212 | "units": "metric" 213 | } 214 | }, 215 | "swipeGeometryTypeBlacklist": [], 216 | "swipeLayerNameBlacklist": [] 217 | } 218 | }, 219 | { 220 | "name": "MapCompare" 221 | }, 222 | { 223 | "name": "MapCopyright", 224 | "cfg": { 225 | "showThemeCopyrightOnly": false, 226 | "prefixCopyrightsWithLayerName": false 227 | } 228 | }, 229 | { 230 | "name": "MapExport", 231 | "cfg": { 232 | "dpis": [96, 300], 233 | "exportExternalLayers": true, 234 | "defaultFormat": "image/png", 235 | "formatConfiguration": { 236 | "application/dxf": [ 237 | {"name": "default"} 238 | ], 239 | "image/png": [ 240 | {"name": "default"} 241 | ] 242 | } 243 | } 244 | }, 245 | { 246 | "name": "MapFilter", 247 | "cfg": { 248 | "allowCustomFilters": true, 249 | "allowFilterByGeom": true 250 | } 251 | }, 252 | { 253 | "name": "MapInfoTooltip", 254 | "cfg": { 255 | "elevationPrecision": 0, 256 | "includeWGS84": true 257 | } 258 | }, 259 | { 260 | "name": "MapLegend", 261 | "cfg": { 262 | "addGroupTitles": true, 263 | "addLayerTitles": true, 264 | "bboxDependentLegend": false, 265 | "onlyVisibleLegend": false, 266 | "scaleDependentLegend": false, 267 | "extraLegendParameters": "LAYERTITLE=FALSE" 268 | } 269 | }, 270 | { 271 | "name": "MapTip" 272 | }, 273 | { 274 | "name": "Measure", 275 | "cfg": { 276 | "showMeasureModeSwitcher": true, 277 | "snappingActive": false, 278 | "snapping": true 279 | } 280 | }, 281 | { 282 | "name": "NewsPopup", 283 | "cfg": { 284 | "newsDocument": "https://qwc-services.github.io/master/release_notes/ChangeLog/", 285 | "newsRev": "20250210" 286 | } 287 | }, 288 | { 289 | "name": "Portal", 290 | "cfg": { 291 | "logo": "logo.svg", 292 | "topBarText": "", 293 | "showMenuOnStartup": true, 294 | "keepMenuOpen": true, 295 | "bottomBarLinks": [ 296 | {"href": "https://qwc-services.github.io/", "label": "Homepage", "target": "iframe"}, 297 | {"href": "https://qgis.org", "label": "QGIS.org"} 298 | ], 299 | "menuItems": [ 300 | {"title": "Homepage", "icon": "info", "url": "https://qwc-services.github.io/", "target": "iframe"}, 301 | {"key": "Tools", "icon": "tools", "title": "Links", "subitems": [ 302 | {"icon": "link", "title": "qwc2", "url": "https://github.com/qgis/qwc2/"}, 303 | {"icon": "link", "title": "qwc-docker", "url": "https://github.com/qwc-services/qwc-docker"}, 304 | {"icon": "link", "title": "qgis.org", "url": "https://qgis.org"} 305 | ]} 306 | ] 307 | } 308 | }, 309 | { 310 | "name": "Print", 311 | "cfg": { 312 | "inlinePrintOutput": false, 313 | "printExternalLayers": true, 314 | "gridInitiallyEnabled": false, 315 | "allowGeoPdfExport": true, 316 | "hideAutopopulatedFields": false 317 | } 318 | }, 319 | { 320 | "name": "ProcessNotifications" 321 | }, 322 | { 323 | "name": "Redlining" 324 | }, 325 | { 326 | "name": "Routing" 327 | }, 328 | { 329 | "name": "TopBar", 330 | "cfg": { 331 | "menuItems": [ 332 | {"key": "Portal", "icon": "themes"}, 333 | {"key": "ThemeSwitcher", "icon": "themes", "shortcut": "alt+shift+t"}, 334 | {"key": "LayerTree", "icon": "layers", "shortcut": "alt+shift+l"}, 335 | {"key": "MapLegend", "icon": "list-alt"}, 336 | {"key": "LayerCatalog", "icon": "catalog", "shortcut": "alt+shift+c"}, 337 | {"key": "FeatureSearch", "icon": "search"}, 338 | {"key": "Share", "icon": "share", "shortcut": "alt+shift+s"}, 339 | {"key": "Bookmark", "icon": "bookmark", "shortcut": "alt+shift+b"}, 340 | {"key": "Tools", "icon": "tools", "subitems": [ 341 | {"key": "Identify", "icon": "identify_region", "mode": "Region"}, 342 | {"key": "TimeManager", "icon": "clock"}, 343 | {"key": "Measure", "icon": "measure"}, 344 | {"key": "Redlining", "icon": "draw"}, 345 | {"key": "Editing", "icon": "editing"}, 346 | {"key": "FeatureForm", "icon": "featureform"}, 347 | {"key": "AttributeTable", "icon": "editing"}, 348 | {"key": "MapExport", "icon": "rasterexport"}, 349 | {"key": "Routing", "icon": "routing"} 350 | ]}, 351 | {"key": "Print", "icon": "print", "shortcut": "alt+shift+p"}, 352 | {"key": "Help", "icon": "info", "shortcut": "alt+shift+h"}, 353 | {"key": "Settings", "icon": "cog"}, 354 | {"title": "Homepage", "icon": "link", "url": "https://qwc-services.github.io/", "target": "iframe"} 355 | ], 356 | "searchOptions": { 357 | "allowSearchFilters": false, 358 | "hideResultLabels": false, 359 | "minScaleDenom": 1000, 360 | "zoomToLayers": false, 361 | "showProvidersInPlaceholder": false, 362 | "highlightStyle": { 363 | "strokeColor": [255, 0, 0, 1], 364 | "strokeWidth": 1, 365 | "strokeDash": [4, 1], 366 | "fillColor": [255, 0, 0, 0.33] 367 | } 368 | }, 369 | "appMenuClearsTask": true, 370 | "appMenuFilterField": true, 371 | "appMenuVisibleOnStartup": false, 372 | "logoUrl": "/", 373 | "appMenuShortcut": "alt+shift+m", 374 | "toolbarItemsShortcutPrefix": "alt+shift" 375 | } 376 | }, 377 | { 378 | "name": "ScratchDrawing" 379 | }, 380 | { 381 | "name": "Settings", 382 | "cfg": { 383 | "languages": [ 384 | { 385 | "title": "English", 386 | "value": "en-US" 387 | }, 388 | { 389 | "title": "Deutsch", 390 | "value": "de-CH" 391 | }, 392 | { 393 | "title": "Français", 394 | "value": "fr-FR" 395 | }, 396 | { 397 | "title": "Italiano", 398 | "value": "it-IT" 399 | } 400 | ], 401 | "colorSchemes": [ 402 | { 403 | "titleMsgId": "colorschemes.default", 404 | "value": "default" 405 | }, 406 | { 407 | "titleMsgId": "colorschemes.highcontrast", 408 | "value": "highcontrast" 409 | }, 410 | { 411 | "titleMsgId": "colorschemes.dark", 412 | "value": "dark" 413 | } 414 | ] 415 | } 416 | }, 417 | { 418 | "name": "Share", 419 | "cfg": { 420 | "showSocials": true, 421 | "showLink": true, 422 | "showQRCode": true 423 | }, 424 | "mapClickAction": "identify" 425 | }, 426 | { 427 | "name": "StartupMarker", 428 | "cfg": { 429 | "removeMode": "onclickonmarker" 430 | } 431 | }, 432 | { 433 | "name": "ThemeSwitcher", 434 | "cfg": { 435 | "collapsibleGroups": true 436 | } 437 | }, 438 | { 439 | "name": "TimeManager", 440 | "mapClickAction": "identify", 441 | "cfg": { 442 | "markerConfiguration": { 443 | "markersAvailable": true, 444 | "gradient": ["#f7af7d", "#eacc6e", "#fef89a", "#c5e09b", "#a3d29c", "#7cc096", "#79c8c5", "#34afce"], 445 | "markerOffset": [0, 0], 446 | "markerPins": true 447 | }, 448 | "cursorFormat": "datetime", 449 | "dateFormat": "DD.MM.YYYY[\n]HH:mm:ss", 450 | "defaultAnimationInterval": 1, 451 | "defaultStepSize": 1, 452 | "defaultStepUnit": "d", 453 | "defaultTimelineMode": "infinite", 454 | "stepUnits": ["s", "m", "h", "d", "M", "y", "10y", "100y"], 455 | "defaultTimelineDisplay": "features" 456 | } 457 | } 458 | ], 459 | "mobile": [ 460 | { 461 | "name": "BottomBar", 462 | "cfg": { 463 | "displayCoordinates": false, 464 | "displayScales": false 465 | } 466 | } 467 | ], 468 | "desktop": [ 469 | { 470 | "name": "TaskButton", 471 | "cfg": { 472 | "position": 5, 473 | "task": "LayerTree", 474 | "icon": "layers" 475 | } 476 | }, 477 | { 478 | "name": "TaskButton", 479 | "cfg": { 480 | "position": 6, 481 | "task": "Editing", 482 | "icon": "editing" 483 | } 484 | }, 485 | { 486 | "name": "ZoomIn", 487 | "cfg": { 488 | "position": 2 489 | } 490 | }, 491 | { 492 | "name": "ZoomOut", 493 | "cfg": { 494 | "position": 1 495 | } 496 | }, 497 | { 498 | "name": "TopBar", 499 | "cfg": { 500 | "toolbarItems": [ 501 | {"key": "Measure", "mode": "LineString", "icon": "measure_line"}, 502 | {"key": "Measure", "mode": "Polygon", "icon": "measure_polygon"}, 503 | {"key": "Print", "icon": "print"}, 504 | {"key": "Identify", "icon": "identify_region", "mode": "Region"} 505 | ] 506 | } 507 | } 508 | ] 509 | } 510 | } 511 | -------------------------------------------------------------------------------- /static/themesConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultScales": [100000000, 50000000, 25000000, 10000000, 4000000, 2000000, 1000000, 400000, 200000, 80000, 40000, 20000, 10000, 8000, 6000, 4000, 2000, 1000, 500, 250, 100], 3 | "defaultPrintGrid": [ 4 | {"s": 10000000, "x": 1000000, "y": 1000000}, 5 | {"s": 1000000, "x": 100000, "y": 100000}, 6 | {"s": 100000, "x": 10000, "y": 10000}, 7 | {"s": 10000, "x": 1000, "y": 1000}, 8 | {"s": 1000, "x": 100, "y": 100}, 9 | {"s": 100, "x": 10, "y": 10} 10 | ], 11 | "defaultWMSVersion": "1.3.0", 12 | "defaultBackgroundLayers": [], 13 | "defaultSearchProviders": ["coordinates"], 14 | "defaultMapCrs": "EPSG:3857", 15 | "defaultTheme": "qwc_demo", 16 | "themes": { 17 | "items": [ 18 | { 19 | "id": "qwc_demo", 20 | "title": "QWC Demo Theme", 21 | "url": "http://qwc2.sourcepole.ch/ows/qwc_demo", 22 | "attribution": "Demo attribution", 23 | "attributionUrl": "https://example.com/", 24 | "backgroundLayers": [ 25 | {"name": "bluemarble", "printLayer": "bluemarble_bg", "visibility": true}, 26 | {"name": "mapnik", "printLayer": "osm_bg"} 27 | ], 28 | "searchProviders": [ 29 | "coordinates", 30 | "nominatim", 31 | { 32 | "provider": "fulltext", 33 | "params": { 34 | "default": ["ne_10m_admin_0_countries"] 35 | } 36 | } 37 | ], 38 | "mapCrs": "EPSG:3857", 39 | "additionalMouseCrs": [], 40 | "extent": [-1000000,4000000,3000000,8000000], 41 | "printResolutions": [100, 300], 42 | "thumbnail": "qwc_demo.jpg", 43 | "featureReport": { 44 | "countries": "Country" 45 | }, 46 | "predefinedFilters": [{ 47 | "id": "continent_filter", 48 | "title": "Continent", 49 | "filter": { 50 | "countries": ["continent", "=", "$continent$"] 51 | }, 52 | "fields": [{ 53 | "id": "continent", 54 | "title": "Name", 55 | "defaultValue": "", 56 | "inputConfig": {"type": "select", "options": ["Africa", "Asia", "Europe", "Oceania"]} 57 | }] 58 | }], 59 | "extraLegendParameters": "LAYERTITLE=FALSE", 60 | "defaultPrintLayout": "A4 Landscape" 61 | } 62 | ], 63 | "backgroundLayers": [ 64 | { 65 | "name": "mapnik", 66 | "title": "Open Street Map", 67 | "type": "osm", 68 | "source": "osm", 69 | "attribution": "OpenStreetMap contributors", 70 | "attributionUrl": "https://www.openstreetmap.org/copyright", 71 | "thumbnail": "img/mapthumbs/mapnik.jpg" 72 | }, 73 | { 74 | "type": "wmts", 75 | "url": "http://gibs.earthdata.nasa.gov/wmts/epsg3857/best/BlueMarble_ShadedRelief/default/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpeg", 76 | "title": "Blue Marble", 77 | "name": "bluemarble", 78 | "tileMatrixPrefix": "", 79 | "tileMatrixSet": "GoogleMapsCompatible_Level8", 80 | "originX": -20037508.34278925, 81 | "originY": 20037508.34278925, 82 | "projection:": "EPSG:3857", 83 | "resolutions": [156543.03390625,78271.516953125,39135.7584765625,19567.87923828125,9783.939619140625,4891.9698095703125,2445.9849047851562,1222.9924523925781], 84 | "tileSize": [256,256], 85 | "thumbnail": "img/mapthumbs/bluemarble.jpg" 86 | } 87 | ] 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /static/translations/cs-CZ.json: -------------------------------------------------------------------------------- 1 | { 2 | "locale": "cs-CZ", 3 | "messages": { 4 | "appmenu": { 5 | "items": { 6 | "ExternalLink": "", 7 | "Bookmark": "Záložky", 8 | "Compare3D": "", 9 | "Editing": "Úpravy", 10 | "ExportObjects3D": "", 11 | "Help": "Nápověda", 12 | "HideObjects3D": "", 13 | "LayerTree": "Vrstvy & legenda", 14 | "LayerTree3D": "", 15 | "MapExport": "Export mapu", 16 | "MapExport3D": "", 17 | "MapFilter": "", 18 | "MapLight3D": "", 19 | "Print": "Tisk", 20 | "Reports": "", 21 | "Settings": "Nastavení", 22 | "Share": "Sdílet odkaz", 23 | "ThemeSwitcher": "Téma", 24 | "AttributeTable": "Atributy", 25 | "AuthenticationLogin": "Přihlášení", 26 | "AuthenticationLogout": "Odhlášení", 27 | "Cyclomedia": "Cyclomedia", 28 | "Draw3D": "", 29 | "FeatureForm": "Editační formulář", 30 | "FeatureSearch": "", 31 | "GeometryDigitizer": "", 32 | "IdentifyPoint": "Informace o bodu", 33 | "IdentifyRegion": "Informace o oblasti", 34 | "LayerCatalog": "Katalog vrstev", 35 | "Login": "Přihlášení", 36 | "Logout": "Odhlášení", 37 | "MapLegend": "Legenda", 38 | "Measure": "Měření", 39 | "Measure3D": "", 40 | "MeasureLineString": "Změřit úsek", 41 | "MeasurePolygon": "Měřit mnohoúhelník", 42 | "NewsPopup": "", 43 | "Panoramax": "", 44 | "Portal": "", 45 | "PrintScreen3D": "", 46 | "Redlining": "Připomínkování", 47 | "Routing": "Trasy", 48 | "Tools": "Nástroje mapy", 49 | "TimeManager": "", 50 | "View3D": "" 51 | }, 52 | "filter": "Hledat v menu...", 53 | "menulabel": "Mapa & Nástroje" 54 | }, 55 | "search": { 56 | "coordinates": "", 57 | "all": "Vše", 58 | "circleradius": "", 59 | "clearfilter": "", 60 | "existinglayer": "Vrstva v mapě již existuje", 61 | "filter": "Filtrovat výsledky", 62 | "layers": "", 63 | "limittoarea": "", 64 | "more": "{0} další výsledky", 65 | "nodescription": "", 66 | "none": "", 67 | "noresults": "Nenalezeno", 68 | "placeholder": "Hledat místo nebo přidat vrstvu...", 69 | "places": "", 70 | "providerselection": "Poskytovatelé vyhledávání", 71 | "recent": "Nedávná hledání", 72 | "search": "Hledat", 73 | "themelayers": "", 74 | "themes": "Témata", 75 | "unknownmore": "" 76 | }, 77 | "colorschemes": { 78 | "default": "", 79 | "dark": "", 80 | "highcontrast": "" 81 | }, 82 | "app": { 83 | "missingbg": "", 84 | "missinglayers": "", 85 | "missingpermalink": "", 86 | "missingprojection": "", 87 | "missingtheme": "" 88 | }, 89 | "attribtable": { 90 | "addfeature": "Přidat prvek", 91 | "commit": "Uložit změněný řádek", 92 | "csvexport": "", 93 | "delete": "Smazat", 94 | "deletefailed": "Chyba při mazání jednoho nebo více prvků", 95 | "deletefeatures": "Smazat vybrané prvky", 96 | "deleting": "Mazání prvků...", 97 | "discard": "Zahodit změny v řádku", 98 | "formeditmode": "Otevřít editační formulář pro vybrané prvky", 99 | "geomnoadd": "Pro přidání nových prvků do této vrstvy použijte editační formulář", 100 | "limittoextent": "", 101 | "loadfailed": "Chyba při načítání prvků", 102 | "loading": "Načítání...", 103 | "nodelete": "Nemazat", 104 | "nogeomnoform": "Editační formulář není dostupný pro vrstvy bez geometrie", 105 | "pleasereload": "Kliknutím na 'Obnovit' načtete tabulku atributů", 106 | "reload": "Obnovit", 107 | "selectlayer": "Vybrat vrstvu", 108 | "title": "Tabulka atributů", 109 | "zoomtoselection": "Přiblížit na vybrané prvky" 110 | }, 111 | "bgswitcher": { 112 | "nobg": "Bez podkladu" 113 | }, 114 | "bookmark": { 115 | "add": "Vytvořit novou záložku", 116 | "addfailed": "Vytváření záložky selhalo", 117 | "description": "Popis záložky", 118 | "lastUpdate": "Naposledy upraveno", 119 | "manage": "Správa záložek", 120 | "nobookmarks": "Zatím žádné záložky", 121 | "notloggedin": "Pro vytvoření záložky se musíte přihlásit", 122 | "open": "Otevřít záložku", 123 | "openTab": "Otevřít záložku v novém okně", 124 | "remove": "Smazat", 125 | "removefailed": "Mazání záložky selhalo", 126 | "savefailed": "Ukládání záložky selhalo", 127 | "update": "Upravit", 128 | "zoomToExtent": "" 129 | }, 130 | "bottombar": { 131 | "mousepos_label": "Souřadnice", 132 | "scale_label": "Měřítko", 133 | "terms_label": "Podmínky použití", 134 | "viewertitle_label": "" 135 | }, 136 | "compare3d": { 137 | "clipplane": "", 138 | "compare_objects": "", 139 | "toggleall": "" 140 | }, 141 | "cookiepopup": { 142 | "accept": "", 143 | "message": "" 144 | }, 145 | "copybtn": { 146 | "click_to_copy": "Zkopírovat do schránky", 147 | "copied": "Zkopírováno", 148 | "copyfailed": "" 149 | }, 150 | "cyclomedia": { 151 | "clickonmap": "", 152 | "initializing": "", 153 | "loaderror": "", 154 | "loading": "Načítání...", 155 | "login": "", 156 | "scalehint": "", 157 | "title": "Cyclomedia" 158 | }, 159 | "draw3d": { 160 | "cone": "", 161 | "cuboid": "", 162 | "cylinder": "", 163 | "delete": "", 164 | "drawings": "", 165 | "intersect": "", 166 | "newgroupprompt": "", 167 | "numericinput": "", 168 | "pick": "", 169 | "position": "", 170 | "pyramid": "", 171 | "rotate": "", 172 | "rotation": "", 173 | "scale": "", 174 | "sphere": "", 175 | "subtract": "", 176 | "thescale": "", 177 | "translate": "", 178 | "undoBool": "", 179 | "union": "", 180 | "wedge": "" 181 | }, 182 | "editing": { 183 | "add": "Přidat", 184 | "attrtable": "", 185 | "canceldelete": "Neodstraňovat", 186 | "clearpicture": "", 187 | "commit": "Potvrdit", 188 | "commitfailed": "", 189 | "contraintviolation": "", 190 | "create": "Vytvořit", 191 | "delete": "Odstranit", 192 | "discard": "Vyřadit", 193 | "draw": "Kreslit", 194 | "feature": "Prvek", 195 | "geomreadonly": "", 196 | "invalidform": "", 197 | "maximize": "Maximální", 198 | "minimize": "Minimální", 199 | "noeditablelayers": "Needitovatelná vrstva.", 200 | "paint": "", 201 | "pick": "Výběr", 202 | "pickdrawfeature": "", 203 | "reallydelete": "Odstranit", 204 | "relationcommitfailed": "", 205 | "select": "Vybrat", 206 | "takepicture": "", 207 | "unsavedchanged": "" 208 | }, 209 | "featureform": { 210 | "feature": "Prvek", 211 | "noresults": "Žádné výsledky", 212 | "querying": "Načítání...", 213 | "title": "Editační formulář" 214 | }, 215 | "featuresearch": { 216 | "noresults": "", 217 | "query": "", 218 | "select": "", 219 | "title": "" 220 | }, 221 | "fileselector": { 222 | "files": "Soubory", 223 | "placeholder": "Vybrat soubor..." 224 | }, 225 | "geomdigitizer": { 226 | "applink": "", 227 | "bufferlayername": "", 228 | "chooselink": "", 229 | "clear": "", 230 | "identifypick": "", 231 | "identifypickregion": "", 232 | "layername": "", 233 | "line_buffer": "", 234 | "point_buffer": "", 235 | "selfinter": "", 236 | "send": "", 237 | "wait": "" 238 | }, 239 | "heightprofile": { 240 | "asl": "m n. m.", 241 | "distance": "Vzdálenost", 242 | "drawnodes": "", 243 | "error": "", 244 | "export": "Export výškového profilu", 245 | "height": "Výška", 246 | "loading": "Výpočet výškového profilu...", 247 | "loadingimage": "", 248 | "print": "", 249 | "title": "" 250 | }, 251 | "hideobjects3d": { 252 | "clickonmap": "", 253 | "object": "", 254 | "restore": "", 255 | "restoreall": "" 256 | }, 257 | "identify": { 258 | "aggregatedreport": "", 259 | "clipboard": "Zkopírovat do schránky", 260 | "download": "", 261 | "export": "Exportovat", 262 | "featureReport": "Report prvku", 263 | "featurecount": "", 264 | "layerall": "", 265 | "link": "Odkaz", 266 | "noattributes": "Bez atributů", 267 | "noresults": "V tomto bodu nejsou k dispozici informace o žádném prvku", 268 | "querying": "Dotazování...", 269 | "reportfail": "", 270 | "selectlayer": "", 271 | "title": "Informace o prvku" 272 | }, 273 | "imageeditor": { 274 | "confirmclose": "", 275 | "title": "" 276 | }, 277 | "importlayer": { 278 | "addfailed": "Přidání vrstvy selhalo", 279 | "addlayer": "Přidat vrstvu", 280 | "asgroup": "", 281 | "connect": "Připojit", 282 | "filter": "Filtr...", 283 | "loading": "Načítání...", 284 | "localfile": "Soubor z počítače", 285 | "nofeatures": "Žádné prvku nebyly importovány.", 286 | "noresults": "Bez výsledku nebo nevalidní URL", 287 | "notgeopdf": "", 288 | "shpreprojectionerror": "", 289 | "supportedformats": "", 290 | "unknownproj": "", 291 | "url": "URL", 292 | "urlplaceholder": "Vložit URL pro WMS, WMTS, WFS..." 293 | }, 294 | "infotool": { 295 | "clickhelpPoint": "Klikněte na bod, o kterém chcete zobrazit další informace.", 296 | "clickhelpPolygon": "Nakreslete polygon okolo prvků, ke kterým chcete zobrazit další informace.", 297 | "clickhelpRadius": "Nastavte velikost okruhu a klikněte na místo, okolo kterého chcete načíst informace o prvcích.", 298 | "radius": "Velikost okruhu" 299 | }, 300 | "layercatalog": { 301 | "windowtitle": "Katalog vrstev" 302 | }, 303 | "layerinfo": { 304 | "abstract": "Abstraktní", 305 | "attribution": "Vlastník", 306 | "dataUrl": "Data URL", 307 | "keywords": "Klíčová slova", 308 | "legend": "Legenda", 309 | "maxscale": "Největší měřítko", 310 | "metadataUrl": "Metadata URL", 311 | "minscale": "Nejmenší měřítko", 312 | "title": "Informace o vrstvě" 313 | }, 314 | "layertree": { 315 | "compare": "Porovnat vrchní vrstvy", 316 | "deletealllayers": "Odstranit všechny vrstvy", 317 | "importlayer": "Importovat vrstvu", 318 | "maptip": "Zobrazovat bubliny nad mapou", 319 | "printlegend": "Tisk legendy", 320 | "separator": "", 321 | "separatortooltip": "", 322 | "transparency": "Průhlednost", 323 | "visiblefilter": "Skrýt nezobrazující se vrstvy", 324 | "zoomtolayer": "Vycentrovat na vrstvu" 325 | }, 326 | "layertree3d": { 327 | "import": "", 328 | "importobjects": "", 329 | "layers": "", 330 | "objects": "", 331 | "supportedformats": "", 332 | "zoomtoobject": "" 333 | }, 334 | "linkfeatureform": { 335 | "cancel": "", 336 | "close": "", 337 | "drawhint": "", 338 | "pickhint": "" 339 | }, 340 | "locate": { 341 | "feetUnit": "stopy", 342 | "metersUnit": "metry", 343 | "popup": "Jste uvnitř {distance} {unit} z tohoto bodu", 344 | "statustooltip": { 345 | "DISABLED": "Poloha: vypnuta", 346 | "ENABLED": "Poloha: zapnuta", 347 | "FOLLOWING": "Poloha: následující", 348 | "LOCATING": "Poloha: načítá se...", 349 | "PERMISSION_DENIED": "Poloha: nepovoleno" 350 | } 351 | }, 352 | "map": { 353 | "loading": "Načítání...", 354 | "resetrotation": "Obnovit orientaci mapy" 355 | }, 356 | "map3d": { 357 | "syncview": "", 358 | "terrain": "", 359 | "title": "" 360 | }, 361 | "mapexport": { 362 | "configuration": "", 363 | "format": "Formát:", 364 | "resolution": "Rozlišení:", 365 | "scale": "Měřítko", 366 | "size": "Velikost", 367 | "submit": "Export", 368 | "usersize": "Vybrat na mapě...", 369 | "wait": "Čekejte..." 370 | }, 371 | "mapfilter": { 372 | "addcustomfilter": "", 373 | "brokenrendering": "", 374 | "cancel": "", 375 | "geomfilter": "", 376 | "hidefiltergeom": "", 377 | "invalidfilter": "", 378 | "save": "", 379 | "select": "", 380 | "selectlayer": "", 381 | "timefilter": "", 382 | "timefrom": "", 383 | "timeto": "" 384 | }, 385 | "mapinfotooltip": { 386 | "elevation": "Nadmořská výška", 387 | "title": "Poloha" 388 | }, 389 | "maplegend": { 390 | "bboxdependent": "Pouze pro prvky v zobrazující se oblasti", 391 | "onlyvisible": "Pouze pro zobrazené vrstvy", 392 | "scaledependent": "Pouze pro prvky v současném přiblížení", 393 | "windowtitle": "Legenda" 394 | }, 395 | "maplight3d": { 396 | "ambientLightIntensity": "", 397 | "animationstep": "", 398 | "date": "", 399 | "dayspersec": "", 400 | "directionalLightIntensity": "", 401 | "helpersVisible": "", 402 | "minspersec": "", 403 | "normalBias": "", 404 | "shadowBias": "", 405 | "shadowMapSize": "", 406 | "shadowType": "", 407 | "shadowVolumeFar": "", 408 | "shadowVolumeNear": "", 409 | "shadowintensity": "", 410 | "shadows": "", 411 | "showadvanced": "", 412 | "time": "", 413 | "zFactor": "" 414 | }, 415 | "measureComponent": { 416 | "absolute": "", 417 | "areaLabel": "Plocha", 418 | "bearingLabel": "Střed", 419 | "ground": "", 420 | "imperial": "Imperiálně", 421 | "lengthLabel": "Délka", 422 | "metric": "Metricky", 423 | "pointLabel": "Poloha" 424 | }, 425 | "misc": { 426 | "ctrlclickhint": "" 427 | }, 428 | "navbar": { 429 | "perpage": "na stránku" 430 | }, 431 | "newspopup": { 432 | "dialogclose": "Zavřít", 433 | "dontshowagain": "Znovu nezobrazovat", 434 | "title": "Novinky" 435 | }, 436 | "numericinput": { 437 | "angle": "", 438 | "featureunsupported": "", 439 | "height": "", 440 | "nofeature": "", 441 | "side": "", 442 | "width": "", 443 | "windowtitle": "" 444 | }, 445 | "panoramax": { 446 | "notfound": "", 447 | "title": "" 448 | }, 449 | "pickfeature": { 450 | "querying": "" 451 | }, 452 | "portal": { 453 | "filter": "", 454 | "menulabel": "" 455 | }, 456 | "print": { 457 | "atlasfeature": "", 458 | "download": "", 459 | "download_as_onepdf": "", 460 | "download_as_onezip": "", 461 | "download_as_single": "", 462 | "format": "Formát", 463 | "grid": "Mřížka:", 464 | "layout": "Rovržení:", 465 | "legend": "Legenda", 466 | "maximize": "Maximální", 467 | "minimize": "Minimální", 468 | "nolayouts": "Vybrané téma nepodporuje tisk", 469 | "notheme": "Není vybráno téma", 470 | "output": "", 471 | "overlap": "", 472 | "pickatlasfeature": "", 473 | "resolution": "Rozlišení", 474 | "rotation": "Orientace", 475 | "save": "", 476 | "scale": "Měřítko", 477 | "series": "", 478 | "submit": "Tisk", 479 | "wait": "Čekejte..." 480 | }, 481 | "qtdesignerform": { 482 | "loading": "" 483 | }, 484 | "redlining": { 485 | "border": "Okraj", 486 | "buffer": "", 487 | "buffercompute": "", 488 | "bufferdistance": "", 489 | "bufferlayer": "", 490 | "bufferlayername": "", 491 | "bufferselectfeature": "", 492 | "circle": "", 493 | "delete": "", 494 | "draw": "", 495 | "edit": "", 496 | "ellipse": "", 497 | "export": "", 498 | "freehand": "", 499 | "label": "Popisek", 500 | "layer": "Vrstva", 501 | "layertitle": "", 502 | "line": "Linie", 503 | "markers": "", 504 | "measurements": "", 505 | "numericinput": "", 506 | "pick": "Výběr", 507 | "point": "Bod", 508 | "polygon": "Polygon", 509 | "rectangle": "", 510 | "size": "Velikost", 511 | "square": "", 512 | "text": "Text", 513 | "transform": "", 514 | "width": "Šířka" 515 | }, 516 | "reports": { 517 | "all": "", 518 | "download": "", 519 | "pick": "", 520 | "region": "", 521 | "selectlayer": "" 522 | }, 523 | "routing": { 524 | "add": "", 525 | "addviapoint": "Přes tento bod", 526 | "arriveat": "", 527 | "clear": "", 528 | "computefailed": "", 529 | "computing": "", 530 | "excludepolygons": "", 531 | "export": "", 532 | "fastest": "", 533 | "fromhere": "Odtud", 534 | "importerror": "", 535 | "importhint": "", 536 | "importpoints": "", 537 | "iso_intervals": "", 538 | "iso_mode": "", 539 | "iso_mode_distance": "", 540 | "iso_mode_time": "", 541 | "isocenter": "Centrum", 542 | "isoextracenter": "Širší centrum", 543 | "leaveat": "", 544 | "leavenow": "", 545 | "maxspeed": "", 546 | "method": "", 547 | "mode_auto": "", 548 | "mode_bicycle": "", 549 | "mode_heavyvehicle": "", 550 | "mode_transit": "", 551 | "mode_walking": "", 552 | "optimized_route": "", 553 | "reachability": "Dostupnost", 554 | "roundtrip": "", 555 | "route": "Trasa", 556 | "shortest": "", 557 | "tohere": "Sem", 558 | "useferries": "", 559 | "usehighways": "", 560 | "usetollways": "", 561 | "windowtitle": "" 562 | }, 563 | "scratchdrawing": { 564 | "finish": "" 565 | }, 566 | "serviceinfo": { 567 | "abstract": "Abstrakt", 568 | "contactEmail": "Kontaktní e-mail", 569 | "contactOrganization": "Organizace", 570 | "contactPerson": "Kontaktní osoba", 571 | "contactPhone": "Kontaktní telefon", 572 | "contactPosition": "Pozice", 573 | "keywords": "Klíčová slova", 574 | "onlineResource": "Odkaz", 575 | "title": "Informace o tématu" 576 | }, 577 | "settings": { 578 | "bookmarks": "", 579 | "colorscheme": "Barevné schéma", 580 | "confirmlang": "Pro změnu jazyka je třeba aplikaci znovu načíst. Pokračovat?", 581 | "default": "", 582 | "defaulttheme": "", 583 | "defaultthemefailed": "", 584 | "language": "Jazyk", 585 | "systemlang": "Systémový jazyk", 586 | "themes": "" 587 | }, 588 | "share": { 589 | "QRCodeLinkTitle": "QR kód", 590 | "directLinkTitle": "Přes přímý odkaz", 591 | "expires": "", 592 | "norestriction": "", 593 | "refresh": "Generovat odkaz", 594 | "restricttogroup": "", 595 | "shareTitle": "QWC2", 596 | "showpin": "Zobrazit bod", 597 | "socialIntro": "Na sociální síti" 598 | }, 599 | "snapping": { 600 | "edge": "", 601 | "loading": "Načítání...", 602 | "snappingenabled": "", 603 | "vertex": "" 604 | }, 605 | "themelayerslist": { 606 | "addlayer": "Přidat vrstvu", 607 | "addlayerstotheme": "Přidat vrstvy do aktuálního tématu", 608 | "addselectedlayers": "Přidat vybrané vrstvy", 609 | "existinglayers": "" 610 | }, 611 | "themeswitcher": { 612 | "addlayerstotheme": "Přidat vrstvy do aktuálního tématu", 613 | "addtotheme": "Přidat k aktuálnímu tématu", 614 | "changedefaulttheme": "", 615 | "confirmswitch": "Vrstvy které nejsou součástí tématu budou při přepnutí tématu ztraceny. Pokračovat?", 616 | "filter": "Filtr...", 617 | "match": { 618 | "abstract": "Abstrakt", 619 | "keywords": "Klíčová slova", 620 | "title": "Název" 621 | }, 622 | "openintab": "Otevřít v novém okně", 623 | "restrictedthemeinfo": "" 624 | }, 625 | "timemanager": { 626 | "animationinterval": "", 627 | "classify": "", 628 | "classifynone": "", 629 | "displayfeatures": "", 630 | "displaylayers": "", 631 | "displayminimal": "", 632 | "edit": "", 633 | "endtime": "", 634 | "filterwarning": "", 635 | "future": "", 636 | "group": "", 637 | "groupnone": "", 638 | "home": "", 639 | "loading": "Načítání...", 640 | "loop": "", 641 | "markers": "", 642 | "notemporaldata": "", 643 | "now": "", 644 | "past": "", 645 | "play": "", 646 | "playrev": "", 647 | "rewind": "", 648 | "starttime": "", 649 | "stepback": "", 650 | "stepfwd": "", 651 | "stepsize": "", 652 | "stop": "", 653 | "timeline": "", 654 | "timeline_fixed": "", 655 | "timeline_infinite": "", 656 | "timelinedisplay": "", 657 | "timelinescale": "", 658 | "title": "", 659 | "toggle": "", 660 | "unit": { 661 | "century": "", 662 | "days": "", 663 | "decade": "", 664 | "hours": "", 665 | "milliseconds": "", 666 | "minutes": "", 667 | "months": "", 668 | "seconds": "", 669 | "years": "" 670 | }, 671 | "zoomin": "Přiblížit", 672 | "zoomout": "Oddálit" 673 | }, 674 | "tooltip": { 675 | "background": "Podkladové mapy", 676 | "fullscreendisable": "Ukončit režim celé obrazovky", 677 | "fullscreenenable": "Na celou obrazovku", 678 | "home": "Výchozí zobrazení mapy", 679 | "zoomin": "Přiblížit", 680 | "zoomout": "Oddálit" 681 | }, 682 | "valuetool": { 683 | "all": "", 684 | "allbands": "", 685 | "alllayers": "", 686 | "bands": "", 687 | "graph": "", 688 | "layer": "", 689 | "nodata": "", 690 | "options": "", 691 | "selectedbands": "", 692 | "selectedlayers": "", 693 | "selectlayersbands": "", 694 | "showbands": "", 695 | "showlayers": "", 696 | "table": "", 697 | "title": "", 698 | "visiblelayers": "" 699 | }, 700 | "vectorlayerpicker": { 701 | "none": "Žádná", 702 | "prompt": "Zadejte název vrstvy" 703 | }, 704 | "window": { 705 | "close": "Zavřít", 706 | "detach": "", 707 | "dock": "Přichytit", 708 | "embed": "", 709 | "maximize": "Maximalizovat", 710 | "minimize": "Minimalizovat", 711 | "undock": "Zrušit přichycení", 712 | "unmaximize": "Obnovit velikost okna", 713 | "unminimize": "Obnovit velikost okna" 714 | } 715 | } 716 | } 717 | -------------------------------------------------------------------------------- /static/translations/ja-JP.json: -------------------------------------------------------------------------------- 1 | { 2 | "locale": "ja-JP", 3 | "messages": { 4 | "appmenu": { 5 | "items": { 6 | "ExternalLink": "", 7 | "Bookmark": "ブックマーク", 8 | "Compare3D": "比較", 9 | "Editing": "編集", 10 | "ExportObjects3D": "オブジェクトをエクスポート", 11 | "Help": "ヘルプ", 12 | "HideObjects3D": "オブジェクトを非表示", 13 | "LayerTree": "レイヤ & 凡例", 14 | "LayerTree3D": "レイヤ", 15 | "MapExport": "地図をエクスポート", 16 | "MapExport3D": "地図をエクスポート", 17 | "MapFilter": "マップ・フィルタ", 18 | "MapLight3D": "光と影", 19 | "Print": "印刷", 20 | "Reports": "レポート", 21 | "Settings": "設定", 22 | "Share": "リンクを共有", 23 | "ThemeSwitcher": "テーマ", 24 | "AttributeTable": "属性テーブル", 25 | "AuthenticationLogin": "ログイン", 26 | "AuthenticationLogout": "ログアウト", 27 | "Cyclomedia": "Cyclomedia", 28 | "Draw3D": "作図", 29 | "FeatureForm": "地物フォーム", 30 | "FeatureSearch": "地物検索", 31 | "GeometryDigitizer": "ジオメトリ・デジタイザ", 32 | "IdentifyPoint": "点で地物を確認", 33 | "IdentifyRegion": "領域内の地物を確認", 34 | "LayerCatalog": "レイヤ・カタログ", 35 | "Login": "ログイン", 36 | "Logout": "ログアウト", 37 | "MapLegend": "凡例", 38 | "Measure": "計測", 39 | "Measure3D": "計測", 40 | "MeasureLineString": "ラインを測る", 41 | "MeasurePolygon": "ポリゴンを測る", 42 | "NewsPopup": "ニュース", 43 | "Panoramax": "Panoramax", 44 | "Portal": "ポータル", 45 | "PrintScreen3D": "ラスタ・エクスポート", 46 | "Redlining": "スケッチ", 47 | "Routing": "ルート探索", 48 | "Tools": "地図ツール", 49 | "TimeManager": "タイム・マネージャ", 50 | "View3D": "3D 表示" 51 | }, 52 | "filter": "メニューをフィルタ...", 53 | "menulabel": "地図 & ツール" 54 | }, 55 | "search": { 56 | "coordinates": "", 57 | "all": "全て", 58 | "circleradius": "円の半径", 59 | "clearfilter": "クリア", 60 | "existinglayer": "レイヤは既に地図の中に存在します", 61 | "filter": "検索を詳細化", 62 | "layers": "レイヤ", 63 | "limittoarea": "領域に限定", 64 | "more": "その他 {0} の検索結果", 65 | "nodescription": "説明がありません", 66 | "none": "無し", 67 | "noresults": "検索結果無し", 68 | "placeholder": "場所を検索、または地図を追加...", 69 | "places": "場所", 70 | "providerselection": "検索プロバイダ", 71 | "recent": "最近の検索", 72 | "search": "検索", 73 | "themelayers": "テーマのレイヤ", 74 | "themes": "テーマ", 75 | "unknownmore": "更なる結果" 76 | }, 77 | "colorschemes": { 78 | "default": "", 79 | "dark": "", 80 | "highcontrast": "" 81 | }, 82 | "app": { 83 | "missingbg": "背景が見付かりません \"{0}\", デフォルトの背景を表示します。", 84 | "missinglayers": "以下のレイヤが見付かりません: {0}。", 85 | "missingpermalink": "指定された永続リンクは無効または期限切れです。", 86 | "missingprojection": "テーマをロード出来ません \"{0}\": 投影法 {1} は定義されていません。", 87 | "missingtheme": "テーマが見付かりません \"{0}\"、デフォルトのテーマをロードします。" 88 | }, 89 | "attribtable": { 90 | "addfeature": "地物を追加", 91 | "commit": "変更された行をコミット", 92 | "csvexport": "CSV エクスポート", 93 | "delete": "削除", 94 | "deletefailed": "一つ以上の地物を削除できませんでした", 95 | "deletefeatures": "選択された地物を削除", 96 | "deleting": "地物を削除中...", 97 | "discard": "変更された行を元に戻す", 98 | "formeditmode": "選択された地物を編集フォームで開く", 99 | "geomnoadd": "編集フォームを使ってこのレイヤに新しい地物を追加して下さい", 100 | "limittoextent": "地図の範囲に限定", 101 | "loadfailed": "地物のデータをロード出来ませんでした", 102 | "loading": "ロード中...", 103 | "nodelete": "削除しない", 104 | "nogeomnoform": "ジオメトリの無いレイヤに対して編集フォームは使用できません", 105 | "pleasereload": "「再ロード」を押して属性テーブルをロードして下さい...", 106 | "reload": "再ロード", 107 | "selectlayer": "レイヤを選択...", 108 | "title": "属性テーブル", 109 | "zoomtoselection": "選択された地物にズーム" 110 | }, 111 | "bgswitcher": { 112 | "nobg": "背景無し" 113 | }, 114 | "bookmark": { 115 | "add": "新しいブックマークを作成", 116 | "addfailed": "ブックマークを作成出来ませんでした", 117 | "description": "説明を入力...", 118 | "lastUpdate": "最後の保存", 119 | "manage": "ブックマークを管理", 120 | "nobookmarks": "ブックマーク無し", 121 | "notloggedin": "ブックマークを保存するためにはログインする必要があります", 122 | "open": "ブックマークを現在のタブで開く", 123 | "openTab": "ブックマークをタブで開く", 124 | "remove": "ブックマークを削除", 125 | "removefailed": "ブックマークを削除出来ませんでした", 126 | "savefailed": "ブックマークを更新出来ませんでした", 127 | "update": "ブックマークを更新", 128 | "zoomToExtent": "領域にズーム" 129 | }, 130 | "bottombar": { 131 | "mousepos_label": "座標", 132 | "scale_label": "縮尺", 133 | "terms_label": "使用許諾条件", 134 | "viewertitle_label": "QWC2 デモ" 135 | }, 136 | "compare3d": { 137 | "clipplane": "クリッピング平面", 138 | "compare_objects": "オブジェクトを比較", 139 | "toggleall": "全てトグル" 140 | }, 141 | "cookiepopup": { 142 | "accept": "許容する", 143 | "message": "当ウェブサイトはクッキーを使用します。" 144 | }, 145 | "copybtn": { 146 | "click_to_copy": "クリップボードにコピー", 147 | "copied": "コピーしました", 148 | "copyfailed": "コピー出来ませんでした" 149 | }, 150 | "cyclomedia": { 151 | "clickonmap": "地図上のレコーディングをクリック", 152 | "initializing": "Cyclomedia を初期設定中...", 153 | "loaderror": "Cyclomedia を初期設定出来ませんでした", 154 | "loading": "ビューをロード中...", 155 | "login": "ログイン", 156 | "scalehint": "レコーディングは、縮尺 1:{0} 未満の地図でしか見ることが出来ません。", 157 | "title": "Cyclomedia ビューワ" 158 | }, 159 | "draw3d": { 160 | "cone": "円錐", 161 | "cuboid": "直方体", 162 | "cylinder": "円柱", 163 | "delete": "削除", 164 | "drawings": "作図", 165 | "intersect": "交差", 166 | "newgroupprompt": "新しい作図グループ", 167 | "numericinput": "数値入力", 168 | "pick": "選択", 169 | "position": "位置", 170 | "pyramid": "四角錐", 171 | "rotate": "回転", 172 | "rotation": "回転角", 173 | "scale": "スケール", 174 | "sphere": "球体", 175 | "subtract": "差分", 176 | "thescale": "スケール", 177 | "translate": "移動", 178 | "undoBool": "ブーリアン操作を取り消し", 179 | "union": "合成(和)", 180 | "wedge": "くさび形" 181 | }, 182 | "editing": { 183 | "add": "追加", 184 | "attrtable": "テーブル", 185 | "canceldelete": "削除しない", 186 | "clearpicture": "クリア", 187 | "commit": "コミット", 188 | "commitfailed": "コミット出来ませんでした", 189 | "contraintviolation": "制約違反", 190 | "create": "作成", 191 | "delete": "削除", 192 | "discard": "中止", 193 | "draw": "作図", 194 | "feature": "地物", 195 | "geomreadonly": "ジオメトリが 0 でない Z 値を含んでいるため、リード・オンリーです。", 196 | "invalidform": "無効なフォーム", 197 | "maximize": "最大化", 198 | "minimize": "最小化", 199 | "noeditablelayers": "編集可能なレイヤが有りません。", 200 | "paint": "修正", 201 | "pick": "選択", 202 | "pickdrawfeature": "既存のジオメトリをクローンして作図", 203 | "reallydelete": "削除", 204 | "relationcommitfailed": "関連する値にコミット出来ないものがありました。詳細はアイコンのツールチップを参照して下さい。", 205 | "select": "選択", 206 | "takepicture": "撮影する", 207 | "unsavedchanged": "保存されていない変更があります。それでもこのページを離れますか?" 208 | }, 209 | "featureform": { 210 | "feature": "地物", 211 | "noresults": "検索結果無し", 212 | "querying": "検索中...", 213 | "title": "地物フォーム" 214 | }, 215 | "featuresearch": { 216 | "noresults": "検索結果無し", 217 | "query": "検索", 218 | "select": "選択...", 219 | "title": "地物検索" 220 | }, 221 | "fileselector": { 222 | "files": "ファイル", 223 | "placeholder": "ファイルを選択..." 224 | }, 225 | "geomdigitizer": { 226 | "applink": "アプリケーション", 227 | "bufferlayername": "デジタイズ・バッファ", 228 | "chooselink": "選択...", 229 | "clear": "レイヤをクリア", 230 | "identifypick": "地物をピック", 231 | "identifypickregion": "領域内の地物をピック", 232 | "layername": "デジタイズ", 233 | "line_buffer": "線を描く (バッファに)", 234 | "point_buffer": "点を描く (バッファに)", 235 | "selfinter": "一つ以上のポリゴンが自己交差を持っています", 236 | "send": "スキャン", 237 | "wait": "ロード中..." 238 | }, 239 | "heightprofile": { 240 | "asl": "a.s.l.", 241 | "distance": "距離", 242 | "drawnodes": "ノードを作図", 243 | "error": "標高プロファイルを計算できませんでした", 244 | "export": "プロファイルをエクスポート", 245 | "height": "標高", 246 | "loading": "標高プロファイルを計算中...", 247 | "loadingimage": "地図画像をロード中...", 248 | "print": "標高プロファイルを印刷", 249 | "title": "標高プロファイル" 250 | }, 251 | "hideobjects3d": { 252 | "clickonmap": "非表示にするオブジェクトをクリック...", 253 | "object": "オブジェクト", 254 | "restore": "オブジェクトを元に戻す", 255 | "restoreall": "すべて元に戻す" 256 | }, 257 | "identify": { 258 | "aggregatedreport": "集合レポート", 259 | "clipboard": "クリップボードにコピー", 260 | "download": "ダウンロード", 261 | "export": "エクスポート", 262 | "featureReport": "地物レポート", 263 | "featurecount": "地物数", 264 | "layerall": "全てのレイヤ", 265 | "link": "リンク", 266 | "noattributes": "属性無し", 267 | "noresults": "選択された点には情報がありません", 268 | "querying": "検索中...", 269 | "reportfail": "レポートを生成することが出来ませんでした", 270 | "selectlayer": "レイヤを選択...", 271 | "title": "地物情報" 272 | }, 273 | "imageeditor": { 274 | "confirmclose": "保存せずに閉じますか?", 275 | "title": "イメージ・エディタ" 276 | }, 277 | "importlayer": { 278 | "addfailed": "レイヤを追加できませんでした。", 279 | "addlayer": "レイヤを追加", 280 | "asgroup": "グループとして追加", 281 | "connect": "接続", 282 | "filter": "フィルタ...", 283 | "loading": "ロード中...", 284 | "localfile": "ローカル・ファイル", 285 | "nofeatures": "地物をインポート出来ませんでした。", 286 | "noresults": "検索結果無し、または無効な URL", 287 | "notgeopdf": "選択されたファイルは GeoPDF ではないようです。", 288 | "shpreprojectionerror": "シェープファイルのジオメトリを投影できませんでした。間違った場所に置かれたかも知れません。", 289 | "supportedformats": "サポートされている形式: KML, GeoJSON, GeoPDF, SHP (zip形式)", 290 | "unknownproj": "選択された GeoPDF は未知の投影法を使っています: {0}。", 291 | "url": "URL", 292 | "urlplaceholder": "WMS, WMTS, WFS の URL を入力..." 293 | }, 294 | "infotool": { 295 | "clickhelpPoint": "確認したい地点をクリック...", 296 | "clickhelpPolygon": "確認したい領域をポリゴンで囲む...", 297 | "clickhelpRadius": "中心をクリックして半径を指定し、円内を確認...", 298 | "radius": "半径" 299 | }, 300 | "layercatalog": { 301 | "windowtitle": "レイヤ・カタログ" 302 | }, 303 | "layerinfo": { 304 | "abstract": "概要", 305 | "attribution": "帰属", 306 | "dataUrl": "データ URL", 307 | "keywords": "キーワード", 308 | "legend": "凡例", 309 | "maxscale": "最大描画縮尺", 310 | "metadataUrl": "メタデータ URL", 311 | "minscale": "最小描画縮尺", 312 | "title": "レイヤ情報" 313 | }, 314 | "layertree": { 315 | "compare": "トップ・レイヤを比較", 316 | "deletealllayers": "全てのレイヤを削除", 317 | "importlayer": "レイヤをインポート", 318 | "maptip": "レイヤのマップ・チップを表示", 319 | "printlegend": "凡例を印刷", 320 | "separator": "区切り", 321 | "separatortooltip": "区切りを追加", 322 | "transparency": "透明度", 323 | "visiblefilter": "不可視のレイヤをフィルタ", 324 | "zoomtolayer": "レイヤにズーム" 325 | }, 326 | "layertree3d": { 327 | "import": "インポート", 328 | "importobjects": "オブジェクトをインポート", 329 | "layers": "レイヤ", 330 | "objects": "オブジェクト", 331 | "supportedformats": "サポートされている形式", 332 | "zoomtoobject": "オブジェクトにズーム" 333 | }, 334 | "linkfeatureform": { 335 | "cancel": "キャンセル", 336 | "close": "閉じる", 337 | "drawhint": "地図上の地物を作図...", 338 | "pickhint": "地図上の地物を選択..." 339 | }, 340 | "locate": { 341 | "feetUnit": "フィート", 342 | "metersUnit": "メートル", 343 | "popup": "あなたはこの点から {distance} {unit} 内にいます", 344 | "statustooltip": { 345 | "DISABLED": "位置情報: 無効", 346 | "ENABLED": "位置情報: 有効", 347 | "FOLLOWING": "位置情報: 追跡中", 348 | "LOCATING": "位置情報: 取得中...", 349 | "PERMISSION_DENIED": "位置情報: 許可無し" 350 | } 351 | }, 352 | "map": { 353 | "loading": "ロード中...", 354 | "resetrotation": "回転をリセット" 355 | }, 356 | "map3d": { 357 | "syncview": "ビューを同期", 358 | "terrain": "地形", 359 | "title": "3D ビュー" 360 | }, 361 | "mapexport": { 362 | "configuration": "構成", 363 | "format": "形式", 364 | "resolution": "解像度", 365 | "scale": "縮尺", 366 | "size": "サイズ", 367 | "submit": "エクスポート", 368 | "usersize": "マップ上で選択...", 369 | "wait": "しばらくお待ちください..." 370 | }, 371 | "mapfilter": { 372 | "addcustomfilter": "カスタム・フィルタを追加", 373 | "brokenrendering": "無効なフィルタ式によって地図の表示が崩れることがあります", 374 | "cancel": "キャンセル", 375 | "geomfilter": "ジオメトリ", 376 | "hidefiltergeom": "フィルタ・ジオメトリを隠す", 377 | "invalidfilter": "無効なフィルタ式", 378 | "save": "保存", 379 | "select": "選択...", 380 | "selectlayer": "レイヤを選択", 381 | "timefilter": "Time", 382 | "timefrom": "From", 383 | "timeto": "To" 384 | }, 385 | "mapinfotooltip": { 386 | "elevation": "標高", 387 | "title": "位置" 388 | }, 389 | "maplegend": { 390 | "bboxdependent": "領域依存の凡例", 391 | "onlyvisible": "可視レイヤのみ", 392 | "scaledependent": "縮尺依存の凡例", 393 | "windowtitle": "凡例" 394 | }, 395 | "maplight3d": { 396 | "ambientLightIntensity": "環境光強度", 397 | "animationstep": "アニメーション・ステップ", 398 | "date": "日付", 399 | "dayspersec": "日数 / 秒", 400 | "directionalLightIntensity": "平行光源強度", 401 | "helpersVisible": "補助オブジェクト表示", 402 | "minspersec": "分 / 秒", 403 | "normalBias": "ノーマル・バイアス", 404 | "shadowBias": "シャドウ・バイアス", 405 | "shadowMapSize": "シャドウ・マップ・サイズ", 406 | "shadowType": "シャドウ・タイプ", 407 | "shadowVolumeFar": "シャドウ・ボリューム遠端", 408 | "shadowVolumeNear": "シャドウ・ボリューム近端", 409 | "shadowintensity": "影の強度", 410 | "shadows": "シャドウを有効化", 411 | "showadvanced": "詳細設定を表示", 412 | "time": "時刻", 413 | "zFactor": "Zファクター" 414 | }, 415 | "measureComponent": { 416 | "absolute": "m (海抜)", 417 | "areaLabel": "領域", 418 | "bearingLabel": "方角", 419 | "ground": "m (地上高)", 420 | "imperial": "ヤード・ポンド法", 421 | "lengthLabel": "長さ", 422 | "metric": "メートル法", 423 | "pointLabel": "位置" 424 | }, 425 | "misc": { 426 | "ctrlclickhint": "Ctrl+クリックで開く" 427 | }, 428 | "navbar": { 429 | "perpage": "/ page" 430 | }, 431 | "newspopup": { 432 | "dialogclose": "閉じる", 433 | "dontshowagain": "再び表示しない", 434 | "title": "ニュース" 435 | }, 436 | "numericinput": { 437 | "angle": "角度", 438 | "featureunsupported": "このジオメトリに対しては数値入力は使用できません", 439 | "height": "高さ", 440 | "nofeature": "アクティブな地物がありません", 441 | "side": "サイド", 442 | "width": "幅", 443 | "windowtitle": "数値入力" 444 | }, 445 | "panoramax": { 446 | "notfound": "この場所には表示できる画像がありません。", 447 | "title": "Panoramax Viewer" 448 | }, 449 | "pickfeature": { 450 | "querying": "検索中..." 451 | }, 452 | "portal": { 453 | "filter": "テーマをフィルタ...", 454 | "menulabel": "メニュー" 455 | }, 456 | "print": { 457 | "atlasfeature": "地図帳機能", 458 | "download": "ダウンロード", 459 | "download_as_onepdf": "1個の PDF 文書として", 460 | "download_as_onezip": "1個の ZIP ファイルとして", 461 | "download_as_single": "as single files", 462 | "format": "形式", 463 | "grid": "グリッド", 464 | "layout": "レイアウト", 465 | "legend": "凡例", 466 | "maximize": "最大化", 467 | "minimize": "最小化", 468 | "nolayouts": "選択されたテーマは印刷をサポートしていません", 469 | "notheme": "テーマが選択されていません", 470 | "output": "出力を印刷", 471 | "overlap": "オーバーラップ", 472 | "pickatlasfeature": "レイヤ {0} で選択...", 473 | "resolution": "解像度", 474 | "rotation": "回転", 475 | "save": "保存", 476 | "scale": "縮尺", 477 | "series": "シリーズを印刷", 478 | "submit": "印刷", 479 | "wait": "しばらくお待ち下さい..." 480 | }, 481 | "qtdesignerform": { 482 | "loading": "フォームをロード中..." 483 | }, 484 | "redlining": { 485 | "border": "境界線", 486 | "buffer": "バッファ", 487 | "buffercompute": "計算", 488 | "bufferdistance": "距離", 489 | "bufferlayer": "出力先", 490 | "bufferlayername": "バッファ", 491 | "bufferselectfeature": "バッファを適用する地物を選択...", 492 | "circle": "円", 493 | "delete": "削除", 494 | "draw": "作図", 495 | "edit": "編集", 496 | "ellipse": "楕円", 497 | "export": "エクスポート", 498 | "freehand": "フリーハンド描画", 499 | "label": "ラベル", 500 | "layer": "レイヤ", 501 | "layertitle": "スケッチ", 502 | "line": "線", 503 | "markers": "マーカー", 504 | "measurements": "計測結果を表示", 505 | "numericinput": "数値入力", 506 | "pick": "ピック", 507 | "point": "点", 508 | "polygon": "ポリゴン", 509 | "rectangle": "四角形", 510 | "size": "サイズ", 511 | "square": "四角形", 512 | "text": "テキスト", 513 | "transform": "変形", 514 | "width": "幅" 515 | }, 516 | "reports": { 517 | "all": "全て", 518 | "download": "ダウンロード", 519 | "pick": "ピック", 520 | "region": "領域を選択", 521 | "selectlayer": "レポート・レイヤを選択..." 522 | }, 523 | "routing": { 524 | "add": "点を追加", 525 | "addviapoint": "ここを経由", 526 | "arriveat": "目的地点", 527 | "clear": "クリア", 528 | "computefailed": "計算できませんでした", 529 | "computing": "計算中...", 530 | "excludepolygons": "領域を除外", 531 | "export": "エクスポート", 532 | "fastest": "最速", 533 | "fromhere": "出発地点", 534 | "importerror": "インポート出来ませんでした。ファイルの中身は点地物の GeoJSON FeatureCollection でなければなりません。", 535 | "importhint": "点地物の GeoJSON FeatureCollection を持つファイル", 536 | "importpoints": "インポート", 537 | "iso_intervals": "間隔", 538 | "iso_mode": "モード", 539 | "iso_mode_distance": "距離", 540 | "iso_mode_time": "時間", 541 | "isocenter": "中心", 542 | "isoextracenter": "追加の中心", 543 | "leaveat": "出発時刻", 544 | "leavenow": "今出発する", 545 | "maxspeed": "最大速度", 546 | "method": "方法", 547 | "mode_auto": "車", 548 | "mode_bicycle": "自転車", 549 | "mode_heavyvehicle": "大型車両", 550 | "mode_transit": "乗り換え", 551 | "mode_walking": "徒歩", 552 | "optimized_route": "最適化されたルート", 553 | "reachability": "到達可能性", 554 | "roundtrip": "往復", 555 | "route": "ルート", 556 | "shortest": "最短", 557 | "tohere": "ここへ行く", 558 | "useferries": "フェリーを使う", 559 | "usehighways": "高速道路を使う", 560 | "usetollways": "有料道路を使う", 561 | "windowtitle": "ルート探索" 562 | }, 563 | "scratchdrawing": { 564 | "finish": "完了" 565 | }, 566 | "serviceinfo": { 567 | "abstract": "概要", 568 | "contactEmail": "メール", 569 | "contactOrganization": "組織", 570 | "contactPerson": "担当者", 571 | "contactPhone": "電話", 572 | "contactPosition": "肩書き", 573 | "keywords": "キーワード", 574 | "onlineResource": "オンライン・リソース", 575 | "title": "テーマの情報" 576 | }, 577 | "settings": { 578 | "bookmarks": "ブックマーク", 579 | "colorscheme": "カラー・スキーム", 580 | "confirmlang": "言語を変更するためにアプリケーションを再ロードします。よろしいか?", 581 | "default": "デフォルト", 582 | "defaulttheme": "デフォルト・テーマ", 583 | "defaultthemefailed": "デフォルト・テーマを設定出来ませんでした: {0}", 584 | "language": "言語", 585 | "systemlang": "システム言語", 586 | "themes": "テーマ" 587 | }, 588 | "share": { 589 | "QRCodeLinkTitle": "QR コード", 590 | "directLinkTitle": "直接リンクで", 591 | "expires": "この永続リンクは {0} まで有効です。", 592 | "norestriction": "限定無し", 593 | "refresh": "永続リンクを生成", 594 | "restricttogroup": "グループに限定", 595 | "shareTitle": "QWC2", 596 | "showpin": "ピンを表示", 597 | "socialIntro": "あなたの好みの SNS で" 598 | }, 599 | "snapping": { 600 | "edge": "周縁にスナップ", 601 | "loading": "スナップしたジオメトリをロード中...", 602 | "snappingenabled": "スナップ有効", 603 | "vertex": "頂点にスナップ" 604 | }, 605 | "themelayerslist": { 606 | "addlayer": "レイヤを追加", 607 | "addlayerstotheme": "現在の地図にレイヤを追加", 608 | "addselectedlayers": "選択されたレイヤを追加", 609 | "existinglayers": "以下のレイヤは既に地図の中に存在します" 610 | }, 611 | "themeswitcher": { 612 | "addlayerstotheme": "現在の地図にレイヤを追加", 613 | "addtotheme": "現在のテーマに追加", 614 | "changedefaulttheme": "このテーマをデフォルト・テーマとして選択する", 615 | "confirmswitch": "テーマに無いレイヤはテーマを切替えると失われます。よろしいか?", 616 | "filter": "フィルタ...", 617 | "match": { 618 | "abstract": "概要", 619 | "keywords": "キーワード", 620 | "title": "タイトル" 621 | }, 622 | "openintab": "タブで開く", 623 | "restrictedthemeinfo": "テーマを閲覧する権限がありません。ログインして下さい。" 624 | }, 625 | "timemanager": { 626 | "animationinterval": "アニメーション間隔", 627 | "classify": "定義属性", 628 | "classifynone": "無し", 629 | "displayfeatures": "タイムラインと地物", 630 | "displaylayers": "タイムラインとレイヤ", 631 | "displayminimal": "タイムラインのみ", 632 | "edit": "編集", 633 | "endtime": "終了", 634 | "filterwarning": "マップ・フィルタがアクティブです", 635 | "future": "地物", 636 | "group": "グループ化属性", 637 | "groupnone": "無し", 638 | "home": "タイムラインをリセット", 639 | "loading": "ロード中...", 640 | "loop": "ループ", 641 | "markers": "マーカー", 642 | "notemporaldata": "マップの中に時間軸を持つ可視レイヤがありません。", 643 | "now": "現在", 644 | "past": "過去", 645 | "play": "再生", 646 | "playrev": "逆再生", 647 | "rewind": "巻き戻し", 648 | "starttime": "開始", 649 | "stepback": "後へステップ", 650 | "stepfwd": "前へステップ", 651 | "stepsize": "ステップ・サイズ", 652 | "stop": "停止", 653 | "timeline": "タイムライン", 654 | "timeline_fixed": "固定", 655 | "timeline_infinite": "無限", 656 | "timelinedisplay": "表示", 657 | "timelinescale": "タイムスケール (非直線性)", 658 | "title": "タイム・マネージャ", 659 | "toggle": "時間ナビゲーション", 660 | "unit": { 661 | "century": "世紀", 662 | "days": "日", 663 | "decade": "10年", 664 | "hours": "時間", 665 | "milliseconds": "ミリ秒", 666 | "minutes": "分", 667 | "months": "月", 668 | "seconds": "秒", 669 | "years": "年" 670 | }, 671 | "zoomin": "ズーム・イン", 672 | "zoomout": "ズーム・アウト" 673 | }, 674 | "tooltip": { 675 | "background": "背景を切り替える", 676 | "fullscreendisable": "全画面モードを終了", 677 | "fullscreenenable": "全画面モードにする", 678 | "home": "地図の初期領域を表示", 679 | "zoomin": "ズーム・イン", 680 | "zoomout": "ズーム・アウト" 681 | }, 682 | "valuetool": { 683 | "all": "", 684 | "allbands": "", 685 | "alllayers": "", 686 | "bands": "", 687 | "graph": "", 688 | "layer": "", 689 | "nodata": "", 690 | "options": "", 691 | "selectedbands": "", 692 | "selectedlayers": "", 693 | "selectlayersbands": "", 694 | "showbands": "", 695 | "showlayers": "", 696 | "table": "", 697 | "title": "", 698 | "visiblelayers": "" 699 | }, 700 | "vectorlayerpicker": { 701 | "none": "無し", 702 | "prompt": "レイヤ名を入力" 703 | }, 704 | "window": { 705 | "close": "閉じる", 706 | "detach": "切り離す", 707 | "dock": "ドック", 708 | "embed": "埋め込み", 709 | "maximize": "最大化", 710 | "minimize": "最小化", 711 | "undock": "アンドック", 712 | "unmaximize": "元のサイズに戻す", 713 | "unminimize": "元のサイズに戻す" 714 | } 715 | } 716 | } 717 | -------------------------------------------------------------------------------- /static/translations/pl-PL.json: -------------------------------------------------------------------------------- 1 | { 2 | "locale": "pl-PL", 3 | "messages": { 4 | "appmenu": { 5 | "items": { 6 | "ExternalLink": "", 7 | "Bookmark": "", 8 | "Compare3D": "", 9 | "Editing": "Edycja", 10 | "ExportObjects3D": "", 11 | "Help": "Pomoc", 12 | "HideObjects3D": "", 13 | "LayerTree": "Warstwy i ich legendy", 14 | "LayerTree3D": "", 15 | "MapExport": "Eksportuj mapę", 16 | "MapExport3D": "", 17 | "MapFilter": "", 18 | "MapLight3D": "", 19 | "Print": "Drukuj", 20 | "Reports": "", 21 | "Settings": "", 22 | "Share": "Udostępnij Link", 23 | "ThemeSwitcher": "Motyw", 24 | "AttributeTable": "", 25 | "AuthenticationLogin": "Zaloguj", 26 | "AuthenticationLogout": "Wyloguj", 27 | "Cyclomedia": "", 28 | "Draw3D": "", 29 | "FeatureForm": "", 30 | "FeatureSearch": "", 31 | "GeometryDigitizer": "", 32 | "IdentifyPoint": "", 33 | "IdentifyRegion": "Identifikuj Obszar", 34 | "LayerCatalog": "", 35 | "Login": "Zaloguj", 36 | "Logout": "Wyloguj", 37 | "MapLegend": "", 38 | "Measure": "Pomiary", 39 | "Measure3D": "", 40 | "MeasureLineString": "Zmierzyć linię", 41 | "MeasurePolygon": "Zmierzyć wielokąt", 42 | "NewsPopup": "", 43 | "Panoramax": "", 44 | "Portal": "", 45 | "PrintScreen3D": "", 46 | "Redlining": "Redlining", 47 | "Routing": "", 48 | "Tools": "Narzędzia Mapy", 49 | "TimeManager": "", 50 | "View3D": "" 51 | }, 52 | "filter": "", 53 | "menulabel": "Zawartość mapy i narzędzia" 54 | }, 55 | "search": { 56 | "coordinates": "", 57 | "all": "Wszystko", 58 | "circleradius": "", 59 | "clearfilter": "", 60 | "existinglayer": "", 61 | "filter": "", 62 | "layers": "", 63 | "limittoarea": "", 64 | "more": "", 65 | "nodescription": "", 66 | "none": "", 67 | "noresults": "", 68 | "placeholder": "", 69 | "places": "", 70 | "providerselection": "", 71 | "recent": "", 72 | "search": "Szukaj", 73 | "themelayers": "", 74 | "themes": "Motywy", 75 | "unknownmore": "" 76 | }, 77 | "colorschemes": { 78 | "default": "", 79 | "dark": "", 80 | "highcontrast": "" 81 | }, 82 | "app": { 83 | "missingbg": "", 84 | "missinglayers": "", 85 | "missingpermalink": "", 86 | "missingprojection": "", 87 | "missingtheme": "" 88 | }, 89 | "attribtable": { 90 | "addfeature": "", 91 | "commit": "", 92 | "csvexport": "", 93 | "delete": "", 94 | "deletefailed": "", 95 | "deletefeatures": "", 96 | "deleting": "", 97 | "discard": "", 98 | "formeditmode": "", 99 | "geomnoadd": "", 100 | "limittoextent": "", 101 | "loadfailed": "", 102 | "loading": "", 103 | "nodelete": "", 104 | "nogeomnoform": "", 105 | "pleasereload": "", 106 | "reload": "", 107 | "selectlayer": "", 108 | "title": "", 109 | "zoomtoselection": "" 110 | }, 111 | "bgswitcher": { 112 | "nobg": "Bez tła" 113 | }, 114 | "bookmark": { 115 | "add": "", 116 | "addfailed": "", 117 | "description": "", 118 | "lastUpdate": "", 119 | "manage": "", 120 | "nobookmarks": "", 121 | "notloggedin": "", 122 | "open": "", 123 | "openTab": "", 124 | "remove": "", 125 | "removefailed": "", 126 | "savefailed": "", 127 | "update": "", 128 | "zoomToExtent": "" 129 | }, 130 | "bottombar": { 131 | "mousepos_label": "Współrzędne", 132 | "scale_label": "Skala", 133 | "terms_label": "Warunki korzystania", 134 | "viewertitle_label": "" 135 | }, 136 | "compare3d": { 137 | "clipplane": "", 138 | "compare_objects": "", 139 | "toggleall": "" 140 | }, 141 | "cookiepopup": { 142 | "accept": "", 143 | "message": "" 144 | }, 145 | "copybtn": { 146 | "click_to_copy": "Kliknij, aby skopiować", 147 | "copied": "Skopiowano", 148 | "copyfailed": "" 149 | }, 150 | "cyclomedia": { 151 | "clickonmap": "", 152 | "initializing": "", 153 | "loaderror": "", 154 | "loading": "", 155 | "login": "", 156 | "scalehint": "", 157 | "title": "" 158 | }, 159 | "draw3d": { 160 | "cone": "", 161 | "cuboid": "", 162 | "cylinder": "", 163 | "delete": "", 164 | "drawings": "", 165 | "intersect": "", 166 | "newgroupprompt": "", 167 | "numericinput": "", 168 | "pick": "", 169 | "position": "", 170 | "pyramid": "", 171 | "rotate": "", 172 | "rotation": "", 173 | "scale": "", 174 | "sphere": "", 175 | "subtract": "", 176 | "thescale": "", 177 | "translate": "", 178 | "undoBool": "", 179 | "union": "", 180 | "wedge": "" 181 | }, 182 | "editing": { 183 | "add": "", 184 | "attrtable": "", 185 | "canceldelete": "Nie usuwaj", 186 | "clearpicture": "", 187 | "commit": "Zatwierdź", 188 | "commitfailed": "", 189 | "contraintviolation": "", 190 | "create": "", 191 | "delete": "Usuń", 192 | "discard": "Odrzuć", 193 | "draw": "Rysuj", 194 | "feature": "", 195 | "geomreadonly": "", 196 | "invalidform": "", 197 | "maximize": "Maksymalizuj", 198 | "minimize": "Minimalizuj", 199 | "noeditablelayers": "Brak edytowalnych warstw.", 200 | "paint": "", 201 | "pick": "Wybierz", 202 | "pickdrawfeature": "", 203 | "reallydelete": "Usuń", 204 | "relationcommitfailed": "", 205 | "select": "Zaznacz", 206 | "takepicture": "", 207 | "unsavedchanged": "" 208 | }, 209 | "featureform": { 210 | "feature": "", 211 | "noresults": "", 212 | "querying": "", 213 | "title": "" 214 | }, 215 | "featuresearch": { 216 | "noresults": "", 217 | "query": "", 218 | "select": "", 219 | "title": "" 220 | }, 221 | "fileselector": { 222 | "files": "", 223 | "placeholder": "Wybierz plik..." 224 | }, 225 | "geomdigitizer": { 226 | "applink": "", 227 | "bufferlayername": "", 228 | "chooselink": "", 229 | "clear": "", 230 | "identifypick": "", 231 | "identifypickregion": "", 232 | "layername": "", 233 | "line_buffer": "", 234 | "point_buffer": "", 235 | "selfinter": "", 236 | "send": "", 237 | "wait": "" 238 | }, 239 | "heightprofile": { 240 | "asl": "a.s.l.", 241 | "distance": "Odległość", 242 | "drawnodes": "", 243 | "error": "", 244 | "export": "", 245 | "height": "Wysokość", 246 | "loading": "Obliczanie profilu wysokości...", 247 | "loadingimage": "", 248 | "print": "", 249 | "title": "" 250 | }, 251 | "hideobjects3d": { 252 | "clickonmap": "", 253 | "object": "", 254 | "restore": "", 255 | "restoreall": "" 256 | }, 257 | "identify": { 258 | "aggregatedreport": "", 259 | "clipboard": "", 260 | "download": "", 261 | "export": "Eksport", 262 | "featureReport": "Feature report", 263 | "featurecount": "", 264 | "layerall": "", 265 | "link": "Link", 266 | "noattributes": "Brak atrybutów", 267 | "noresults": "Brak dostępnych danych dla wybranego punktu", 268 | "querying": "Przetwarzam zapytanie...", 269 | "reportfail": "", 270 | "selectlayer": "", 271 | "title": "Feature Info" 272 | }, 273 | "imageeditor": { 274 | "confirmclose": "", 275 | "title": "" 276 | }, 277 | "importlayer": { 278 | "addfailed": "", 279 | "addlayer": "Dodaj warstwę", 280 | "asgroup": "", 281 | "connect": "Połącz", 282 | "filter": "Filtruj...", 283 | "loading": "", 284 | "localfile": "Plik lokalny", 285 | "nofeatures": "Elementy nie mogły zostać zaimportowane", 286 | "noresults": "Brak wyników lub błędny adres URL", 287 | "notgeopdf": "", 288 | "shpreprojectionerror": "", 289 | "supportedformats": "", 290 | "unknownproj": "", 291 | "url": "URL", 292 | "urlplaceholder": "Podaj URL do WMS, WFS, WMTS..." 293 | }, 294 | "infotool": { 295 | "clickhelpPoint": "", 296 | "clickhelpPolygon": "Narysuj poligon wokół obiektów, aby zidentyfikować...", 297 | "clickhelpRadius": "", 298 | "radius": "" 299 | }, 300 | "layercatalog": { 301 | "windowtitle": "" 302 | }, 303 | "layerinfo": { 304 | "abstract": "Abstrakt", 305 | "attribution": "Właściwości", 306 | "dataUrl": "URL danych", 307 | "keywords": "Słowa kluczowe", 308 | "legend": "Legenda", 309 | "maxscale": "", 310 | "metadataUrl": "URL metadanych", 311 | "minscale": "", 312 | "title": "Informacja o warstwie" 313 | }, 314 | "layertree": { 315 | "compare": "Porównaj najwyższą warstwę", 316 | "deletealllayers": "Usuń wszystkie warstwy", 317 | "importlayer": "Importuj warstwę", 318 | "maptip": "Pokaż wskazówki dla warstwy", 319 | "printlegend": "Drukuj legendę", 320 | "separator": "", 321 | "separatortooltip": "", 322 | "transparency": "", 323 | "visiblefilter": "", 324 | "zoomtolayer": "" 325 | }, 326 | "layertree3d": { 327 | "import": "", 328 | "importobjects": "", 329 | "layers": "", 330 | "objects": "", 331 | "supportedformats": "", 332 | "zoomtoobject": "" 333 | }, 334 | "linkfeatureform": { 335 | "cancel": "", 336 | "close": "", 337 | "drawhint": "", 338 | "pickhint": "" 339 | }, 340 | "locate": { 341 | "feetUnit": "stopy", 342 | "metersUnit": "metry", 343 | "popup": "Jesteś w odległości {distance} {unit} od tego punktu", 344 | "statustooltip": { 345 | "DISABLED": "Pozycja: wyłączona", 346 | "ENABLED": "Pozycja: włączona", 347 | "FOLLOWING": "Pozycja: following", 348 | "LOCATING": "Pozycja: lokalizowanie...", 349 | "PERMISSION_DENIED": "Pozycja: dostęp zabroniony" 350 | } 351 | }, 352 | "map": { 353 | "loading": "Ładowanie...", 354 | "resetrotation": "" 355 | }, 356 | "map3d": { 357 | "syncview": "", 358 | "terrain": "", 359 | "title": "" 360 | }, 361 | "mapexport": { 362 | "configuration": "", 363 | "format": "Format:", 364 | "resolution": "Rozdzielczość:", 365 | "scale": "", 366 | "size": "", 367 | "submit": "", 368 | "usersize": "", 369 | "wait": "" 370 | }, 371 | "mapfilter": { 372 | "addcustomfilter": "", 373 | "brokenrendering": "", 374 | "cancel": "", 375 | "geomfilter": "", 376 | "hidefiltergeom": "", 377 | "invalidfilter": "", 378 | "save": "", 379 | "select": "", 380 | "selectlayer": "", 381 | "timefilter": "", 382 | "timefrom": "", 383 | "timeto": "" 384 | }, 385 | "mapinfotooltip": { 386 | "elevation": "Wysokość", 387 | "title": "Pozycja" 388 | }, 389 | "maplegend": { 390 | "bboxdependent": "", 391 | "onlyvisible": "", 392 | "scaledependent": "", 393 | "windowtitle": "" 394 | }, 395 | "maplight3d": { 396 | "ambientLightIntensity": "", 397 | "animationstep": "", 398 | "date": "", 399 | "dayspersec": "", 400 | "directionalLightIntensity": "", 401 | "helpersVisible": "", 402 | "minspersec": "", 403 | "normalBias": "", 404 | "shadowBias": "", 405 | "shadowMapSize": "", 406 | "shadowType": "", 407 | "shadowVolumeFar": "", 408 | "shadowVolumeNear": "", 409 | "shadowintensity": "", 410 | "shadows": "", 411 | "showadvanced": "", 412 | "time": "", 413 | "zFactor": "" 414 | }, 415 | "measureComponent": { 416 | "absolute": "", 417 | "areaLabel": "Obszar", 418 | "bearingLabel": "Bearing", 419 | "ground": "", 420 | "imperial": "", 421 | "lengthLabel": "Odległość", 422 | "metric": "", 423 | "pointLabel": "Pozycja" 424 | }, 425 | "misc": { 426 | "ctrlclickhint": "" 427 | }, 428 | "navbar": { 429 | "perpage": "" 430 | }, 431 | "newspopup": { 432 | "dialogclose": "", 433 | "dontshowagain": "", 434 | "title": "" 435 | }, 436 | "numericinput": { 437 | "angle": "", 438 | "featureunsupported": "", 439 | "height": "", 440 | "nofeature": "", 441 | "side": "", 442 | "width": "", 443 | "windowtitle": "" 444 | }, 445 | "panoramax": { 446 | "notfound": "", 447 | "title": "" 448 | }, 449 | "pickfeature": { 450 | "querying": "" 451 | }, 452 | "portal": { 453 | "filter": "", 454 | "menulabel": "" 455 | }, 456 | "print": { 457 | "atlasfeature": "", 458 | "download": "", 459 | "download_as_onepdf": "", 460 | "download_as_onezip": "", 461 | "download_as_single": "", 462 | "format": "Format", 463 | "grid": "Siatka", 464 | "layout": "Layout", 465 | "legend": "", 466 | "maximize": "Maksymalizuj", 467 | "minimize": "Minimalizuj", 468 | "nolayouts": "Wybrany motyw nie umożliwia drukowania", 469 | "notheme": "Brak wybranego motywu", 470 | "output": "Drukuj output", 471 | "overlap": "", 472 | "pickatlasfeature": "", 473 | "resolution": "Rozdzielczość", 474 | "rotation": "Obrót", 475 | "save": "", 476 | "scale": "Skala", 477 | "series": "", 478 | "submit": "Drukuj", 479 | "wait": "Proszę czekać..." 480 | }, 481 | "qtdesignerform": { 482 | "loading": "" 483 | }, 484 | "redlining": { 485 | "border": "Obramowanie", 486 | "buffer": "Buforuj", 487 | "buffercompute": "Oblicz", 488 | "bufferdistance": "Odległość", 489 | "bufferlayer": "Destynacja", 490 | "bufferlayername": "Buforuj", 491 | "bufferselectfeature": "Wybierz element do buforowania", 492 | "circle": "", 493 | "delete": "Usuń", 494 | "draw": "Rysuj", 495 | "edit": "Edytuj", 496 | "ellipse": "", 497 | "export": "", 498 | "freehand": "", 499 | "label": "Etykieta", 500 | "layer": "Warstwa", 501 | "layertitle": "", 502 | "line": "Linia", 503 | "markers": "", 504 | "measurements": "", 505 | "numericinput": "", 506 | "pick": "Wybierz", 507 | "point": "Punkt", 508 | "polygon": "Poligon", 509 | "rectangle": "", 510 | "size": "Rozmiar", 511 | "square": "", 512 | "text": "Tekst", 513 | "transform": "", 514 | "width": "Szerokość" 515 | }, 516 | "reports": { 517 | "all": "", 518 | "download": "", 519 | "pick": "", 520 | "region": "", 521 | "selectlayer": "" 522 | }, 523 | "routing": { 524 | "add": "", 525 | "addviapoint": "", 526 | "arriveat": "", 527 | "clear": "", 528 | "computefailed": "", 529 | "computing": "", 530 | "excludepolygons": "", 531 | "export": "", 532 | "fastest": "", 533 | "fromhere": "", 534 | "importerror": "", 535 | "importhint": "", 536 | "importpoints": "", 537 | "iso_intervals": "", 538 | "iso_mode": "", 539 | "iso_mode_distance": "", 540 | "iso_mode_time": "", 541 | "isocenter": "", 542 | "isoextracenter": "", 543 | "leaveat": "", 544 | "leavenow": "", 545 | "maxspeed": "", 546 | "method": "", 547 | "mode_auto": "", 548 | "mode_bicycle": "", 549 | "mode_heavyvehicle": "", 550 | "mode_transit": "", 551 | "mode_walking": "", 552 | "optimized_route": "", 553 | "reachability": "", 554 | "roundtrip": "", 555 | "route": "", 556 | "shortest": "", 557 | "tohere": "", 558 | "useferries": "", 559 | "usehighways": "", 560 | "usetollways": "", 561 | "windowtitle": "" 562 | }, 563 | "scratchdrawing": { 564 | "finish": "" 565 | }, 566 | "serviceinfo": { 567 | "abstract": "", 568 | "contactEmail": "", 569 | "contactOrganization": "", 570 | "contactPerson": "", 571 | "contactPhone": "", 572 | "contactPosition": "", 573 | "keywords": "", 574 | "onlineResource": "", 575 | "title": "" 576 | }, 577 | "settings": { 578 | "bookmarks": "", 579 | "colorscheme": "", 580 | "confirmlang": "", 581 | "default": "", 582 | "defaulttheme": "", 583 | "defaultthemefailed": "", 584 | "language": "", 585 | "systemlang": "", 586 | "themes": "" 587 | }, 588 | "share": { 589 | "QRCodeLinkTitle": "QR code", 590 | "directLinkTitle": "Poprzez link bezpośredni", 591 | "expires": "", 592 | "norestriction": "", 593 | "refresh": "", 594 | "restricttogroup": "", 595 | "shareTitle": "QWC2", 596 | "showpin": "", 597 | "socialIntro": "W twoich ulubionych mediach społecznościowych" 598 | }, 599 | "snapping": { 600 | "edge": "", 601 | "loading": "", 602 | "snappingenabled": "", 603 | "vertex": "" 604 | }, 605 | "themelayerslist": { 606 | "addlayer": "", 607 | "addlayerstotheme": "", 608 | "addselectedlayers": "", 609 | "existinglayers": "" 610 | }, 611 | "themeswitcher": { 612 | "addlayerstotheme": "", 613 | "addtotheme": "Dodaj do obecnego motywu", 614 | "changedefaulttheme": "", 615 | "confirmswitch": "", 616 | "filter": "Filtruj...", 617 | "match": { 618 | "abstract": "", 619 | "keywords": "", 620 | "title": "" 621 | }, 622 | "openintab": "", 623 | "restrictedthemeinfo": "" 624 | }, 625 | "timemanager": { 626 | "animationinterval": "", 627 | "classify": "", 628 | "classifynone": "", 629 | "displayfeatures": "", 630 | "displaylayers": "", 631 | "displayminimal": "", 632 | "edit": "", 633 | "endtime": "", 634 | "filterwarning": "", 635 | "future": "", 636 | "group": "", 637 | "groupnone": "", 638 | "home": "", 639 | "loading": "", 640 | "loop": "", 641 | "markers": "", 642 | "notemporaldata": "", 643 | "now": "", 644 | "past": "", 645 | "play": "", 646 | "playrev": "", 647 | "rewind": "", 648 | "starttime": "", 649 | "stepback": "", 650 | "stepfwd": "", 651 | "stepsize": "", 652 | "stop": "", 653 | "timeline": "", 654 | "timeline_fixed": "", 655 | "timeline_infinite": "", 656 | "timelinedisplay": "", 657 | "timelinescale": "", 658 | "title": "", 659 | "toggle": "", 660 | "unit": { 661 | "century": "", 662 | "days": "", 663 | "decade": "", 664 | "hours": "", 665 | "milliseconds": "", 666 | "minutes": "", 667 | "months": "", 668 | "seconds": "", 669 | "years": "" 670 | }, 671 | "zoomin": "", 672 | "zoomout": "" 673 | }, 674 | "tooltip": { 675 | "background": "Zmień podkład map", 676 | "fullscreendisable": "", 677 | "fullscreenenable": "", 678 | "home": "Pokaż całą mapę", 679 | "zoomin": "Przybliż", 680 | "zoomout": "Oddal" 681 | }, 682 | "valuetool": { 683 | "all": "", 684 | "allbands": "", 685 | "alllayers": "", 686 | "bands": "", 687 | "graph": "", 688 | "layer": "", 689 | "nodata": "", 690 | "options": "", 691 | "selectedbands": "", 692 | "selectedlayers": "", 693 | "selectlayersbands": "", 694 | "showbands": "", 695 | "showlayers": "", 696 | "table": "", 697 | "title": "", 698 | "visiblelayers": "" 699 | }, 700 | "vectorlayerpicker": { 701 | "none": "", 702 | "prompt": "" 703 | }, 704 | "window": { 705 | "close": "", 706 | "detach": "", 707 | "dock": "", 708 | "embed": "", 709 | "maximize": "", 710 | "minimize": "", 711 | "undock": "", 712 | "unmaximize": "", 713 | "unminimize": "" 714 | } 715 | } 716 | } 717 | -------------------------------------------------------------------------------- /static/translations/ru-RU.json: -------------------------------------------------------------------------------- 1 | { 2 | "locale": "ru-RU", 3 | "messages": { 4 | "appmenu": { 5 | "items": { 6 | "ExternalLink": "", 7 | "Bookmark": "", 8 | "Compare3D": "", 9 | "Editing": "Правка", 10 | "ExportObjects3D": "", 11 | "Help": "Помощь", 12 | "HideObjects3D": "", 13 | "LayerTree": "Слои и легенда", 14 | "LayerTree3D": "", 15 | "MapExport": "экспортировать карту", 16 | "MapExport3D": "", 17 | "MapFilter": "", 18 | "MapLight3D": "", 19 | "Print": "Печать", 20 | "Reports": "", 21 | "Settings": "", 22 | "Share": "Поделиться ссылкой", 23 | "ThemeSwitcher": "Тема", 24 | "AttributeTable": "", 25 | "AuthenticationLogin": "", 26 | "AuthenticationLogout": "", 27 | "Cyclomedia": "", 28 | "Draw3D": "", 29 | "FeatureForm": "", 30 | "FeatureSearch": "", 31 | "GeometryDigitizer": "", 32 | "IdentifyPoint": "", 33 | "IdentifyRegion": "Определить регион", 34 | "LayerCatalog": "", 35 | "Login": "", 36 | "Logout": "", 37 | "MapLegend": "", 38 | "Measure": "Измерения", 39 | "Measure3D": "", 40 | "MeasureLineString": "измерить линию", 41 | "MeasurePolygon": "измерить многоугольник", 42 | "NewsPopup": "", 43 | "Panoramax": "", 44 | "Portal": "", 45 | "PrintScreen3D": "", 46 | "Redlining": "Обводка", 47 | "Routing": "", 48 | "Tools": "Средства картографии", 49 | "TimeManager": "", 50 | "View3D": "" 51 | }, 52 | "filter": "", 53 | "menulabel": "Карта и инструменты" 54 | }, 55 | "search": { 56 | "coordinates": "", 57 | "all": "Всё", 58 | "circleradius": "", 59 | "clearfilter": "", 60 | "existinglayer": "", 61 | "filter": "", 62 | "layers": "", 63 | "limittoarea": "", 64 | "more": "", 65 | "nodescription": "", 66 | "none": "", 67 | "noresults": "", 68 | "placeholder": "", 69 | "places": "", 70 | "providerselection": "", 71 | "recent": "", 72 | "search": "Поиск", 73 | "themelayers": "", 74 | "themes": "", 75 | "unknownmore": "" 76 | }, 77 | "colorschemes": { 78 | "default": "", 79 | "dark": "", 80 | "highcontrast": "" 81 | }, 82 | "app": { 83 | "missingbg": "", 84 | "missinglayers": "", 85 | "missingpermalink": "", 86 | "missingprojection": "", 87 | "missingtheme": "" 88 | }, 89 | "attribtable": { 90 | "addfeature": "", 91 | "commit": "", 92 | "csvexport": "", 93 | "delete": "", 94 | "deletefailed": "", 95 | "deletefeatures": "", 96 | "deleting": "", 97 | "discard": "", 98 | "formeditmode": "", 99 | "geomnoadd": "", 100 | "limittoextent": "", 101 | "loadfailed": "", 102 | "loading": "", 103 | "nodelete": "", 104 | "nogeomnoform": "", 105 | "pleasereload": "", 106 | "reload": "", 107 | "selectlayer": "", 108 | "title": "", 109 | "zoomtoselection": "" 110 | }, 111 | "bgswitcher": { 112 | "nobg": "Фон отсутствует" 113 | }, 114 | "bookmark": { 115 | "add": "", 116 | "addfailed": "", 117 | "description": "", 118 | "lastUpdate": "", 119 | "manage": "", 120 | "nobookmarks": "", 121 | "notloggedin": "", 122 | "open": "", 123 | "openTab": "", 124 | "remove": "", 125 | "removefailed": "", 126 | "savefailed": "", 127 | "update": "", 128 | "zoomToExtent": "" 129 | }, 130 | "bottombar": { 131 | "mousepos_label": "Координаты", 132 | "scale_label": "Масштаб", 133 | "terms_label": "Условия использования", 134 | "viewertitle_label": "Домашняя страница" 135 | }, 136 | "compare3d": { 137 | "clipplane": "", 138 | "compare_objects": "", 139 | "toggleall": "" 140 | }, 141 | "cookiepopup": { 142 | "accept": "", 143 | "message": "" 144 | }, 145 | "copybtn": { 146 | "click_to_copy": "Копировать", 147 | "copied": "Скопировано", 148 | "copyfailed": "" 149 | }, 150 | "cyclomedia": { 151 | "clickonmap": "", 152 | "initializing": "", 153 | "loaderror": "", 154 | "loading": "", 155 | "login": "", 156 | "scalehint": "", 157 | "title": "" 158 | }, 159 | "draw3d": { 160 | "cone": "", 161 | "cuboid": "", 162 | "cylinder": "", 163 | "delete": "", 164 | "drawings": "", 165 | "intersect": "", 166 | "newgroupprompt": "", 167 | "numericinput": "", 168 | "pick": "", 169 | "position": "", 170 | "pyramid": "", 171 | "rotate": "", 172 | "rotation": "", 173 | "scale": "", 174 | "sphere": "", 175 | "subtract": "", 176 | "thescale": "", 177 | "translate": "", 178 | "undoBool": "", 179 | "union": "", 180 | "wedge": "" 181 | }, 182 | "editing": { 183 | "add": "", 184 | "attrtable": "", 185 | "canceldelete": "Не удалять", 186 | "clearpicture": "", 187 | "commit": "Подтвердить изменения", 188 | "commitfailed": "", 189 | "contraintviolation": "", 190 | "create": "", 191 | "delete": "Удалить", 192 | "discard": "Отменить изменения", 193 | "draw": "Нарисовать", 194 | "feature": "", 195 | "geomreadonly": "", 196 | "invalidform": "", 197 | "maximize": "Развернуть", 198 | "minimize": "Свернуть", 199 | "noeditablelayers": "Отсутствуют доступные для редактирования слои.", 200 | "paint": "", 201 | "pick": "Выбрать", 202 | "pickdrawfeature": "", 203 | "reallydelete": "Удалить", 204 | "relationcommitfailed": "", 205 | "select": "Выберите...", 206 | "takepicture": "", 207 | "unsavedchanged": "" 208 | }, 209 | "featureform": { 210 | "feature": "", 211 | "noresults": "", 212 | "querying": "", 213 | "title": "" 214 | }, 215 | "featuresearch": { 216 | "noresults": "", 217 | "query": "", 218 | "select": "", 219 | "title": "" 220 | }, 221 | "fileselector": { 222 | "files": "", 223 | "placeholder": "Выберите файл..." 224 | }, 225 | "geomdigitizer": { 226 | "applink": "", 227 | "bufferlayername": "", 228 | "chooselink": "", 229 | "clear": "", 230 | "identifypick": "", 231 | "identifypickregion": "", 232 | "layername": "", 233 | "line_buffer": "", 234 | "point_buffer": "", 235 | "selfinter": "", 236 | "send": "", 237 | "wait": "" 238 | }, 239 | "heightprofile": { 240 | "asl": "над у.м.", 241 | "distance": "Дистанция", 242 | "drawnodes": "", 243 | "error": "", 244 | "export": "", 245 | "height": "Высота", 246 | "loading": "Расчет высоты профиля...", 247 | "loadingimage": "", 248 | "print": "", 249 | "title": "" 250 | }, 251 | "hideobjects3d": { 252 | "clickonmap": "", 253 | "object": "", 254 | "restore": "", 255 | "restoreall": "" 256 | }, 257 | "identify": { 258 | "aggregatedreport": "", 259 | "clipboard": "", 260 | "download": "", 261 | "export": "Экспорт", 262 | "featureReport": "Отчёт об объекте", 263 | "featurecount": "", 264 | "layerall": "", 265 | "link": "гиперссылка", 266 | "noattributes": "Аттрибуты отсутствуют", 267 | "noresults": "Для выбранной точки нет доступной информации", 268 | "querying": "Выполняется запрос...", 269 | "reportfail": "", 270 | "selectlayer": "", 271 | "title": "Информация об объекте" 272 | }, 273 | "imageeditor": { 274 | "confirmclose": "", 275 | "title": "" 276 | }, 277 | "importlayer": { 278 | "addfailed": "", 279 | "addlayer": "Добавить слой", 280 | "asgroup": "", 281 | "connect": "Подключиться", 282 | "filter": "Фильтровать...", 283 | "loading": "", 284 | "localfile": "", 285 | "nofeatures": "Нет объектов, доступных для импорта", 286 | "noresults": "", 287 | "notgeopdf": "", 288 | "shpreprojectionerror": "", 289 | "supportedformats": "", 290 | "unknownproj": "", 291 | "url": "", 292 | "urlplaceholder": "Введите URL для WMS, WMTS, WFS..." 293 | }, 294 | "infotool": { 295 | "clickhelpPoint": "", 296 | "clickhelpPolygon": "Для получения информации обведите регион многоугольником...", 297 | "clickhelpRadius": "", 298 | "radius": "" 299 | }, 300 | "layercatalog": { 301 | "windowtitle": "" 302 | }, 303 | "layerinfo": { 304 | "abstract": "Abstract", 305 | "attribution": "Автор", 306 | "dataUrl": "URL данных", 307 | "keywords": "Ключевые слова", 308 | "legend": "Легенда", 309 | "maxscale": "", 310 | "metadataUrl": "URL метаданных", 311 | "minscale": "", 312 | "title": "Информация о слое" 313 | }, 314 | "layertree": { 315 | "compare": "Сравнить верхний слой", 316 | "deletealllayers": "", 317 | "importlayer": "Импортировать слой", 318 | "maptip": "Показывать подписи", 319 | "printlegend": "Распечатать легенду", 320 | "separator": "", 321 | "separatortooltip": "", 322 | "transparency": "", 323 | "visiblefilter": "", 324 | "zoomtolayer": "" 325 | }, 326 | "layertree3d": { 327 | "import": "", 328 | "importobjects": "", 329 | "layers": "", 330 | "objects": "", 331 | "supportedformats": "", 332 | "zoomtoobject": "" 333 | }, 334 | "linkfeatureform": { 335 | "cancel": "", 336 | "close": "", 337 | "drawhint": "", 338 | "pickhint": "" 339 | }, 340 | "locate": { 341 | "feetUnit": "футов", 342 | "metersUnit": "метров", 343 | "popup": "Вы на расстоянии {distance} {unit} от этой точки", 344 | "statustooltip": { 345 | "DISABLED": "Геолокация: отключена", 346 | "ENABLED": "Геолокация: включена", 347 | "FOLLOWING": "Геолокация: следование", 348 | "LOCATING": "Геолокация: определение местоположения...", 349 | "PERMISSION_DENIED": "Геолокация: доступ воспрещен" 350 | } 351 | }, 352 | "map": { 353 | "loading": "Загрузка...", 354 | "resetrotation": "" 355 | }, 356 | "map3d": { 357 | "syncview": "", 358 | "terrain": "", 359 | "title": "" 360 | }, 361 | "mapexport": { 362 | "configuration": "", 363 | "format": "Формат бумаги:", 364 | "resolution": "Разрешение:", 365 | "scale": "", 366 | "size": "", 367 | "submit": "", 368 | "usersize": "", 369 | "wait": "" 370 | }, 371 | "mapfilter": { 372 | "addcustomfilter": "", 373 | "brokenrendering": "", 374 | "cancel": "", 375 | "geomfilter": "", 376 | "hidefiltergeom": "", 377 | "invalidfilter": "", 378 | "save": "", 379 | "select": "", 380 | "selectlayer": "", 381 | "timefilter": "", 382 | "timefrom": "", 383 | "timeto": "" 384 | }, 385 | "mapinfotooltip": { 386 | "elevation": "Высота над уровнем моря", 387 | "title": "Позиция" 388 | }, 389 | "maplegend": { 390 | "bboxdependent": "", 391 | "onlyvisible": "", 392 | "scaledependent": "", 393 | "windowtitle": "" 394 | }, 395 | "maplight3d": { 396 | "ambientLightIntensity": "", 397 | "animationstep": "", 398 | "date": "", 399 | "dayspersec": "", 400 | "directionalLightIntensity": "", 401 | "helpersVisible": "", 402 | "minspersec": "", 403 | "normalBias": "", 404 | "shadowBias": "", 405 | "shadowMapSize": "", 406 | "shadowType": "", 407 | "shadowVolumeFar": "", 408 | "shadowVolumeNear": "", 409 | "shadowintensity": "", 410 | "shadows": "", 411 | "showadvanced": "", 412 | "time": "", 413 | "zFactor": "" 414 | }, 415 | "measureComponent": { 416 | "absolute": "", 417 | "areaLabel": "Площадь", 418 | "bearingLabel": "Пеленг", 419 | "ground": "", 420 | "imperial": "", 421 | "lengthLabel": "Длина", 422 | "metric": "", 423 | "pointLabel": "Позиция" 424 | }, 425 | "misc": { 426 | "ctrlclickhint": "" 427 | }, 428 | "navbar": { 429 | "perpage": "" 430 | }, 431 | "newspopup": { 432 | "dialogclose": "", 433 | "dontshowagain": "", 434 | "title": "" 435 | }, 436 | "numericinput": { 437 | "angle": "", 438 | "featureunsupported": "", 439 | "height": "", 440 | "nofeature": "", 441 | "side": "", 442 | "width": "", 443 | "windowtitle": "" 444 | }, 445 | "panoramax": { 446 | "notfound": "", 447 | "title": "" 448 | }, 449 | "pickfeature": { 450 | "querying": "" 451 | }, 452 | "portal": { 453 | "filter": "", 454 | "menulabel": "" 455 | }, 456 | "print": { 457 | "atlasfeature": "", 458 | "download": "", 459 | "download_as_onepdf": "", 460 | "download_as_onezip": "", 461 | "download_as_single": "", 462 | "format": "Формат бумаги", 463 | "grid": "Сетка", 464 | "layout": "Формат бумаги", 465 | "legend": "", 466 | "maximize": "Развернуть", 467 | "minimize": "Свернуть", 468 | "nolayouts": "Выбранная тема не поддерживает печать", 469 | "notheme": "Тема не выбрана", 470 | "output": "", 471 | "overlap": "", 472 | "pickatlasfeature": "", 473 | "resolution": "Разрешение", 474 | "rotation": "Поворот", 475 | "save": "", 476 | "scale": "Масштаб", 477 | "series": "", 478 | "submit": "Печать", 479 | "wait": "" 480 | }, 481 | "qtdesignerform": { 482 | "loading": "" 483 | }, 484 | "redlining": { 485 | "border": "Граница", 486 | "buffer": "", 487 | "buffercompute": "", 488 | "bufferdistance": "", 489 | "bufferlayer": "", 490 | "bufferlayername": "", 491 | "bufferselectfeature": "", 492 | "circle": "", 493 | "delete": "", 494 | "draw": "", 495 | "edit": "", 496 | "ellipse": "", 497 | "export": "", 498 | "freehand": "", 499 | "label": "Надпись", 500 | "layer": "", 501 | "layertitle": "", 502 | "line": "Линия", 503 | "markers": "", 504 | "measurements": "", 505 | "numericinput": "", 506 | "pick": "Выбрать", 507 | "point": "Точка", 508 | "polygon": "Полигон", 509 | "rectangle": "", 510 | "size": "Размер", 511 | "square": "", 512 | "text": "Текст", 513 | "transform": "", 514 | "width": "Ширина" 515 | }, 516 | "reports": { 517 | "all": "", 518 | "download": "", 519 | "pick": "", 520 | "region": "", 521 | "selectlayer": "" 522 | }, 523 | "routing": { 524 | "add": "", 525 | "addviapoint": "", 526 | "arriveat": "", 527 | "clear": "", 528 | "computefailed": "", 529 | "computing": "", 530 | "excludepolygons": "", 531 | "export": "", 532 | "fastest": "", 533 | "fromhere": "", 534 | "importerror": "", 535 | "importhint": "", 536 | "importpoints": "", 537 | "iso_intervals": "", 538 | "iso_mode": "", 539 | "iso_mode_distance": "", 540 | "iso_mode_time": "", 541 | "isocenter": "", 542 | "isoextracenter": "", 543 | "leaveat": "", 544 | "leavenow": "", 545 | "maxspeed": "", 546 | "method": "", 547 | "mode_auto": "", 548 | "mode_bicycle": "", 549 | "mode_heavyvehicle": "", 550 | "mode_transit": "", 551 | "mode_walking": "", 552 | "optimized_route": "", 553 | "reachability": "", 554 | "roundtrip": "", 555 | "route": "", 556 | "shortest": "", 557 | "tohere": "", 558 | "useferries": "", 559 | "usehighways": "", 560 | "usetollways": "", 561 | "windowtitle": "" 562 | }, 563 | "scratchdrawing": { 564 | "finish": "" 565 | }, 566 | "serviceinfo": { 567 | "abstract": "", 568 | "contactEmail": "", 569 | "contactOrganization": "", 570 | "contactPerson": "", 571 | "contactPhone": "", 572 | "contactPosition": "", 573 | "keywords": "", 574 | "onlineResource": "", 575 | "title": "" 576 | }, 577 | "settings": { 578 | "bookmarks": "", 579 | "colorscheme": "", 580 | "confirmlang": "", 581 | "default": "", 582 | "defaulttheme": "", 583 | "defaultthemefailed": "", 584 | "language": "", 585 | "systemlang": "", 586 | "themes": "" 587 | }, 588 | "share": { 589 | "QRCodeLinkTitle": "QR-код", 590 | "directLinkTitle": "По прямой ссылке", 591 | "expires": "", 592 | "norestriction": "", 593 | "refresh": "", 594 | "restricttogroup": "", 595 | "shareTitle": "QWC2", 596 | "showpin": "", 597 | "socialIntro": "В Вашей любимой соцсети" 598 | }, 599 | "snapping": { 600 | "edge": "", 601 | "loading": "", 602 | "snappingenabled": "", 603 | "vertex": "" 604 | }, 605 | "themelayerslist": { 606 | "addlayer": "", 607 | "addlayerstotheme": "", 608 | "addselectedlayers": "", 609 | "existinglayers": "" 610 | }, 611 | "themeswitcher": { 612 | "addlayerstotheme": "", 613 | "addtotheme": "", 614 | "changedefaulttheme": "", 615 | "confirmswitch": "", 616 | "filter": "Фильтр...", 617 | "match": { 618 | "abstract": "", 619 | "keywords": "", 620 | "title": "" 621 | }, 622 | "openintab": "", 623 | "restrictedthemeinfo": "" 624 | }, 625 | "timemanager": { 626 | "animationinterval": "", 627 | "classify": "", 628 | "classifynone": "", 629 | "displayfeatures": "", 630 | "displaylayers": "", 631 | "displayminimal": "", 632 | "edit": "", 633 | "endtime": "", 634 | "filterwarning": "", 635 | "future": "", 636 | "group": "", 637 | "groupnone": "", 638 | "home": "", 639 | "loading": "", 640 | "loop": "", 641 | "markers": "", 642 | "notemporaldata": "", 643 | "now": "", 644 | "past": "", 645 | "play": "", 646 | "playrev": "", 647 | "rewind": "", 648 | "starttime": "", 649 | "stepback": "", 650 | "stepfwd": "", 651 | "stepsize": "", 652 | "stop": "", 653 | "timeline": "", 654 | "timeline_fixed": "", 655 | "timeline_infinite": "", 656 | "timelinedisplay": "", 657 | "timelinescale": "", 658 | "title": "", 659 | "toggle": "", 660 | "unit": { 661 | "century": "", 662 | "days": "", 663 | "decade": "", 664 | "hours": "", 665 | "milliseconds": "", 666 | "minutes": "", 667 | "months": "", 668 | "seconds": "", 669 | "years": "" 670 | }, 671 | "zoomin": "", 672 | "zoomout": "" 673 | }, 674 | "tooltip": { 675 | "background": "Сменить фон", 676 | "fullscreendisable": "", 677 | "fullscreenenable": "", 678 | "home": "Показать всю карту", 679 | "zoomin": "Увеличить", 680 | "zoomout": "Уменьшить" 681 | }, 682 | "valuetool": { 683 | "all": "", 684 | "allbands": "", 685 | "alllayers": "", 686 | "bands": "", 687 | "graph": "", 688 | "layer": "", 689 | "nodata": "", 690 | "options": "", 691 | "selectedbands": "", 692 | "selectedlayers": "", 693 | "selectlayersbands": "", 694 | "showbands": "", 695 | "showlayers": "", 696 | "table": "", 697 | "title": "", 698 | "visiblelayers": "" 699 | }, 700 | "vectorlayerpicker": { 701 | "none": "", 702 | "prompt": "" 703 | }, 704 | "window": { 705 | "close": "", 706 | "detach": "", 707 | "dock": "", 708 | "embed": "", 709 | "maximize": "", 710 | "minimize": "", 711 | "undock": "", 712 | "unmaximize": "", 713 | "unminimize": "" 714 | } 715 | } 716 | } 717 | -------------------------------------------------------------------------------- /static/translations/sv-SE.json: -------------------------------------------------------------------------------- 1 | { 2 | "locale": "sv-SE", 3 | "messages": { 4 | "appmenu": { 5 | "items": { 6 | "ExternalLink": "", 7 | "Bookmark": "", 8 | "Compare3D": "", 9 | "Editing": "Redigera", 10 | "ExportObjects3D": "", 11 | "Help": "Hjälp", 12 | "HideObjects3D": "", 13 | "LayerTree": "Lager & teckenförklaring", 14 | "LayerTree3D": "", 15 | "MapExport": "Exportera karta", 16 | "MapExport3D": "", 17 | "MapFilter": "", 18 | "MapLight3D": "", 19 | "Print": "Skriv ut", 20 | "Reports": "", 21 | "Settings": "", 22 | "Share": "Dela länk", 23 | "ThemeSwitcher": "Tema", 24 | "AttributeTable": "", 25 | "AuthenticationLogin": "Logga in", 26 | "AuthenticationLogout": "Logga ut", 27 | "Cyclomedia": "", 28 | "Draw3D": "", 29 | "FeatureForm": "", 30 | "FeatureSearch": "", 31 | "GeometryDigitizer": "", 32 | "IdentifyPoint": "", 33 | "IdentifyRegion": "Identifiera med område", 34 | "LayerCatalog": "", 35 | "Login": "Logga in", 36 | "Logout": "Logga ut", 37 | "MapLegend": "", 38 | "Measure": "Mät", 39 | "Measure3D": "", 40 | "MeasureLineString": "Mäta en linje", 41 | "MeasurePolygon": "Mäta en polygon", 42 | "NewsPopup": "", 43 | "Panoramax": "", 44 | "Portal": "", 45 | "PrintScreen3D": "", 46 | "Redlining": "Rita", 47 | "Routing": "", 48 | "Tools": "Kartverktyg", 49 | "TimeManager": "", 50 | "View3D": "" 51 | }, 52 | "filter": "", 53 | "menulabel": "Karta & Verktyg" 54 | }, 55 | "search": { 56 | "coordinates": "Koordinater", 57 | "all": "", 58 | "circleradius": "", 59 | "clearfilter": "", 60 | "existinglayer": "", 61 | "filter": "", 62 | "layers": "", 63 | "limittoarea": "", 64 | "more": "", 65 | "nodescription": "", 66 | "none": "", 67 | "noresults": "", 68 | "placeholder": "", 69 | "places": "", 70 | "providerselection": "", 71 | "recent": "", 72 | "search": "", 73 | "themelayers": "", 74 | "themes": "", 75 | "unknownmore": "" 76 | }, 77 | "colorschemes": { 78 | "default": "", 79 | "dark": "", 80 | "highcontrast": "" 81 | }, 82 | "app": { 83 | "missingbg": "", 84 | "missinglayers": "", 85 | "missingpermalink": "", 86 | "missingprojection": "", 87 | "missingtheme": "" 88 | }, 89 | "attribtable": { 90 | "addfeature": "", 91 | "commit": "", 92 | "csvexport": "", 93 | "delete": "", 94 | "deletefailed": "", 95 | "deletefeatures": "", 96 | "deleting": "", 97 | "discard": "", 98 | "formeditmode": "", 99 | "geomnoadd": "", 100 | "limittoextent": "", 101 | "loadfailed": "", 102 | "loading": "", 103 | "nodelete": "", 104 | "nogeomnoform": "", 105 | "pleasereload": "", 106 | "reload": "", 107 | "selectlayer": "", 108 | "title": "", 109 | "zoomtoselection": "" 110 | }, 111 | "bgswitcher": { 112 | "nobg": "Ingen bakgrund" 113 | }, 114 | "bookmark": { 115 | "add": "", 116 | "addfailed": "", 117 | "description": "", 118 | "lastUpdate": "", 119 | "manage": "", 120 | "nobookmarks": "", 121 | "notloggedin": "", 122 | "open": "", 123 | "openTab": "", 124 | "remove": "", 125 | "removefailed": "", 126 | "savefailed": "", 127 | "update": "", 128 | "zoomToExtent": "" 129 | }, 130 | "bottombar": { 131 | "mousepos_label": "Koordinater", 132 | "scale_label": "Skala", 133 | "terms_label": "Villkor", 134 | "viewertitle_label": "" 135 | }, 136 | "compare3d": { 137 | "clipplane": "", 138 | "compare_objects": "", 139 | "toggleall": "" 140 | }, 141 | "cookiepopup": { 142 | "accept": "", 143 | "message": "" 144 | }, 145 | "copybtn": { 146 | "click_to_copy": "Klicka för att kopiera", 147 | "copied": "Kopierade", 148 | "copyfailed": "" 149 | }, 150 | "cyclomedia": { 151 | "clickonmap": "", 152 | "initializing": "", 153 | "loaderror": "", 154 | "loading": "", 155 | "login": "", 156 | "scalehint": "", 157 | "title": "" 158 | }, 159 | "draw3d": { 160 | "cone": "", 161 | "cuboid": "", 162 | "cylinder": "", 163 | "delete": "", 164 | "drawings": "", 165 | "intersect": "", 166 | "newgroupprompt": "", 167 | "numericinput": "", 168 | "pick": "", 169 | "position": "", 170 | "pyramid": "", 171 | "rotate": "", 172 | "rotation": "", 173 | "scale": "", 174 | "sphere": "", 175 | "subtract": "", 176 | "thescale": "", 177 | "translate": "", 178 | "undoBool": "", 179 | "union": "", 180 | "wedge": "" 181 | }, 182 | "editing": { 183 | "add": "", 184 | "attrtable": "", 185 | "canceldelete": "Radera inte", 186 | "clearpicture": "", 187 | "commit": "Skicka", 188 | "commitfailed": "", 189 | "contraintviolation": "", 190 | "create": "", 191 | "delete": "Radera", 192 | "discard": "Förkasta", 193 | "draw": "Rita", 194 | "feature": "Objekt", 195 | "geomreadonly": "", 196 | "invalidform": "", 197 | "maximize": "Maximera", 198 | "minimize": "Minimera", 199 | "noeditablelayers": "Inga redigerbara lager", 200 | "paint": "", 201 | "pick": "Välj", 202 | "pickdrawfeature": "", 203 | "reallydelete": "Verkligen radera", 204 | "relationcommitfailed": "", 205 | "select": "Välj", 206 | "takepicture": "", 207 | "unsavedchanged": "" 208 | }, 209 | "featureform": { 210 | "feature": "", 211 | "noresults": "", 212 | "querying": "", 213 | "title": "" 214 | }, 215 | "featuresearch": { 216 | "noresults": "", 217 | "query": "", 218 | "select": "", 219 | "title": "" 220 | }, 221 | "fileselector": { 222 | "files": "", 223 | "placeholder": "Välj fil..." 224 | }, 225 | "geomdigitizer": { 226 | "applink": "", 227 | "bufferlayername": "", 228 | "chooselink": "", 229 | "clear": "", 230 | "identifypick": "", 231 | "identifypickregion": "", 232 | "layername": "", 233 | "line_buffer": "", 234 | "point_buffer": "", 235 | "selfinter": "", 236 | "send": "", 237 | "wait": "" 238 | }, 239 | "heightprofile": { 240 | "asl": "m.ö.h.", 241 | "distance": "Avstånd", 242 | "drawnodes": "", 243 | "error": "", 244 | "export": "", 245 | "height": "Höjd", 246 | "loading": "Beräknar höjdprofil...", 247 | "loadingimage": "", 248 | "print": "", 249 | "title": "" 250 | }, 251 | "hideobjects3d": { 252 | "clickonmap": "", 253 | "object": "", 254 | "restore": "", 255 | "restoreall": "" 256 | }, 257 | "identify": { 258 | "aggregatedreport": "", 259 | "clipboard": "", 260 | "download": "", 261 | "export": "Exportera", 262 | "featureReport": "Objektrapport", 263 | "featurecount": "", 264 | "layerall": "", 265 | "link": "Länk", 266 | "noattributes": "Inga attribut", 267 | "noresults": "Ingen information för vald punkt", 268 | "querying": "Frågar...", 269 | "reportfail": "", 270 | "selectlayer": "", 271 | "title": "Objektinformation" 272 | }, 273 | "imageeditor": { 274 | "confirmclose": "", 275 | "title": "" 276 | }, 277 | "importlayer": { 278 | "addfailed": "", 279 | "addlayer": "Lägg till lager", 280 | "asgroup": "", 281 | "connect": "Anslut", 282 | "filter": "Filter...", 283 | "loading": "", 284 | "localfile": "Lokal fil", 285 | "nofeatures": "Inga objekt kunde importeras", 286 | "noresults": "Inget svar eller ogiltig URL", 287 | "notgeopdf": "", 288 | "shpreprojectionerror": "", 289 | "supportedformats": "", 290 | "unknownproj": "", 291 | "url": "URL", 292 | "urlplaceholder": "Skriv in URL till WMS, WMTS, WFS..." 293 | }, 294 | "infotool": { 295 | "clickhelpPoint": "", 296 | "clickhelpPolygon": "Rita en polygon runt objektn som ska identifieras", 297 | "clickhelpRadius": "", 298 | "radius": "" 299 | }, 300 | "layercatalog": { 301 | "windowtitle": "" 302 | }, 303 | "layerinfo": { 304 | "abstract": "Sammanfattning", 305 | "attribution": "Källa", 306 | "dataUrl": "Datalänk", 307 | "keywords": "Nyckelord", 308 | "legend": "Teckenförklaring", 309 | "maxscale": "", 310 | "metadataUrl": "Metadatalänk", 311 | "minscale": "", 312 | "title": "Information om lager" 313 | }, 314 | "layertree": { 315 | "compare": "Jämför översta lagret", 316 | "deletealllayers": "Ta bort alla lager", 317 | "importlayer": "Importera lager", 318 | "maptip": "Visa karttips för lager", 319 | "printlegend": "Skriv ut teckenförklaring", 320 | "separator": "", 321 | "separatortooltip": "", 322 | "transparency": "", 323 | "visiblefilter": "", 324 | "zoomtolayer": "" 325 | }, 326 | "layertree3d": { 327 | "import": "", 328 | "importobjects": "", 329 | "layers": "", 330 | "objects": "", 331 | "supportedformats": "", 332 | "zoomtoobject": "" 333 | }, 334 | "linkfeatureform": { 335 | "cancel": "", 336 | "close": "", 337 | "drawhint": "", 338 | "pickhint": "" 339 | }, 340 | "locate": { 341 | "feetUnit": "fot", 342 | "metersUnit": "meter", 343 | "popup": "Du är inom {distance} {unit} från denna punkt", 344 | "statustooltip": { 345 | "DISABLED": "Position: avaktiverat", 346 | "ENABLED": "Position: aktiverat", 347 | "FOLLOWING": "Position: följer gps", 348 | "LOCATING": "Position: bestäms...", 349 | "PERMISSION_DENIED": "Position: tillåts inte" 350 | } 351 | }, 352 | "map": { 353 | "loading": "Laddar...", 354 | "resetrotation": "" 355 | }, 356 | "map3d": { 357 | "syncview": "", 358 | "terrain": "", 359 | "title": "" 360 | }, 361 | "mapexport": { 362 | "configuration": "", 363 | "format": "Format:", 364 | "resolution": "Upplösning:", 365 | "scale": "", 366 | "size": "", 367 | "submit": "", 368 | "usersize": "", 369 | "wait": "" 370 | }, 371 | "mapfilter": { 372 | "addcustomfilter": "", 373 | "brokenrendering": "", 374 | "cancel": "", 375 | "geomfilter": "", 376 | "hidefiltergeom": "", 377 | "invalidfilter": "", 378 | "save": "", 379 | "select": "", 380 | "selectlayer": "", 381 | "timefilter": "", 382 | "timefrom": "", 383 | "timeto": "" 384 | }, 385 | "mapinfotooltip": { 386 | "elevation": "Höjd", 387 | "title": "Position" 388 | }, 389 | "maplegend": { 390 | "bboxdependent": "", 391 | "onlyvisible": "", 392 | "scaledependent": "", 393 | "windowtitle": "" 394 | }, 395 | "maplight3d": { 396 | "ambientLightIntensity": "", 397 | "animationstep": "", 398 | "date": "", 399 | "dayspersec": "", 400 | "directionalLightIntensity": "", 401 | "helpersVisible": "", 402 | "minspersec": "", 403 | "normalBias": "", 404 | "shadowBias": "", 405 | "shadowMapSize": "", 406 | "shadowType": "", 407 | "shadowVolumeFar": "", 408 | "shadowVolumeNear": "", 409 | "shadowintensity": "", 410 | "shadows": "", 411 | "showadvanced": "", 412 | "time": "", 413 | "zFactor": "" 414 | }, 415 | "measureComponent": { 416 | "absolute": "", 417 | "areaLabel": "Area", 418 | "bearingLabel": "Bäring", 419 | "ground": "", 420 | "imperial": "", 421 | "lengthLabel": "Längd", 422 | "metric": "", 423 | "pointLabel": "Position" 424 | }, 425 | "misc": { 426 | "ctrlclickhint": "" 427 | }, 428 | "navbar": { 429 | "perpage": "" 430 | }, 431 | "newspopup": { 432 | "dialogclose": "", 433 | "dontshowagain": "", 434 | "title": "" 435 | }, 436 | "numericinput": { 437 | "angle": "", 438 | "featureunsupported": "", 439 | "height": "", 440 | "nofeature": "", 441 | "side": "", 442 | "width": "", 443 | "windowtitle": "" 444 | }, 445 | "panoramax": { 446 | "notfound": "", 447 | "title": "" 448 | }, 449 | "pickfeature": { 450 | "querying": "" 451 | }, 452 | "portal": { 453 | "filter": "", 454 | "menulabel": "" 455 | }, 456 | "print": { 457 | "atlasfeature": "", 458 | "download": "", 459 | "download_as_onepdf": "", 460 | "download_as_onezip": "", 461 | "download_as_single": "", 462 | "format": "Format", 463 | "grid": "Rutnät", 464 | "layout": "Layout:", 465 | "legend": "", 466 | "maximize": "Maximera", 467 | "minimize": "Minimera", 468 | "nolayouts": "Valt tema stöder inte utskrift", 469 | "notheme": "Inget tema valt", 470 | "output": "Utskrift", 471 | "overlap": "", 472 | "pickatlasfeature": "", 473 | "resolution": "Upplösning", 474 | "rotation": "Rotation", 475 | "save": "", 476 | "scale": "Skala", 477 | "series": "", 478 | "submit": "Skriv ut", 479 | "wait": "Vänta..." 480 | }, 481 | "qtdesignerform": { 482 | "loading": "" 483 | }, 484 | "redlining": { 485 | "border": "Kant", 486 | "buffer": "Buffert", 487 | "buffercompute": "Beräkna", 488 | "bufferdistance": "Avstånd", 489 | "bufferlayer": "Mållager", 490 | "bufferlayername": "Buffert", 491 | "bufferselectfeature": "Välj ett objekt att buffra", 492 | "circle": "", 493 | "delete": "Radera", 494 | "draw": "Rita", 495 | "edit": "Redigera", 496 | "ellipse": "", 497 | "export": "", 498 | "freehand": "", 499 | "label": "Etikett", 500 | "layer": "Lager", 501 | "layertitle": "", 502 | "line": "Linje", 503 | "markers": "", 504 | "measurements": "", 505 | "numericinput": "", 506 | "pick": "Välj", 507 | "point": "Punkt", 508 | "polygon": "Yta", 509 | "rectangle": "", 510 | "size": "Storlek", 511 | "square": "", 512 | "text": "Text", 513 | "transform": "", 514 | "width": "Bredd" 515 | }, 516 | "reports": { 517 | "all": "", 518 | "download": "", 519 | "pick": "", 520 | "region": "", 521 | "selectlayer": "" 522 | }, 523 | "routing": { 524 | "add": "", 525 | "addviapoint": "", 526 | "arriveat": "", 527 | "clear": "", 528 | "computefailed": "", 529 | "computing": "", 530 | "excludepolygons": "", 531 | "export": "", 532 | "fastest": "", 533 | "fromhere": "", 534 | "importerror": "", 535 | "importhint": "", 536 | "importpoints": "", 537 | "iso_intervals": "", 538 | "iso_mode": "", 539 | "iso_mode_distance": "", 540 | "iso_mode_time": "", 541 | "isocenter": "", 542 | "isoextracenter": "", 543 | "leaveat": "", 544 | "leavenow": "", 545 | "maxspeed": "", 546 | "method": "", 547 | "mode_auto": "", 548 | "mode_bicycle": "", 549 | "mode_heavyvehicle": "", 550 | "mode_transit": "", 551 | "mode_walking": "", 552 | "optimized_route": "", 553 | "reachability": "", 554 | "roundtrip": "", 555 | "route": "", 556 | "shortest": "", 557 | "tohere": "", 558 | "useferries": "", 559 | "usehighways": "", 560 | "usetollways": "", 561 | "windowtitle": "" 562 | }, 563 | "scratchdrawing": { 564 | "finish": "" 565 | }, 566 | "serviceinfo": { 567 | "abstract": "", 568 | "contactEmail": "", 569 | "contactOrganization": "", 570 | "contactPerson": "", 571 | "contactPhone": "", 572 | "contactPosition": "", 573 | "keywords": "", 574 | "onlineResource": "", 575 | "title": "" 576 | }, 577 | "settings": { 578 | "bookmarks": "", 579 | "colorscheme": "", 580 | "confirmlang": "", 581 | "default": "", 582 | "defaulttheme": "", 583 | "defaultthemefailed": "", 584 | "language": "", 585 | "systemlang": "", 586 | "themes": "" 587 | }, 588 | "share": { 589 | "QRCodeLinkTitle": "QR kod", 590 | "directLinkTitle": "Via en direktlänk", 591 | "expires": "", 592 | "norestriction": "", 593 | "refresh": "", 594 | "restricttogroup": "", 595 | "shareTitle": "QWC2", 596 | "showpin": "", 597 | "socialIntro": "I ditt favoritnätverk" 598 | }, 599 | "snapping": { 600 | "edge": "", 601 | "loading": "", 602 | "snappingenabled": "", 603 | "vertex": "" 604 | }, 605 | "themelayerslist": { 606 | "addlayer": "", 607 | "addlayerstotheme": "", 608 | "addselectedlayers": "", 609 | "existinglayers": "" 610 | }, 611 | "themeswitcher": { 612 | "addlayerstotheme": "", 613 | "addtotheme": "Lägg till aktuellt tema", 614 | "changedefaulttheme": "", 615 | "confirmswitch": "", 616 | "filter": "Filtrera...", 617 | "match": { 618 | "abstract": "", 619 | "keywords": "", 620 | "title": "" 621 | }, 622 | "openintab": "", 623 | "restrictedthemeinfo": "" 624 | }, 625 | "timemanager": { 626 | "animationinterval": "", 627 | "classify": "", 628 | "classifynone": "", 629 | "displayfeatures": "", 630 | "displaylayers": "", 631 | "displayminimal": "", 632 | "edit": "", 633 | "endtime": "", 634 | "filterwarning": "", 635 | "future": "", 636 | "group": "", 637 | "groupnone": "", 638 | "home": "", 639 | "loading": "", 640 | "loop": "", 641 | "markers": "", 642 | "notemporaldata": "", 643 | "now": "", 644 | "past": "", 645 | "play": "", 646 | "playrev": "", 647 | "rewind": "", 648 | "starttime": "", 649 | "stepback": "", 650 | "stepfwd": "", 651 | "stepsize": "", 652 | "stop": "", 653 | "timeline": "", 654 | "timeline_fixed": "", 655 | "timeline_infinite": "", 656 | "timelinedisplay": "", 657 | "timelinescale": "", 658 | "title": "", 659 | "toggle": "", 660 | "unit": { 661 | "century": "", 662 | "days": "", 663 | "decade": "", 664 | "hours": "", 665 | "milliseconds": "", 666 | "minutes": "", 667 | "months": "", 668 | "seconds": "", 669 | "years": "" 670 | }, 671 | "zoomin": "", 672 | "zoomout": "" 673 | }, 674 | "tooltip": { 675 | "background": "Byt bakgrund", 676 | "fullscreendisable": "", 677 | "fullscreenenable": "", 678 | "home": "Visa hela kartan", 679 | "zoomin": "Zooma in", 680 | "zoomout": "Zooma ut" 681 | }, 682 | "valuetool": { 683 | "all": "", 684 | "allbands": "", 685 | "alllayers": "", 686 | "bands": "", 687 | "graph": "", 688 | "layer": "", 689 | "nodata": "", 690 | "options": "", 691 | "selectedbands": "", 692 | "selectedlayers": "", 693 | "selectlayersbands": "", 694 | "showbands": "", 695 | "showlayers": "", 696 | "table": "", 697 | "title": "", 698 | "visiblelayers": "" 699 | }, 700 | "vectorlayerpicker": { 701 | "none": "", 702 | "prompt": "" 703 | }, 704 | "window": { 705 | "close": "", 706 | "detach": "", 707 | "dock": "", 708 | "embed": "", 709 | "maximize": "", 710 | "minimize": "", 711 | "undock": "", 712 | "unmaximize": "", 713 | "unminimize": "" 714 | } 715 | } 716 | } 717 | -------------------------------------------------------------------------------- /static/translations/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "languages": [ 3 | "de-DE", 4 | "de-CH", 5 | "en-US", 6 | "es-ES", 7 | "fr-FR", 8 | "it-IT", 9 | "ja-JP", 10 | "pl-PL", 11 | "pt-BR", 12 | "pt-PT", 13 | "ro-RO", 14 | "ru-RU", 15 | "sv-SE", 16 | "tr-TR", 17 | "cs-CZ" 18 | ], 19 | "extra_strings": [ 20 | "appmenu.items.ExternalLink", 21 | "search.coordinates", 22 | "colorschemes.default", 23 | "colorschemes.dark", 24 | "colorschemes.highcontrast" 25 | ], 26 | "overrides": [], 27 | "strings": [] 28 | } 29 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const path = require('path'); 3 | const {CleanWebpackPlugin} = require('clean-webpack-plugin'); 4 | const CopyWebpackPlugin = require('copy-webpack-plugin'); 5 | const HtmlWebpackPlugin = require("html-webpack-plugin"); 6 | 7 | const today = new Date(); 8 | const buildDate = today.getFullYear() + "." + String(1 + today.getMonth()).padStart(2, '0') + "." + String(today.getDate()).padStart(2, '0'); 9 | 10 | module.exports = (env, argv) => { 11 | const isProd = argv.mode === "production"; 12 | 13 | return { 14 | entry: { 15 | QWC2App: path.resolve(__dirname, 'js', 'app.jsx') 16 | }, 17 | output: { 18 | hashFunction: 'sha256', 19 | path: path.resolve(__dirname, 'prod'), 20 | filename: 'dist/QWC2App.js', 21 | assetModuleFilename: 'dist/[hash][ext][query]' 22 | }, 23 | watchOptions: { 24 | ignored: /node_modules(\\|\/)(?!qwc2)/ 25 | }, 26 | devtool: isProd ? 'source-map' : 'inline-source-map', 27 | optimization: { 28 | minimize: isProd 29 | }, 30 | devServer: { 31 | static: [ 32 | { 33 | directory: path.resolve(__dirname, 'static'), 34 | publicPath: '/' 35 | } 36 | ], 37 | compress: true, 38 | hot: true, 39 | port: 8080 40 | }, 41 | resolve: { 42 | extensions: [".mjs", ".js", ".jsx"], 43 | fallback: { 44 | path: require.resolve("path-browserify") 45 | } 46 | }, 47 | snapshot: { 48 | managedPaths: [/(.*(\\|\/)node_modules(\\|\/)(?!qwc2))/] 49 | }, 50 | plugins: [ 51 | new CleanWebpackPlugin(), 52 | new webpack.DefinePlugin({ 53 | 'process.env': { 54 | NODE_ENV: JSON.stringify(argv.mode), 55 | BuildDate: JSON.stringify(buildDate) 56 | } 57 | }), 58 | new webpack.NormalModuleReplacementPlugin(/openlayers$/, path.join(__dirname, "node_modules", "qwc2", "libs", "openlayers")), 59 | new HtmlWebpackPlugin({ 60 | template: path.resolve(__dirname, "index.html"), 61 | build: buildDate, 62 | hash: true 63 | }), 64 | new CopyWebpackPlugin({ 65 | patterns: [ 66 | { from: 'static' } 67 | ] 68 | }) 69 | ], 70 | module: { 71 | rules: [ 72 | { 73 | test: /\.css$/, 74 | use: [ 75 | {loader: 'style-loader'}, 76 | {loader: 'css-loader'} 77 | ] 78 | }, 79 | { 80 | test: /(.woff|.woff2|.png|.jpg|.gif|.svg|.glb)/, 81 | type: 'asset/inline' 82 | }, 83 | { 84 | test: /\.jsx?$/, 85 | exclude: /node_modules(\\|\/)(?!qwc2)/, 86 | use: { 87 | loader: 'babel-loader', 88 | options: { babelrcRoots: ['.', path.resolve(__dirname, 'node_modules', 'qwc2')] } 89 | } 90 | }, 91 | { 92 | test: /(.mjs|.js)$/, 93 | type: 'javascript/auto' 94 | }, 95 | { 96 | test: /\.js$/, 97 | enforce: "pre", 98 | use: ["source-map-loader"] 99 | } 100 | ] 101 | } 102 | }; 103 | }; 104 | --------------------------------------------------------------------------------