From ca899561d55626b9c2c14f90d60d01c8c1276823 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Fri, 23 Jun 2023 22:44:33 +0200 Subject: [PATCH 01/36] Fix: actually deploy on the production repo --- .../workflows/theme_validation_and_deploy.yml | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/.github/workflows/theme_validation_and_deploy.yml b/.github/workflows/theme_validation_and_deploy.yml index 9e32dd808a..3bd50c5b59 100644 --- a/.github/workflows/theme_validation_and_deploy.yml +++ b/.github/workflows/theme_validation_and_deploy.yml @@ -52,7 +52,7 @@ jobs: echo "Cloning destination repo" git config --global user.email "pietervdvn@posteo.net" git config --global user.name "pietervdvn" - git clone --depth 1 --single-branch --branch master "https://x-access-token:$DEPLOY_KEY_PIETERVDVN@github.com/pietervdvn/pietervdvn.github.io.git" + git clone --depth 1 --single-branch --branch master "https://x-access-token:$DEPLOY_KEY_PIETERVDVN@github.com/MapComplete/mapcomplete.github.io.git" echo "Destination repo is cloned" - name: Sync repo @@ -62,23 +62,19 @@ jobs: cd pietervdvn.github.io git pull - - name: get branch name - run: echo TARGET_BRANCH=${GITHUB_REF:11} >> $GITHUB_ENV - - name: "Copying files" run: | echo "Deploying" - rm -rf pietervdvn.github.io/mc/${{ env.TARGET_BRANCH }}/* - mkdir -p pietervdvn.github.io/mc/${{ env.TARGET_BRANCH }}/ - cp -r dist/* pietervdvn.github.io/mc/${{ env.TARGET_BRANCH }}/ - cd pietervdvn.github.io/ + rm -rf mapcomplete.github.io/* + cp -r dist/* mapcomplete.github.io/ + cd mapcomplete.github.io/ + echo "mapcomplete.osm.be" > CNAME git add * if git status | grep -q "Changes to be committed" then - git commit -am "Deploying a new version of mapcomplete" + git commit -am "Deploying a new version" git push else echo "No changes to commit" fi - env: - TARGET_BRANCH: ${{ env.TARGET_BRANCH }} + From 9c0dac28ad0604026936cc68c5238927978b250a Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 24 Jun 2023 00:24:30 +0200 Subject: [PATCH 02/36] Fix: use correct branch to deploy --- .github/workflows/theme_validation_and_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/theme_validation_and_deploy.yml b/.github/workflows/theme_validation_and_deploy.yml index 3bd50c5b59..9c1ff4c342 100644 --- a/.github/workflows/theme_validation_and_deploy.yml +++ b/.github/workflows/theme_validation_and_deploy.yml @@ -52,7 +52,7 @@ jobs: echo "Cloning destination repo" git config --global user.email "pietervdvn@posteo.net" git config --global user.name "pietervdvn" - git clone --depth 1 --single-branch --branch master "https://x-access-token:$DEPLOY_KEY_PIETERVDVN@github.com/MapComplete/mapcomplete.github.io.git" + git clone --depth 1 --single-branch --branch main "https://x-access-token:$DEPLOY_KEY_PIETERVDVN@github.com/MapComplete/mapcomplete.github.io.git" echo "Destination repo is cloned" - name: Sync repo From ecd84c2cf6174bddad5d1759caeeeea761e1b9f1 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 24 Jun 2023 01:12:32 +0200 Subject: [PATCH 03/36] Fix: correct 'sync repo' step --- .github/workflows/theme_validation_and_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/theme_validation_and_deploy.yml b/.github/workflows/theme_validation_and_deploy.yml index 9c1ff4c342..32b5933812 100644 --- a/.github/workflows/theme_validation_and_deploy.yml +++ b/.github/workflows/theme_validation_and_deploy.yml @@ -59,7 +59,7 @@ jobs: env: DEPLOY_KEY_PIETERVDVN: ${{ secrets.DEPLOY_KEY_PIETERVDVN }} run: | - cd pietervdvn.github.io + cd mapcomplete.github.io git pull - name: "Copying files" From adb5d892fb39cdf63ea65d95ef5079f0efed6324 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 26 Jun 2023 11:00:19 +0200 Subject: [PATCH 04/36] Fix: temporarily only warn for incomplete translations --- Models/ThemeConfig/Conversion/Validation.ts | 5 +- assets/tagRenderings/questions.json | 3 +- .../mapcomplete-changes.json | 57 ++++++++++++------- langs/shared-questions/de.json | 7 +++ 4 files changed, 51 insertions(+), 21 deletions(-) diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts index c61f06e454..e5d325642b 100644 --- a/Models/ThemeConfig/Conversion/Validation.ts +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -31,6 +31,7 @@ class ValidateLanguageCompleteness extends DesugaringStep { convert(obj: any, context: string): { result: LayerConfig; errors: string[] } { const errors = [] + const warnings: string[] = [] const translations = Translation.ExtractAllTranslationsFrom(obj) for (const neededLanguage of this._languages) { translations @@ -40,7 +41,7 @@ class ValidateLanguageCompleteness extends DesugaringStep { t.tr.translations["*"] === undefined ) .forEach((missing) => { - errors.push( + warnings.push( context + "A theme should be translation-complete for " + neededLanguage + @@ -55,6 +56,7 @@ class ValidateLanguageCompleteness extends DesugaringStep { return { result: obj, errors, + warnings, } } } @@ -248,6 +250,7 @@ class ValidateTheme extends DesugaringStep { const checked = new ValidateLanguageCompleteness( ...json["mustHaveLanguage"] ).convert(theme, theme.id) + errors.push(...checked.errors) } if (!json.hideFromOverview && theme.id !== "personal" && this._isBuiltin) { diff --git a/assets/tagRenderings/questions.json b/assets/tagRenderings/questions.json index dcbd751bb6..ec938eeab5 100644 --- a/assets/tagRenderings/questions.json +++ b/assets/tagRenderings/questions.json @@ -1412,7 +1412,8 @@ "href": "{_backend}/changeset/{_last_edit:changeset}", "text": { "en": "Last edited on {_last_edit:timestamp} by {_last_edit:contributor}", - "nl": "Laatst gewijzigd op {_last_edit:timestamp} door {_last_edit:contributor} " + "nl": "Laatst gewijzigd op {_last_edit:timestamp} door {_last_edit:contributor} ", + "de": "Zuletzt bearbeitet am {_last_edit:timestamp} vom {_last_edit:contributor}" }, "class": "subtle font-small" } diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index f82a920864..a27f0dd0de 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -1,13 +1,16 @@ { "id": "mapcomplete-changes", "title": { - "en": "Changes made with MapComplete" + "en": "Changes made with MapComplete", + "nl": "Wijzigingen gemaakt met MapComplete" }, "shortDescription": { - "en": "Shows changes made by MapComplete" + "en": "Shows changes made by MapComplete", + "nl": "Toon wijzigingen gemaakt met MapComplete" }, "description": { - "en": "This maps shows all the changes made with MapComplete" + "en": "This maps shows all the changes made with MapComplete", + "nl": "Deze kaart toont alle wijzigingen die met MapComplete gemaakt werden" }, "icon": "./assets/svg/logo.svg", "hideFromOverview": true, @@ -20,7 +23,8 @@ { "id": "mapcomplete-changes", "name": { - "en": "Changeset centers" + "en": "Changeset centers", + "nl": "Centerpunt van changeset" }, "minzoom": 0, "source": { @@ -35,7 +39,8 @@ } }, "description": { - "en": "Shows all MapComplete changes" + "en": "Shows all MapComplete changes", + "nl": "Toon alle MapComplete wijzigingen" }, "tagRenderings": [ { @@ -47,13 +52,15 @@ { "id": "contributor", "question": { - "en": "What contributor did make this change?" + "en": "What contributor did make this change?", + "nl": "Welke bijdrager maakte deze wijziging?" }, "freeform": { "key": "user" }, "render": { - "en": "Change made by {user}" + "en": "Change made by {user}", + "nl": "Wijziging gemaakt door {user}" } }, { @@ -74,19 +81,23 @@ "key": "locale" }, "question": { - "en": "What locale (language) was this change made in?" + "en": "What locale (language) was this change made in?", + "nl": "In welke locale (taal) werd deze wijziging gemaakt?" }, "render": { - "en": "User locale is {locale}" + "en": "User locale is {locale}", + "nl": "De gebruikerstaal is {locale}" } }, { "id": "host", "render": { - "en": "Change with with {host}" + "en": "Change with {host}", + "nl": "Wijziging gemaakt met {host}" }, "question": { - "en": "What host (website) was this change made with?" + "en": "What host (website) was this change made with?", + "nl": "Met welke host (website) werd deze wijziging gemaakt?" }, "freeform": { "key": "host" @@ -444,7 +455,8 @@ } ], "question": { - "en": "Themename contains {search}" + "en": "Themename contains {search}", + "nl": "Themenaam bevat {search}" } } ] @@ -460,7 +472,8 @@ } ], "question": { - "en": "Made by contributor {search}" + "en": "Made by contributor {search}", + "nl": "Gemaakt door bijdrager {search}" } } ] @@ -476,7 +489,8 @@ } ], "question": { - "en": "Not made by contributor {search}" + "en": "Not made by contributor {search}", + "nl": "Niet gemaakt door bijdrager {search}" } } ] @@ -493,7 +507,8 @@ } ], "question": { - "en": "Made before {search}" + "en": "Made before {search}", + "nl": "Gemaakt voor {search}" } } ] @@ -510,7 +525,8 @@ } ], "question": { - "en": "Made after {search}" + "en": "Made after {search}", + "nl": "Gemaakt na {search}" } } ] @@ -526,7 +542,8 @@ } ], "question": { - "en": "User language (iso-code) {search}" + "en": "User language (iso-code) {search}", + "nl": "De taal van de bijdrager is {search}" } } ] @@ -542,7 +559,8 @@ } ], "question": { - "en": "Made with host {search}" + "en": "Made with host {search}", + "nl": "Gemaakt met host {search}" } } ] @@ -553,7 +571,8 @@ { "osmTags": "add-image>0", "question": { - "en": "Changeset added at least one image" + "en": "Changeset added at least one image", + "nl": "Changeset bevat minstens één afbeelding" } } ] diff --git a/langs/shared-questions/de.json b/langs/shared-questions/de.json index 40c97a5289..7f6b17526b 100644 --- a/langs/shared-questions/de.json +++ b/langs/shared-questions/de.json @@ -138,6 +138,13 @@ } } }, + "last_edit": { + "render": { + "special": { + "text": "Zuletzt bearbeitet am {_last_edit:timestamp} vom {_last_edit:contributor}" + } + } + }, "level": { "mappings": { "0": { From 6a79dde743264c272e461614ae718044d90a7080 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 26 Jun 2023 11:11:22 +0200 Subject: [PATCH 05/36] Fix: Actually show errors in custom themes now --- Logic/DetermineLayout.ts | 114 +++++++++++++-------------------------- index.ts | 24 +++++---- 2 files changed, 50 insertions(+), 88 deletions(-) diff --git a/Logic/DetermineLayout.ts b/Logic/DetermineLayout.ts index f1f28ee14e..78fa921308 100644 --- a/Logic/DetermineLayout.ts +++ b/Logic/DetermineLayout.ts @@ -11,7 +11,6 @@ import { LocalStorageSource } from "./Web/LocalStorageSource" import LZString from "lz-string" import { FixLegacyTheme } from "../Models/ThemeConfig/Conversion/LegacyJsonConvert" import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson" -import SharedTagRenderings from "../Customizations/SharedTagRenderings" import known_layers from "../assets/generated/known_layers.json" import { PrepareTheme } from "../Models/ThemeConfig/Conversion/PrepareTheme" import licenses from "../assets/generated/license_info.json" @@ -24,9 +23,8 @@ import { ValidateTagRenderings, ValidateThemeAndLayers, } from "../Models/ThemeConfig/Conversion/Validation" -import { DesugaringContext, Each, On } from "../Models/ThemeConfig/Conversion/Conversion" -import { PrepareLayer, RewriteSpecial } from "../Models/ThemeConfig/Conversion/PrepareLayer" -import { AllSharedLayers } from "../Customizations/AllSharedLayers" +import { DesugaringContext } from "../Models/ThemeConfig/Conversion/Conversion" +import { RewriteSpecial } from "../Models/ThemeConfig/Conversion/PrepareLayer" import { TagRenderingConfigJson } from "../Models/ThemeConfig/Json/TagRenderingConfigJson" import questions from "../assets/tagRenderings/questions.json" @@ -79,55 +77,33 @@ export default class DetermineLayout { let hash = location.hash.substr(1) let json: any - try { - // layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter - const dedicatedHashFromLocalStorage = LocalStorageSource.Get( - "user-layout-" + userLayoutParam.data?.replace(" ", "_") - ) - if (dedicatedHashFromLocalStorage.data?.length < 10) { - dedicatedHashFromLocalStorage.setData(undefined) - } - - const hashFromLocalStorage = LocalStorageSource.Get("last-loaded-user-layout") - if (hash.length < 10) { - hash = dedicatedHashFromLocalStorage.data ?? hashFromLocalStorage.data - } else { - console.log("Saving hash to local storage") - hashFromLocalStorage.setData(hash) - dedicatedHashFromLocalStorage.setData(hash) - } - - try { - json = JSON.parse(atob(hash)) - } catch (e) { - // We try to decode with lz-string - try { - json = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(hash))) - } catch (e) { - console.error(e) - DetermineLayout.ShowErrorOnCustomTheme( - "Could not decode the hash", - new FixedUiElement("Not a valid (LZ-compressed) JSON") - ) - return null - } - } - - const layoutToUse = DetermineLayout.prepCustomTheme(json) - userLayoutParam.setData(layoutToUse.id) - return layoutToUse - } catch (e) { - console.error(e) - if (hash === undefined || hash.length < 10) { - DetermineLayout.ShowErrorOnCustomTheme( - "Could not load a theme from the hash", - new FixedUiElement("Hash does not contain data"), - json - ) - } - this.ShowErrorOnCustomTheme("Could not parse the hash", new FixedUiElement(e), json) - return null + // layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter + const dedicatedHashFromLocalStorage = LocalStorageSource.Get( + "user-layout-" + userLayoutParam.data?.replace(" ", "_") + ) + if (dedicatedHashFromLocalStorage.data?.length < 10) { + dedicatedHashFromLocalStorage.setData(undefined) } + + const hashFromLocalStorage = LocalStorageSource.Get("last-loaded-user-layout") + if (hash.length < 10) { + hash = dedicatedHashFromLocalStorage.data ?? hashFromLocalStorage.data + } else { + console.log("Saving hash to local storage") + hashFromLocalStorage.setData(hash) + dedicatedHashFromLocalStorage.setData(hash) + } + + try { + json = JSON.parse(atob(hash)) + } catch (e) { + // We try to decode with lz-string + json = JSON.parse(Utils.UnMinify(LZString.decompressFromBase64(hash))) + } + + const layoutToUse = DetermineLayout.prepCustomTheme(json) + userLayoutParam.setData(layoutToUse.id) + return layoutToUse } public static ShowErrorOnCustomTheme( @@ -187,6 +163,7 @@ export default class DetermineLayout { return dict } + private static prepCustomTheme(json: any, sourceUrl?: string, forceId?: string): LayoutConfig { if (json.layers === undefined && json.tagRenderings !== undefined) { const iconTr = json.mapRendering.map((mr) => mr.icon).find((icon) => icon !== undefined) @@ -255,32 +232,13 @@ export default class DetermineLayout { "maindiv" ) - try { - let parsed = await Utils.downloadJson(link) - try { - let forcedId = parsed.id - const url = new URL(link) - if (!(url.hostname === "localhost" || url.hostname === "127.0.0.1")) { - forcedId = link - } - console.log("Loaded remote link:", link) - return DetermineLayout.prepCustomTheme(parsed, link, forcedId) - } catch (e) { - console.error(e) - DetermineLayout.ShowErrorOnCustomTheme( - `${link} is invalid:`, - new FixedUiElement(e), - parsed - ) - return null - } - } catch (e) { - console.error(e) - DetermineLayout.ShowErrorOnCustomTheme( - `${link} is invalid - probably not found or invalid JSON:`, - new FixedUiElement(e) - ) - return null + let parsed = await Utils.downloadJson(link) + let forcedId = parsed.id + const url = new URL(link) + if (!(url.hostname === "localhost" || url.hostname === "127.0.0.1")) { + forcedId = link } + console.log("Loaded remote link:", link) + return DetermineLayout.prepCustomTheme(parsed, link, forcedId) } } diff --git a/index.ts b/index.ts index 3d29af169f..73d68c768c 100644 --- a/index.ts +++ b/index.ts @@ -6,13 +6,17 @@ import ThemeViewGUI from "./UI/ThemeViewGUI.svelte" import { FixedUiElement } from "./UI/Base/FixedUiElement" // @ts-ignore -DetermineLayout.GetLayout() - .then((layout) => { - const state = new ThemeViewState(layout) - const main = new SvelteUIElement(ThemeViewGUI, { state }) - main.AttachTo("maindiv") - }) - .catch((err) => { - console.error("Error while initializing: ", err, err.stack) - new FixedUiElement(err).SetClass("block alert").AttachTo("maindiv") - }) +try { + DetermineLayout.GetLayout() + .then((layout) => { + const state = new ThemeViewState(layout) + const main = new SvelteUIElement(ThemeViewGUI, { state }) + main.AttachTo("maindiv") + }) + .catch((err) => { + console.error("Error while initializing: ", err, err.stack) + new FixedUiElement(err).SetClass("block alert").AttachTo("maindiv") + }) +} catch (err) { + new FixedUiElement(err).SetClass("block alert").AttachTo("maindiv") +} From a5db1efde26875f994156b25390164e9b1f925b4 Mon Sep 17 00:00:00 2001 From: Supaplex Date: Mon, 26 Jun 2023 08:21:03 +0000 Subject: [PATCH 06/36] Translated using Weblate (Chinese (Traditional)) Currently translated at 72.2% (362 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/zh_Hant/ --- langs/zh_Hant.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index c2903bdc6a..4983f4569a 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -1,10 +1,21 @@ { + "advanced": { + "title": "進階功能" + }, "centerMessage": { + "allFilteredAway": "檢視畫面當中沒有滿足過瀘條件的圖徵", "loadingData": "正在讀取資料…", + "noData": "目前檢視畫面沒有相關的圖徵", "ready": "完成!", "retrying": "無法讀取資料,請在 {count} 秒後再試一次…", "zoomIn": "放大來檢視或編輯資料" }, + "communityIndex": { + "available": "這個社群說 {native}", + "intro": "與其他人接洽並且與他們熟悉,從他們的經驗學習,...", + "notAvailable": "這個社群不說 {native}", + "title": "社群索引" + }, "delete": { "cancel": "取消", "cannotBeDeleted": "這圖徵無法刪除", From 56783bf6ae3573263a8b8cba0ee2e673bd3510e9 Mon Sep 17 00:00:00 2001 From: kjon Date: Mon, 26 Jun 2023 17:39:18 +0000 Subject: [PATCH 07/36] Translated using Weblate (German) Currently translated at 91.6% (459 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/de/ --- langs/de.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/langs/de.json b/langs/de.json index 4502a007cf..8d4c372270 100644 --- a/langs/de.json +++ b/langs/de.json @@ -1,4 +1,7 @@ { + "advanced": { + "title": "Erweiterte Funktionen" + }, "centerMessage": { "loadingData": "Daten werden geladen…", "ready": "Erledigt!", From 1ce7358dfb539ef2e61762bb06d62d838773a958 Mon Sep 17 00:00:00 2001 From: Supaplex Date: Mon, 26 Jun 2023 09:43:22 +0000 Subject: [PATCH 08/36] Translated using Weblate (Chinese (Traditional)) Currently translated at 52.4% (216 of 412 strings) Translation: MapComplete/themes Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/zh_Hant/ --- langs/themes/zh_Hant.json | 185 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 177 insertions(+), 8 deletions(-) diff --git a/langs/themes/zh_Hant.json b/langs/themes/zh_Hant.json index 2f1b6683e5..3913b5de96 100644 --- a/langs/themes/zh_Hant.json +++ b/langs/themes/zh_Hant.json @@ -1,17 +1,47 @@ { + "advertising": { + "description": "你曾經好奇路上有多少廣告物件?有了這份地圖,你可以找到所有路上能夠看到的廣告物件", + "shortDescription": "我能夠在那裡找到廣告物件?", + "title": "廣告物件" + }, "aed": { "description": "在這份地圖上,你可以找到與標記附近的除顫器", - "title": "開放AED地圖" + "title": "除顫器" }, "artwork": { - "description": "歡迎來到開放藝術品地圖,這份地圖會顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品", - "title": "開放藝術品地圖" + "description": "顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品的地圖", + "title": "藝術品" + }, + "atm": { + "description": "這份地圖顯示領錢與存錢的 ATM", + "layers": { + "3": { + "override": { + "=tagRenderings": { + "0": { + "render": { + "special": { + "text": "匯入這座 ATM" + } + } + } + } + } + } + }, + "title": "自動櫃員機" + }, + "bag": { + "title": "BAG 匯入助手" }, "benches": { - "description": "這份地圖顯示開放街圖上所有記錄的長椅:單獨的長椅,屬於大眾運輸站點或涼亭的長椅。只要有開放街圖帳號,你可以新增長椅或是編輯既有長椅的詳細內容。", + "description": "這份地圖顯示開放街圖上所有記錄的長椅:單獨的長椅,屬於大眾運輸站點或涼亭的長椅。", "shortDescription": "長椅的地圖", "title": "長椅" }, + "bicycle_rental": { + "title": "單車租借站" + }, "bicyclelib": { "description": "單車圖書館是指每年支付小額費用,然後可以租用單車的地方。最有名的單車圖書館案例是給小孩的,能夠讓長大的小孩用目前的單車換成比較大的單車", "title": "單車圖書館" @@ -26,10 +56,11 @@ "title": "開放書架地圖" }, "cafes_and_pubs": { + "description": "咖啡廳、俱樂部與酒吧", "title": "咖啡廳與酒吧" }, "campersite": { - "description": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。這是網站與網路 app,資料則是存在開放街圖,因此會永遠免費,而且可以被所有 app 再利用。", + "description": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。", "layers": { "0": { "description": "露營地", @@ -340,11 +371,28 @@ "shortDescription": "顯示消防栓、滅火器、消防隊與急救站的地圖。", "title": "消防栓、滅火器、消防隊、以及急救站。" }, + "maproulette": { + "title": "MapRoulette 任務" + }, "maps": { "description": "在這份地圖你可以找到所在在開放街圖上已知的地圖 - 特別是顯示地區、城市、區域的資訊版面上的大型地圖,例如佈告欄背面的旅遊地圖,自然保護區的地圖,區域的單車網路地圖,...)

如果有缺少的地圖,你可以輕易在開放街圖上新增這地圖。", "shortDescription": "這份主題顯示所有已知的開放街圖上的 (旅遊) 地圖", "title": "地圖的地圖" }, + "maxspeed": { + "description": "這份地圖顯示每一條道路的法定允許的最高速限,如果有缺漏的最高速限或是標示錯誤,你可以在這邊更正資訊。", + "shortDescription": "這份地圖顯示每一條道路的法定允許的最高速限。", + "title": "最高速限" + }, + "nature": { + "description": "在這份地圖,你可以找到觀光客與自然愛好者感興趣的資訊...", + "shortDescription": "為了自然愛好者,以及有趣的興趣點的地圖", + "title": "投入自然懷抱" + }, + "notes": { + "description": "註解會散佈在地圖上並且有一些文字說明,來顯示那邊有錯誤。

請確認用過濾檢視來搜尋使用者或是文字。", + "title": "開放街圖上的註解" + }, "observation_towers": { "description": "開放可及能觀景的高塔", "shortDescription": "開發可及能觀景的高塔", @@ -363,25 +411,134 @@ "description": "從所有可用的主題圖層創建個人化主題", "title": "個人化主題" }, + "pets": { + "layers": { + "1": { + "override": { + "name": "寵物友善餐廳" + } + }, + "2": { + "override": { + "name": "寵物友善商家", + "title": { + "render": "寵物友善商家" + } + } + }, + "6": { + "override": { + "presets": { + "0": { + "description": "你幾乎可以攜帶寵物到處去的商店", + "title": "寵物友善商家" + } + } + } + } + }, + "title": "獸醫院、寵物公園以及其他寵物設施" + }, "playgrounds": { "description": "在這份地圖上,你可以尋找遊樂場以及其相關資訊", "shortDescription": "遊樂場的地圖", "title": "遊樂場" }, + "postal_codes": { + "description": "郵遞區號", + "layers": { + "0": { + "name": "郵遞區號", + "tagRenderings": { + "postal_code": { + "render": "郵遞區號是 {postal_code}" + } + }, + "title": { + "render": "郵遞區號 {postal_code}" + } + }, + "2": { + "name": "城鎮", + "title": { + "render": "城鎮 {name}" + } + } + }, + "shortDescription": "郵遞區號", + "title": "郵遞區號" + }, "postboxes": { "description": "在這份地圖你能找到與新增有關郵局與郵筒的資料,你可以用這份地圖找到寄送您下張明信片的地方!:)
發現錯誤或是有郵筒遺漏嗎?你可以用免費的開放街圖帳號來編輯。 ", "shortDescription": "顯示郵筒與郵局的地圖", "title": "郵筒與郵局地圖" }, + "rainbow_crossings": { + "title": "彩虹人行穿越道" + }, "shops": { "description": "這份地圖上,你可以標記商家基本資訊,新增營業時間以及聯絡電話", - "title": "開放商店地圖" + "shortDescription": "有基本商家資訊的可編輯性的地圖", + "title": "商店" + }, + "sidewalks": { + "description": "實驗性的主題", + "layers": { + "0": { + "description": "顯示道路的人行穿越道的圖層", + "name": "人行道" + } + }, + "title": "人行道" }, "sport_pitches": { "description": "運動場地是進行運動的地方", "shortDescription": "顯示運動場地的地圖", "title": "運動場地" }, + "sports": { + "layers": { + "4": { + "override": { + "presets": { + "0": { + "title": "運動用品店" + } + } + } + } + }, + "shortDescription": "顯示運動設施的地圖。", + "title": "運動" + }, + "stations": { + "layers": { + "16": { + "presets": { + "0": { + "title": "時刻表" + } + }, + "tagRenderings": { + "type": { + "mappings": { + "2": { + "then": "這份是紙本時刻表" + } + }, + "question": "這是那種類型的時刻表?" + } + }, + "title": { + "render": "時刻表" + } + }, + "3": { + "description": "顯示火車站的圖層" + } + }, + "title": "火車站" + }, "street_lighting": { "description": "在這份地圖你可以找到任何有關路燈的事情", "layers": { @@ -445,16 +602,28 @@ }, "toilets": { "description": "公共廁所的地圖", - "title": "開放廁所地圖" + "title": "公共廁所" + }, + "transit": { + "description": "藉由大眾運輸系統來計畫你的旅程。", + "title": "公車路線" }, "trees": { "description": "繪製所有樹木!", "shortDescription": "所有樹木的地圖", "title": "樹木" }, + "walls_and_buildings": { + "description": "特殊的內建圖層顯示所有牆壁與建築。這個圖層對於規畫要靠牆的東西 (例如 AED、郵筒、入口、地址、監視器等) 相當實用。這個圖層預設顯示而且無法由使用者開關。", + "title": "牆壁與建築" + }, + "waste": { + "description": "顯示垃圾筒與回收設施的地圖。", + "title": "廢棄物" + }, "waste_basket": { "description": "在這份地圖當中,你可以找到你附近的垃圾筒。如果地圖有遺漏垃圾筒,你可以自己加上去", "shortDescription": "垃圾筒的地圖", "title": "垃圾筒" } -} \ No newline at end of file +} From 8b097ec55cef8f75e7b5b395c38d7a3c004bb911 Mon Sep 17 00:00:00 2001 From: Supaplex Date: Mon, 26 Jun 2023 09:20:20 +0000 Subject: [PATCH 09/36] Translated using Weblate (Chinese (Traditional)) Currently translated at 6.6% (190 of 2861 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/zh_Hant/ --- langs/layers/zh_Hant.json | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/langs/layers/zh_Hant.json b/langs/layers/zh_Hant.json index 80bb0fa7ec..14ad256f7a 100644 --- a/langs/layers/zh_Hant.json +++ b/langs/layers/zh_Hant.json @@ -16,7 +16,7 @@ } }, "artwork": { - "description": "不同類型的藝術品", + "description": "顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品的地圖", "name": "藝術品", "presets": { "0": { @@ -36,6 +36,12 @@ "1": { "then": "壁畫" }, + "10": { + "then": "Azulejo (西班牙雕塑作品名稱)" + }, + "11": { + "then": "瓷磚" + }, "2": { "then": "繪畫" }, @@ -59,12 +65,6 @@ }, "9": { "then": "寬慰" - }, - "10": { - "then": "Azulejo (西班牙雕塑作品名稱)" - }, - "11": { - "then": "瓷磚" } }, "question": "這是什麼類型的藝術品?", @@ -612,6 +612,9 @@ } } }, + "walls_and_buildings": { + "description": "特殊的內建圖層顯示所有牆壁與建築。這個圖層對於規畫要靠牆的東西 (例如 AED、郵筒、入口、地址、監視器等) 相當實用。這個圖層預設顯示而且無法由使用者開關。" + }, "windturbine": { "name": "風機", "presets": { @@ -675,4 +678,4 @@ } } } -} \ No newline at end of file +} From 4bcf8dfb55c2b8148c99d5ebc78d8156e6d88658 Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 12:53:44 +0000 Subject: [PATCH 10/36] Translated using Weblate (German) Currently translated at 100.0% (2861 of 2861 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/de/ --- langs/layers/de.json | 530 ++++++++++++++++++++++++++----------------- 1 file changed, 316 insertions(+), 214 deletions(-) diff --git a/langs/layers/de.json b/langs/layers/de.json index e6bc1c6afb..203fda25d1 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -35,6 +35,16 @@ "1": { "title": "eine freistehende Posterbox" }, + "10": { + "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", + "title": "ein Schild" + }, + "11": { + "title": "eine Skulptur" + }, + "12": { + "title": "eine Wandmalerei" + }, "2": { "title": "eine wandmontierte Posterbox" }, @@ -61,16 +71,6 @@ }, "9": { "title": "ein Totem" - }, - "10": { - "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", - "title": "ein Schild" - }, - "11": { - "title": "eine Skulptur" - }, - "12": { - "title": "eine Wandmalerei" } }, "tagRenderings": { @@ -165,6 +165,9 @@ "1": { "then": "Dies ist ein Brett" }, + "10": { + "then": "Dies ist eine Wandmalerei" + }, "2": { "then": "Dies ist eine Litfaßsäule" }, @@ -188,9 +191,6 @@ }, "9": { "then": "Dies ist ein Totem" - }, - "10": { - "then": "Dies ist eine Wandmalerei" } }, "question": "Welche Art von Werbung ist das?", @@ -205,6 +205,9 @@ "1": { "then": "Brett" }, + "10": { + "then": "Wandmalerei" + }, "2": { "then": "Posterbox" }, @@ -228,9 +231,6 @@ }, "9": { "then": "Totem" - }, - "10": { - "then": "Wandmalerei" } } } @@ -312,6 +312,15 @@ "1": { "then": "Wandbild" }, + "10": { + "then": "Azulejo (spanische dekorative Fliesenarbeit)" + }, + "11": { + "then": "Fliesenarbeit" + }, + "12": { + "then": "Holzschnitzerei" + }, "2": { "then": "Malerei" }, @@ -335,15 +344,6 @@ }, "9": { "then": "Relief" - }, - "10": { - "then": "Azulejo (spanische dekorative Fliesenarbeit)" - }, - "11": { - "then": "Fliesenarbeit" - }, - "12": { - "then": "Holzschnitzerei" } }, "question": "Um welche Art Kunstwerk handelt es sich?", @@ -670,7 +670,7 @@ "then": "Diese Bank hat kein integriertes Kunstwerk" } }, - "question": "Hat diese Bank ein künstlerisches Element? ", + "question": "Hat diese Bank ein künstlerisches Element?", "questionHint": "Z.B. hat es ein integriertes Gemälde, eine Statue oder eine andere nicht triviale, kreative Arbeit" }, "bench-backrest": { @@ -730,8 +730,8 @@ "then": "Diese Bank hat (wahrscheinlich) keine Inschrift" } }, - "question": "Hat diese Bank eine Inschrift? ", - "questionHint": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, ... ", + "question": "Hat diese Bank eine Inschrift?", + "questionHint": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, ...", "render": "Diese Bank hat folgende Inschrift:

{inscription}

" }, "bench-material": { @@ -1830,6 +1830,27 @@ "1": { "question": "Verfügt über einen
Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
" }, + "10": { + "question": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel" + }, + "11": { + "question": "Hat einen
Tesla Supercharger CCS (Typ 2 CSS vonTesla)
Anschluss" + }, + "12": { + "question": "Hat einen
Tesla Supercharger (Destination)
Anschluss" + }, + "13": { + "question": "Hat einen
Tesla Supercharger (Destination) (Typ 2 von Tesla)
Anschluss mit Kabel" + }, + "14": { + "question": "Hat einen
USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
" + }, + "15": { + "question": "Hat einen
Bosch Active Connect Anschluss mit 3 Pins
und Kabel" + }, + "16": { + "question": "Hat einen
Bosch Active Connect Anschluss mit 5 Pins
und Kabel" + }, "2": { "question": "Verfügt über einen
europäischen Netzstecker mit Erdungsstift (CEE7/4 Typ E)
Anschluss" }, @@ -1853,27 +1874,6 @@ }, "9": { "question": "Hat einen
Typ 2 CCS (Mennekes)
Anschluss" - }, - "10": { - "question": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel" - }, - "11": { - "question": "Hat einen
Tesla Supercharger CCS (Typ 2 CSS vonTesla)
Anschluss" - }, - "12": { - "question": "Hat einen
Tesla Supercharger (Destination)
Anschluss" - }, - "13": { - "question": "Hat einen
Tesla Supercharger (Destination) (Typ 2 von Tesla)
Anschluss mit Kabel" - }, - "14": { - "question": "Hat einen
USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
" - }, - "15": { - "question": "Hat einen
Bosch Active Connect Anschluss mit 3 Pins
und Kabel" - }, - "16": { - "question": "Hat einen
Bosch Active Connect Anschluss mit 5 Pins
und Kabel" } } } @@ -1929,30 +1929,6 @@ "1": { "then": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)" }, - "2": { - "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" - }, - "3": { - "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" - }, - "4": { - "then": "Chademo-Anschluss" - }, - "5": { - "then": "Chademo-Anschluss" - }, - "6": { - "then": "Typ 1 mit Kabel (J1772)" - }, - "7": { - "then": "Typ 1 mit Kabel (J1772)" - }, - "8": { - "then": "Typ 1 ohne Kabel (J1772)" - }, - "9": { - "then": " Typ 1 ohne Kabel (J1772)" - }, "10": { "then": "Typ 1 CCS (Typ 1 Combo)" }, @@ -1983,6 +1959,9 @@ "19": { "then": "Typ 2 mit Kabel (mennekes)" }, + "2": { + "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" + }, "20": { "then": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)" }, @@ -2013,11 +1992,32 @@ "29": { "then": " Bosch Active Connect mit 3 Pins und Kabel" }, + "3": { + "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" + }, "30": { "then": "Bosch Active Connect mit 5 Pins und Kabel" }, "31": { "then": " Bosch Active Connect mit 5 Pins und Kabel" + }, + "4": { + "then": "Chademo-Anschluss" + }, + "5": { + "then": "Chademo-Anschluss" + }, + "6": { + "then": "Typ 1 mit Kabel (J1772)" + }, + "7": { + "then": "Typ 1 mit Kabel (J1772)" + }, + "8": { + "then": "Typ 1 ohne Kabel (J1772)" + }, + "9": { + "then": " Typ 1 ohne Kabel (J1772)" } }, "question": "Welche Ladeanschlüsse gibt es hier?" @@ -2115,6 +2115,9 @@ }, "4": { "then": "Die Station ist nicht für die Allgemeinheit zugänglich (z. B. nur für die Eigentümer, Mitarbeiter, …)" + }, + "5": { + "then": "Diese Ladestation ist zu gewissen Öffnungszeiten oder Bedingungen öffentlich zugänglich. Einschränkungen sind möglich, aber generelle Nutzung ist erlaubt." } }, "question": "Wer darf diese Ladestation benutzen?", @@ -2572,6 +2575,9 @@ "question": "Welche Leistung bietet ein einzelner Stecker vom Typ
Typ 2 mit Kabel (Mennekes)
?", "render": "
Typ 2 mit Kabel (Mennekes)
liefert maximal {socket:type2_cable:output}" }, + "questions-technical": { + "render": "

Technische Frage

Die nächsten Fragen sind sehr technisch. Du kannst diese auch überspringen.
{questions(technical)}" + }, "ref": { "question": "Welche Kennnummer hat die Ladestation?", "render": "Die Kennziffer ist {ref}" @@ -3549,6 +3555,15 @@ "1": { "then": "Dieser Radweg hat einen festen Belag" }, + "10": { + "then": "Dieser Radweg besteht aus feinem Schotter" + }, + "11": { + "then": "Der Radweg ist aus Kies" + }, + "12": { + "then": "Dieser Radweg besteht aus Rohboden" + }, "2": { "then": "Der Radweg ist aus Asphalt" }, @@ -3572,15 +3587,6 @@ }, "9": { "then": "Der Radweg ist aus Schotter" - }, - "10": { - "then": "Dieser Radweg besteht aus feinem Schotter" - }, - "11": { - "then": "Der Radweg ist aus Kies" - }, - "12": { - "then": "Dieser Radweg besteht aus Rohboden" } }, "question": "Was ist der Belag dieses Radwegs?", @@ -3629,6 +3635,15 @@ "1": { "then": "Dieser Radweg hat einen festen Belag" }, + "10": { + "then": "Dieser Radweg besteht aus feinem Schotter" + }, + "11": { + "then": "Der Radweg ist aus Kies" + }, + "12": { + "then": "Dieser Radweg besteht aus Rohboden" + }, "2": { "then": "Der Radweg ist aus Asphalt" }, @@ -3652,15 +3667,6 @@ }, "9": { "then": "Der Radweg ist aus Schotter" - }, - "10": { - "then": "Dieser Radweg besteht aus feinem Schotter" - }, - "11": { - "then": "Der Radweg ist aus Kies" - }, - "12": { - "then": "Dieser Radweg besteht aus Rohboden" } }, "question": "Was ist der Belag dieser Straße?", @@ -4006,7 +4012,7 @@ } }, "title": { - "render": "Arztpraxis {name}" + "render": "Zahnarztpraxis {name}" } }, "direction": { @@ -4593,30 +4599,6 @@ "1": { "then": "Die Fitness-Station hat ein Schild mit Anweisungen für eine bestimmte Übung." }, - "2": { - "then": "Die Fitness-Station hat eine Einrichtung für Sit-ups." - }, - "3": { - "then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen." - }, - "4": { - "then": "Die Fitness-Station hat Stangen zum Dehnen." - }, - "5": { - "then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)." - }, - "6": { - "then": "Die Fitness-Station hat Ringe für Gymnastikübungen." - }, - "7": { - "then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)." - }, - "8": { - "then": "Die Fitness-Station hat eine Sprossenwand zum Klettern." - }, - "9": { - "then": "Die Fitness-Station hat Pfosten für Slalomübungen." - }, "10": { "then": "Die Fitness-Station hat Trittsteine." }, @@ -4647,6 +4629,9 @@ "19": { "then": "Die Fitness-Station hat Kampfseile (battle ropes)." }, + "2": { + "then": "Die Fitness-Station hat eine Einrichtung für Sit-ups." + }, "20": { "then": "Die Fitness-Station hat ein Fahrradergometer." }, @@ -4661,6 +4646,27 @@ }, "24": { "then": "Die Fitness-Station hat eine Slackline." + }, + "3": { + "then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen." + }, + "4": { + "then": "Die Fitness-Station hat Stangen zum Dehnen." + }, + "5": { + "then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)." + }, + "6": { + "then": "Die Fitness-Station hat Ringe für Gymnastikübungen." + }, + "7": { + "then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)." + }, + "8": { + "then": "Die Fitness-Station hat eine Sprossenwand zum Klettern." + }, + "9": { + "then": "Die Fitness-Station hat Pfosten für Slalomübungen." } }, "question": "Welche Übungsgeräte gibt es an dieser Fitness-Station?" @@ -4680,6 +4686,12 @@ "name": "OSM-Objekte mit FIXME-Tags", "tagRenderings": { "fixme": { + "mappings": { + "0": { + "then": "Dieses Problem wurde behoben" + } + }, + "question": "Was stimmt mit diesem Objekt nicht?", "render": "Fixme Text: {fixme}" }, "note": { @@ -4761,6 +4773,21 @@ "1": { "then": "Dies ist eine Pommesbude" }, + "10": { + "then": "Hier werden chinesische Gerichte serviert" + }, + "11": { + "then": "Hier werden griechische Gerichte serviert" + }, + "12": { + "then": "Hier werden indische Gerichte serviert" + }, + "13": { + "then": "Hier werden türkische Gerichte serviert" + }, + "14": { + "then": "Hier werden thailändische Gerichte serviert" + }, "2": { "then": "Bietet vorwiegend Pastagerichte an" }, @@ -4784,21 +4811,6 @@ }, "9": { "then": "Hier werden französische Gerichte serviert" - }, - "10": { - "then": "Hier werden chinesische Gerichte serviert" - }, - "11": { - "then": "Hier werden griechische Gerichte serviert" - }, - "12": { - "then": "Hier werden indische Gerichte serviert" - }, - "13": { - "then": "Hier werden türkische Gerichte serviert" - }, - "14": { - "then": "Hier werden thailändische Gerichte serviert" } }, "question": "Was für Essen gibt es hier?", @@ -5077,6 +5089,9 @@ "Privacy notice": { "render": "Dies ist der Weg, den Sie seit dem Besuch dieser Webseite zurückgelegt haben. Keine Sorge - diese Daten sind nur für Sie sichtbar und für niemanden sonst. Ihre Standortdaten werden niemals an ein anderes Gerät gesendet." } + }, + "title": { + "render": "Deine zurückgelegte Strecke" } }, "hackerspace": { @@ -5541,9 +5556,27 @@ "mapRendering": { "0": { "label": { + "mappings": { + "0": { + "then": "Hinweis auf der Karte hinzufügen" + } + }, "render": "Hier klicken, um ein neues Element hinzuzufügen" } } + }, + "title": { + "mappings": { + "0": { + "then": "Objekt oder Hinweis auf der Karte hinzufügen" + }, + "1": { + "then": "Hinweis hinzufügen" + }, + "2": { + "then": "Objekt hinzufügen" + } + } } }, "map": { @@ -5942,6 +5975,19 @@ } } }, + "10": { + "options": { + "0": { + "question": "Alle Notizen" + }, + "1": { + "question": "Importnotizen ausblenden" + }, + "2": { + "question": "Nur Importnotizen anzeigen" + } + } + }, "2": { "options": { "0": { @@ -5997,19 +6043,6 @@ "question": "Nur offene Notizen anzeigen" } } - }, - "10": { - "options": { - "0": { - "question": "Alle Notizen" - }, - "1": { - "question": "Importnotizen ausblenden" - }, - "2": { - "question": "Nur Importnotizen anzeigen" - } - } } }, "name": "OpenStreetMap-Hinweise", @@ -6338,6 +6371,21 @@ "1": { "then": "Dies ist ein normaler Stellplatz." }, + "10": { + "then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist." + }, + "11": { + "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." + }, + "12": { + "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." + }, + "13": { + "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." + }, + "14": { + "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." + }, "2": { "then": "Dies ist ein Behindertenstellplatz." }, @@ -6361,21 +6409,6 @@ }, "9": { "then": "Dies ist ein Stellplatz, der für Motorräder reserviert ist." - }, - "10": { - "then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist." - }, - "11": { - "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." - }, - "12": { - "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." - }, - "13": { - "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." - }, - "14": { - "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." } }, "question": "Welche Art von Stellplatz ist dies?" @@ -7002,30 +7035,6 @@ "1": { "question": "Recycling von Batterien" }, - "2": { - "question": "Recycling von Getränkekartons" - }, - "3": { - "question": "Recycling von Dosen" - }, - "4": { - "question": "Recycling von Kleidung" - }, - "5": { - "question": "Recycling von Speiseöl" - }, - "6": { - "question": "Recycling von Motoröl" - }, - "7": { - "question": "Recycling von Leuchtstoffröhren" - }, - "8": { - "question": "Recycling von Grünabfällen" - }, - "9": { - "question": "Recycling von Glasflaschen" - }, "10": { "question": "Recycling von Glas" }, @@ -7056,11 +7065,35 @@ "19": { "question": "Recycling von Restabfällen" }, + "2": { + "question": "Recycling von Getränkekartons" + }, "20": { "question": "Recycling von Druckerpatronen" }, "21": { "question": "Recycling von Fahrrädern" + }, + "3": { + "question": "Recycling von Dosen" + }, + "4": { + "question": "Recycling von Kleidung" + }, + "5": { + "question": "Recycling von Speiseöl" + }, + "6": { + "question": "Recycling von Motoröl" + }, + "7": { + "question": "Recycling von Leuchtstoffröhren" + }, + "8": { + "question": "Recycling von Grünabfällen" + }, + "9": { + "question": "Recycling von Glasflaschen" } } }, @@ -7128,30 +7161,6 @@ "1": { "then": "Getränkekartons können hier recycelt werden" }, - "2": { - "then": "Dosen können hier recycelt werden" - }, - "3": { - "then": "Kleidung kann hier recycelt werden" - }, - "4": { - "then": "Speiseöl kann hier recycelt werden" - }, - "5": { - "then": "Motoröl kann hier recycelt werden" - }, - "6": { - "then": "Hier können Leuchtstoffröhren recycelt werden" - }, - "7": { - "then": "Grünabfälle können hier recycelt werden" - }, - "8": { - "then": "Bio-Abfall kann hier recycelt werden" - }, - "9": { - "then": "Glasflaschen können hier recycelt werden" - }, "10": { "then": "Glas kann hier recycelt werden" }, @@ -7182,6 +7191,9 @@ "19": { "then": "Schuhe können hier recycelt werden" }, + "2": { + "then": "Dosen können hier recycelt werden" + }, "20": { "then": "Elektrokleingeräte können hier recycelt werden" }, @@ -7196,6 +7208,27 @@ }, "24": { "then": "Fahrräder können hier recycelt werden" + }, + "3": { + "then": "Kleidung kann hier recycelt werden" + }, + "4": { + "then": "Speiseöl kann hier recycelt werden" + }, + "5": { + "then": "Motoröl kann hier recycelt werden" + }, + "6": { + "then": "Hier können Leuchtstoffröhren recycelt werden" + }, + "7": { + "then": "Grünabfälle können hier recycelt werden" + }, + "8": { + "then": "Bio-Abfall kann hier recycelt werden" + }, + "9": { + "then": "Glasflaschen können hier recycelt werden" } }, "question": "Was kann hier recycelt werden?" @@ -7780,6 +7813,12 @@ }, "question": "Hat die Treppe einen Handlauf?" }, + "multilevels": { + "override": { + "question": "Zwischen welchen Stockwerken befindet sich diese Treppe?", + "render": "Diese Treppe ist zwischen den Stockwerken {level}" + } + }, "ramp": { "mappings": { "0": { @@ -7906,6 +7945,12 @@ "1": { "then": "Diese Straßenlaterne verwendet LEDs" }, + "10": { + "then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)" + }, + "11": { + "then": "Diese Straßenlaterne wird mit Gas beleuchtet" + }, "2": { "then": "Diese Straßenlaterne verwendet Glühlampenlicht" }, @@ -7929,12 +7974,6 @@ }, "9": { "then": "Diese Straßenlaterne verwendet Niederdruck-Natriumdampflampen (einfarbig orange)" - }, - "10": { - "then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)" - }, - "11": { - "then": "Diese Straßenlaterne wird mit Gas beleuchtet" } }, "question": "Mit welcher Art von Beleuchtung arbeitet diese Straßenlaterne?" @@ -8193,6 +8232,18 @@ }, "render": "Dieser Fahrkartenentwerter ist Teil einer Zugangsbarriere vom Typ {barrier}" }, + "payment-options": { + "override": { + "mappings+": { + "0": { + "then": "Dieser Fahrkartenentwerter akzeptiert die OV-Chipkaart" + }, + "1": { + "then": "Dieser Ticketentwerter akzeptiert die OV-Chipkaart" + } + } + } + }, "validator-operator": { "freeform": { "placeholder": "Name des Betreibers" @@ -8410,6 +8461,11 @@ }, "name": "Toiletten in anderen Einrichtungen", "tagRenderings": { + "opening_hours": { + "override": { + "question": "Wann ist der Ort, an dem sich diese Toiletten befinden, geöffnet?" + } + }, "toilet-access": { "mappings": { "0": { @@ -8853,6 +8909,24 @@ } } }, + "inbox": { + "mappings": { + "0": { + "then": { + "special": { + "text": "Deinen Posteingang öffnen" + } + } + }, + "1": { + "then": { + "special": { + "text": "Du hast {_unreadMessages}
Öffne Deinen Posteingang" + } + } + } + } + }, "picture-license": { "mappings": { "0": { @@ -8870,6 +8944,13 @@ }, "question": "Unter welcher Lizenz möchten Sie Ihre Bilder veröffentlichen?" }, + "settings-link": { + "render": { + "special": { + "text": "Öffne Deine Einstellungen auf OpenStreetMap.org" + } + } + }, "show_debug": { "mappings": { "0": { @@ -8884,6 +8965,24 @@ }, "question": "Debug-Informationen zu den Benutzereinstellungen anzeigen?" }, + "show_tags": { + "mappings": { + "0": { + "then": "Tags nie anzeigen." + }, + "1": { + "then": "Tags anzeigen sobald ich {__userjourney_tagsVisibleAt} Changesets erstellt habe" + }, + "2": { + "then": "Tags anzeigen, die bei der Änderung hinzugefügt werden" + }, + "3": { + "then": "Tags anzeigen, die bei der Änderung hinzugefügt werden, und Tag-Tabelle bei jedem Objekt anzeigen" + } + }, + "question": "Rohe OpenStreetMap-Tags anzeigen?", + "questionHint": "Tags sind die Eigenschaften, die jedes Objekt hat. Das sind die technischen Daten, die in der Datenbank gespeichert werden. Du brauchst diese Informationen nicht, um mit MapComplete Änderungen zu machen, aber fortgeschrittenen Nutzer*innen kann es als Referenz dienen." + }, "translation-completeness": { "mappings": { "0": { @@ -8930,6 +9029,9 @@ } } } + }, + "title": { + "render": "Einstellungen" } }, "veterinary": { @@ -9250,4 +9352,4 @@ } } } -} \ No newline at end of file +} From 8794b2d307a1232d0e9c3497076d0d8a9aa1d40e Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 13:41:22 +0000 Subject: [PATCH 11/36] Translated using Weblate (English) Currently translated at 100.0% (501 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/en/ --- langs/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/langs/en.json b/langs/en.json index fa8189a65c..8b1be896f7 100644 --- a/langs/en.json +++ b/langs/en.json @@ -60,7 +60,7 @@ "intro": "The user is greeted by a map with features. Upon selecting one, the information about that feature is shown.", "title": "What does the interface look like?" }, - "examples": "There are many thematic maps available of which a few are printed here.\n\nThere are many more thematic maps online: about healthcare, indoor navigation, wheelchair accessibility, waste facilities, public bookcases, pedestrian crossings with a rainbow-painting,... Discover them all on mapcomplete.osm.be", + "examples": "There are many thematic maps available of which a few are shown here.\n\nThere are many more thematic maps online: about healthcare, indoor navigation, wheelchair accessibility, waste facilities, public bookcases, pedestrian crossings with a rainbow-painting,... Discover them all on mapcomplete.osm.be", "fakeui": { "add_images": "Add images with a few clicks", "attributes": "Shows attributes in a friendly way", @@ -278,7 +278,7 @@ "answeredOneSkippedMultiple": "You answered one question and skipped {skipped} questions", "answeredOneSkippedOne": "You answered one and skipped one question", "done": "No more questions! Thank you!", - "reactivate": "Reactive skipped questions", + "reactivate": "Reactivate skipped questions", "skippedMultiple": "You skipped {skipped} questions", "skippedOne": "You skipped one question" }, From df6f08a59daa11351998e0336d77c051d4a03e36 Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 13:57:46 +0000 Subject: [PATCH 12/36] Translated using Weblate (English) Currently translated at 100.0% (412 of 412 strings) Translation: MapComplete/themes Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/en/ --- langs/themes/en.json | 74 ++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/langs/themes/en.json b/langs/themes/en.json index 11c81c3a77..a0b02ebe90 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -803,12 +803,12 @@ "description": "This maps shows all the changes made with MapComplete", "layers": { "0": { - "description": "Shows all MapComplete changes", + "description": "Show all MapComplete changes", "filter": { "0": { "options": { "0": { - "question": "Themename contains {search}" + "question": "Theme name contains {search}" } } }, @@ -865,12 +865,12 @@ "name": "Changeset centers", "tagRenderings": { "contributor": { - "question": "What contributor did make this change?", + "question": "Which contributor made this change?", "render": "Change made by {user}" }, "host": { "question": "What host (website) was this change made with?", - "render": "Change with {host}" + "render": "Change made with {host}" }, "locale": { "question": "What locale (language) was this change made in?", @@ -902,7 +902,7 @@ } } }, - "shortDescription": "Shows changes made by MapComplete", + "shortDescription": "Show changes made with MapComplete", "title": "Changes made with MapComplete" }, "maproulette": { @@ -936,6 +936,33 @@ "onwheels": { "description": "On this map, publicly weelchair accessible places are shown and can be easily added", "layers": { + "19": { + "override": { + "=title": { + "render": "Statistics" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Import" + } + } + }, + "1": { + "render": { + "special": { + "message": "Add all the suggested tags" + } + } + } + } + } + }, "4": { "override": { "filter": { @@ -978,33 +1005,6 @@ "override": { "name": "Disabled parking spaces" } - }, - "19": { - "override": { - "=title": { - "render": "Statistics" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Import" - } - } - }, - "1": { - "render": { - "special": { - "message": "Add all the suggested tags" - } - } - } - } - } } }, "title": "OnWheels" @@ -1165,10 +1165,6 @@ "stations": { "description": "View, edit and add details to a train station", "layers": { - "3": { - "description": "Layer showing train stations", - "name": "Train Stations" - }, "16": { "description": "Displays showing the trains that will leave from this station", "name": "Departures boards", @@ -1200,6 +1196,10 @@ "title": { "render": "Departures board" } + }, + "3": { + "description": "Layer showing train stations", + "name": "Train Stations" } }, "title": "Train Stations" @@ -1291,4 +1291,4 @@ "shortDescription": "A map with waste baskets", "title": "Waste Basket" } -} \ No newline at end of file +} From 294faac5ca0610034bb8d8d7d37a91dc05c8c41c Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 13:25:29 +0000 Subject: [PATCH 13/36] Translated using Weblate (German) Currently translated at 100.0% (501 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/de/ --- langs/de.json | 79 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 17 deletions(-) diff --git a/langs/de.json b/langs/de.json index 8d4c372270..7260baf90c 100644 --- a/langs/de.json +++ b/langs/de.json @@ -3,7 +3,9 @@ "title": "Erweiterte Funktionen" }, "centerMessage": { + "allFilteredAway": "Kein Objekt im Kartenausschnitt erfüllt alle Filterkriterien", "loadingData": "Daten werden geladen…", + "noData": "Es gibt keine relevanten Objekte im aktuellen Kartenausschnitt", "ready": "Erledigt!", "retrying": "Laden von Daten fehlgeschlagen. Erneuter Versuch in {count} Sekunden…", "zoomIn": "Ausschnitt vergrößern, um Daten anzuzeigen oder zu bearbeiten" @@ -12,7 +14,7 @@ "available": "Diese Gemeinschaft spricht {native}", "intro": "Treten Sie mit anderen Menschen in Kontakt, um sie kennen zu lernen, von ihnen zu lernen, ...", "notAvailable": "Diese Gemeinschaft spricht nicht {native}", - "title": "Community index" + "title": "Index der Community" }, "delete": { "cancel": "Abbrechen", @@ -58,7 +60,7 @@ "intro": "Der Benutzer wird von einer Karte mit Objekten begrüßt. Wenn er eines auswählt, werden Informationen über das Objekt angezeigt.", "title": "Wie sieht die Benutzeroberfläche aus?" }, - "examples": "Es gibt viele thematische Karten, von denen hier einige abgedruckt sind.\n\nEs gibt noch viele weitere thematische Karten online: über das Gesundheitswesen, Indoor-Navigation, Zugänglichkeit für Rollstuhlfahrer, Abfallentsorgungsanlagen, öffentliche Bücherschränke, Fußgängerüberwege mit Regenbogenmalerei,... Entdecken Sie sie alle auf mapcomplete.osm.be", + "examples": "Es gibt viele thematische Karten, von denen hier einige dargestellt sind.\n\nEs gibt noch viele weitere thematische Karten online: über das Gesundheitswesen, Indoor-Navigation, Zugänglichkeit für Rollstuhlfahrer, Abfallentsorgungsanlagen, öffentliche Bücherschränke, Fußgängerüberwege mit Regenbogenmalerei,... Entdecken Sie sie alle auf mapcomplete.osm.be", "fakeui": { "add_images": "Bilder mit ein paar Klicks hinzufügen", "attributes": "Zeigt Attribute in einer freundlichen Art und Weise", @@ -91,12 +93,19 @@ }, "general": { "about": "OpenStreetMap für ein bestimmtes Thema einfach bearbeiten und hinzufügen", + "aboutMapComplete": { + "intro": "Nutze MapComplete, um Daten zu einem bestimmten Thema auf OpenStreetMap einzutragen. Beantworte Frage, und in wenigen Minuten sind die Beiträge überall verfügbar. In den meisten Themen kannst Du Bilder hinzufügen oder sogar eine Bewertung hinterlassen. Die Themen-Ersteller*innen definieren Objekte, Fragen und Begriffe für das jeweilige Thema." + }, "add": { "addNew": "{category} hinzufügen", "backToSelect": "Wählen Sie eine andere Kategorie", - "confirmButton": "Eine {category} hinzufügen.
Ihre Ergänzung ist für alle sichtbar
", + "confirmButton": "Eine {category}
hinzufügen. Ihre Ergänzung ist für alle sichtbar
", + "confirmLocation": "Diesen Standort bestätigen", + "confirmTitle": "{title} hinzufügen?", + "confirmWarning": "Das von Dir eingetragene Objekt wird für alle sichtbar sein. Bitte füge nur Objekte hinzu, die wirklich existieren. Viele Anwendungen nutzen diese Daten.", "disableFilters": "Alle Filter deaktivieren", "disableFiltersExplanation": "Einige Elemente können durch einen Filter ausgeblendet sein", + "enableLayer": "Ebene {name} einblenden", "hasBeenImported": "Dieses Objekt wurde bereits importiert", "import": { "hasBeenImported": "Das Objekt wurde importiert", @@ -108,7 +117,7 @@ "zoomInMore": "Ansicht vergrößern, um das Objekt zu importieren" }, "importTags": "Das Element erhält {tags}", - "intro": "An dieser Stelle sind noch keine Daten vorhanden.
", + "intro": "An dieser Stelle sind noch keine Daten vorhanden.
", "layerNotEnabled": "Die Ebene {layer} ist nicht eingeschaltet. Schalten Sie die Ebene ein, um ein Objekt hinzuzufügen", "openLayerControl": "Das Ebenen-Fenster öffnen", "pleaseLogin": "Bitte anmelden, um ein neues Objekt hinzuzufügen", @@ -125,6 +134,8 @@ "isApplied": "Änderungen werden übernommen" }, "attribution": { + "attributionBackgroundLayer": "Die aktuelle Hintergrundebene ist {name}", + "attributionBackgroundLayerWithCopyright": "Die aktuelle Hintergrundebene ist {name}: {copyright}", "attributionContent": "

Alle Daten werden bereitgestellt von OpenStreetMap, frei verwendbar unter der Open Database License.

", "attributionTitle": "Danke", "codeContributionsBy": "MapComplete wurde erstellt von {contributors} und {hiddenCount} weiteren Personen", @@ -140,25 +151,29 @@ "mapContributionsBy": "Die angezeigten Daten wurden bearbeitet durch {contributors}", "mapContributionsByAndHidden": "Die angezeigten Daten wurden bearbeitet von {contributors} und {hiddenCount} weiteren Beitragenden", "mapDataByOsm": "Kartendaten: OpenStreetMap", - "mapillaryHelp": "Mapillary ist ein Online-Dienst, der Straßenbilder sammelt und sie unter einer freien Lizenz anbietet. Mitwirkende dürfen diese Bilder verwenden, um OpenStreetMap zu verbessern", + "mapillaryHelp": "Mapillary ist ein Online-Dienst, der Straßenbilder sammelt und sie unter einer freien Lizenz anbietet. Mitwirkende dürfen diese Bilder verwenden, um OpenStreetMap zu verbessern", "openIssueTracker": "Fehler melden", "openMapillary": "Mapillary öffnen", "openOsmcha": "Letzte Bearbeitungen zum Thema {theme} ansehen", "themeBy": "Dieses Thema wurde erstellt von {author}", + "title": "Copyright und Urheberrechtsangabe", "translatedBy": "MapComplete wurde übersetzt von {contributors} und {hiddenCount} weiteren Personen" }, "back": "Zurück", "backToIndex": "Zurück zur Übersicht aller thematischen Karten", "backToMapcomplete": "Zurück zur Themenübersicht", - "backgroundMap": "Hintergrundkarte", + "backgroundMap": "Hintergrundkarte auswählen", + "backgroundSwitch": "Hintergrund wechseln", "cancel": "Abbrechen", "confirm": "Bestätigen", "customThemeIntro": "

Benutzerdefinierte Themen

Dies sind zuvor angesehene nutzergenerierte Themen.", "download": { "downloadAsPdf": "Aktuelle Karte als PDF herunterladen", "downloadAsPdfHelper": "Ideal zum Drucken der aktuellen Karte", + "downloadAsPng": "Als Bild herunterladen", + "downloadAsPngHelper": "Am besten geeignet, um in Berichten zu verwenden", "downloadAsSvg": "Aktuelle Karte als SVG herunterladen", - "downloadAsSvgHelper": "Kompatibel mit Inkscape oder Adobe Illustrator; Weiterbearbeitung erforderlich ", + "downloadAsSvgHelper": "Kompatibel mit Inkscape oder Adobe Illustrator; Weiterbearbeitung erforderlich", "downloadCSV": "Sichtbare Daten als CSV herunterladen", "downloadCSVHelper": "Kompatibel mit LibreOffice Calc, Excel, …", "downloadFeatureAsGeojson": "GeoJSON Datei herunterladen", @@ -171,7 +186,11 @@ "includeMetaData": "Metadaten übernehmen (letzter Bearbeiter, berechnete Werte, ...)", "licenseInfo": "

Copyright-Hinweis

Die bereitgestellten Daten sind unter ODbL verfügbar. Die Wiederverwendung ist für jeden Zweck frei, aber
  • die Namensnennung © OpenStreetMap contributors ist darzustellen
  • Jede Änderung muss unter der gleichen Lizenz veröffentlicht werden
Bitte lesen Sie den vollständigen Copyright-Hinweis für weitere Details.", "noDataLoaded": "Noch keine Daten geladen. Download in Kürze verfügbar", - "title": "Sichtbare Daten herunterladen", + "pdf": { + "current_view_a3": "PDF (A3, Hochformat) der aktuellen Ansicht exportieren", + "current_view_a4": "PDF (A4, Querformat) der aktuellen Ansicht exportieren" + }, + "title": "Download", "uploadGpx": "Einen Track auf OpenStreetMap hochladen" }, "error": "Etwas ist schief gelaufen", @@ -202,10 +221,14 @@ "loginToStart": "Anmelden, um diese Frage zu beantworten", "loginWithOpenStreetMap": "Bei OpenStreetMap anmelden", "logout": "Abmelden", + "menu": { + "aboutMapComplete": "Über MapComplete", + "filter": "Daten filtern" + }, "morescreen": { "createYourOwnTheme": "Ein eigenes MapComplete-Thema von Grund auf neu erstellen", "hiddenExplanation": "Diese Themen sind nur für Personen zugänglich, die einen Link erhalten haben. Sie haben {hidden_discovered} von {total_hidden} versteckten Themen entdeckt.", - "intro": "

Mehr thematische Karten?

Sammeln Sie gerne Geodaten?
Es sind weitere Themen verfügbar.", + "intro": "

Mehr thematische Karten?

Sammeln Sie gerne Geodaten?
Es sind weitere Themen verfügbar.", "noMatchingThemes": "Keine Themen, die Ihren Suchkriterien entsprechen", "noSearch": "Alle Themen anzeigen", "previouslyHiddenTitle": "Zuvor besuchte versteckte Themen", @@ -222,6 +245,7 @@ "number": "Zahl", "openStreetMapIntro": "

Eine offene Karte

Eine Karte, die jeder frei nutzen und bearbeiten kann. Ein einziger Ort, um alle Geoinformationen zu speichern. Unterschiedliche, kleine, inkompatible und veraltete Karten werden nirgendwo gebraucht.

OpenStreetMap ist nicht die feindliche Karte. Die Kartendaten können frei verwendet werden (mit Benennung und Veröffentlichung von Änderungen an diesen Daten). Jeder kann neue Daten hinzufügen und Fehler korrigieren. Diese Webseite nutzt OpenStreetMap. Alle Daten stammen von dort, und Ihre Antworten und Korrekturen werden überall verwendet.

Viele Menschen und Anwendungen nutzen bereits OpenStreetMap: Organic Maps, OsmAnd; auch die Kartendaten von Facebook, Instagram, Apple-maps und Bing-maps stammen (teilweise) von OpenStreetMap.

", "openTheMap": "Karte öffnen", + "openTheMapAtGeolocation": "Zum eigenen Standort zoomen", "opening_hours": { "closed_permanently": "Geschlossen auf unbestimmte Zeit", "closed_until": "Geschlossen bis {date}", @@ -246,10 +270,22 @@ }, "pickLanguage": "Sprache auswählen: ", "poweredByOsm": "Unterstützt von OpenStreetMap", + "questionBox": { + "answeredMultiple": "Du hast {answered} Fragen beantwortet", + "answeredMultipleSkippedMultiple": "Du hast {answered} Fragen beantwortet und {skipped} Fragen übersprungen", + "answeredMultipleSkippedOne": "Du hast {answered} Fragen beantwortet und eine Frage übersprungen", + "answeredOne": "Du hast eine Frage beantwortet", + "answeredOneSkippedMultiple": "Du hast eine Frage beantwortet und {skipped} Fragen übersprungen", + "answeredOneSkippedOne": "Du hast eine Frage beantwortet und eine Frage übersprungen", + "done": "Keine weiteren Fragen! Danke Dir!", + "reactivate": "Übersprungene Fragen reaktivieren", + "skippedMultiple": "Du hast {skipped} Fragen übersprungen", + "skippedOne": "Du hast eine Frage übersprungen" + }, "questions": { "emailIs": "Die E-Mail-Adresse dieser {category} lautet {email}", "emailOf": "Wie lautet die E-Mail-Adresse der {category}?", - "phoneNumberIs": "Die Telefonnummer der {category} lautet {phone}", + "phoneNumberIs": "Die Telefonnummer dieser {category} lautet {phone}", "phoneNumberOf": "Wie lautet die Telefonnummer der {category}?", "websiteIs": "Webseite: {website}", "websiteOf": "Wie lautet die Webseite der {category}?" @@ -263,6 +299,7 @@ "error": "Etwas ist schief gelaufen…", "nothing": "Nichts gefunden…", "search": "Ortssuche", + "searchShort": "Suche…", "searching": "Suchen …" }, "sharescreen": { @@ -272,7 +309,7 @@ "downloadCustomThemeHelp": "Ein erfahrener Mitwirkender kann diese Datei verwenden, um Ihr Thema zu verbessern", "editThemeDescription": "Fragen zu diesem Thema hinzufügen oder ändern", "editThisTheme": "Dieses Thema bearbeiten", - "embedIntro": "

Karte in Webseiten einbetten

Betten Sie diese Karte in Ihre Webseite ein. Die Karte ist kostenlos und wird es immer sein. Je mehr Leute sie benutzen, desto wertvoller wird sie.", + "embedIntro": "

Karte in Webseiten einbetten

Betten Sie diese Karte in Ihre Webseite ein.
Wir ermutigen Sie gern dazu - Sie müssen nicht mal um Erlaubnis fragen.
Die Karte ist kostenlos und wird es immer sein. Je mehr Leute die Karte benutzen, desto wertvoller wird sie.", "fsAddNew": "Schaltfläche 'neuen POI hinzufügen' aktivieren", "fsGeolocation": "Schaltfläche 'Mich geolokalisieren' aktivieren (nur mobil)", "fsIncludeCurrentBackgroundMap": "Aktuellen Hintergrund übernehmen ({name})", @@ -284,7 +321,8 @@ "fsUserbadge": "Anmeldefeld aktivieren", "fsWelcomeMessage": "Begrüßung und Registerkarten anzeigen", "intro": "

Karte teilen

Mit dem folgenden Link können Sie diese Karte mit Freunden und Familie teilen:", - "thanksForSharing": "Danke für das Teilen!" + "thanksForSharing": "Danke für das Teilen!", + "title": "Diese Karte teilen" }, "skip": "Frage überspringen", "testing": "Testen - Änderungen werden nicht gespeichert", @@ -341,6 +379,7 @@ "general": "Auf dieser Karte können Sie themenspezifische Kartenobjekte ansehen, bearbeiten und hinzufügen. Verschieben Sie den Kartenausschnitt, um Objekte zu entdecken, tippen Sie auf eines, um weitere Informationen zu sehen oder zu bearbeiten. Alle Daten stammen von OpenStreetMap und dürfen frei verwendet werden." }, "wikipedia": { + "addEntry": "Eine weitere Wikipedia-Seite hinzufügen", "createNewWikidata": "Einen neues Wikidata Element erstellen", "doSearch": "Suche oben, um Ergebnisse zu sehen", "failed": "Laden des Wikipedia-Eintrags fehlgeschlagen", @@ -363,8 +402,11 @@ "geolocate": "Verschieben Sie die Karte auf den aktuellen Standort oder zoomen Sie die Karte auf den aktuellen Standort. Beantragt Standortberechtigung", "intro": "MapComplete unterstützt folgende Tastaturbefehle:", "key": "Tastenkombination", - "openLayersPanel": "Öffnet das Bedienfeld Hintergrund, Ebenen und Filter", - "selectMapnik": "Setzt die Hintergrundebene auf OpenStreetMap-carto", + "openLayersPanel": "Öffnet das Menü für Ebenen und Filter", + "selectAerial": "Hintergrund als Luftbild oder Satellitenbild einstellen. Wechselt zwischen den zwei besten verfügbaren Ebenen", + "selectMap": "Karte aus externer Quelle als Hintergrund wählen. Wechselt zwischen den zwei besten verfügbaren Ebenen", + "selectMapnik": "OpenStreetMap-carto als Hintergrundebene wählen", + "selectOsmbasedmap": "OpenStreetMap-basierte Karte als Hintergrund auswählen (oder Hintergrundebene deaktivieren)", "selectSearch": "Suchleiste auswählen, um nach Orten zu suchen", "title": "Tastaturbefehle" }, @@ -512,7 +554,7 @@ "reviews": { "affiliated_reviewer_warning": "(Partner-Rezension)", "attribution": "Rezensionen werden bereitgestellt von Mangrove Reviews und sind unter CC-BY 4.0 verfügbar.", - "i_am_affiliated": "Ich bin mit diem Objekt vertraut
Auswählen, wenn Sie Eigentümer, Ersteller, Angestellter … sind", + "i_am_affiliated": "Ich bin an diesem Objekt beteiligt
Auswählen, wenn Sie Eigentümer, Ersteller, Angestellter … sind", "name_required": "Der Name des Objekts ist erforderlich, um Bewertungen zu erstellen und anzuzeigen", "no_rating": "Vor dem Absenden eine Bewertung abgeben…", "no_reviews_yet": "Es gibt noch keine Bewertungen. Hilf mit der ersten Bewertung dem Geschäft und der Open Data Bewegung!", @@ -542,10 +584,12 @@ "notImmediate": "Die Übersetzung wird nicht direkt aktualisiert. Dies dauert in der Regel ein paar Tage" }, "userinfo": { + "editDescription": "Eigene Profilbeschreibung bearbeiten", "gotoInbox": "Posteingang öffnen", "gotoSettings": "Einstellungen auf OpenStreetMap.org öffnen", "noDescription": "Sie haben noch keine Profilbeschreibung", - "noDescriptionCallToAction": "Profilbeschreibung hinzufügen" + "noDescriptionCallToAction": "Profilbeschreibung hinzufügen", + "notLoggedIn": "Du hast Dich abgemeldet" }, "validation": { "color": { @@ -586,7 +630,8 @@ }, "phone": { "description": "eine Telefonnummer", - "feedback": "Dies ist keine gültige Telefonnummer" + "feedback": "Dies ist keine gültige Telefonnummer", + "feedbackCountry": "Dies ist keine gültige Telefonnummer (in {country})" }, "pnat": { "description": "eine positive, ganze Zahl", From 2f8e9b7198c052e92c39c1248d09d83f79b269b1 Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 13:47:48 +0000 Subject: [PATCH 14/36] Translated using Weblate (German) Currently translated at 98.5% (406 of 412 strings) Translation: MapComplete/themes Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/de/ --- langs/themes/de.json | 185 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 153 insertions(+), 32 deletions(-) diff --git a/langs/themes/de.json b/langs/themes/de.json index b7bbd382f7..e270e7a509 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -14,6 +14,21 @@ }, "atm": { "description": "Diese Karte zeigt Geldautomaten zum Abheben oder Einzahlen von Geld", + "layers": { + "3": { + "override": { + "=tagRenderings": { + "0": { + "render": { + "special": { + "text": "Diesen Geldautomaten importieren" + } + } + } + } + } + } + }, "title": "Geldautomaten" }, "bag": { @@ -698,6 +713,9 @@ "tagRenderings": { "building type": { "question": "Was ist das für ein Gebäude?" + }, + "grb-reference": { + "render": "Wurde von GRB importiert, Referenznummer ist {source:geometry:ref}" } } }, @@ -771,6 +789,109 @@ "description": "Eine Karte mit Bordsteinen und Überwegen.", "title": "Bordsteine und Überwege" }, + "mapcomplete-changes": { + "description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen", + "layers": { + "0": { + "description": "Alle MapComplete-Änderungen anzeigen", + "filter": { + "0": { + "options": { + "0": { + "question": "Themenname enthält {search}" + } + } + }, + "1": { + "options": { + "0": { + "question": "Erstellt von {search}" + } + } + }, + "2": { + "options": { + "0": { + "question": "Nicht erstellt von {search}" + } + } + }, + "3": { + "options": { + "0": { + "question": "Erstellt vor {search}" + } + } + }, + "4": { + "options": { + "0": { + "question": "Erstellt nach {search}" + } + } + }, + "5": { + "options": { + "0": { + "question": "Benutzersprache (ISO-Code) {search}" + } + } + }, + "6": { + "options": { + "0": { + "question": "Erstellt mit Host {search}" + } + } + }, + "7": { + "options": { + "0": { + "question": "Changeset fügte mindestens ein Bild hinzu" + } + } + } + }, + "name": "Zentrum der Änderungssätze", + "tagRenderings": { + "contributor": { + "render": "Änderung gemacht von {user}" + }, + "host": { + "question": "Mit welchem Host / welcher Website wurde diese Änderung gemacht?", + "render": "Änderung vorgenommen mit {host}" + }, + "locale": { + "render": "Usersprache ist {locale}" + }, + "show_changeset_id": { + "render": "Änderungssatz {id}" + }, + "theme-id": { + "question": "Welches Thema wurde für diese Änderung verwendet?\"", + "render": "Geändert mit Thema {theme}" + }, + "version": { + "question": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?" + } + }, + "title": { + "render": "Änderungssatz für {theme}" + } + }, + "1": { + "override": { + "tagRenderings+": { + "0": { + "render": "Mehr Statistiken gibt es hier" + } + } + } + } + }, + "shortDescription": "Mit MapComplete erstellte Änderungen anzeigen", + "title": "Mit MapComplete erstellte Änderungen" + }, "maproulette": { "description": "Thema mit MapRoulette-Aufgaben, die Sie suchen, filtern und beheben können.", "title": "MapRoulette-Aufgaben" @@ -802,6 +923,33 @@ "onwheels": { "description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen", "layers": { + "19": { + "override": { + "=title": { + "render": "Statistik" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Import" + } + } + }, + "1": { + "render": { + "special": { + "message": "Alle vorgeschlagenen Tags hinzufügen" + } + } + } + } + } + }, "4": { "override": { "filter": { @@ -844,33 +992,6 @@ "override": { "name": "Barrierefreie Parkplätze" } - }, - "19": { - "override": { - "=title": { - "render": "Statistik" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Import" - } - } - }, - "1": { - "render": { - "special": { - "message": "Alle vorgeschlagenen Tags hinzufügen" - } - } - } - } - } } }, "title": "Auf Rädern" @@ -1031,10 +1152,6 @@ "stations": { "description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen", "layers": { - "3": { - "description": "Ebene mit Bahnhöfen", - "name": "Bahnhöfe" - }, "16": { "description": "Anzeigen der Züge, die von diesem Bahnhof abfahren", "name": "Abfahrtstafeln", @@ -1066,6 +1183,10 @@ "title": { "render": "Abfahrtstafel" } + }, + "3": { + "description": "Ebene mit Bahnhöfen", + "name": "Bahnhöfe" } }, "title": "Bahnhöfe" @@ -1157,4 +1278,4 @@ "shortDescription": "Eine Karte mit Abfalleimern", "title": "Abfalleimer" } -} \ No newline at end of file +} From 5a8473e0916abf4d14a0bb796003b58920977484 Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 13:42:40 +0000 Subject: [PATCH 15/36] Translated using Weblate (German) Currently translated at 100.0% (91 of 91 strings) Translation: MapComplete/shared-questions Translate-URL: https://hosted.weblate.org/projects/mapcomplete/shared-questions/de/ --- langs/shared-questions/de.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/langs/shared-questions/de.json b/langs/shared-questions/de.json index 7f6b17526b..ef09834311 100644 --- a/langs/shared-questions/de.json +++ b/langs/shared-questions/de.json @@ -57,7 +57,7 @@ }, "description": { "question": "Gibt es noch etwas, das die vorhergehenden Fragen nicht abgedeckt haben? Hier wäre Platz dafür.", - "questionHint": "Bitte keine bereits erhobenen Informationen." + "questionHint": "Bitte keine bereits erhobenen Informationen wiederholen" }, "dog-access": { "mappings": { @@ -141,7 +141,7 @@ "last_edit": { "render": { "special": { - "text": "Zuletzt bearbeitet am {_last_edit:timestamp} vom {_last_edit:contributor}" + "text": "Zuletzt bearbeitet am {_last_edit:timestamp} von {_last_edit:contributor}" } } }, @@ -324,4 +324,4 @@ "question": "Wie lautet das zugehörige Wikidata Element?" } } -} \ No newline at end of file +} From e25a91889a3c6bc93accb4a888b7a5dd0340e40e Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 14:49:06 +0000 Subject: [PATCH 16/36] Translated using Weblate (English) Currently translated at 100.0% (2861 of 2861 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/en/ --- langs/layers/en.json | 426 +++++++++++++++++++++---------------------- 1 file changed, 213 insertions(+), 213 deletions(-) diff --git a/langs/layers/en.json b/langs/layers/en.json index 0a0dfe6b49..d82a0280cd 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -35,6 +35,16 @@ "1": { "title": "a freestanding poster box" }, + "10": { + "description": "Used for advertising signs, neon signs, logos & institutional entrance signs", + "title": "a sign" + }, + "11": { + "title": "a sculpture" + }, + "12": { + "title": "a wall painting" + }, "2": { "title": "a poster box mounted on a wall" }, @@ -61,16 +71,6 @@ }, "9": { "title": "a totem" - }, - "10": { - "description": "Used for advertising signs, neon signs, logos & institutional entrance signs", - "title": "a sign" - }, - "11": { - "title": "a sculpture" - }, - "12": { - "title": "a wall painting" } }, "tagRenderings": { @@ -129,7 +129,7 @@ "then": "Electoral advertising" }, "4": { - "then": "Inormation related to theatre, concerts, ..." + "then": "Information related to theatre, concerts, …" }, "5": { "then": "Message from non-profit organizations" @@ -165,6 +165,9 @@ "1": { "then": "This is a board" }, + "10": { + "then": "This is a wall painting" + }, "2": { "then": "This is a column" }, @@ -188,9 +191,6 @@ }, "9": { "then": "This is a totem" - }, - "10": { - "then": "This is a wall painting" } }, "question": "Which type of advertising feature is this?", @@ -205,6 +205,9 @@ "1": { "then": "Board" }, + "10": { + "then": "Wall painting" + }, "2": { "then": "Poster Box" }, @@ -228,9 +231,6 @@ }, "9": { "then": "Totem" - }, - "10": { - "then": "Wall painting" } } } @@ -312,6 +312,15 @@ "1": { "then": "Mural" }, + "10": { + "then": "Azulejo (Spanish decorative tilework)" + }, + "11": { + "then": "Tilework" + }, + "12": { + "then": "Woodcarving" + }, "2": { "then": "Painting" }, @@ -335,15 +344,6 @@ }, "9": { "then": "Relief" - }, - "10": { - "then": "Azulejo (Spanish decorative tilework)" - }, - "11": { - "then": "Tilework" - }, - "12": { - "then": "Woodcarving" } }, "question": "What is the type of this artwork?", @@ -731,7 +731,7 @@ } }, "question": "Does this bench have an inscription?", - "questionHint": "E.g. on a mounted plaque, in the backrest, ...", + "questionHint": "E.g. on a mounted plaque, in the backrest, …", "render": "This bench does have the following inscription:

{inscription}

" }, "bench-material": { @@ -1109,7 +1109,7 @@ "then": "This cleaning service is free to use" }, "1": { - "then": "This cleaning service is paid" + "then": "There is a fee to use this cleaning service" } }, "question": "How much does it cost to use the cleaning service?", @@ -1830,6 +1830,27 @@ "1": { "question": "Has a
Schuko wall plug without ground pin (CEE7/4 type F)
connector" }, + "10": { + "question": "Has a
Type 2 with cable (mennekes)
connector" + }, + "11": { + "question": "Has a
Tesla Supercharger CCS (a branded type2_css)
connector" + }, + "12": { + "question": "Has a
Tesla Supercharger (destination)
connector" + }, + "13": { + "question": "Has a
Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla)
connector" + }, + "14": { + "question": "Has a
USB to charge phones and small electronics
connector" + }, + "15": { + "question": "Has a
Bosch Active Connect with 3 pins and cable
connector" + }, + "16": { + "question": "Has a
Bosch Active Connect with 5 pins and cable
connector" + }, "2": { "question": "Has a
European wall plug with ground pin (CEE7/4 type E)
connector" }, @@ -1853,27 +1874,6 @@ }, "9": { "question": "Has a
Type 2 CCS (mennekes)
connector" - }, - "10": { - "question": "Has a
Type 2 with cable (mennekes)
connector" - }, - "11": { - "question": "Has a
Tesla Supercharger CCS (a branded type2_css)
connector" - }, - "12": { - "question": "Has a
Tesla Supercharger (destination)
connector" - }, - "13": { - "question": "Has a
Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla)
connector" - }, - "14": { - "question": "Has a
USB to charge phones and small electronics
connector" - }, - "15": { - "question": "Has a
Bosch Active Connect with 3 pins and cable
connector" - }, - "16": { - "question": "Has a
Bosch Active Connect with 5 pins and cable
connector" } } } @@ -1929,30 +1929,6 @@ "1": { "then": "Schuko wall plug without ground pin (CEE7/4 type F)" }, - "2": { - "then": "European wall plug with ground pin (CEE7/4 type E)" - }, - "3": { - "then": "European wall plug with ground pin (CEE7/4 type E)" - }, - "4": { - "then": "Chademo" - }, - "5": { - "then": "Chademo" - }, - "6": { - "then": "Type 1 with cable (J1772)" - }, - "7": { - "then": "Type 1 with cable (J1772)" - }, - "8": { - "then": "Type 1 without cable (J1772)" - }, - "9": { - "then": "Type 1 without cable (J1772)" - }, "10": { "then": "Type 1 CCS (aka Type 1 Combo)" }, @@ -1983,6 +1959,9 @@ "19": { "then": "Type 2 with cable (mennekes)" }, + "2": { + "then": "European wall plug with ground pin (CEE7/4 type E)" + }, "20": { "then": "Tesla Supercharger CCS (a branded type2_css)" }, @@ -2013,11 +1992,32 @@ "29": { "then": "Bosch Active Connect with 3 pins and cable" }, + "3": { + "then": "European wall plug with ground pin (CEE7/4 type E)" + }, "30": { "then": "Bosch Active Connect with 5 pins and cable" }, "31": { "then": "Bosch Active Connect with 5 pins and cable" + }, + "4": { + "then": "Chademo" + }, + "5": { + "then": "Chademo" + }, + "6": { + "then": "Type 1 with cable (J1772)" + }, + "7": { + "then": "Type 1 with cable (J1772)" + }, + "8": { + "then": "Type 1 without cable (J1772)" + }, + "9": { + "then": "Type 1 without cable (J1772)" } }, "question": "Which charging connections are available here?" @@ -3555,6 +3555,15 @@ "1": { "then": "This cycleway is paved" }, + "10": { + "then": "This cycleway is made of fine gravel" + }, + "11": { + "then": "This cycleway is made of pebblestone" + }, + "12": { + "then": "This cycleway is made from raw ground" + }, "2": { "then": "This cycleway is made of asphalt" }, @@ -3578,15 +3587,6 @@ }, "9": { "then": "This cycleway is made of gravel" - }, - "10": { - "then": "This cycleway is made of fine gravel" - }, - "11": { - "then": "This cycleway is made of pebblestone" - }, - "12": { - "then": "This cycleway is made from raw ground" } }, "question": "What is the surface of the cycleway made from?", @@ -3635,6 +3635,15 @@ "1": { "then": "This cycleway is paved" }, + "10": { + "then": "This cycleway is made of fine gravel" + }, + "11": { + "then": "This cycleway is made of pebblestone" + }, + "12": { + "then": "This cycleway is made from raw ground" + }, "2": { "then": "This cycleway is made of asphalt" }, @@ -3658,15 +3667,6 @@ }, "9": { "then": "This cycleway is made of gravel" - }, - "10": { - "then": "This cycleway is made of fine gravel" - }, - "11": { - "then": "This cycleway is made of pebblestone" - }, - "12": { - "then": "This cycleway is made from raw ground" } }, "question": "What is the surface of the street made from?", @@ -4599,30 +4599,6 @@ "1": { "then": "This fitness station has a sign with instructions for a specific exercise." }, - "2": { - "then": "This fitness station has a facility for sit-ups." - }, - "3": { - "then": "This fitness station has a facility for push-ups. Usually consists of one or more low horizontal bars." - }, - "4": { - "then": "This fitness station has bars for stretching." - }, - "5": { - "then": "This fitness station has a station for making hyperextensions." - }, - "6": { - "then": "This fitness station has rings for gymnastic exercises." - }, - "7": { - "then": "This fitness station has a horizontal ladder, also known as monkey bars." - }, - "8": { - "then": "This fitness station has wall bars to climb on." - }, - "9": { - "then": "This fitness station has posts for performing slalom exercises." - }, "10": { "then": "This fitness station has stepping stones." }, @@ -4653,6 +4629,9 @@ "19": { "then": "This fitness station has battling ropes." }, + "2": { + "then": "This fitness station has a facility for sit-ups." + }, "20": { "then": "This fitness station has a stationary bicycle." }, @@ -4667,6 +4646,27 @@ }, "24": { "then": "This fitness station has a slackline." + }, + "3": { + "then": "This fitness station has a facility for push-ups. Usually consists of one or more low horizontal bars." + }, + "4": { + "then": "This fitness station has bars for stretching." + }, + "5": { + "then": "This fitness station has a station for making hyperextensions." + }, + "6": { + "then": "This fitness station has rings for gymnastic exercises." + }, + "7": { + "then": "This fitness station has a horizontal ladder, also known as monkey bars." + }, + "8": { + "then": "This fitness station has wall bars to climb on." + }, + "9": { + "then": "This fitness station has posts for performing slalom exercises." } }, "question": "What kind of equipment does this fitness station have?" @@ -4773,6 +4773,21 @@ "1": { "then": "This is a friture" }, + "10": { + "then": "Chinese dishes are served here" + }, + "11": { + "then": "Greek dishes are served here" + }, + "12": { + "then": "Indian dishes are served here" + }, + "13": { + "then": "Turkish dishes are served here" + }, + "14": { + "then": "Thai dishes are served here" + }, "2": { "then": "Mainly serves pasta" }, @@ -4796,21 +4811,6 @@ }, "9": { "then": "French dishes are served here" - }, - "10": { - "then": "Chinese dishes are served here" - }, - "11": { - "then": "Greek dishes are served here" - }, - "12": { - "then": "Indian dishes are served here" - }, - "13": { - "then": "Turkish dishes are served here" - }, - "14": { - "then": "Thai dishes are served here" } }, "question": "Which food is served here?", @@ -5975,6 +5975,19 @@ } } }, + "10": { + "options": { + "0": { + "question": "All Notes" + }, + "1": { + "question": "Hide import notes" + }, + "2": { + "question": "Show only import Notes" + } + } + }, "2": { "options": { "0": { @@ -6030,19 +6043,6 @@ "question": "Only show open notes" } } - }, - "10": { - "options": { - "0": { - "question": "All Notes" - }, - "1": { - "question": "Hide import notes" - }, - "2": { - "question": "Show only import Notes" - } - } } }, "name": "OpenStreetMap notes", @@ -6371,6 +6371,21 @@ "1": { "then": "This is a normal parking space." }, + "10": { + "then": "This is a parking space reserved for parents with children." + }, + "11": { + "then": "This is a parking space reserved for staff." + }, + "12": { + "then": "This is a parking space reserved for taxis." + }, + "13": { + "then": "This is a parking space reserved for vehicles towing a trailer." + }, + "14": { + "then": "This is a parking space reserved for car sharing." + }, "2": { "then": "This is a disabled parking space." }, @@ -6394,21 +6409,6 @@ }, "9": { "then": "This is parking space reserved for motorcycles." - }, - "10": { - "then": "This is a parking space reserved for parents with children." - }, - "11": { - "then": "This is a parking space reserved for staff." - }, - "12": { - "then": "This is a parking space reserved for taxis." - }, - "13": { - "then": "This is a parking space reserved for vehicles towing a trailer." - }, - "14": { - "then": "This is a parking space reserved for car sharing." } }, "question": "What kind of parking space is this?" @@ -7035,30 +7035,6 @@ "1": { "question": "Recycling of batteries" }, - "2": { - "question": "Recycling of beverage cartons" - }, - "3": { - "question": "Recycling of cans" - }, - "4": { - "question": "Recycling of clothes" - }, - "5": { - "question": "Recycling of cooking oil" - }, - "6": { - "question": "Recycling of engine oil" - }, - "7": { - "question": "Recycling of fluorescent tubes" - }, - "8": { - "question": "Recycling of green waste" - }, - "9": { - "question": "Recycling of glass bottles" - }, "10": { "question": "Recycling of glass" }, @@ -7089,11 +7065,35 @@ "19": { "question": "Recycling of residual waste" }, + "2": { + "question": "Recycling of beverage cartons" + }, "20": { "question": "Recycling of printer cartridges" }, "21": { "question": "Recycling of bicycles" + }, + "3": { + "question": "Recycling of cans" + }, + "4": { + "question": "Recycling of clothes" + }, + "5": { + "question": "Recycling of cooking oil" + }, + "6": { + "question": "Recycling of engine oil" + }, + "7": { + "question": "Recycling of fluorescent tubes" + }, + "8": { + "question": "Recycling of green waste" + }, + "9": { + "question": "Recycling of glass bottles" } } }, @@ -7161,30 +7161,6 @@ "1": { "then": "Beverage cartons can be recycled here" }, - "2": { - "then": "Cans can be recycled here" - }, - "3": { - "then": "Clothes can be recycled here" - }, - "4": { - "then": "Cooking oil can be recycled here" - }, - "5": { - "then": "Engine oil can be recycled here" - }, - "6": { - "then": "Fluorescent tubes can be recycled here" - }, - "7": { - "then": "Green waste can be recycled here" - }, - "8": { - "then": "Organic waste can be recycled here" - }, - "9": { - "then": "Glass bottles can be recycled here" - }, "10": { "then": "Glass can be recycled here" }, @@ -7215,6 +7191,9 @@ "19": { "then": "Shoes can be recycled here" }, + "2": { + "then": "Cans can be recycled here" + }, "20": { "then": "Small electrical appliances can be recycled here" }, @@ -7229,6 +7208,27 @@ }, "24": { "then": "Bicycles can be recycled here" + }, + "3": { + "then": "Clothes can be recycled here" + }, + "4": { + "then": "Cooking oil can be recycled here" + }, + "5": { + "then": "Engine oil can be recycled here" + }, + "6": { + "then": "Fluorescent tubes can be recycled here" + }, + "7": { + "then": "Green waste can be recycled here" + }, + "8": { + "then": "Organic waste can be recycled here" + }, + "9": { + "then": "Glass bottles can be recycled here" } }, "question": "What can be recycled here?" @@ -7945,6 +7945,12 @@ "1": { "then": "This lamp uses LEDs" }, + "10": { + "then": "This lamp uses high pressure sodium lamps (orange with white)" + }, + "11": { + "then": "This lamp is lit using gas" + }, "2": { "then": "This lamp uses incandescent lighting" }, @@ -7968,12 +7974,6 @@ }, "9": { "then": "This lamp uses low pressure sodium lamps (monochrome orange)" - }, - "10": { - "then": "This lamp uses high pressure sodium lamps (orange with white)" - }, - "11": { - "then": "This lamp is lit using gas" } }, "question": "What kind of lighting does this lamp use?" @@ -9352,4 +9352,4 @@ } } } -} \ No newline at end of file +} From 1f0c831308ac8aa22a87a3c4ab7a4260efafb7a7 Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 14:42:36 +0000 Subject: [PATCH 17/36] Translated using Weblate (English) Currently translated at 100.0% (501 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/en/ --- langs/en.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/langs/en.json b/langs/en.json index 8b1be896f7..b3107da8c2 100644 --- a/langs/en.json +++ b/langs/en.json @@ -12,7 +12,7 @@ }, "communityIndex": { "available": "This community speaks {native}", - "intro": "Get in touch with other people to get to know them, learn from them, ...", + "intro": "Get in touch with other people to get to know them, learn from them, …", "notAvailable": "This community does not speak {native}", "title": "Community index" }, @@ -60,13 +60,13 @@ "intro": "The user is greeted by a map with features. Upon selecting one, the information about that feature is shown.", "title": "What does the interface look like?" }, - "examples": "There are many thematic maps available of which a few are shown here.\n\nThere are many more thematic maps online: about healthcare, indoor navigation, wheelchair accessibility, waste facilities, public bookcases, pedestrian crossings with a rainbow-painting,... Discover them all on mapcomplete.osm.be", + "examples": "There are many thematic maps available of which a few are shown here.\n\nThere are many more thematic maps online: about healthcare, indoor navigation, wheelchair accessibility, waste facilities, public bookcases, pedestrian crossings with a rainbow-painting,… Discover them all on mapcomplete.osm.be", "fakeui": { "add_images": "Add images with a few clicks", "attributes": "Shows attributes in a friendly way", "edit": "Wrong or outdated info? The edit button is right there.", "question": "If an attribute is not yet known, MapComplete shows a question", - "see_images": "Shows images from previous contributors, Wikipedia, Mapillary, ... ", + "see_images": "Shows images from previous contributors, Wikipedia, Mapillary, …", "wikipedia": "Linked Wikipedia articles are shown" }, "frontParagraph": "MapComplete is an easy to use web application to collect geodata in OpenStreetMap, enabling collecting and managing relevant data in an open, crowdsourced and reusable way.\n\nNew categories and attributes can be added upon request.", @@ -498,7 +498,7 @@ "createNote": "Create a new note", "createNoteIntro": "Is something wrong or missing on the map? Create a note here. These will be checked by volunteers.", "createNoteTitle": "Create a new note here", - "creating": "Creating note...", + "creating": "Creating note…", "disableAllNoteFilters": "Disable all filters", "isClosed": "This note is resolved", "isCreated": "Your note has been created!", From a7efdc3c72a1d0aca1df8214c6d424a734c6f3a9 Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 14:46:37 +0000 Subject: [PATCH 18/36] Translated using Weblate (English) Currently translated at 100.0% (91 of 91 strings) Translation: MapComplete/shared-questions Translate-URL: https://hosted.weblate.org/projects/mapcomplete/shared-questions/en/ --- langs/shared-questions/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/langs/shared-questions/en.json b/langs/shared-questions/en.json index 631841198f..9aa110d81d 100644 --- a/langs/shared-questions/en.json +++ b/langs/shared-questions/en.json @@ -56,8 +56,8 @@ "question": "what notes can you use to pay here?" }, "description": { - "question": "Is there still something relevant you couldn't give in the previous questions? Add it here.", - "questionHint": "Don't repeat already stated facts" + "question": "Is there still some relevant info that the previous questions did not cover? Feel free to add it here.", + "questionHint": "Please don't repeat already stated facts" }, "dog-access": { "mappings": { @@ -324,4 +324,4 @@ "question": "What is the corresponding Wikidata entity?" } } -} \ No newline at end of file +} From cd6dcf76c4624667731ae631406456c9bc7eb3a2 Mon Sep 17 00:00:00 2001 From: brunnerpaul Date: Tue, 27 Jun 2023 14:37:43 +0000 Subject: [PATCH 19/36] Translated using Weblate (German) Currently translated at 99.2% (497 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/de/ --- langs/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/langs/de.json b/langs/de.json index 7260baf90c..d92da312c6 100644 --- a/langs/de.json +++ b/langs/de.json @@ -490,7 +490,7 @@ }, "notes": { "addAComment": "Einen Kommentar hinzufügen", - "addComment": "Einen Kommentar hinzufügen", + "addComment": "Kommentar hinzufügen", "addCommentAndClose": "Einen Kommentar hinzufügen und schließen", "addCommentPlaceholder": "Einen Kommentar hinzufügen…", "anonymous": "Anonymer Benutzer", @@ -585,7 +585,7 @@ }, "userinfo": { "editDescription": "Eigene Profilbeschreibung bearbeiten", - "gotoInbox": "Posteingang öffnen", + "gotoInbox": "Deinen Posteingang öffnen", "gotoSettings": "Einstellungen auf OpenStreetMap.org öffnen", "noDescription": "Sie haben noch keine Profilbeschreibung", "noDescriptionCallToAction": "Profilbeschreibung hinzufügen", From 963e54eba610d99cb1b367edb751e339253fa12c Mon Sep 17 00:00:00 2001 From: mcliquid Date: Tue, 27 Jun 2023 19:14:58 +0000 Subject: [PATCH 20/36] Translated using Weblate (German) Currently translated at 99.8% (500 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/de/ --- langs/de.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/langs/de.json b/langs/de.json index d92da312c6..963bc1af51 100644 --- a/langs/de.json +++ b/langs/de.json @@ -12,7 +12,7 @@ }, "communityIndex": { "available": "Diese Gemeinschaft spricht {native}", - "intro": "Treten Sie mit anderen Menschen in Kontakt, um sie kennen zu lernen, von ihnen zu lernen, ...", + "intro": "Treten Sie mit anderen Menschen in Kontakt, um sie kennen zu lernen, von ihnen zu lernen, …", "notAvailable": "Diese Gemeinschaft spricht nicht {native}", "title": "Index der Community" }, @@ -66,7 +66,7 @@ "attributes": "Zeigt Attribute in einer freundlichen Art und Weise", "edit": "Falsche oder überholte Informationen? Die Schaltfläche \"Bearbeiten\" ist direkt zugänglich.", "question": "Ist ein Attribut noch nicht bekannt, zeigt MapComplete eine Frage an", - "see_images": "Zeigt Bilder von früheren Mitwirkenden, Wikipedia, Mapillary, ... ", + "see_images": "Zeigt Bilder von früheren Mitwirkenden, Wikipedia, Mapillary, …", "wikipedia": "Verlinkte Wikipedia-Artikel werden angezeigt" }, "frontParagraph": "MapComplete ist eine einfach zu bedienende Webanwendung zur Erfassung von Geodaten in OpenStreetMap, die das Sammeln und Verwalten relevanter Daten in einer offenen, crowdsourced und wiederverwendbaren Weise ermöglicht.\n\nNeue Kategorien und Attribute können auf Anfrage hinzugefügt werden.", @@ -498,7 +498,7 @@ "createNote": "Eine neue Notiz erstellen", "createNoteIntro": "Ist etwas falsch oder fehlt etwas auf der Karte? Erstellen Sie hier eine Notiz. Diese werden von Freiwilligen überprüft.", "createNoteTitle": "Hier eine neue Notiz erstellen", - "creating": "Notiz wird erstellt...", + "creating": "Notiz wird erstellt…", "disableAllNoteFilters": "Alle Filter ausschalten", "isClosed": "Diese Notiz wurde erledigt", "isCreated": "Die Notiz wurde erstellt!", From 57822bc73f9323f5e9b5baba4166ba102cb0b892 Mon Sep 17 00:00:00 2001 From: Lucas Date: Tue, 27 Jun 2023 18:39:45 +0000 Subject: [PATCH 21/36] Translated using Weblate (French) Currently translated at 68.0% (341 of 501 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/fr/ --- langs/fr.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/langs/fr.json b/langs/fr.json index a55177b30e..4a18fdfc60 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -63,6 +63,7 @@ "addNew": "Ajouter {category}", "backToSelect": "Sélectionner une catégorie différente", "confirmButton": "Ajouter un/une {category} ici.
Votre ajout sera visible par tout le monde
", + "confirmLocation": "Confirmer cet emplacement", "disableFilters": "Désactiver tous les filtres", "disableFiltersExplanation": "Certains élément peuvent être filtrés", "hasBeenImported": "Cet élément a déjà été importé", @@ -207,6 +208,9 @@ }, "pickLanguage": "Choisir la langue : ", "poweredByOsm": "Propulsé par OpenStreetMap", + "questionBox": { + "reactivate": "Réactiver les questions passées" + }, "questions": { "emailIs": "L'adresse électronique de {category} est {email}", "emailOf": "Quelle est l'adresse électronique de {category} ?", From 035ad0ab12e8e6b060512fb7c5ea45e28fecbeba Mon Sep 17 00:00:00 2001 From: mcliquid Date: Tue, 27 Jun 2023 19:21:13 +0000 Subject: [PATCH 22/36] Translated using Weblate (German) Currently translated at 99.7% (411 of 412 strings) Translation: MapComplete/themes Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/de/ --- langs/themes/de.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/langs/themes/de.json b/langs/themes/de.json index e270e7a509..6da33f299f 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -24,6 +24,16 @@ "text": "Diesen Geldautomaten importieren" } } + }, + "1": { + "render": "OpenStreetMap kennt einen Geldautomaten, der {_closest_osm_poi_distance} Meter entfernt ist. " + }, + "2": { + "render": { + "special": { + "message": "Füge alle vorgeschlagenen Tags zum nächstgelegenen Geldautomaten hinzu" + } + } } } } @@ -855,6 +865,7 @@ "name": "Zentrum der Änderungssätze", "tagRenderings": { "contributor": { + "question": "Welcher Mitwirkende hat diese Änderung vorgenommen?", "render": "Änderung gemacht von {user}" }, "host": { @@ -862,6 +873,7 @@ "render": "Änderung vorgenommen mit {host}" }, "locale": { + "question": "In welcher Sprache wurde diese Änderung vorgenommen?", "render": "Usersprache ist {locale}" }, "show_changeset_id": { @@ -872,7 +884,8 @@ "render": "Geändert mit Thema {theme}" }, "version": { - "question": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?" + "question": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?", + "render": "Erstellt mit {editor}" } }, "title": { From 7aa3aa2cb276a209b4c4c58bf051c9d5e61e2ea6 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 28 Jun 2023 22:09:12 +0200 Subject: [PATCH 23/36] Refactoring: remove some obsolete html-files --- customGenerator.html | 16 -------------- import_helper.html | 50 -------------------------------------------- import_viewer.html | 45 --------------------------------------- package.json | 2 +- 4 files changed, 1 insertion(+), 112 deletions(-) delete mode 100644 customGenerator.html delete mode 100644 import_helper.html delete mode 100644 import_viewer.html diff --git a/customGenerator.html b/customGenerator.html deleted file mode 100644 index 45cd309f56..0000000000 --- a/customGenerator.html +++ /dev/null @@ -1,16 +0,0 @@ - - - The custom generator has moved (temporarily), go to - - Redirecting you to the development version - - - - diff --git a/import_helper.html b/import_helper.html deleted file mode 100644 index 4280fdc73f..0000000000 --- a/import_helper.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - MapComplete Import Helper - - - - - - - - - - - - - - - - - - - - - -
Loading...
- - - - - diff --git a/import_viewer.html b/import_viewer.html deleted file mode 100644 index 77ace0f672..0000000000 --- a/import_viewer.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - MapComplete Import Viewer - - - - - - - - - - - - - - - - - - - - - -
Loading...
- - - - - diff --git a/package.json b/package.json index 7124ffb354..f587dd27f7 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "prepare-deploy": "npm run generate:service-worker && ./scripts/build.sh", "format": "prettier --write '**/*.ts' '**/*.svelte'", "clean:tests": "(find . -type f -name \"*.doctest.ts\" | xargs -r rm)", - "clean": "rm -rf .cache/ && (find *.html | grep -v \"^\\(404\\|index\\|land\\|test\\|preferences\\|studio\\|professional\\|automaton\\|import_helper\\|import_viewer\\|theme\\|style_test\\).html\" | xargs -r rm) && (ls | grep \"^index_[a-zA-Z_-]\\+\\.ts$\" | xargs -r rm) && (ls | grep \".*.webmanifest$\" | grep -v \"manifest.webmanifest\" | xargs -r rm)", + "clean": "rm -rf .cache/ && (find *.html | grep -v \"^\\(404\\|index\\|land\\|test\\|studio\\|theme\\|style_test\\|statistics\\).html\" | xargs -r rm) && (ls | grep \"^index_[a-zA-Z_-]\\+\\.ts$\" | xargs -r rm) && (ls | grep \".*.webmanifest$\" | grep -v \"manifest.webmanifest\" | xargs -r rm)", "generate:dependency-graph": "node_modules/.bin/depcruise --exclude \"^node_modules\" --output-type dot Logic/State/MapState.ts > dependencies.dot && dot dependencies.dot -T svg -o dependencies.svg && rm dependencies.dot", "weblate-add-upstream": "git remote add weblate-github git@github.com:weblate/MapComplete.git && git remote add weblate-hosted-core https://hosted.weblate.org/git/mapcomplete/core/ && git remote add weblate-hosted-layers https://hosted.weblate.org/git/mapcomplete/layers/", "weblate-merge": "git remote update weblate-github; git merge weblate-github/weblate-mapcomplete-core weblate-github/weblate-mapcomplete-layers weblate-github/weblate-mapcomplete-layer-translations", From 4e05671968e4a70a5e6dc58470ecd3a54cb55f2b Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 28 Jun 2023 22:11:48 +0200 Subject: [PATCH 24/36] Scripts: improve conflate script --- scripts/conflate.ts | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/scripts/conflate.ts b/scripts/conflate.ts index 4f045d8458..e25abfbf5c 100644 --- a/scripts/conflate.ts +++ b/scripts/conflate.ts @@ -91,6 +91,14 @@ export class Conflate extends Script { const unmatched = external_features.filter( (f) => !bestMatches.some((matched) => matched.match.external_feature === f) ) + const weirdMatch = external_features.filter((f) => + bestMatches.some( + (matched) => + matched.match.external_feature === f && + !matched.replayed.certainly_imported && + !matched.replayed.possibly_imported + ) + ) const match_lengths: (string | number)[][] = [ [ "osm_id", @@ -111,6 +119,9 @@ export class Conflate extends Script { if (Object.keys(resting_properties).length === 0) { continue } + if (!certainly_imported && !possibly_imported) { + continue + } const id = osm_feature.properties["@id"] match_lengths.push([ id, @@ -153,6 +164,19 @@ export class Conflate extends Script { " " ) ) + + fs.writeFileSync( + targetDir + "/unmatched_but_has_close_feature.geojson", + JSON.stringify( + { + type: "FeatureCollection", + features: weirdMatch, + }, + + null, + " " + ) + ) } private async findTimeFork( @@ -292,12 +316,12 @@ export class Conflate extends Script { } if (properties["website"]) { let website = properties.website.toLowerCase() - website + website = website .replace("http://http://", "http://") .replace("https://https://", "https://") .replace("https//", "https://") .replace("http://", "https://") - if (website.startsWith("https://")) { + if (!website.startsWith("https://")) { website = "https://" + website } const validator = new UrlValidator() From 5309d0c3d6b6f9eade9ed3515b7c7562673862f6 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 28 Jun 2023 22:12:47 +0200 Subject: [PATCH 25/36] Validation: enable mustHaveLanguage-check again as error --- Models/ThemeConfig/Conversion/Validation.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Models/ThemeConfig/Conversion/Validation.ts b/Models/ThemeConfig/Conversion/Validation.ts index e5d325642b..f386244bea 100644 --- a/Models/ThemeConfig/Conversion/Validation.ts +++ b/Models/ThemeConfig/Conversion/Validation.ts @@ -29,7 +29,10 @@ class ValidateLanguageCompleteness extends DesugaringStep { this._languages = languages ?? ["en"] } - convert(obj: any, context: string): { result: LayerConfig; errors: string[] } { + convert( + obj: any, + context: string + ): { result: LayerConfig; errors: string[]; warnings: string[] } { const errors = [] const warnings: string[] = [] const translations = Translation.ExtractAllTranslationsFrom(obj) @@ -41,7 +44,7 @@ class ValidateLanguageCompleteness extends DesugaringStep { t.tr.translations["*"] === undefined ) .forEach((missing) => { - warnings.push( + errors.push( context + "A theme should be translation-complete for " + neededLanguage + From 4e57944b2074806694feceb4764516e18b417e8e Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 28 Jun 2023 22:30:08 +0200 Subject: [PATCH 26/36] Chore: translation sync --- assets/layers/advertising/advertising.json | 2 +- assets/layers/artwork/artwork.json | 2 +- assets/layers/bench/bench.json | 8 +- .../layers/bike_cleaning/bike_cleaning.json | 2 +- .../charging_station/charging_station.json | 6 +- assets/layers/dentist/dentist.json | 2 +- assets/layers/fixme/fixme.json | 6 +- assets/layers/gps_track/gps_track.json | 3 +- assets/layers/last_click/last_click.json | 12 +- assets/layers/usersettings/usersettings.json | 30 +- .../walls_and_buildings.json | 3 +- assets/tagRenderings/questions.json | 8 +- assets/themes/advertising/advertising.json | 9 +- assets/themes/aed/aed.json | 2 +- assets/themes/artwork/artwork.json | 4 +- assets/themes/atm/atm.json | 16 +- assets/themes/bag/bag.json | 3 +- assets/themes/benches/benches.json | 2 +- .../themes/bicycle_rental/bicycle_rental.json | 3 +- .../themes/cafes_and_pubs/cafes_and_pubs.json | 3 +- assets/themes/campersite/campersite.json | 2 +- assets/themes/grb/grb.json | 3 +- .../mapcomplete-changes.json | 88 ++-- assets/themes/maproulette/maproulette.json | 3 +- assets/themes/maxspeed/maxspeed.json | 9 +- assets/themes/nature/nature.json | 9 +- assets/themes/notes/notes.json | 6 +- assets/themes/pets/pets.json | 18 +- assets/themes/postal_codes/postal_codes.json | 24 +- .../rainbow_crossings/rainbow_crossings.json | 3 +- assets/themes/shops/shops.json | 5 +- assets/themes/sidewalks/sidewalks.json | 12 +- assets/themes/sports/sports.json | 9 +- assets/themes/stations/stations.json | 18 +- assets/themes/toilets/toilets.json | 2 +- assets/themes/transit/transit.json | 6 +- .../walls_and_buildings.json | 6 +- assets/themes/waste/waste.json | 6 +- langs/layers/de.json | 443 +++++++++--------- langs/layers/en.json | 420 ++++++++--------- langs/layers/zh_Hant.json | 14 +- langs/shared-questions/de.json | 2 +- langs/shared-questions/en.json | 2 +- langs/themes/de.json | 64 +-- langs/themes/en.json | 64 +-- langs/themes/zh_Hant.json | 8 +- 46 files changed, 726 insertions(+), 646 deletions(-) diff --git a/assets/layers/advertising/advertising.json b/assets/layers/advertising/advertising.json index d22aeb1015..c3e5607094 100644 --- a/assets/layers/advertising/advertising.json +++ b/assets/layers/advertising/advertising.json @@ -686,7 +686,7 @@ "then": { "ca": "Informació sobre teatres, concerts, ...", "es": "Información sobre teatros, conciertos, ...", - "en": "Inormation related to theatre, concerts, ...", + "en": "Information related to theatre, concerts, …", "de": "Informationen über Theater, Konzerte, ...", "cs": "Informace týkající se divadla, koncertů, ...", "fr": "Informations liées au théâtre, à des concerts, …", diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index 0f5476ec4c..78d3140d0e 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -86,7 +86,7 @@ "ru": "Разнообразные произведения искусства", "es": "Un mapa abierto de Estatuas, bustos, Graffitis y otras Obras de Arte en todo el mundo", "ja": "多様な作品", - "zh_Hant": "不同類型的藝術品", + "zh_Hant": "顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品的地圖", "id": "Peta terbuka patung, grafiti, dan karya seni lainnya di seluruh dunia", "pt": "Diversas obras de arte", "hu": "Szobrok, mellszobrok, graffitik és egyéb műalkotások nyílt világtérképe", diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index 8e8a6ca44a..afab53a871 100644 --- a/assets/layers/bench/bench.json +++ b/assets/layers/bench/bench.json @@ -789,7 +789,7 @@ "question": { "en": "Does this bench have an inscription?", "nl": "Heeft deze bank een inscriptie?", - "de": "Hat diese Bank eine Inschrift? ", + "de": "Hat diese Bank eine Inschrift?", "fr": "Est-ce que ce banc possède une inscription ?", "ca": "Aquest banc té una inscripció?", "cs": "Má tato lavička nápis?", @@ -833,9 +833,9 @@ } ], "questionHint": { - "en": "E.g. on a mounted plaque, in the backrest, ...", + "en": "E.g. on a mounted plaque, in the backrest, …", "nl": "Bijvoorbeeld op een aangebracht plakkaat, ingesneden in de rugleuning, ...", - "de": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, ... ", + "de": "Z.B. auf einer angebrachten Plakette, in der Rückenlehne, ...", "fr": "Par exemple, sur une plaque accrochée, sur le dossier, ...", "ca": "P. ex. en una placa, al respatller, ...", "cs": "Např. na připevněné desce, v opěradle, ...", @@ -847,7 +847,7 @@ "question": { "en": "Does this bench have an artistic element?", "nl": "Heeft deze bank een geïntegreerd kunstwerk?", - "de": "Hat diese Bank ein künstlerisches Element? ", + "de": "Hat diese Bank ein künstlerisches Element?", "ca": "Aquest banc té algun element artístic?", "cs": "Má tato lavička umělecké prvky?" }, diff --git a/assets/layers/bike_cleaning/bike_cleaning.json b/assets/layers/bike_cleaning/bike_cleaning.json index a027fe09ba..31970232e9 100644 --- a/assets/layers/bike_cleaning/bike_cleaning.json +++ b/assets/layers/bike_cleaning/bike_cleaning.json @@ -212,7 +212,7 @@ { "if": "fee=yes", "then": { - "en": "This cleaning service is paid", + "en": "There is a fee to use this cleaning service", "nl": "Dit fietsschoonmaakpunt is betalend", "es": "Este servicio de limpieza es de pago", "ca": "Aquest servei de neteja és de pagament", diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index 811d99f048..cb97d21347 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -243,7 +243,8 @@ "if": "access=permissive", "then": { "en": "This charging station is accessible to the public during certain hours or conditions. Restrictions might apply, but general use is allowed.", - "nl": "Dit oplaadstation is publiek toegankelijk onder voorwaarden (bv. enkel tijdens bepaalde uren). " + "nl": "Dit oplaadstation is publiek toegankelijk onder voorwaarden (bv. enkel tijdens bepaalde uren). ", + "de": "Diese Ladestation ist zu gewissen Öffnungszeiten oder Bedingungen öffentlich zugänglich. Einschränkungen sind möglich, aber generelle Nutzung ist erlaubt." } } ] @@ -4639,7 +4640,8 @@ "id": "questions-technical", "render": { "en": "

Technical questions

The questions below are very technical. Feel free to ignore them
{questions(technical)}", - "nl": "

Technische vragen

De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt
{questions(technical)}" + "nl": "

Technische vragen

De vragen hieronder zijn erg technisch - sla deze over indien je hier geen tijd voor hebt
{questions(technical)}", + "de": "

Technische Frage

Die nächsten Fragen sind sehr technisch. Du kannst diese auch überspringen.
{questions(technical)}" } } ], diff --git a/assets/layers/dentist/dentist.json b/assets/layers/dentist/dentist.json index 801dfcd98d..8759429f7a 100644 --- a/assets/layers/dentist/dentist.json +++ b/assets/layers/dentist/dentist.json @@ -18,7 +18,7 @@ "title": { "render": { "en": "Dentist Office {name}", - "de": "Arztpraxis {name}", + "de": "Zahnarztpraxis {name}", "nl": "Tandartspraktijk {name}", "fr": "Cabinet medical {name}" } diff --git a/assets/layers/fixme/fixme.json b/assets/layers/fixme/fixme.json index 8dbeb16567..b957ee3aa5 100644 --- a/assets/layers/fixme/fixme.json +++ b/assets/layers/fixme/fixme.json @@ -32,13 +32,15 @@ "type": "text" }, "question": { - "en": "What is wrong with this feature?" + "en": "What is wrong with this feature?", + "de": "Was stimmt mit diesem Objekt nicht?" }, "mappings": [ { "if": "fixme=", "then": { - "en": "This issue has been resolved" + "en": "This issue has been resolved", + "de": "Dieses Problem wurde behoben" } } ], diff --git a/assets/layers/gps_track/gps_track.json b/assets/layers/gps_track/gps_track.json index e70233149a..38bc7a2fbb 100644 --- a/assets/layers/gps_track/gps_track.json +++ b/assets/layers/gps_track/gps_track.json @@ -6,7 +6,8 @@ "title": { "render": { "en": "Your travelled path", - "nl": "Jouw traject" + "nl": "Jouw traject", + "de": "Deine zurückgelegte Strecke" } }, "shownByDefault": false, diff --git a/assets/layers/last_click/last_click.json b/assets/layers/last_click/last_click.json index db747228b4..47f44a4543 100644 --- a/assets/layers/last_click/last_click.json +++ b/assets/layers/last_click/last_click.json @@ -22,21 +22,24 @@ }, "then": { "en": "Add a new point or add a note", - "nl": "Voeg een nieuw punt of een nieuwe kaartnota toe" + "nl": "Voeg een nieuw punt of een nieuwe kaartnota toe", + "de": "Objekt oder Hinweis auf der Karte hinzufügen" } }, { "if": "has_note_layer=yes", "then": { "en": "Add a new note", - "nl": "Voeg een nieuwe kaartnota toe" + "nl": "Voeg een nieuwe kaartnota toe", + "de": "Hinweis hinzufügen" } }, { "if": "has_presets=yes", "then": { "en": "Add a new point", - "nl": "Voeg een nieuw punt toe" + "nl": "Voeg een nieuw punt toe", + "de": "Objekt hinzufügen" } } ] @@ -107,7 +110,8 @@ }, "then": { "en": "Create a new map note", - "nl": "Maak een nieuwe kaartnotitie" + "nl": "Maak een nieuwe kaartnotitie", + "de": "Hinweis auf der Karte hinzufügen" } } ] diff --git a/assets/layers/usersettings/usersettings.json b/assets/layers/usersettings/usersettings.json index 38073cf303..9882944292 100644 --- a/assets/layers/usersettings/usersettings.json +++ b/assets/layers/usersettings/usersettings.json @@ -9,7 +9,8 @@ "title": { "render": { "en": "Settings", - "nl": "Instellingen" + "nl": "Instellingen", + "de": "Einstellungen" } }, "source": "special", @@ -44,7 +45,8 @@ "href": "{_backend}/messages/inbox", "text": { "en": "Open your inbox", - "nl": "Ga naar je inbox" + "nl": "Ga naar je inbox", + "de": "Deinen Posteingang öffnen" } } } @@ -55,7 +57,8 @@ "special": { "type": "link", "text": { - "en": "You have {_unreadMessages}
Open your inbox" + "en": "You have {_unreadMessages}
Open your inbox", + "de": "Du hast {_unreadMessages}
Öffne Deinen Posteingang" }, "href": "{_backend}/messages/inbox" } @@ -69,7 +72,8 @@ "special": { "type": "link", "text": { - "en": "Open your settings on OpenStreetMap.org" + "en": "Open your settings on OpenStreetMap.org", + "de": "Öffne Deine Einstellungen auf OpenStreetMap.org" }, "href": "{_backend}/account/edit" } @@ -145,34 +149,40 @@ { "id": "show_tags", "question": { - "en": "Show the raw OpenStreetMap-tags?" + "en": "Show the raw OpenStreetMap-tags?", + "de": "Rohe OpenStreetMap-Tags anzeigen?" }, "questionHint": { - "en": "Tags are attributes that every element has. This is the technical data that is stored in the database. You don't need this information to edit with MapComplete, but advanced users might want to use this as reference." + "en": "Tags are attributes that every element has. This is the technical data that is stored in the database. You don't need this information to edit with MapComplete, but advanced users might want to use this as reference.", + "de": "Tags sind die Eigenschaften, die jedes Objekt hat. Das sind die technischen Daten, die in der Datenbank gespeichert werden. Du brauchst diese Informationen nicht, um mit MapComplete Änderungen zu machen, aber fortgeschrittenen Nutzer*innen kann es als Referenz dienen." }, "mappings": [ { "if": "mapcomplete-show_tags=no", "then": { - "en": "Never show the tags." + "en": "Never show the tags.", + "de": "Tags nie anzeigen." } }, { "if": "mapcomplete-show_tags=", "then": { - "en": "Show the tags that will be applied once I have made {__userjourney_tagsVisibleAt} changesets" + "en": "Show the tags that will be applied once I have made {__userjourney_tagsVisibleAt} changesets", + "de": "Tags anzeigen sobald ich {__userjourney_tagsVisibleAt} Changesets erstellt habe" } }, { "if": "mapcomplete-show_tags=yes", "then": { - "en": "Show the tags that will be applied when making a change" + "en": "Show the tags that will be applied when making a change", + "de": "Tags anzeigen, die bei der Änderung hinzugefügt werden" } }, { "if": "mapcomplete-show_tags=full", "then": { - "en": "Show the tags that will be applied when making a change and show the tags table on every feature" + "en": "Show the tags that will be applied when making a change and show the tags table on every feature", + "de": "Tags anzeigen, die bei der Änderung hinzugefügt werden, und Tag-Tabelle bei jedem Objekt anzeigen" } } ] diff --git a/assets/layers/walls_and_buildings/walls_and_buildings.json b/assets/layers/walls_and_buildings/walls_and_buildings.json index 5a649036a2..e391929b4f 100644 --- a/assets/layers/walls_and_buildings/walls_and_buildings.json +++ b/assets/layers/walls_and_buildings/walls_and_buildings.json @@ -20,7 +20,8 @@ "da": "Specielt indbygget lag giver alle vægge og bygninger. Dette lag er nyttigt i forudindstillinger til objekter, der kan placeres mod vægge (f.eks. AED'er, postkasser, indgange, adresser, overvågningskameraer, …). Dette lag er usynligt som standard og kan ikke skiftes af brugeren.", "ca": "Capa construïda especial que proporciona totes les parets i edificis. Aquesta capa és útil als predefinits per a objectes que es poden col·locar a les parets (p. ex. DEA, bústies de correus, entrades, adreces, càmeres de vigilància, ...). Aquesta capa és invisible per defecte i no es pot activar per l'usuari.", "es": "Capa especial incorporada que proporciona todas las paredes y edificios. Esta capa es útil en los preajustes para objetos que pueden colocarse contra las paredes (por ejemplo: AEDs, buzones de correos, entradas, direcciones, cámaras de vigilancia, ...). Esta capa es invisible por defecto y no puede ser activada por el usuario.", - "cs": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat." + "cs": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat.", + "zh_Hant": "特殊的內建圖層顯示所有牆壁與建築。這個圖層對於規畫要靠牆的東西 (例如 AED、郵筒、入口、地址、監視器等) 相當實用。這個圖層預設顯示而且無法由使用者開關。" }, "source": { "osmTags": { diff --git a/assets/tagRenderings/questions.json b/assets/tagRenderings/questions.json index ec938eeab5..0356d880be 100644 --- a/assets/tagRenderings/questions.json +++ b/assets/tagRenderings/questions.json @@ -558,7 +558,7 @@ "question": { "nl": "Zijn er nog andere relevante zaken die je niet in de bovenstaande vragen kwijt kon? Vul ze hier in.", "fr": "Y a-t-il quelque chose de pertinent que vous n'avez pas pu donner à la dernière question ? Ajoutez-le ici.", - "en": "Is there still something relevant you couldn't give in the previous questions? Add it here.", + "en": "Is there still some relevant info that the previous questions did not cover? Feel free to add it here.", "nb_NO": "Er det noe mer som er relevant du ikke kunne opplyse om i tidligere svar? Legg det til her.", "ru": "Есть ли ещё что-то важное, о чём вы не смогли рассказать в предыдущих вопросах? Добавьте это здесь.", "zh_Hant": "有什麼相關的資訊你無法在先前的問題回應的嗎?請加在這邊吧。", @@ -587,12 +587,12 @@ "questionHint": { "nl": "Herhaal geen antwoorden die je reeds gaf", "fr": "Ne répétez pas des réponses déjà données", - "en": "Don't repeat already stated facts", + "en": "Please don't repeat already stated facts", "nb_NO": "Ikke gjenta fakta som allerede er nevnt", "ru": "Не повторяйте уже изложенные факты", "zh_Hant": "不要重覆答覆已經知道的事情", "it": "Non ripetere informazioni già fornite", - "de": "Bitte keine bereits erhobenen Informationen.", + "de": "Bitte keine bereits erhobenen Informationen wiederholen", "pl": "Nie powtarzaj już podanych faktów", "pt_BR": " Não repita fatos já declarados", "pt": "Não repita factos já declarados", @@ -1413,7 +1413,7 @@ "text": { "en": "Last edited on {_last_edit:timestamp} by {_last_edit:contributor}", "nl": "Laatst gewijzigd op {_last_edit:timestamp} door {_last_edit:contributor} ", - "de": "Zuletzt bearbeitet am {_last_edit:timestamp} vom {_last_edit:contributor}" + "de": "Zuletzt bearbeitet am {_last_edit:timestamp} von {_last_edit:contributor}" }, "class": "subtle font-small" } diff --git a/assets/themes/advertising/advertising.json b/assets/themes/advertising/advertising.json index d7ad409dc9..e2ca043f41 100644 --- a/assets/themes/advertising/advertising.json +++ b/assets/themes/advertising/advertising.json @@ -8,7 +8,8 @@ "de": "Werbung", "cs": "Otevřít reklamní mapu", "fr": "Open Advertising Map", - "nl": "Reclame" + "nl": "Reclame", + "zh_Hant": "廣告物件" }, "shortDescription": { "ca": "On puc trobar elements publicitaris?", @@ -17,7 +18,8 @@ "de": "Wo finde ich Werbeträger?", "cs": "Kde najdu reklamní objekty?", "fr": "Où puis-je trouver des dispositifs publicitaires ?", - "nl": "Waar zijn er reclameborden?" + "nl": "Waar zijn er reclameborden?", + "zh_Hant": "我能夠在那裡找到廣告物件?" }, "description": { "ca": "Alguna vegada t'has preguntat quanta publictat hi ha als nostres carrers i carreteres? Amb aquest mapa podràs trobar i afegir informació de tots els elements publictaris que t'hi trobes pel carrer", @@ -27,7 +29,8 @@ "cs": "Přemýšleli jste někdy o tom, kolik je v našich ulicích a na silnicích reklam? Pomocí této mapy můžete najít a doplnit informace o všech reklamních prvcích, které můžete na ulici najít", "fr": "Vous êtes-vous déjà demandé combien de publicité il y a dans nos rue ou sur nos routes ? Avec cette carte vous pouvez trouver et ajouter des informations sur tous les dispositifs publicitaires que vous pouvez trouver dans la rue", "nl": "Heb je je ooit afgevraagd hoeveel reclameborden er zijn in onze straten? Met deze kaart kan je deze vinden en informatie toevoegen", - "pt_BR": "Você já se perguntou quantas propagandas existem em nossas ruas e estradas? Com este mapa você pode encontrar e adicionar informações sobre todos os recursos de publicidade que você pode encontrar na rua" + "pt_BR": "Você já se perguntou quantas propagandas existem em nossas ruas e estradas? Com este mapa você pode encontrar e adicionar informações sobre todos os recursos de publicidade que você pode encontrar na rua", + "zh_Hant": "你曾經好奇路上有多少廣告物件?有了這份地圖,你可以找到所有路上能夠看到的廣告物件" }, "maintainer": "Offsel", "icon": "./assets/themes/advertising/icon.svg", diff --git a/assets/themes/aed/aed.json b/assets/themes/aed/aed.json index cfb4f85318..4ad04fb451 100644 --- a/assets/themes/aed/aed.json +++ b/assets/themes/aed/aed.json @@ -12,7 +12,7 @@ "it": "Mappa dei defibrillatori (DAE)", "ru": "Открытая карта АВД (Автоматизированных внешних дефибрилляторов)", "ja": "オープンAEDマップ", - "zh_Hant": "開放AED地圖", + "zh_Hant": "除顫器", "nb_NO": "Åpne AED-kart", "sv": "Öppna AED-karta", "pl": "Otwórz mapę AED", diff --git a/assets/themes/artwork/artwork.json b/assets/themes/artwork/artwork.json index 60461c60fe..5204bf56e6 100644 --- a/assets/themes/artwork/artwork.json +++ b/assets/themes/artwork/artwork.json @@ -10,7 +10,7 @@ "it": "Mappa libera delle opere d'arte", "ru": "Открытая карта произведений искусства", "ja": "オープン アートワーク マップ", - "zh_Hant": "開放藝術品地圖", + "zh_Hant": "藝術品", "sv": "Öppen konstverkskarta", "pl": "Otwórz mapę dzieł sztuki", "nb_NO": "Kunstkort", @@ -33,7 +33,7 @@ "ru": "Добро пожаловать на открытую карта произведений искусства - карту статуй, бюстов, граффити и других произведений искусства по всему миру", "es": "Un mapa abierto de Estatuas, bustos, Graffitis y otras Obras de Arte en todo el mundo", "ja": "オープン アートワーク マップへようこそ。世界中の銅像や胸像、壁の落書きなどのアートワークの地図です", - "zh_Hant": "歡迎來到開放藝術品地圖,這份地圖會顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品", + "zh_Hant": "顯示全世界的雕像、半身像、塗鴉以及其他類型的藝術品的地圖", "nb_NO": "Statuer, byster, graffiti, og andre kunstverk verden over", "hu": "Szobrok, mellszobrok, graffitik és egyéb műalkotások nyílt világtérképe", "pl": "Witaj w Open Artwork Map, mapie pomników, popierś, graffitti i innych dzieł sztuki z całego świata", diff --git a/assets/themes/atm/atm.json b/assets/themes/atm/atm.json index a19bb96920..af18997e4e 100644 --- a/assets/themes/atm/atm.json +++ b/assets/themes/atm/atm.json @@ -10,7 +10,8 @@ "cs": "Bankomaty", "nb_NO": "Minibanker", "zgh": "ⴰⵍⵍⴰⵍⵏ ⵏ ⵓⵙⴽⵙⵍ ⴰⵡⵓⵔⵎⴰⵏ", - "id": "Mesin ATM" + "id": "Mesin ATM", + "zh_Hant": "自動櫃員機" }, "description": { "en": "This map shows ATMs to withdraw or deposit money", @@ -21,7 +22,8 @@ "cs": "Tato mapa zobrazuje bankomaty pro výběr nebo vklad peněz", "nb_NO": "Viser minibanker for å ta ut eller sette inn penger", "es": "Este mapa muestra los cajeros automáticos para retirar o ingresar dinero", - "id": "Peta ini menunjukkan ATM untuk menarik atau menyetorkan uang" + "id": "Peta ini menunjukkan ATM untuk menarik atau menyetorkan uang", + "zh_Hant": "這份地圖顯示領錢與存錢的 ATM" }, "icon": "./assets/themes/atm/logo.svg", "startLat": 0, @@ -80,7 +82,9 @@ "tags": "tags", "maproulette_id": "mr_taskId", "text": { - "en": "Import this ATM" + "en": "Import this ATM", + "de": "Diesen Geldautomaten importieren", + "zh_Hant": "匯入這座 ATM" }, "icon": "./assets/svg/addSmall.svg" } @@ -90,7 +94,8 @@ "id": "closeness-indicator", "condition": "_has_closeby_feature=yes", "render": { - "en": "OpenStreetMap knows about an ATM which is {_closest_osm_poi_distance} meter away. " + "en": "OpenStreetMap knows about an ATM which is {_closest_osm_poi_distance} meter away. ", + "de": "OpenStreetMap kennt einen Geldautomaten, der {_closest_osm_poi_distance} Meter entfernt ist. " } }, { @@ -102,7 +107,8 @@ "tags_to_apply": "$tags", "id_of_object_to_apply_this_one": "_closest_osm_poi", "message": { - "en": "Add all the suggested tags to the closest ATM" + "en": "Add all the suggested tags to the closest ATM", + "de": "Füge alle vorgeschlagenen Tags zum nächstgelegenen Geldautomaten hinzu" }, "image": "./assets/svg/addSmall.svg", "maproulette_task_id": "mr_taskId" diff --git a/assets/themes/bag/bag.json b/assets/themes/bag/bag.json index 7d12053226..89de76cd5e 100644 --- a/assets/themes/bag/bag.json +++ b/assets/themes/bag/bag.json @@ -8,7 +8,8 @@ "nb_NO": "BAG-importhjelper", "ca": "Assistent d'importació del BAG", "es": "Ayudante de importación BAG", - "cs": "Pomocník pro import BAG" + "cs": "Pomocník pro import BAG", + "zh_Hant": "BAG 匯入助手" }, "shortDescription": { "nl": "BAG import helper tool", diff --git a/assets/themes/benches/benches.json b/assets/themes/benches/benches.json index 5b67b00b56..aae6977545 100644 --- a/assets/themes/benches/benches.json +++ b/assets/themes/benches/benches.json @@ -47,7 +47,7 @@ "it": "Questa mappa mostra tutte le panchine che sono state aggiunte su OpenStreetMap: panchine individuali e quelle alle fermate del trasporto pubblico o nei ripari. Se disponi di un account OpenStreetMap puoi mappare delle nuove panchine o modificare i dettagli di quelle esistenti.", "ru": "На этой карте показаны все скамейки, записанные в OpenStreetMap: отдельные скамейки, а также скамейки, относящиеся к остановкам общественного транспорта или навесам. Имея учётную запись OpenStreetMap, вы можете наносить на карту новые скамейки или редактировать информацию о существующих скамейках.", "ja": "このマップには、OpenStreetMapに記録されているすべてのベンチが表示されます。個々のベンチ、および公共交通機関の停留所または避難場所に属するベンチです。OpenStreetMapアカウントを使用すると、新しいベンチをマップしたり、既存のベンチの詳細を編集したりできます。", - "zh_Hant": "這份地圖顯示開放街圖上所有記錄的長椅:單獨的長椅,屬於大眾運輸站點或涼亭的長椅。只要有開放街圖帳號,你可以新增長椅或是編輯既有長椅的詳細內容。", + "zh_Hant": "這份地圖顯示開放街圖上所有記錄的長椅:單獨的長椅,屬於大眾運輸站點或涼亭的長椅。", "hu": "Ez a térkép megjeleníti az OpenStreetMap-en rögzített összes padot: egyes padokat, valamint tömegközlekedési megállókban vagy menedékhelyeken található padokat. OpenStreetMap-fiókkal Ön is felrajzolhat új padokat, vagy szerkesztheti a meglévő padok részleteit.", "ca": "Aquest mapa mostra tots els bancs que hi ha a OpenStreetMap: bancs individuals i els bancs que hi ha a parades o refugis de transport públic.", "es": "Este mapa muestra todos los bancos que están registrados en OpenStreetMap: Bancos individuales, bancos que pertenecen a paradas o marquesinas del transporte público.", diff --git a/assets/themes/bicycle_rental/bicycle_rental.json b/assets/themes/bicycle_rental/bicycle_rental.json index 8e5337b120..204594d81f 100644 --- a/assets/themes/bicycle_rental/bicycle_rental.json +++ b/assets/themes/bicycle_rental/bicycle_rental.json @@ -11,7 +11,8 @@ "nb_NO": "Sykkelutleie", "da": "Cykeludlejning", "pa_PK": "سائیکل کرایا", - "cs": "Půjčovna kol" + "cs": "Půjčovna kol", + "zh_Hant": "單車租借站" }, "shortDescription": { "en": "A map with bicycle rental stations and bicycle rental shops", diff --git a/assets/themes/cafes_and_pubs/cafes_and_pubs.json b/assets/themes/cafes_and_pubs/cafes_and_pubs.json index f46087abdb..4a16d5a3c7 100644 --- a/assets/themes/cafes_and_pubs/cafes_and_pubs.json +++ b/assets/themes/cafes_and_pubs/cafes_and_pubs.json @@ -28,7 +28,8 @@ "nb_NO": "Kneiper og barer", "pa_PK": "پب (بار)", "cs": "Kavárny, hospody a bary", - "it": "Pub e bar" + "it": "Pub e bar", + "zh_Hant": "咖啡廳、俱樂部與酒吧" }, "icon": "./assets/layers/cafe_pub/pub.svg", "startLat": 0, diff --git a/assets/themes/campersite/campersite.json b/assets/themes/campersite/campersite.json index e8e477b8d1..64dc9a0206 100644 --- a/assets/themes/campersite/campersite.json +++ b/assets/themes/campersite/campersite.json @@ -38,7 +38,7 @@ "it": "Questo sito raccoglie tutti i luoghi ufficiali dove sostare con il camper e aree dove è possibile scaricare acque grigie e nere. Puoi aggiungere dettagli riguardanti i servizi forniti e il loro costo. Aggiungi foto e recensioni. Questo è al contempo un sito web e una web app. I dati sono memorizzati su OpenStreetMap in modo tale che siano per sempre liberi e riutilizzabili da qualsiasi app.", "ru": "На этом сайте собраны все официальные места остановки кемперов и места, где можно сбросить серую и черную воду. Вы можете добавить подробную информацию о предоставляемых услугах и их стоимости. Добавлять фотографии и отзывы. Это веб-сайт и веб-приложение. Данные хранятся в OpenStreetMap, поэтому они будут бесплатными всегда и могут быть повторно использованы любым приложением.", "ja": "このWebサイトでは、すべてのキャンピングカーの公式停車場所と、汚水を捨てることができる場所を収集します。提供されるサービスとコストに関する詳細を追加できます。写真とレビューを追加します。これはウェブサイトとウェブアプリです。データはOpenStreetMapに保存されるので、永遠に無料で、どんなアプリからでも再利用できます。", - "zh_Hant": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。這是網站與網路 app,資料則是存在開放街圖,因此會永遠免費,而且可以被所有 app 再利用。", + "zh_Hant": "這個網站收集所有官方露營地點,以及那邊能排放廢水。你可以加上詳細的服務項目與價格,加上圖片以及評價。", "nl": "Deze website verzamelt en toont alle officiële plaatsen waar een camper mag overnachten en afvalwater kan lozen. Ook jij kan extra gegevens toevoegen, zoals welke services er geboden worden en hoeveel dit kot, ook afbeeldingen en reviews kan je toevoegen. De data wordt op OpenStreetMap opgeslagen en is dus altijd gratis te hergebruiken, ook door andere applicaties.", "fr": "Ce site collecte les zones de camping officielles ainsi que les aires de vidange. Il est possible d’ajouter des détails à propos des services proposés ainsi que leurs coûts. Ajoutez vos images et avis. C’est un site et une application. Les données sont stockées sur OpenStreetMap, elles seront toujours gratuites et peuvent être réutilisées par n’importe quelle application.", "de": "Eine Karte für offizielle Wohnmobilstellplätze und Orte zur Entsorgung von Schmutzwasser. Sie können Details über die angebotenen Dienstleistungen und die Kosten hinzufügen, oder Bilder und Bewertungen ergänzen.", diff --git a/assets/themes/grb/grb.json b/assets/themes/grb/grb.json index 16442efbf6..d7fb198dec 100644 --- a/assets/themes/grb/grb.json +++ b/assets/themes/grb/grb.json @@ -202,7 +202,8 @@ { "id": "grb-reference", "render": { - "en": "Has been imported from GRB, reference number is {source:geometry:ref}" + "en": "Has been imported from GRB, reference number is {source:geometry:ref}", + "de": "Wurde von GRB importiert, Referenznummer ist {source:geometry:ref}" }, "condition": "source:geometry:ref~*" }, diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index a27f0dd0de..477dc90917 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -2,15 +2,18 @@ "id": "mapcomplete-changes", "title": { "en": "Changes made with MapComplete", - "nl": "Wijzigingen gemaakt met MapComplete" + "nl": "Wijzigingen gemaakt met MapComplete", + "de": "Mit MapComplete erstellte Änderungen" }, "shortDescription": { - "en": "Shows changes made by MapComplete", - "nl": "Toon wijzigingen gemaakt met MapComplete" + "en": "Show changes made with MapComplete", + "nl": "Toon wijzigingen gemaakt met MapComplete", + "de": "Mit MapComplete erstellte Änderungen anzeigen" }, "description": { "en": "This maps shows all the changes made with MapComplete", - "nl": "Deze kaart toont alle wijzigingen die met MapComplete gemaakt werden" + "nl": "Deze kaart toont alle wijzigingen die met MapComplete gemaakt werden", + "de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen" }, "icon": "./assets/svg/logo.svg", "hideFromOverview": true, @@ -24,7 +27,8 @@ "id": "mapcomplete-changes", "name": { "en": "Changeset centers", - "nl": "Centerpunt van changeset" + "nl": "Centerpunt van changeset", + "de": "Zentrum der Änderungssätze" }, "minzoom": 0, "source": { @@ -35,44 +39,51 @@ }, "title": { "render": { - "en": "Changeset for {theme}" + "en": "Changeset for {theme}", + "de": "Änderungssatz für {theme}" } }, "description": { - "en": "Shows all MapComplete changes", - "nl": "Toon alle MapComplete wijzigingen" + "en": "Show all MapComplete changes", + "nl": "Toon alle MapComplete wijzigingen", + "de": "Alle MapComplete-Änderungen anzeigen" }, "tagRenderings": [ { "id": "show_changeset_id", "render": { - "en": "Changeset {id}" + "en": "Changeset {id}", + "de": "Änderungssatz {id}" } }, { "id": "contributor", "question": { - "en": "What contributor did make this change?", - "nl": "Welke bijdrager maakte deze wijziging?" + "en": "Which contributor made this change?", + "nl": "Welke bijdrager maakte deze wijziging?", + "de": "Welcher Mitwirkende hat diese Änderung vorgenommen?" }, "freeform": { "key": "user" }, "render": { "en": "Change made by {user}", - "nl": "Wijziging gemaakt door {user}" + "nl": "Wijziging gemaakt door {user}", + "de": "Änderung gemacht von {user}" } }, { "id": "theme-id", "question": { - "en": "What theme was used to make this change?" + "en": "What theme was used to make this change?", + "de": "Welches Thema wurde für diese Änderung verwendet?\"" }, "freeform": { "key": "theme" }, "render": { - "en": "Change with theme {theme}" + "en": "Change with theme {theme}", + "de": "Geändert mit Thema {theme}" } }, { @@ -82,22 +93,26 @@ }, "question": { "en": "What locale (language) was this change made in?", - "nl": "In welke locale (taal) werd deze wijziging gemaakt?" + "nl": "In welke locale (taal) werd deze wijziging gemaakt?", + "de": "In welcher Sprache wurde diese Änderung vorgenommen?" }, "render": { "en": "User locale is {locale}", - "nl": "De gebruikerstaal is {locale}" + "nl": "De gebruikerstaal is {locale}", + "de": "Usersprache ist {locale}" } }, { "id": "host", "render": { - "en": "Change with {host}", - "nl": "Wijziging gemaakt met {host}" + "en": "Change made with {host}", + "nl": "Wijziging gemaakt met {host}", + "de": "Änderung vorgenommen mit {host}" }, "question": { "en": "What host (website) was this change made with?", - "nl": "Met welke host (website) werd deze wijziging gemaakt?" + "nl": "Met welke host (website) werd deze wijziging gemaakt?", + "de": "Mit welchem Host / welcher Website wurde diese Änderung gemacht?" }, "freeform": { "key": "host" @@ -118,10 +133,12 @@ { "id": "version", "question": { - "en": "What version of MapComplete was used to make this change?" + "en": "What version of MapComplete was used to make this change?", + "de": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?" }, "render": { - "en": "Made with {editor}" + "en": "Made with {editor}", + "de": "Erstellt mit {editor}" }, "freeform": { "key": "editor" @@ -455,8 +472,9 @@ } ], "question": { - "en": "Themename contains {search}", - "nl": "Themenaam bevat {search}" + "en": "Theme name contains {search}", + "nl": "Themenaam bevat {search}", + "de": "Themenname enthält {search}" } } ] @@ -473,7 +491,8 @@ ], "question": { "en": "Made by contributor {search}", - "nl": "Gemaakt door bijdrager {search}" + "nl": "Gemaakt door bijdrager {search}", + "de": "Erstellt von {search}" } } ] @@ -490,7 +509,8 @@ ], "question": { "en": "Not made by contributor {search}", - "nl": "Niet gemaakt door bijdrager {search}" + "nl": "Niet gemaakt door bijdrager {search}", + "de": "Nicht erstellt von {search}" } } ] @@ -508,7 +528,8 @@ ], "question": { "en": "Made before {search}", - "nl": "Gemaakt voor {search}" + "nl": "Gemaakt voor {search}", + "de": "Erstellt vor {search}" } } ] @@ -526,7 +547,8 @@ ], "question": { "en": "Made after {search}", - "nl": "Gemaakt na {search}" + "nl": "Gemaakt na {search}", + "de": "Erstellt nach {search}" } } ] @@ -543,7 +565,8 @@ ], "question": { "en": "User language (iso-code) {search}", - "nl": "De taal van de bijdrager is {search}" + "nl": "De taal van de bijdrager is {search}", + "de": "Benutzersprache (ISO-Code) {search}" } } ] @@ -560,7 +583,8 @@ ], "question": { "en": "Made with host {search}", - "nl": "Gemaakt met host {search}" + "nl": "Gemaakt met host {search}", + "de": "Erstellt mit Host {search}" } } ] @@ -572,7 +596,8 @@ "osmTags": "add-image>0", "question": { "en": "Changeset added at least one image", - "nl": "Changeset bevat minstens één afbeelding" + "nl": "Changeset bevat minstens één afbeelding", + "de": "Changeset fügte mindestens ein Bild hinzu" } } ] @@ -587,7 +612,8 @@ { "id": "link_to_more", "render": { - "en": "More statistics can be found here" + "en": "More statistics can be found here", + "de": "Mehr Statistiken gibt es hier" } }, { diff --git a/assets/themes/maproulette/maproulette.json b/assets/themes/maproulette/maproulette.json index 4d8d80b387..0c27f2396b 100644 --- a/assets/themes/maproulette/maproulette.json +++ b/assets/themes/maproulette/maproulette.json @@ -9,7 +9,8 @@ "pa_PK": "میپ‌رولیٹ دے کم", "nl": "MapRoulette taken", "es": "Tareas de MapRoulette", - "cs": "Úkoly MapRoulette" + "cs": "Úkoly MapRoulette", + "zh_Hant": "MapRoulette 任務" }, "description": { "en": "Theme showing MapRoulette tasks, allowing you to search, filter and fix them.", diff --git a/assets/themes/maxspeed/maxspeed.json b/assets/themes/maxspeed/maxspeed.json index a64cf9ee19..dd289fd63a 100644 --- a/assets/themes/maxspeed/maxspeed.json +++ b/assets/themes/maxspeed/maxspeed.json @@ -10,7 +10,8 @@ "nl": "Maximale snelheden", "pa_PK": "حد رفتار", "cs": "Maximální rychlost", - "ru": "Ограничения скорости" + "ru": "Ограничения скорости", + "zh_Hant": "最高速限" }, "shortDescription": { "en": "This map shows the legally allowed maximum speed on every road.", @@ -20,7 +21,8 @@ "da": "Dette kort viser den lovligt tilladte maksimale hastighed på hver vej.", "cs": "Tato mapa zobrazuje zákonem povolenou maximální rychlost na každé silnici.", "es": "Este mapa muestra la velocidad máxima permitida legalmente en cada carretera.", - "ca": "Aquest mapa mostra la velocitat màxima permesa legalment a cada carretera." + "ca": "Aquest mapa mostra la velocitat màxima permesa legalment a cada carretera.", + "zh_Hant": "這份地圖顯示每一條道路的法定允許的最高速限。" }, "description": { "en": "This map shows the legally allowed maximum speed on every road. If a maxspeed is missing or wrong, you can correct it here.", @@ -30,7 +32,8 @@ "nl": "Deze kaart toont de maximum toegestane snelheid voor elke weg. Als er een maximumsnelheid mist of niet klopt, kan je hem hier aanpassen.", "cs": "Tato mapa zobrazuje zákonem povolenou maximální rychlost na každé silnici. Pokud maximální rychlost chybí nebo je nesprávná, můžete ji zde opravit.", "es": "Este mapa muestra la velocidad máxima legalmente permitida en cada carretera. Si falta una velocidad máxima o es incorrecta, puedes corregirla aquí.", - "ca": "Aquest mapa mostra la velocitat màxima permesa legalment a cada carretera. Si falta una velocitat màxima o és incorrecta, podeu corregir-la aquí." + "ca": "Aquest mapa mostra la velocitat màxima permesa legalment a cada carretera. Si falta una velocitat màxima o és incorrecta, podeu corregir-la aquí.", + "zh_Hant": "這份地圖顯示每一條道路的法定允許的最高速限,如果有缺漏的最高速限或是標示錯誤,你可以在這邊更正資訊。" }, "icon": "./assets/themes/maxspeed/maxspeed_logo.svg", "startLat": 0, diff --git a/assets/themes/nature/nature.json b/assets/themes/nature/nature.json index fd4582ce7e..4801874914 100644 --- a/assets/themes/nature/nature.json +++ b/assets/themes/nature/nature.json @@ -9,7 +9,8 @@ "da": "Ud i naturen", "nb_NO": "Inn i naturen", "cs": "Do přírody", - "es": "En la naturaleza" + "es": "En la naturaleza", + "zh_Hant": "投入自然懷抱" }, "shortDescription": { "en": "A map for nature lovers, with interesting POI's", @@ -19,7 +20,8 @@ "fr": "Une carte pour les amoureux de la nature", "da": "Et kort for naturelskere med interessante POI'er", "cs": "Mapa pro milovníky přírody se zajímavými body zájmu", - "ca": "Un mapa per als amants de la natura, amb PDI interessants" + "ca": "Un mapa per als amants de la natura, amb PDI interessants", + "zh_Hant": "為了自然愛好者,以及有趣的興趣點的地圖" }, "description": { "en": "On this map, one can find interesting information for tourists and nature lovers.", @@ -29,7 +31,8 @@ "fr": "Retrouvez sur cette carte des informations pour les touristes et les amoureux de la nature, telles que ", "da": "På dette kort kan man finde interessant information for turister og naturelskere, som f.eks ", "cs": "Na této mapě najdete zajímavé informace pro turisty a milovníky přírody.", - "ca": "En aquest mapa es pot trobar informació interessant per a turistes i amants de la natura." + "ca": "En aquest mapa es pot trobar informació interessant per a turistes i amants de la natura.", + "zh_Hant": "在這份地圖,你可以找到觀光客與自然愛好者感興趣的資訊..." }, "icon": "./assets/themes/nature/logo.svg", "startLat": 51.20875, diff --git a/assets/themes/notes/notes.json b/assets/themes/notes/notes.json index a5c156e719..17f476cea0 100644 --- a/assets/themes/notes/notes.json +++ b/assets/themes/notes/notes.json @@ -13,7 +13,8 @@ "nb_NO": "Notater på OpenStreetMap", "fr": "Notes sur OpenStreetMap", "da": "Noter på OpenStreetMap", - "cs": "Poznámky k OpenStreetMap" + "cs": "Poznámky k OpenStreetMap", + "zh_Hant": "開放街圖上的註解" }, "description": { "en": "A note is a pin on the map with some text to indicate something wrong.

Make sure to checkout the filter view to search for users and text.", @@ -24,7 +25,8 @@ "fr": "Une note est une épingle sur la carte avec du text pour indiquer une erreur.

Assurez-vous d’utiliser le filtre pour chercher des utilisateurs and du texte.", "da": "En note er en nål på kortet med noget tekst, der indikerer, at noget er forkert.

Sørg for at tjekke filtervisningen for at søge efter brugere og tekst .", "cs": "Poznámka je špendlík na mapě s textem, jež označuje, že něco není v pořádku.

Nezapomeňte si prohlédnout zobrazení filtru pro vyhledávání uživatelů a textu.", - "ca": "Una nota és un marcador al mapa amb un text per indicar alguna cosa incorrecta.

Assegureu-vos de revisar la visualització de filtres per cercar usuaris i text." + "ca": "Una nota és un marcador al mapa amb un text per indicar alguna cosa incorrecta.

Assegureu-vos de revisar la visualització de filtres per cercar usuaris i text.", + "zh_Hant": "註解會散佈在地圖上並且有一些文字說明,來顯示那邊有錯誤。

請確認用過濾檢視來搜尋使用者或是文字。" }, "icon": "./assets/themes/notes/logo.svg", "clustering": false, diff --git a/assets/themes/pets/pets.json b/assets/themes/pets/pets.json index 1a793ababa..e671edd9d9 100644 --- a/assets/themes/pets/pets.json +++ b/assets/themes/pets/pets.json @@ -8,7 +8,8 @@ "fr": "Vétérinaires, parcs à chiens et autres endroits pour chiens", "ca": "Veterinaris, parcs canins i altres instal·lacions per a mascotes", "es": "Veterinarios, parques para perros y otros servicios para mascotas", - "cs": "Veterináři, psí parky a další služby pro domácí zvířata" + "cs": "Veterináři, psí parky a další služby pro domácí zvířata", + "zh_Hant": "獸醫院、寵物公園以及其他寵物設施" }, "description": { "en": "On this map, you'll find various interesting places for you pets: veterinarians, dog parks, pet shops, dog-friendly restaurants, ...", @@ -39,7 +40,8 @@ "fr": "Restaurants acceptant les chiens", "ca": "Restaurants que accepten gossos", "es": "Restaurantes que admiten perros", - "cs": "Restaurace vhodné pro vstup se psy" + "cs": "Restaurace vhodné pro vstup se psy", + "zh_Hant": "寵物友善餐廳" }, "mapRendering": [ { @@ -88,7 +90,8 @@ "ca": "Botigues amigues dels gossos", "pa_PK": "کُتیاں دی اِجازت دیاں دکاناں", "es": "Tiendas aptas para perros", - "cs": "Obchody vhodné pro vstup se psy" + "cs": "Obchody vhodné pro vstup se psy", + "zh_Hant": "寵物友善商家" }, "title": { "render": { @@ -101,7 +104,8 @@ "ca": "Botigues amigues dels gossos", "pa_PK": "کُتیاں دی اِجازت دیاں دکاناں", "es": "Tiendas aptas para perros", - "cs": "Obchody vhodné pro vstup se psy" + "cs": "Obchody vhodné pro vstup se psy", + "zh_Hant": "寵物友善商家" }, "mappings": [ { @@ -197,7 +201,8 @@ "ca": "botiga amiga dels gossos", "pa_PK": "کُتیاں دی اِجازت دی دکان", "es": "Tienda adaptada para perros", - "cs": "obchod vhodný pro vstup se psem" + "cs": "obchod vhodný pro vstup se psem", + "zh_Hant": "寵物友善商家" }, "tags": [ "dog=yes", @@ -211,7 +216,8 @@ "fr": "Un magasin où vous pouvez amener votre chien presque partout", "ca": "Una botiga on pots dur al gos gairebé a tot arreu", "es": "Una tienda a la que se puede llevar un perro a casi todas partes", - "cs": "Obchod, ve kterém si můžete vzít psa téměř kamkoli" + "cs": "Obchod, ve kterém si můžete vzít psa téměř kamkoli", + "zh_Hant": "你幾乎可以攜帶寵物到處去的商店" } } ], diff --git a/assets/themes/postal_codes/postal_codes.json b/assets/themes/postal_codes/postal_codes.json index f68fba37e0..1b4152edb7 100644 --- a/assets/themes/postal_codes/postal_codes.json +++ b/assets/themes/postal_codes/postal_codes.json @@ -12,7 +12,8 @@ "fr": "Codes postaux", "da": "Postnumre", "pa_PK": "ڈاک کوڈ", - "cs": "Poštovní směrovací čísla" + "cs": "Poštovní směrovací čísla", + "zh_Hant": "郵遞區號" }, "shortDescription": { "en": "Postal codes", @@ -26,7 +27,8 @@ "fr": "Codes postaux", "da": "Postnumre", "pa_PK": "ڈاک کوڈ", - "cs": "Poštovní směrovací čísla" + "cs": "Poštovní směrovací čísla", + "zh_Hant": "郵遞區號" }, "description": { "en": "Postal codes", @@ -40,7 +42,8 @@ "da": "Postnumre", "nb_NO": "Postnummer", "pa_PK": "ڈاک کوڈ", - "cs": "Poštovní směrovací čísla" + "cs": "Poštovní směrovací čísla", + "zh_Hant": "郵遞區號" }, "icon": "./assets/themes/postal_codes/townhall.svg", "startLat": 0, @@ -65,7 +68,8 @@ "fr": "codes postaux", "da": "postnumre", "pa_PK": "ڈاک کوڈ", - "cs": "poštovní směrovací čísla" + "cs": "poštovní směrovací čísla", + "zh_Hant": "郵遞區號" }, "minzoom": 8, "title": { @@ -80,7 +84,8 @@ "fr": "Code postal {postal_code}", "da": "Postnummer {postal_code}", "ca": "Codi postal {postal_code}", - "cs": "Poštovní směrovací číslo {postal_code}" + "cs": "Poštovní směrovací číslo {postal_code}", + "zh_Hant": "郵遞區號 {postal_code}" } }, "description": {}, @@ -98,7 +103,8 @@ "nb_NO": "Postnummeret er {postal_code}", "da": "Postnummeret er {postal_code}", "ca": "El codi postal és {postal_code}", - "cs": "Poštovní směrovací číslo je {postal_code}" + "cs": "Poštovní směrovací číslo je {postal_code}", + "zh_Hant": "郵遞區號是 {postal_code}" } } ], @@ -163,7 +169,8 @@ "nb_NO": "rådhus", "da": "rådhuse", "es": "Municipios", - "cs": "radnice" + "cs": "radnice", + "zh_Hant": "城鎮" }, "minzoom": 12, "title": { @@ -178,7 +185,8 @@ "nb_NO": "{name}-rådhuset", "ca": "Ajuntament de {name}", "es": "Municipio {name}", - "cs": "Radnice {name}" + "cs": "Radnice {name}", + "zh_Hant": "城鎮 {name}" } }, "calculatedTags": [ diff --git a/assets/themes/rainbow_crossings/rainbow_crossings.json b/assets/themes/rainbow_crossings/rainbow_crossings.json index 46b4810b6f..689c29df95 100644 --- a/assets/themes/rainbow_crossings/rainbow_crossings.json +++ b/assets/themes/rainbow_crossings/rainbow_crossings.json @@ -9,7 +9,8 @@ "ru": "Радужные пешеходные переходы", "ca": "Pasos de vianants amb l'arc de Sant Martí", "es": "Pasos de peatones arco iris", - "cs": "Přechody s duhovými barvami" + "cs": "Přechody s duhovými barvami", + "zh_Hant": "彩虹人行穿越道" }, "description": { "en": "On this map, rainbow-painted pedestrian crossings are shown and can be easily added", diff --git a/assets/themes/shops/shops.json b/assets/themes/shops/shops.json index b24954c4d4..1d7b4a8520 100644 --- a/assets/themes/shops/shops.json +++ b/assets/themes/shops/shops.json @@ -4,7 +4,7 @@ "en": "Shops", "fr": "Carte des magasins", "ja": "オープン ショップ マップ", - "zh_Hant": "開放商店地圖", + "zh_Hant": "商店", "ru": "Открытая карта магазинов", "de": "Geschäfte", "it": "Mappa dei negozi", @@ -27,7 +27,8 @@ "nl": "Een bewerkbare kaart met simpele informatie over winkels", "da": "Et redigerbart kort med grundlæggende butiksoplysninger", "ca": "Un mapa editable amb informació bàsica sobre botigues", - "cs": "Upravitelná mapa se základními informacemi o obchodech" + "cs": "Upravitelná mapa se základními informacemi o obchodech", + "zh_Hant": "有基本商家資訊的可編輯性的地圖" }, "description": { "en": "On this map, one can mark basic information about shops, add opening hours and phone numbers", diff --git a/assets/themes/sidewalks/sidewalks.json b/assets/themes/sidewalks/sidewalks.json index 16bc1b8cae..ed0444a3b8 100644 --- a/assets/themes/sidewalks/sidewalks.json +++ b/assets/themes/sidewalks/sidewalks.json @@ -12,7 +12,8 @@ "it": "Marciapiede", "da": "Fortove", "pa_PK": "فُٹ‌پاتھ", - "cs": "Chodníky" + "cs": "Chodníky", + "zh_Hant": "人行道" }, "shortDescription": { "en": "Sidewalk mapping", @@ -37,7 +38,8 @@ "nb_NO": "Eksperimentelt tema", "da": "Eksperimentelt tema", "pa_PK": "آزمائش تھیم", - "cs": "Experimentální téma" + "cs": "Experimentální téma", + "zh_Hant": "實驗性的主題" }, "icon": "./assets/svg/bug.svg", "startLat": 0, @@ -60,7 +62,8 @@ "it": "Marciapiedi", "da": "Fortove", "pa_PK": "فُٹ‌پاتھ", - "cs": "Chodníky" + "cs": "Chodníky", + "zh_Hant": "人行道" }, "minzoom": 12, "source": { @@ -101,7 +104,8 @@ "fr": "Calque montrant les trottoirs", "da": "Lag, der viser fortove på motorveje", "ca": "Una capa que mostra les voreres de les vies", - "cs": "Vrstva zobrazující chodníky silnic" + "cs": "Vrstva zobrazující chodníky silnic", + "zh_Hant": "顯示道路的人行穿越道的圖層" }, "tagRenderings": [ { diff --git a/assets/themes/sports/sports.json b/assets/themes/sports/sports.json index 56a6e52be8..2c716fb872 100644 --- a/assets/themes/sports/sports.json +++ b/assets/themes/sports/sports.json @@ -8,7 +8,8 @@ "fr": "Sports", "ca": "Esports", "es": "Deportes", - "cs": "Sport" + "cs": "Sport", + "zh_Hant": "運動" }, "shortDescription": { "en": "Map showing sport facilities.", @@ -17,7 +18,8 @@ "fr": "Carte des équipements sportifs.", "ca": "Mapa amb instal·lacions esportives.", "es": "Mapa con instalaciones deportivas.", - "cs": "Mapa se sportovními zařízeními." + "cs": "Mapa se sportovními zařízeními.", + "zh_Hant": "顯示運動設施的地圖。" }, "description": { "en": "All about sports, find sport pitches, fitness centres and more.", @@ -58,7 +60,8 @@ "de": "ein Sportgeschäft", "ca": "una tenda d'esports", "es": "una tienda de deportes", - "cs": "sportovní obchod" + "cs": "sportovní obchod", + "zh_Hant": "運動用品店" }, "description": { "en": "Add a new shop selling sports goods.", diff --git a/assets/themes/stations/stations.json b/assets/themes/stations/stations.json index afeff3bc7f..6cba6f2517 100644 --- a/assets/themes/stations/stations.json +++ b/assets/themes/stations/stations.json @@ -8,7 +8,8 @@ "fr": "Gares ferroviaires", "ca": "Estacions de tren", "es": "Estaciones de tren", - "cs": "Vlaková nádraží" + "cs": "Vlaková nádraží", + "zh_Hant": "火車站" }, "description": { "en": "View, edit and add details to a train station", @@ -88,7 +89,8 @@ "fr": "Couche montrant les gares", "ca": "Capa que mostra les estacions de tren", "es": "Capa que muestra las estaciones de tren", - "cs": "Vrstva zobrazující vlaková nádraží" + "cs": "Vrstva zobrazující vlaková nádraží", + "zh_Hant": "顯示火車站的圖層" }, "mapRendering": [ { @@ -281,7 +283,8 @@ "fr": "Tableau des départs", "ca": "Tauler de sortides", "es": "Tablero de salidas", - "cs": "Odjezdová tabule" + "cs": "Odjezdová tabule", + "zh_Hant": "時刻表" } }, "minzoom": 19, @@ -305,7 +308,8 @@ "fr": "De quel type de panneau de départs s'agit-il ?", "ca": "Quin tipus de tauler de sortides és aquest?", "es": "¿Qué tipo de tablero de salidas es éste?", - "cs": "Co je to za odjezdovou tabuli?" + "cs": "Co je to za odjezdovou tabuli?", + "zh_Hant": "這是那種類型的時刻表?" }, "mappings": [ { @@ -342,7 +346,8 @@ "fr": "Tableau des départs papier", "ca": "Aquest és un horari en paper", "es": "Este es un horario en papel", - "cs": "Jedná se o papírový rozvrh" + "cs": "Jedná se o papírový rozvrh", + "zh_Hant": "這份是紙本時刻表" } }, { @@ -372,7 +377,8 @@ "fr": "un panneaux des départs", "ca": "un tauler de sortides", "es": "un tablero de salidas", - "cs": "odjezdová tabule" + "cs": "odjezdová tabule", + "zh_Hant": "時刻表" }, "description": { "en": "Add a board showing departures, either electronic or paper", diff --git a/assets/themes/toilets/toilets.json b/assets/themes/toilets/toilets.json index 65419cb2c9..f5d42057b5 100644 --- a/assets/themes/toilets/toilets.json +++ b/assets/themes/toilets/toilets.json @@ -7,7 +7,7 @@ "nl": "Publieke Toiletten", "ru": "Открытая карта туалетов", "ja": "オープントイレマップ", - "zh_Hant": "開放廁所地圖", + "zh_Hant": "公共廁所", "pl": "Mapa otwartych toalet", "it": "Mappa libera delle toilet", "nb_NO": "Åpent toalettkart", diff --git a/assets/themes/transit/transit.json b/assets/themes/transit/transit.json index 595ddd25fa..165cfd1d43 100644 --- a/assets/themes/transit/transit.json +++ b/assets/themes/transit/transit.json @@ -10,7 +10,8 @@ "pa_PK": "بس روٹ", "nl": "Busroutes", "es": "Rutas de autobús", - "cs": "Autobusové linky" + "cs": "Autobusové linky", + "zh_Hant": "公車路線" }, "description": { "en": "Plan your trip with the help of the public transport system.", @@ -21,7 +22,8 @@ "nb_NO": "Planlegg turen din med offentlig transport", "ca": "Planifica el teu viatge amb l'ajuda del sistema públic de transport.", "es": "Planifique su viaje con ayuda del sistema de transporte público.", - "cs": "Naplánujte si cestu pomocí systému veřejné dopravy." + "cs": "Naplánujte si cestu pomocí systému veřejné dopravy.", + "zh_Hant": "藉由大眾運輸系統來計畫你的旅程。" }, "icon": "./assets/layers/transit_stops/bus_stop.svg", "startZoom": 20, diff --git a/assets/themes/walls_and_buildings/walls_and_buildings.json b/assets/themes/walls_and_buildings/walls_and_buildings.json index c177e7ab99..d0b9c21d89 100644 --- a/assets/themes/walls_and_buildings/walls_and_buildings.json +++ b/assets/themes/walls_and_buildings/walls_and_buildings.json @@ -9,7 +9,8 @@ "nl": "Muren en gebouwen", "ca": "Murs i edificis", "es": "Muros y edificios", - "cs": "Stěny a budovy" + "cs": "Stěny a budovy", + "zh_Hant": "牆壁與建築" }, "description": { "en": "Special builtin layer providing all walls and buildings. This layer is useful in presets for objects which can be placed against walls (e.g. AEDs, postboxes, entrances, addresses, surveillance cameras, …). This layer is invisible by default and not toggleable by the user.", @@ -19,7 +20,8 @@ "nl": "Speciale ingebouwde laag voor alle muren en gebouwen. Deze laag is nuttig in voorkeuzen voor objecten die tegen muren geplaatst kunnen worden (bv. AEDs, brievenbussen, ingangen, adressen, beveiligingscamera's,…). Deze laag is standaard onzichtbaar en niet in te schakelen door de gebruiker.", "ca": "Capa construïda especial que proporciona totes les parets i edificis. Aquesta capa és útil als predefinits per a objectes que es poden col·locar a les parets (p. ex. DEA, bústies de correus, entrades, adreces, càmeres de vigilància, ...). Aquesta capa és invisible per defecte i no es pot activar per l'usuari.", "es": "Capa especial incorporada que proporciona todas las paredes y edificios. Esta capa es útil en los preajustes para objetos que pueden colocarse contra las paredes (por ejemplo: AEDs, buzones de correos, entradas, direcciones, cámaras de vigilancia, ...). Esta capa es invisible por defecto y no puede ser activada por el usuario.", - "cs": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat." + "cs": "Speciální zabudovaná vrstva poskytující všechny stěny a budovy. Tato vrstva je užitečná v předvolbách pro objekty, které lze umístit ke stěnám (např. AED, poštovní schránky, vchody, adresy, bezpečnostní kamery, …). Tato vrstva je ve výchozím nastavení neviditelná a uživatel ji nemůže přepínat.", + "zh_Hant": "特殊的內建圖層顯示所有牆壁與建築。這個圖層對於規畫要靠牆的東西 (例如 AED、郵筒、入口、地址、監視器等) 相當實用。這個圖層預設顯示而且無法由使用者開關。" }, "icon": "./assets/layers/walls_and_buildings/walls_and_buildings.png", "startLat": 50.8465573, diff --git a/assets/themes/waste/waste.json b/assets/themes/waste/waste.json index 174d5158ff..ca29f00e9a 100644 --- a/assets/themes/waste/waste.json +++ b/assets/themes/waste/waste.json @@ -11,7 +11,8 @@ "da": "Affald", "es": "Basura y reciclaje", "ru": "Мусор", - "cs": "Odpad" + "cs": "Odpad", + "zh_Hant": "廢棄物" }, "description": { "en": "Map showing waste baskets and recycling facilities.", @@ -22,7 +23,8 @@ "ca": "Mapa que mostra papereres i infraestructures de reciclatge.", "da": "Kort over affaldskurve og genbrugsanlæg.", "es": "Mapa que muestra las papeleras y las instalaciones de reciclaje.", - "cs": "Mapa zobrazující koše na odpadky a recyklační zařízení." + "cs": "Mapa zobrazující koše na odpadky a recyklační zařízení.", + "zh_Hant": "顯示垃圾筒與回收設施的地圖。" }, "icon": "./assets/layers/recycling/recycling-14.svg", "startZoom": 19, diff --git a/langs/layers/de.json b/langs/layers/de.json index 203fda25d1..ace96fb338 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -35,16 +35,6 @@ "1": { "title": "eine freistehende Posterbox" }, - "10": { - "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", - "title": "ein Schild" - }, - "11": { - "title": "eine Skulptur" - }, - "12": { - "title": "eine Wandmalerei" - }, "2": { "title": "eine wandmontierte Posterbox" }, @@ -71,6 +61,16 @@ }, "9": { "title": "ein Totem" + }, + "10": { + "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", + "title": "ein Schild" + }, + "11": { + "title": "eine Skulptur" + }, + "12": { + "title": "eine Wandmalerei" } }, "tagRenderings": { @@ -165,9 +165,6 @@ "1": { "then": "Dies ist ein Brett" }, - "10": { - "then": "Dies ist eine Wandmalerei" - }, "2": { "then": "Dies ist eine Litfaßsäule" }, @@ -191,6 +188,9 @@ }, "9": { "then": "Dies ist ein Totem" + }, + "10": { + "then": "Dies ist eine Wandmalerei" } }, "question": "Welche Art von Werbung ist das?", @@ -205,9 +205,6 @@ "1": { "then": "Brett" }, - "10": { - "then": "Wandmalerei" - }, "2": { "then": "Posterbox" }, @@ -231,6 +228,9 @@ }, "9": { "then": "Totem" + }, + "10": { + "then": "Wandmalerei" } } } @@ -312,15 +312,6 @@ "1": { "then": "Wandbild" }, - "10": { - "then": "Azulejo (spanische dekorative Fliesenarbeit)" - }, - "11": { - "then": "Fliesenarbeit" - }, - "12": { - "then": "Holzschnitzerei" - }, "2": { "then": "Malerei" }, @@ -344,6 +335,15 @@ }, "9": { "then": "Relief" + }, + "10": { + "then": "Azulejo (spanische dekorative Fliesenarbeit)" + }, + "11": { + "then": "Fliesenarbeit" + }, + "12": { + "then": "Holzschnitzerei" } }, "question": "Um welche Art Kunstwerk handelt es sich?", @@ -1830,27 +1830,6 @@ "1": { "question": "Verfügt über einen
Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
" }, - "10": { - "question": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel" - }, - "11": { - "question": "Hat einen
Tesla Supercharger CCS (Typ 2 CSS vonTesla)
Anschluss" - }, - "12": { - "question": "Hat einen
Tesla Supercharger (Destination)
Anschluss" - }, - "13": { - "question": "Hat einen
Tesla Supercharger (Destination) (Typ 2 von Tesla)
Anschluss mit Kabel" - }, - "14": { - "question": "Hat einen
USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
" - }, - "15": { - "question": "Hat einen
Bosch Active Connect Anschluss mit 3 Pins
und Kabel" - }, - "16": { - "question": "Hat einen
Bosch Active Connect Anschluss mit 5 Pins
und Kabel" - }, "2": { "question": "Verfügt über einen
europäischen Netzstecker mit Erdungsstift (CEE7/4 Typ E)
Anschluss" }, @@ -1874,6 +1853,27 @@ }, "9": { "question": "Hat einen
Typ 2 CCS (Mennekes)
Anschluss" + }, + "10": { + "question": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel" + }, + "11": { + "question": "Hat einen
Tesla Supercharger CCS (Typ 2 CSS vonTesla)
Anschluss" + }, + "12": { + "question": "Hat einen
Tesla Supercharger (Destination)
Anschluss" + }, + "13": { + "question": "Hat einen
Tesla Supercharger (Destination) (Typ 2 von Tesla)
Anschluss mit Kabel" + }, + "14": { + "question": "Hat einen
USB-Anschluss zum Aufladen von Telefonen und kleinen Elektrogeräten
" + }, + "15": { + "question": "Hat einen
Bosch Active Connect Anschluss mit 3 Pins
und Kabel" + }, + "16": { + "question": "Hat einen
Bosch Active Connect Anschluss mit 5 Pins
und Kabel" } } } @@ -1929,6 +1929,30 @@ "1": { "then": "Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)" }, + "2": { + "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" + }, + "3": { + "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" + }, + "4": { + "then": "Chademo-Anschluss" + }, + "5": { + "then": "Chademo-Anschluss" + }, + "6": { + "then": "Typ 1 mit Kabel (J1772)" + }, + "7": { + "then": "Typ 1 mit Kabel (J1772)" + }, + "8": { + "then": "Typ 1 ohne Kabel (J1772)" + }, + "9": { + "then": " Typ 1 ohne Kabel (J1772)" + }, "10": { "then": "Typ 1 CCS (Typ 1 Combo)" }, @@ -1959,9 +1983,6 @@ "19": { "then": "Typ 2 mit Kabel (mennekes)" }, - "2": { - "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" - }, "20": { "then": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)" }, @@ -1992,32 +2013,11 @@ "29": { "then": " Bosch Active Connect mit 3 Pins und Kabel" }, - "3": { - "then": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" - }, "30": { "then": "Bosch Active Connect mit 5 Pins und Kabel" }, "31": { "then": " Bosch Active Connect mit 5 Pins und Kabel" - }, - "4": { - "then": "Chademo-Anschluss" - }, - "5": { - "then": "Chademo-Anschluss" - }, - "6": { - "then": "Typ 1 mit Kabel (J1772)" - }, - "7": { - "then": "Typ 1 mit Kabel (J1772)" - }, - "8": { - "then": "Typ 1 ohne Kabel (J1772)" - }, - "9": { - "then": " Typ 1 ohne Kabel (J1772)" } }, "question": "Welche Ladeanschlüsse gibt es hier?" @@ -3555,15 +3555,6 @@ "1": { "then": "Dieser Radweg hat einen festen Belag" }, - "10": { - "then": "Dieser Radweg besteht aus feinem Schotter" - }, - "11": { - "then": "Der Radweg ist aus Kies" - }, - "12": { - "then": "Dieser Radweg besteht aus Rohboden" - }, "2": { "then": "Der Radweg ist aus Asphalt" }, @@ -3587,6 +3578,15 @@ }, "9": { "then": "Der Radweg ist aus Schotter" + }, + "10": { + "then": "Dieser Radweg besteht aus feinem Schotter" + }, + "11": { + "then": "Der Radweg ist aus Kies" + }, + "12": { + "then": "Dieser Radweg besteht aus Rohboden" } }, "question": "Was ist der Belag dieses Radwegs?", @@ -3635,15 +3635,6 @@ "1": { "then": "Dieser Radweg hat einen festen Belag" }, - "10": { - "then": "Dieser Radweg besteht aus feinem Schotter" - }, - "11": { - "then": "Der Radweg ist aus Kies" - }, - "12": { - "then": "Dieser Radweg besteht aus Rohboden" - }, "2": { "then": "Der Radweg ist aus Asphalt" }, @@ -3667,6 +3658,15 @@ }, "9": { "then": "Der Radweg ist aus Schotter" + }, + "10": { + "then": "Dieser Radweg besteht aus feinem Schotter" + }, + "11": { + "then": "Der Radweg ist aus Kies" + }, + "12": { + "then": "Dieser Radweg besteht aus Rohboden" } }, "question": "Was ist der Belag dieser Straße?", @@ -4599,6 +4599,30 @@ "1": { "then": "Die Fitness-Station hat ein Schild mit Anweisungen für eine bestimmte Übung." }, + "2": { + "then": "Die Fitness-Station hat eine Einrichtung für Sit-ups." + }, + "3": { + "then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen." + }, + "4": { + "then": "Die Fitness-Station hat Stangen zum Dehnen." + }, + "5": { + "then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)." + }, + "6": { + "then": "Die Fitness-Station hat Ringe für Gymnastikübungen." + }, + "7": { + "then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)." + }, + "8": { + "then": "Die Fitness-Station hat eine Sprossenwand zum Klettern." + }, + "9": { + "then": "Die Fitness-Station hat Pfosten für Slalomübungen." + }, "10": { "then": "Die Fitness-Station hat Trittsteine." }, @@ -4629,9 +4653,6 @@ "19": { "then": "Die Fitness-Station hat Kampfseile (battle ropes)." }, - "2": { - "then": "Die Fitness-Station hat eine Einrichtung für Sit-ups." - }, "20": { "then": "Die Fitness-Station hat ein Fahrradergometer." }, @@ -4646,27 +4667,6 @@ }, "24": { "then": "Die Fitness-Station hat eine Slackline." - }, - "3": { - "then": "Die Fitness-Station hat eine Vorrichtung für Liegestütze. In der Regel eine oder mehrere niedrige Reckstangen." - }, - "4": { - "then": "Die Fitness-Station hat Stangen zum Dehnen." - }, - "5": { - "then": "Die Fitness-Station hat eine Vorrichtung für Rückenstrecker (Hyperextensions)." - }, - "6": { - "then": "Die Fitness-Station hat Ringe für Gymnastikübungen." - }, - "7": { - "then": "Die Fitness-Station hat eine horizontale Leiter (Monkey Bars)." - }, - "8": { - "then": "Die Fitness-Station hat eine Sprossenwand zum Klettern." - }, - "9": { - "then": "Die Fitness-Station hat Pfosten für Slalomübungen." } }, "question": "Welche Übungsgeräte gibt es an dieser Fitness-Station?" @@ -4773,21 +4773,6 @@ "1": { "then": "Dies ist eine Pommesbude" }, - "10": { - "then": "Hier werden chinesische Gerichte serviert" - }, - "11": { - "then": "Hier werden griechische Gerichte serviert" - }, - "12": { - "then": "Hier werden indische Gerichte serviert" - }, - "13": { - "then": "Hier werden türkische Gerichte serviert" - }, - "14": { - "then": "Hier werden thailändische Gerichte serviert" - }, "2": { "then": "Bietet vorwiegend Pastagerichte an" }, @@ -4811,6 +4796,21 @@ }, "9": { "then": "Hier werden französische Gerichte serviert" + }, + "10": { + "then": "Hier werden chinesische Gerichte serviert" + }, + "11": { + "then": "Hier werden griechische Gerichte serviert" + }, + "12": { + "then": "Hier werden indische Gerichte serviert" + }, + "13": { + "then": "Hier werden türkische Gerichte serviert" + }, + "14": { + "then": "Hier werden thailändische Gerichte serviert" } }, "question": "Was für Essen gibt es hier?", @@ -5975,19 +5975,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Alle Notizen" - }, - "1": { - "question": "Importnotizen ausblenden" - }, - "2": { - "question": "Nur Importnotizen anzeigen" - } - } - }, "2": { "options": { "0": { @@ -6043,6 +6030,19 @@ "question": "Nur offene Notizen anzeigen" } } + }, + "10": { + "options": { + "0": { + "question": "Alle Notizen" + }, + "1": { + "question": "Importnotizen ausblenden" + }, + "2": { + "question": "Nur Importnotizen anzeigen" + } + } } }, "name": "OpenStreetMap-Hinweise", @@ -6371,21 +6371,6 @@ "1": { "then": "Dies ist ein normaler Stellplatz." }, - "10": { - "then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist." - }, - "11": { - "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." - }, - "12": { - "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." - }, - "13": { - "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." - }, - "14": { - "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." - }, "2": { "then": "Dies ist ein Behindertenstellplatz." }, @@ -6409,6 +6394,21 @@ }, "9": { "then": "Dies ist ein Stellplatz, der für Motorräder reserviert ist." + }, + "10": { + "then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist." + }, + "11": { + "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." + }, + "12": { + "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." + }, + "13": { + "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." + }, + "14": { + "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." } }, "question": "Welche Art von Stellplatz ist dies?" @@ -7035,6 +7035,30 @@ "1": { "question": "Recycling von Batterien" }, + "2": { + "question": "Recycling von Getränkekartons" + }, + "3": { + "question": "Recycling von Dosen" + }, + "4": { + "question": "Recycling von Kleidung" + }, + "5": { + "question": "Recycling von Speiseöl" + }, + "6": { + "question": "Recycling von Motoröl" + }, + "7": { + "question": "Recycling von Leuchtstoffröhren" + }, + "8": { + "question": "Recycling von Grünabfällen" + }, + "9": { + "question": "Recycling von Glasflaschen" + }, "10": { "question": "Recycling von Glas" }, @@ -7065,35 +7089,11 @@ "19": { "question": "Recycling von Restabfällen" }, - "2": { - "question": "Recycling von Getränkekartons" - }, "20": { "question": "Recycling von Druckerpatronen" }, "21": { "question": "Recycling von Fahrrädern" - }, - "3": { - "question": "Recycling von Dosen" - }, - "4": { - "question": "Recycling von Kleidung" - }, - "5": { - "question": "Recycling von Speiseöl" - }, - "6": { - "question": "Recycling von Motoröl" - }, - "7": { - "question": "Recycling von Leuchtstoffröhren" - }, - "8": { - "question": "Recycling von Grünabfällen" - }, - "9": { - "question": "Recycling von Glasflaschen" } } }, @@ -7161,6 +7161,30 @@ "1": { "then": "Getränkekartons können hier recycelt werden" }, + "2": { + "then": "Dosen können hier recycelt werden" + }, + "3": { + "then": "Kleidung kann hier recycelt werden" + }, + "4": { + "then": "Speiseöl kann hier recycelt werden" + }, + "5": { + "then": "Motoröl kann hier recycelt werden" + }, + "6": { + "then": "Hier können Leuchtstoffröhren recycelt werden" + }, + "7": { + "then": "Grünabfälle können hier recycelt werden" + }, + "8": { + "then": "Bio-Abfall kann hier recycelt werden" + }, + "9": { + "then": "Glasflaschen können hier recycelt werden" + }, "10": { "then": "Glas kann hier recycelt werden" }, @@ -7191,9 +7215,6 @@ "19": { "then": "Schuhe können hier recycelt werden" }, - "2": { - "then": "Dosen können hier recycelt werden" - }, "20": { "then": "Elektrokleingeräte können hier recycelt werden" }, @@ -7208,27 +7229,6 @@ }, "24": { "then": "Fahrräder können hier recycelt werden" - }, - "3": { - "then": "Kleidung kann hier recycelt werden" - }, - "4": { - "then": "Speiseöl kann hier recycelt werden" - }, - "5": { - "then": "Motoröl kann hier recycelt werden" - }, - "6": { - "then": "Hier können Leuchtstoffröhren recycelt werden" - }, - "7": { - "then": "Grünabfälle können hier recycelt werden" - }, - "8": { - "then": "Bio-Abfall kann hier recycelt werden" - }, - "9": { - "then": "Glasflaschen können hier recycelt werden" } }, "question": "Was kann hier recycelt werden?" @@ -7813,12 +7813,6 @@ }, "question": "Hat die Treppe einen Handlauf?" }, - "multilevels": { - "override": { - "question": "Zwischen welchen Stockwerken befindet sich diese Treppe?", - "render": "Diese Treppe ist zwischen den Stockwerken {level}" - } - }, "ramp": { "mappings": { "0": { @@ -7945,12 +7939,6 @@ "1": { "then": "Diese Straßenlaterne verwendet LEDs" }, - "10": { - "then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)" - }, - "11": { - "then": "Diese Straßenlaterne wird mit Gas beleuchtet" - }, "2": { "then": "Diese Straßenlaterne verwendet Glühlampenlicht" }, @@ -7974,6 +7962,12 @@ }, "9": { "then": "Diese Straßenlaterne verwendet Niederdruck-Natriumdampflampen (einfarbig orange)" + }, + "10": { + "then": "Diese Straßenlaterne verwendet Hochdruck-Natriumdampflampen (orange mit weiß)" + }, + "11": { + "then": "Diese Straßenlaterne wird mit Gas beleuchtet" } }, "question": "Mit welcher Art von Beleuchtung arbeitet diese Straßenlaterne?" @@ -8232,18 +8226,6 @@ }, "render": "Dieser Fahrkartenentwerter ist Teil einer Zugangsbarriere vom Typ {barrier}" }, - "payment-options": { - "override": { - "mappings+": { - "0": { - "then": "Dieser Fahrkartenentwerter akzeptiert die OV-Chipkaart" - }, - "1": { - "then": "Dieser Ticketentwerter akzeptiert die OV-Chipkaart" - } - } - } - }, "validator-operator": { "freeform": { "placeholder": "Name des Betreibers" @@ -8461,11 +8443,6 @@ }, "name": "Toiletten in anderen Einrichtungen", "tagRenderings": { - "opening_hours": { - "override": { - "question": "Wann ist der Ort, an dem sich diese Toiletten befinden, geöffnet?" - } - }, "toilet-access": { "mappings": { "0": { @@ -9352,4 +9329,4 @@ } } } -} +} \ No newline at end of file diff --git a/langs/layers/en.json b/langs/layers/en.json index d82a0280cd..48da2604ef 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -35,16 +35,6 @@ "1": { "title": "a freestanding poster box" }, - "10": { - "description": "Used for advertising signs, neon signs, logos & institutional entrance signs", - "title": "a sign" - }, - "11": { - "title": "a sculpture" - }, - "12": { - "title": "a wall painting" - }, "2": { "title": "a poster box mounted on a wall" }, @@ -71,6 +61,16 @@ }, "9": { "title": "a totem" + }, + "10": { + "description": "Used for advertising signs, neon signs, logos & institutional entrance signs", + "title": "a sign" + }, + "11": { + "title": "a sculpture" + }, + "12": { + "title": "a wall painting" } }, "tagRenderings": { @@ -165,9 +165,6 @@ "1": { "then": "This is a board" }, - "10": { - "then": "This is a wall painting" - }, "2": { "then": "This is a column" }, @@ -191,6 +188,9 @@ }, "9": { "then": "This is a totem" + }, + "10": { + "then": "This is a wall painting" } }, "question": "Which type of advertising feature is this?", @@ -205,9 +205,6 @@ "1": { "then": "Board" }, - "10": { - "then": "Wall painting" - }, "2": { "then": "Poster Box" }, @@ -231,6 +228,9 @@ }, "9": { "then": "Totem" + }, + "10": { + "then": "Wall painting" } } } @@ -312,15 +312,6 @@ "1": { "then": "Mural" }, - "10": { - "then": "Azulejo (Spanish decorative tilework)" - }, - "11": { - "then": "Tilework" - }, - "12": { - "then": "Woodcarving" - }, "2": { "then": "Painting" }, @@ -344,6 +335,15 @@ }, "9": { "then": "Relief" + }, + "10": { + "then": "Azulejo (Spanish decorative tilework)" + }, + "11": { + "then": "Tilework" + }, + "12": { + "then": "Woodcarving" } }, "question": "What is the type of this artwork?", @@ -1830,27 +1830,6 @@ "1": { "question": "Has a
Schuko wall plug without ground pin (CEE7/4 type F)
connector" }, - "10": { - "question": "Has a
Type 2 with cable (mennekes)
connector" - }, - "11": { - "question": "Has a
Tesla Supercharger CCS (a branded type2_css)
connector" - }, - "12": { - "question": "Has a
Tesla Supercharger (destination)
connector" - }, - "13": { - "question": "Has a
Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla)
connector" - }, - "14": { - "question": "Has a
USB to charge phones and small electronics
connector" - }, - "15": { - "question": "Has a
Bosch Active Connect with 3 pins and cable
connector" - }, - "16": { - "question": "Has a
Bosch Active Connect with 5 pins and cable
connector" - }, "2": { "question": "Has a
European wall plug with ground pin (CEE7/4 type E)
connector" }, @@ -1874,6 +1853,27 @@ }, "9": { "question": "Has a
Type 2 CCS (mennekes)
connector" + }, + "10": { + "question": "Has a
Type 2 with cable (mennekes)
connector" + }, + "11": { + "question": "Has a
Tesla Supercharger CCS (a branded type2_css)
connector" + }, + "12": { + "question": "Has a
Tesla Supercharger (destination)
connector" + }, + "13": { + "question": "Has a
Tesla Supercharger (Destination) (A Type 2 with cable branded as tesla)
connector" + }, + "14": { + "question": "Has a
USB to charge phones and small electronics
connector" + }, + "15": { + "question": "Has a
Bosch Active Connect with 3 pins and cable
connector" + }, + "16": { + "question": "Has a
Bosch Active Connect with 5 pins and cable
connector" } } } @@ -1929,6 +1929,30 @@ "1": { "then": "Schuko wall plug without ground pin (CEE7/4 type F)" }, + "2": { + "then": "European wall plug with ground pin (CEE7/4 type E)" + }, + "3": { + "then": "European wall plug with ground pin (CEE7/4 type E)" + }, + "4": { + "then": "Chademo" + }, + "5": { + "then": "Chademo" + }, + "6": { + "then": "Type 1 with cable (J1772)" + }, + "7": { + "then": "Type 1 with cable (J1772)" + }, + "8": { + "then": "Type 1 without cable (J1772)" + }, + "9": { + "then": "Type 1 without cable (J1772)" + }, "10": { "then": "Type 1 CCS (aka Type 1 Combo)" }, @@ -1959,9 +1983,6 @@ "19": { "then": "Type 2 with cable (mennekes)" }, - "2": { - "then": "European wall plug with ground pin (CEE7/4 type E)" - }, "20": { "then": "Tesla Supercharger CCS (a branded type2_css)" }, @@ -1992,32 +2013,11 @@ "29": { "then": "Bosch Active Connect with 3 pins and cable" }, - "3": { - "then": "European wall plug with ground pin (CEE7/4 type E)" - }, "30": { "then": "Bosch Active Connect with 5 pins and cable" }, "31": { "then": "Bosch Active Connect with 5 pins and cable" - }, - "4": { - "then": "Chademo" - }, - "5": { - "then": "Chademo" - }, - "6": { - "then": "Type 1 with cable (J1772)" - }, - "7": { - "then": "Type 1 with cable (J1772)" - }, - "8": { - "then": "Type 1 without cable (J1772)" - }, - "9": { - "then": "Type 1 without cable (J1772)" } }, "question": "Which charging connections are available here?" @@ -3555,15 +3555,6 @@ "1": { "then": "This cycleway is paved" }, - "10": { - "then": "This cycleway is made of fine gravel" - }, - "11": { - "then": "This cycleway is made of pebblestone" - }, - "12": { - "then": "This cycleway is made from raw ground" - }, "2": { "then": "This cycleway is made of asphalt" }, @@ -3587,6 +3578,15 @@ }, "9": { "then": "This cycleway is made of gravel" + }, + "10": { + "then": "This cycleway is made of fine gravel" + }, + "11": { + "then": "This cycleway is made of pebblestone" + }, + "12": { + "then": "This cycleway is made from raw ground" } }, "question": "What is the surface of the cycleway made from?", @@ -3635,15 +3635,6 @@ "1": { "then": "This cycleway is paved" }, - "10": { - "then": "This cycleway is made of fine gravel" - }, - "11": { - "then": "This cycleway is made of pebblestone" - }, - "12": { - "then": "This cycleway is made from raw ground" - }, "2": { "then": "This cycleway is made of asphalt" }, @@ -3667,6 +3658,15 @@ }, "9": { "then": "This cycleway is made of gravel" + }, + "10": { + "then": "This cycleway is made of fine gravel" + }, + "11": { + "then": "This cycleway is made of pebblestone" + }, + "12": { + "then": "This cycleway is made from raw ground" } }, "question": "What is the surface of the street made from?", @@ -4599,6 +4599,30 @@ "1": { "then": "This fitness station has a sign with instructions for a specific exercise." }, + "2": { + "then": "This fitness station has a facility for sit-ups." + }, + "3": { + "then": "This fitness station has a facility for push-ups. Usually consists of one or more low horizontal bars." + }, + "4": { + "then": "This fitness station has bars for stretching." + }, + "5": { + "then": "This fitness station has a station for making hyperextensions." + }, + "6": { + "then": "This fitness station has rings for gymnastic exercises." + }, + "7": { + "then": "This fitness station has a horizontal ladder, also known as monkey bars." + }, + "8": { + "then": "This fitness station has wall bars to climb on." + }, + "9": { + "then": "This fitness station has posts for performing slalom exercises." + }, "10": { "then": "This fitness station has stepping stones." }, @@ -4629,9 +4653,6 @@ "19": { "then": "This fitness station has battling ropes." }, - "2": { - "then": "This fitness station has a facility for sit-ups." - }, "20": { "then": "This fitness station has a stationary bicycle." }, @@ -4646,27 +4667,6 @@ }, "24": { "then": "This fitness station has a slackline." - }, - "3": { - "then": "This fitness station has a facility for push-ups. Usually consists of one or more low horizontal bars." - }, - "4": { - "then": "This fitness station has bars for stretching." - }, - "5": { - "then": "This fitness station has a station for making hyperextensions." - }, - "6": { - "then": "This fitness station has rings for gymnastic exercises." - }, - "7": { - "then": "This fitness station has a horizontal ladder, also known as monkey bars." - }, - "8": { - "then": "This fitness station has wall bars to climb on." - }, - "9": { - "then": "This fitness station has posts for performing slalom exercises." } }, "question": "What kind of equipment does this fitness station have?" @@ -4773,21 +4773,6 @@ "1": { "then": "This is a friture" }, - "10": { - "then": "Chinese dishes are served here" - }, - "11": { - "then": "Greek dishes are served here" - }, - "12": { - "then": "Indian dishes are served here" - }, - "13": { - "then": "Turkish dishes are served here" - }, - "14": { - "then": "Thai dishes are served here" - }, "2": { "then": "Mainly serves pasta" }, @@ -4811,6 +4796,21 @@ }, "9": { "then": "French dishes are served here" + }, + "10": { + "then": "Chinese dishes are served here" + }, + "11": { + "then": "Greek dishes are served here" + }, + "12": { + "then": "Indian dishes are served here" + }, + "13": { + "then": "Turkish dishes are served here" + }, + "14": { + "then": "Thai dishes are served here" } }, "question": "Which food is served here?", @@ -5975,19 +5975,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "All Notes" - }, - "1": { - "question": "Hide import notes" - }, - "2": { - "question": "Show only import Notes" - } - } - }, "2": { "options": { "0": { @@ -6043,6 +6030,19 @@ "question": "Only show open notes" } } + }, + "10": { + "options": { + "0": { + "question": "All Notes" + }, + "1": { + "question": "Hide import notes" + }, + "2": { + "question": "Show only import Notes" + } + } } }, "name": "OpenStreetMap notes", @@ -6371,21 +6371,6 @@ "1": { "then": "This is a normal parking space." }, - "10": { - "then": "This is a parking space reserved for parents with children." - }, - "11": { - "then": "This is a parking space reserved for staff." - }, - "12": { - "then": "This is a parking space reserved for taxis." - }, - "13": { - "then": "This is a parking space reserved for vehicles towing a trailer." - }, - "14": { - "then": "This is a parking space reserved for car sharing." - }, "2": { "then": "This is a disabled parking space." }, @@ -6409,6 +6394,21 @@ }, "9": { "then": "This is parking space reserved for motorcycles." + }, + "10": { + "then": "This is a parking space reserved for parents with children." + }, + "11": { + "then": "This is a parking space reserved for staff." + }, + "12": { + "then": "This is a parking space reserved for taxis." + }, + "13": { + "then": "This is a parking space reserved for vehicles towing a trailer." + }, + "14": { + "then": "This is a parking space reserved for car sharing." } }, "question": "What kind of parking space is this?" @@ -7035,6 +7035,30 @@ "1": { "question": "Recycling of batteries" }, + "2": { + "question": "Recycling of beverage cartons" + }, + "3": { + "question": "Recycling of cans" + }, + "4": { + "question": "Recycling of clothes" + }, + "5": { + "question": "Recycling of cooking oil" + }, + "6": { + "question": "Recycling of engine oil" + }, + "7": { + "question": "Recycling of fluorescent tubes" + }, + "8": { + "question": "Recycling of green waste" + }, + "9": { + "question": "Recycling of glass bottles" + }, "10": { "question": "Recycling of glass" }, @@ -7065,35 +7089,11 @@ "19": { "question": "Recycling of residual waste" }, - "2": { - "question": "Recycling of beverage cartons" - }, "20": { "question": "Recycling of printer cartridges" }, "21": { "question": "Recycling of bicycles" - }, - "3": { - "question": "Recycling of cans" - }, - "4": { - "question": "Recycling of clothes" - }, - "5": { - "question": "Recycling of cooking oil" - }, - "6": { - "question": "Recycling of engine oil" - }, - "7": { - "question": "Recycling of fluorescent tubes" - }, - "8": { - "question": "Recycling of green waste" - }, - "9": { - "question": "Recycling of glass bottles" } } }, @@ -7161,6 +7161,30 @@ "1": { "then": "Beverage cartons can be recycled here" }, + "2": { + "then": "Cans can be recycled here" + }, + "3": { + "then": "Clothes can be recycled here" + }, + "4": { + "then": "Cooking oil can be recycled here" + }, + "5": { + "then": "Engine oil can be recycled here" + }, + "6": { + "then": "Fluorescent tubes can be recycled here" + }, + "7": { + "then": "Green waste can be recycled here" + }, + "8": { + "then": "Organic waste can be recycled here" + }, + "9": { + "then": "Glass bottles can be recycled here" + }, "10": { "then": "Glass can be recycled here" }, @@ -7191,9 +7215,6 @@ "19": { "then": "Shoes can be recycled here" }, - "2": { - "then": "Cans can be recycled here" - }, "20": { "then": "Small electrical appliances can be recycled here" }, @@ -7208,27 +7229,6 @@ }, "24": { "then": "Bicycles can be recycled here" - }, - "3": { - "then": "Clothes can be recycled here" - }, - "4": { - "then": "Cooking oil can be recycled here" - }, - "5": { - "then": "Engine oil can be recycled here" - }, - "6": { - "then": "Fluorescent tubes can be recycled here" - }, - "7": { - "then": "Green waste can be recycled here" - }, - "8": { - "then": "Organic waste can be recycled here" - }, - "9": { - "then": "Glass bottles can be recycled here" } }, "question": "What can be recycled here?" @@ -7945,12 +7945,6 @@ "1": { "then": "This lamp uses LEDs" }, - "10": { - "then": "This lamp uses high pressure sodium lamps (orange with white)" - }, - "11": { - "then": "This lamp is lit using gas" - }, "2": { "then": "This lamp uses incandescent lighting" }, @@ -7974,6 +7968,12 @@ }, "9": { "then": "This lamp uses low pressure sodium lamps (monochrome orange)" + }, + "10": { + "then": "This lamp uses high pressure sodium lamps (orange with white)" + }, + "11": { + "then": "This lamp is lit using gas" } }, "question": "What kind of lighting does this lamp use?" @@ -9352,4 +9352,4 @@ } } } -} +} \ No newline at end of file diff --git a/langs/layers/zh_Hant.json b/langs/layers/zh_Hant.json index 14ad256f7a..c13bd051c3 100644 --- a/langs/layers/zh_Hant.json +++ b/langs/layers/zh_Hant.json @@ -36,12 +36,6 @@ "1": { "then": "壁畫" }, - "10": { - "then": "Azulejo (西班牙雕塑作品名稱)" - }, - "11": { - "then": "瓷磚" - }, "2": { "then": "繪畫" }, @@ -65,6 +59,12 @@ }, "9": { "then": "寬慰" + }, + "10": { + "then": "Azulejo (西班牙雕塑作品名稱)" + }, + "11": { + "then": "瓷磚" } }, "question": "這是什麼類型的藝術品?", @@ -678,4 +678,4 @@ } } } -} +} \ No newline at end of file diff --git a/langs/shared-questions/de.json b/langs/shared-questions/de.json index ef09834311..4c25a79e0d 100644 --- a/langs/shared-questions/de.json +++ b/langs/shared-questions/de.json @@ -324,4 +324,4 @@ "question": "Wie lautet das zugehörige Wikidata Element?" } } -} +} \ No newline at end of file diff --git a/langs/shared-questions/en.json b/langs/shared-questions/en.json index 9aa110d81d..8d686d5a2f 100644 --- a/langs/shared-questions/en.json +++ b/langs/shared-questions/en.json @@ -324,4 +324,4 @@ "question": "What is the corresponding Wikidata entity?" } } -} +} \ No newline at end of file diff --git a/langs/themes/de.json b/langs/themes/de.json index 6da33f299f..36353d8fe0 100644 --- a/langs/themes/de.json +++ b/langs/themes/de.json @@ -936,33 +936,6 @@ "onwheels": { "description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen", "layers": { - "19": { - "override": { - "=title": { - "render": "Statistik" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Import" - } - } - }, - "1": { - "render": { - "special": { - "message": "Alle vorgeschlagenen Tags hinzufügen" - } - } - } - } - } - }, "4": { "override": { "filter": { @@ -1005,6 +978,33 @@ "override": { "name": "Barrierefreie Parkplätze" } + }, + "19": { + "override": { + "=title": { + "render": "Statistik" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Import" + } + } + }, + "1": { + "render": { + "special": { + "message": "Alle vorgeschlagenen Tags hinzufügen" + } + } + } + } + } } }, "title": "Auf Rädern" @@ -1165,6 +1165,10 @@ "stations": { "description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen", "layers": { + "3": { + "description": "Ebene mit Bahnhöfen", + "name": "Bahnhöfe" + }, "16": { "description": "Anzeigen der Züge, die von diesem Bahnhof abfahren", "name": "Abfahrtstafeln", @@ -1196,10 +1200,6 @@ "title": { "render": "Abfahrtstafel" } - }, - "3": { - "description": "Ebene mit Bahnhöfen", - "name": "Bahnhöfe" } }, "title": "Bahnhöfe" @@ -1291,4 +1291,4 @@ "shortDescription": "Eine Karte mit Abfalleimern", "title": "Abfalleimer" } -} +} \ No newline at end of file diff --git a/langs/themes/en.json b/langs/themes/en.json index a0b02ebe90..382ec151af 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -936,33 +936,6 @@ "onwheels": { "description": "On this map, publicly weelchair accessible places are shown and can be easily added", "layers": { - "19": { - "override": { - "=title": { - "render": "Statistics" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Import" - } - } - }, - "1": { - "render": { - "special": { - "message": "Add all the suggested tags" - } - } - } - } - } - }, "4": { "override": { "filter": { @@ -1005,6 +978,33 @@ "override": { "name": "Disabled parking spaces" } + }, + "19": { + "override": { + "=title": { + "render": "Statistics" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Import" + } + } + }, + "1": { + "render": { + "special": { + "message": "Add all the suggested tags" + } + } + } + } + } } }, "title": "OnWheels" @@ -1165,6 +1165,10 @@ "stations": { "description": "View, edit and add details to a train station", "layers": { + "3": { + "description": "Layer showing train stations", + "name": "Train Stations" + }, "16": { "description": "Displays showing the trains that will leave from this station", "name": "Departures boards", @@ -1196,10 +1200,6 @@ "title": { "render": "Departures board" } - }, - "3": { - "description": "Layer showing train stations", - "name": "Train Stations" } }, "title": "Train Stations" @@ -1291,4 +1291,4 @@ "shortDescription": "A map with waste baskets", "title": "Waste Basket" } -} +} \ No newline at end of file diff --git a/langs/themes/zh_Hant.json b/langs/themes/zh_Hant.json index 3913b5de96..f209bca659 100644 --- a/langs/themes/zh_Hant.json +++ b/langs/themes/zh_Hant.json @@ -513,6 +513,9 @@ }, "stations": { "layers": { + "3": { + "description": "顯示火車站的圖層" + }, "16": { "presets": { "0": { @@ -532,9 +535,6 @@ "title": { "render": "時刻表" } - }, - "3": { - "description": "顯示火車站的圖層" } }, "title": "火車站" @@ -626,4 +626,4 @@ "shortDescription": "垃圾筒的地圖", "title": "垃圾筒" } -} +} \ No newline at end of file From 9e911ef92abc48c8e0b32717f71ba670bdd42410 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 28 Jun 2023 22:43:06 +0200 Subject: [PATCH 27/36] Chore: fix and regenerate docs --- Docs/BuiltinQuestions.md | 2 +- Docs/Layers/advertising.md | 2 +- Docs/Layers/bicycle_library.md | 2 +- Docs/Layers/bike_cleaning.md | 2 +- Docs/Layers/bike_shop.md | 2 +- Docs/Layers/bike_themed_object.md | 2 +- Docs/Layers/climbing_route.md | 2 +- Docs/Layers/toilet.md | 2 +- Docs/Layers/toilet_at_amenity.md | 2 +- Docs/TagInfo/mapcomplete_advertising.json | 2 +- Docs/TagInfo/mapcomplete_cyclofix.json | 2 +- Docs/TagInfo/mapcomplete_personal.json | 4 +- Docs/Themes/advertising.md | 1 + Docs/Themes/atm.md | 1 + Docs/Themes/bag.md | 1 + Docs/Themes/bicycle_rental.md | 1 + Docs/Themes/maproulette.md | 1 + Docs/Themes/maxspeed.md | 1 + Docs/Themes/nature.md | 1 + Docs/Themes/notes.md | 1 + Docs/Themes/pets.md | 1 + Docs/Themes/postal_codes.md | 1 + Docs/Themes/rainbow_crossings.md | 1 + Docs/Themes/sidewalks.md | 1 + Docs/Themes/sports.md | 1 + Docs/Themes/stations.md | 1 + Docs/Themes/transit.md | 1 + Docs/Themes/walls_and_buildings.md | 1 + Docs/Themes/waste.md | 1 + Docs/wikiIndex.txt | 20 ++-- .../mapcomplete-changes.json | 97 +++++-------------- scripts/generateDocs.ts | 6 +- 32 files changed, 71 insertions(+), 95 deletions(-) diff --git a/Docs/BuiltinQuestions.md b/Docs/BuiltinQuestions.md index aa7daa342c..ccbfca14a7 100644 --- a/Docs/BuiltinQuestions.md +++ b/Docs/BuiltinQuestions.md @@ -233,7 +233,7 @@ Are dogs allowed in this business? {description} -Is there still something relevant you couldn't give in the previous questions? Add it here. +Is there still some relevant info that the previous questions did not cover? Feel free to add it here. diff --git a/Docs/Layers/advertising.md b/Docs/Layers/advertising.md index 9e716e0df1..749cd262a2 100644 --- a/Docs/Layers/advertising.md +++ b/Docs/Layers/advertising.md @@ -191,7 +191,7 @@ The question is *What kind of message is shown?* - Unselecting this answer will add - *Electoral advertising* corresponds with `message=political` - Unselecting this answer will add - - *Inormation related to theatre, concerts, ...* corresponds with `message=showbiz` + - *Information related to theatre, concerts, …* corresponds with `message=showbiz` - Unselecting this answer will add - *Message from non-profit organizations* corresponds with `message=non_profit` - Unselecting this answer will add diff --git a/Docs/Layers/bicycle_library.md b/Docs/Layers/bicycle_library.md index 06a7087c95..fff4eecf6c 100644 --- a/Docs/Layers/bicycle_library.md +++ b/Docs/Layers/bicycle_library.md @@ -226,7 +226,7 @@ The question is *Who can loan bicycles here?* -The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.* +The question is *Is there still some relevant info that the previous questions did not cover? Feel free to add it here.* This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) diff --git a/Docs/Layers/bike_cleaning.md b/Docs/Layers/bike_cleaning.md index 22ad6baf26..1edfd3cb47 100644 --- a/Docs/Layers/bike_cleaning.md +++ b/Docs/Layers/bike_cleaning.md @@ -120,7 +120,7 @@ This is rendered with `Using the cleaning service costs {charge}` - *This cleaning service is free to use* corresponds with `fee=no` - - *This cleaning service is paid* corresponds with `fee=yes` + - *There is a fee to use this cleaning service* corresponds with `fee=yes` This tagrendering is only visible in the popup if the following condition is met: `amenity=bike_wash|amenity=bicycle_wash` diff --git a/Docs/Layers/bike_shop.md b/Docs/Layers/bike_shop.md index cc22ed5966..2aa996d07c 100644 --- a/Docs/Layers/bike_shop.md +++ b/Docs/Layers/bike_shop.md @@ -530,7 +530,7 @@ This is rendered with `Using the cleaning service costs {service:bicycle:cleani -The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.* +The question is *Is there still some relevant info that the previous questions did not cover? Feel free to add it here.* This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) diff --git a/Docs/Layers/bike_themed_object.md b/Docs/Layers/bike_themed_object.md index 648e6b5d8c..8a66060f87 100644 --- a/Docs/Layers/bike_themed_object.md +++ b/Docs/Layers/bike_themed_object.md @@ -91,7 +91,7 @@ This tagrendering has no question and is thus read-only -The question is *Is there still something relevant you couldn't give in the previous questions? Add it here.* +The question is *Is there still some relevant info that the previous questions did not cover? Feel free to add it here.* This rendering asks information about the property [description](https://wiki.openstreetmap.org/wiki/Key:description) diff --git a/Docs/Layers/climbing_route.md b/Docs/Layers/climbing_route.md index 668898b8b5..12e0795847 100644 --- a/Docs/Layers/climbing_route.md +++ b/Docs/Layers/climbing_route.md @@ -159,7 +159,7 @@ This is rendered with `This route has {climbing:bolts} bolts
{id}", - "de": "Änderungssatz {id}" + "en": "Changeset {id}" } }, { "id": "contributor", "question": { - "en": "Which contributor made this change?", - "nl": "Welke bijdrager maakte deze wijziging?", - "de": "Welcher Mitwirkende hat diese Änderung vorgenommen?" + "en": "What contributor did make this change?" }, "freeform": { "key": "user" }, "render": { - "en": "Change made by {user}", - "nl": "Wijziging gemaakt door {user}", - "de": "Änderung gemacht von {user}" + "en": "Change made by {user}" } }, { "id": "theme-id", "question": { - "en": "What theme was used to make this change?", - "de": "Welches Thema wurde für diese Änderung verwendet?\"" + "en": "What theme was used to make this change?" }, "freeform": { "key": "theme" }, "render": { - "en": "Change with theme {theme}", - "de": "Geändert mit Thema {theme}" + "en": "Change with theme {theme}" } }, { @@ -92,27 +74,19 @@ "key": "locale" }, "question": { - "en": "What locale (language) was this change made in?", - "nl": "In welke locale (taal) werd deze wijziging gemaakt?", - "de": "In welcher Sprache wurde diese Änderung vorgenommen?" + "en": "What locale (language) was this change made in?" }, "render": { - "en": "User locale is {locale}", - "nl": "De gebruikerstaal is {locale}", - "de": "Usersprache ist {locale}" + "en": "User locale is {locale}" } }, { "id": "host", "render": { - "en": "Change made with {host}", - "nl": "Wijziging gemaakt met {host}", - "de": "Änderung vorgenommen mit {host}" + "en": "Change with with {host}" }, "question": { - "en": "What host (website) was this change made with?", - "nl": "Met welke host (website) werd deze wijziging gemaakt?", - "de": "Mit welchem Host / welcher Website wurde diese Änderung gemacht?" + "en": "What host (website) was this change made with?" }, "freeform": { "key": "host" @@ -133,12 +107,10 @@ { "id": "version", "question": { - "en": "What version of MapComplete was used to make this change?", - "de": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?" + "en": "What version of MapComplete was used to make this change?" }, "render": { - "en": "Made with {editor}", - "de": "Erstellt mit {editor}" + "en": "Made with {editor}" }, "freeform": { "key": "editor" @@ -472,9 +444,7 @@ } ], "question": { - "en": "Theme name contains {search}", - "nl": "Themenaam bevat {search}", - "de": "Themenname enthält {search}" + "en": "Themename contains {search}" } } ] @@ -490,9 +460,7 @@ } ], "question": { - "en": "Made by contributor {search}", - "nl": "Gemaakt door bijdrager {search}", - "de": "Erstellt von {search}" + "en": "Made by contributor {search}" } } ] @@ -508,9 +476,7 @@ } ], "question": { - "en": "Not made by contributor {search}", - "nl": "Niet gemaakt door bijdrager {search}", - "de": "Nicht erstellt von {search}" + "en": "Not made by contributor {search}" } } ] @@ -527,9 +493,7 @@ } ], "question": { - "en": "Made before {search}", - "nl": "Gemaakt voor {search}", - "de": "Erstellt vor {search}" + "en": "Made before {search}" } } ] @@ -546,9 +510,7 @@ } ], "question": { - "en": "Made after {search}", - "nl": "Gemaakt na {search}", - "de": "Erstellt nach {search}" + "en": "Made after {search}" } } ] @@ -564,9 +526,7 @@ } ], "question": { - "en": "User language (iso-code) {search}", - "nl": "De taal van de bijdrager is {search}", - "de": "Benutzersprache (ISO-Code) {search}" + "en": "User language (iso-code) {search}" } } ] @@ -582,9 +542,7 @@ } ], "question": { - "en": "Made with host {search}", - "nl": "Gemaakt met host {search}", - "de": "Erstellt mit Host {search}" + "en": "Made with host {search}" } } ] @@ -595,9 +553,7 @@ { "osmTags": "add-image>0", "question": { - "en": "Changeset added at least one image", - "nl": "Changeset bevat minstens één afbeelding", - "de": "Changeset fügte mindestens ein Bild hinzu" + "en": "Changeset added at least one image" } } ] @@ -612,8 +568,7 @@ { "id": "link_to_more", "render": { - "en": "More statistics can be found here", - "de": "Mehr Statistiken gibt es hier" + "en": "More statistics can be found here" } }, { diff --git a/scripts/generateDocs.ts b/scripts/generateDocs.ts index ed2e0c639e..9d0e90c48a 100644 --- a/scripts/generateDocs.ts +++ b/scripts/generateDocs.ts @@ -34,6 +34,9 @@ function WriteFile( noTableOfContents: boolean } ): void { + if (!html) { + return + } for (const source of autogenSource) { if (source.indexOf("*") > 0) { continue @@ -106,7 +109,8 @@ function GenerateDocumentationForTheme(theme: LayoutConfig): BaseUIElement { function GenLayerOverviewText(): BaseUIElement { for (const id of Constants.priviliged_layers) { if (!AllSharedLayers.sharedLayers.has(id)) { - throw "Priviliged layer definition not found: " + id + console.error("Priviliged layer definition not found: " + id) + return undefined } } From 775886b2b9c9b68db31048b35405a45aadea490b Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 28 Jun 2023 22:46:46 +0200 Subject: [PATCH 28/36] Bump version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f587dd27f7..19a4da499b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mapcomplete", - "version": "0.30.7", + "version": "0.30.8", "repository": "https://github.com/pietervdvn/MapComplete", "description": "A small website to edit OSM easily", "bugs": "https://github.com/pietervdvn/MapComplete/issues", From 33fa11fc1728f017644977be2181c25441a76e18 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 00:24:19 +0200 Subject: [PATCH 29/36] Fix: improve background layer switching code, might improve #1481 --- UI/Map/MapLibreAdaptor.ts | 87 ++++++++++++++++++++++++--------------- UI/Map/ShowDataLayer.ts | 3 ++ 2 files changed, 57 insertions(+), 33 deletions(-) diff --git a/UI/Map/MapLibreAdaptor.ts b/UI/Map/MapLibreAdaptor.ts index 443d099b36..565d12abbc 100644 --- a/UI/Map/MapLibreAdaptor.ts +++ b/UI/Map/MapLibreAdaptor.ts @@ -1,7 +1,7 @@ import { Store, UIEventSource } from "../../Logic/UIEventSource" import type { Map as MLMap } from "maplibre-gl" import { Map as MlMap, SourceSpecification } from "maplibre-gl" -import { RasterLayerPolygon } from "../../Models/RasterLayers" +import { AvailableRasterLayers, RasterLayerPolygon } from "../../Models/RasterLayers" import { Utils } from "../../Utils" import { BBox } from "../../Logic/BBox" import { ExportableMap, MapProperties } from "../../Models/MapProperties" @@ -370,8 +370,17 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap { private removeCurrentLayer(map: MLMap): void { if (this._currentRasterLayer) { // hide the previous layer - map.removeLayer(this._currentRasterLayer) - map.removeSource(this._currentRasterLayer) + try { + if (map.getLayer(this._currentRasterLayer)) { + map.removeLayer(this._currentRasterLayer) + } + if (map.getSource(this._currentRasterLayer)) { + map.removeSource(this._currentRasterLayer) + } + this._currentRasterLayer = undefined + } catch (e) { + console.warn("Could not remove the previous layer") + } } } @@ -381,56 +390,68 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap { return } const background: RasterLayerProperties = this.rasterLayer?.data?.properties - if (background !== undefined && this._currentRasterLayer === background.id) { + console.log("Setting background to", background) + if (!background) { + console.error( + "Attempting to 'setBackground', but the background is", + background, + "for", + map.getCanvas() + ) + return + } + if (this._currentRasterLayer === background.id) { // already the correct background layer, nothing to do return } - // await this.awaitStyleIsLoaded() - if (background !== this.rasterLayer?.data?.properties) { - // User selected another background in the meantime... abort - return - } - - if (background !== undefined && this._currentRasterLayer === background.id) { - // already the correct background layer, nothing to do - return - } if (!background?.url) { // no background to set this.removeCurrentLayer(map) - this._currentRasterLayer = undefined return } if (background.type === "vector") { - console.log("Background layer is vector") + console.log("Background layer is vector", background.id) + this.removeCurrentLayer(map) map.setStyle(background.url) return } - map.addSource(background.id, MapLibreAdaptor.prepareWmsSource(background)) - - map.resize() - let addLayerBeforeId = "aeroway_fill" // this is the first non-landuse item in the stylesheet, we add the raster layer before the roads but above the landuse if (background.category === "osmbasedmap" || background.category === "map") { // The background layer is already an OSM-based map or another map, so we don't want anything from the baselayer - let layers = map.getStyle().layers - // THe last index of the maptiler layers - let lastIndex = layers.findIndex((layer) => layer.id === "housenumber") - addLayerBeforeId = layers[lastIndex + 1]?.id ?? "housenumber" + addLayerBeforeId = undefined + this.removeCurrentLayer(map) + } else { + // Make sure that the default maptiler style is loaded as it gives an overlay with roads + const maptiler = AvailableRasterLayers.maplibre.properties + if (!map.getSource(maptiler.id)) { + this.removeCurrentLayer(map) + map.addSource(maptiler.id, MapLibreAdaptor.prepareWmsSource(maptiler)) + map.setStyle(maptiler.url) + await this.awaitStyleIsLoaded() + } } - map.addLayer( - { - id: background.id, - type: "raster", - source: background.id, - paint: {}, - }, - addLayerBeforeId - ) + if (!map.getLayer(addLayerBeforeId)) { + addLayerBeforeId = undefined + } + if (!map.getSource(background.id)) { + map.addSource(background.id, MapLibreAdaptor.prepareWmsSource(background)) + } + map.resize() + if (!map.getLayer(background.id)) { + map.addLayer( + { + id: background.id, + type: "raster", + source: background.id, + paint: {}, + }, + addLayerBeforeId + ) + } await this.awaitStyleIsLoaded() this.removeCurrentLayer(map) this._currentRasterLayer = background?.id diff --git a/UI/Map/ShowDataLayer.ts b/UI/Map/ShowDataLayer.ts index a99b149537..7be7c036a6 100644 --- a/UI/Map/ShowDataLayer.ts +++ b/UI/Map/ShowDataLayer.ts @@ -380,6 +380,9 @@ class LineRenderingLayer { if (this._listenerInstalledOn.has(id)) { continue } + if (!map.getSource(this._layername)) { + continue + } if (this._fetchStore === undefined) { map.setFeatureState( { source: this._layername, id }, From 68e07d7d7beca5b4ea26b9fc6ff964014d28af4b Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 00:29:17 +0200 Subject: [PATCH 30/36] Fix: actually pass the initial coordinate in the locationInput element, fix #1486 --- UI/Popup/MoveWizard.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/UI/Popup/MoveWizard.ts b/UI/Popup/MoveWizard.ts index 4247a63609..6d1de64ebd 100644 --- a/UI/Popup/MoveWizard.ts +++ b/UI/Popup/MoveWizard.ts @@ -73,7 +73,7 @@ export default class MoveWizard extends Toggle { lockBounds: true, includeSearch: false, background: "photo", - startZoom: 17, + startZoom: 18, minZoom: 16, eraseAddressFields: false, }) @@ -139,6 +139,7 @@ export default class MoveWizard extends Toggle { new SvelteUIElement(LocationInput, { mapProperties, value, + initialCoordinate: { lon, lat }, }).SetClass("w-full h-full"), new SvelteUIElement(OpenBackgroundSelectorButton, { state }).SetClass( "absolute bottom-0 left-0" From d95d96fb1ba1a8886f05b118c0650a4af1ae5dd7 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 00:38:46 +0200 Subject: [PATCH 31/36] Fix: fix #1477. Setting the background caused a map.resize(), which in turn caused the coordinates to be set to 0,0, which caused the location-correction to kick in, moving the location input towards null island --- UI/Map/MapLibreAdaptor.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/UI/Map/MapLibreAdaptor.ts b/UI/Map/MapLibreAdaptor.ts index 443d099b36..5ec2729e9d 100644 --- a/UI/Map/MapLibreAdaptor.ts +++ b/UI/Map/MapLibreAdaptor.ts @@ -411,8 +411,6 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap { map.addSource(background.id, MapLibreAdaptor.prepareWmsSource(background)) - map.resize() - let addLayerBeforeId = "aeroway_fill" // this is the first non-landuse item in the stylesheet, we add the raster layer before the roads but above the landuse if (background.category === "osmbasedmap" || background.category === "map") { // The background layer is already an OSM-based map or another map, so we don't want anything from the baselayer From 622717c6958ac47e44b91f09bced572a71ea9d8a Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 00:50:31 +0200 Subject: [PATCH 32/36] Version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 19a4da499b..5108592434 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mapcomplete", - "version": "0.30.8", + "version": "0.30.9", "repository": "https://github.com/pietervdvn/MapComplete", "description": "A small website to edit OSM easily", "bugs": "https://github.com/pietervdvn/MapComplete/issues", From 006f69561a08a1c3a3577ada83e9b3954d8332f2 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 01:10:55 +0200 Subject: [PATCH 33/36] Fix: fix back-button on the 404-page, remove some obsolete classes --- UI/Base/LeftIndex.ts | 25 ----- UI/BigComponents/BackToIndex.ts | 16 --- UI/NotFound.svelte | 14 +++ .../mapcomplete-changes.json | 97 ++++++++++++++----- langs/ca.json | 1 - langs/cs.json | 1 - langs/da.json | 1 - langs/de.json | 1 - langs/en.json | 2 +- langs/es.json | 1 - langs/fr.json | 1 - langs/hu.json | 1 - langs/it.json | 1 - langs/nb_NO.json | 1 - langs/nl.json | 1 - langs/pt.json | 1 - langs/zh_Hant.json | 1 - notfound.ts | 7 +- 18 files changed, 89 insertions(+), 84 deletions(-) delete mode 100644 UI/Base/LeftIndex.ts delete mode 100644 UI/BigComponents/BackToIndex.ts create mode 100644 UI/NotFound.svelte diff --git a/UI/Base/LeftIndex.ts b/UI/Base/LeftIndex.ts deleted file mode 100644 index 989483ffc7..0000000000 --- a/UI/Base/LeftIndex.ts +++ /dev/null @@ -1,25 +0,0 @@ -import BaseUIElement from "../BaseUIElement" -import Combine from "./Combine" -import BackToIndex from "../BigComponents/BackToIndex" - -export default class LeftIndex extends Combine { - constructor( - leftContents: BaseUIElement[], - mainContent: BaseUIElement, - options?: { - hideBackButton: false | boolean - } - ) { - let back: BaseUIElement = undefined - if (options?.hideBackButton ?? true) { - back = new BackToIndex() - } - super([ - new Combine([new Combine([back, ...leftContents]).SetClass("sticky top-4")]).SetClass( - "ml-4 block w-full md:w-2/6 lg:w-1/6" - ), - mainContent.SetClass("m-8 w-full mb-24"), - ]) - this.SetClass("h-full block md:flex") - } -} diff --git a/UI/BigComponents/BackToIndex.ts b/UI/BigComponents/BackToIndex.ts deleted file mode 100644 index dc35f21395..0000000000 --- a/UI/BigComponents/BackToIndex.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { SubtleButton } from "../Base/SubtleButton" -import Svg from "../../Svg" -import Translations from "../i18n/Translations" -import BaseUIElement from "../BaseUIElement" - -export default class BackToIndex extends SubtleButton { - constructor(message?: string | BaseUIElement) { - super( - Svg.back_svg().SetStyle("height: 1.5rem;"), - message ?? Translations.t.general.backToMapcomplete, - { - url: "index.html", - } - ) - } -} diff --git a/UI/NotFound.svelte b/UI/NotFound.svelte new file mode 100644 index 0000000000..34c6ab212e --- /dev/null +++ b/UI/NotFound.svelte @@ -0,0 +1,14 @@ + +
+ + {window.location = "index.html"}}> +
+ +
+
+
diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index f82a920864..336b11205c 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -1,13 +1,19 @@ { "id": "mapcomplete-changes", "title": { - "en": "Changes made with MapComplete" + "en": "Changes made with MapComplete", + "de": "Mit MapComplete erstellte Änderungen", + "nl": "Wijzigingen gemaakt met MapComplete" }, "shortDescription": { - "en": "Shows changes made by MapComplete" + "en": "Show changes made with MapComplete", + "de": "Mit MapComplete erstellte Änderungen anzeigen", + "nl": "Toon wijzigingen gemaakt met MapComplete" }, "description": { - "en": "This maps shows all the changes made with MapComplete" + "en": "This maps shows all the changes made with MapComplete", + "de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen", + "nl": "Deze kaart toont alle wijzigingen die met MapComplete gemaakt werden" }, "icon": "./assets/svg/logo.svg", "hideFromOverview": true, @@ -20,7 +26,9 @@ { "id": "mapcomplete-changes", "name": { - "en": "Changeset centers" + "en": "Changeset centers", + "de": "Zentrum der Änderungssätze", + "nl": "Centerpunt van changeset" }, "minzoom": 0, "source": { @@ -31,41 +39,51 @@ }, "title": { "render": { - "en": "Changeset for {theme}" + "en": "Changeset for {theme}", + "de": "Änderungssatz für {theme}" } }, "description": { - "en": "Shows all MapComplete changes" + "en": "Show all MapComplete changes", + "de": "Alle MapComplete-Änderungen anzeigen", + "nl": "Toon alle MapComplete wijzigingen" }, "tagRenderings": [ { "id": "show_changeset_id", "render": { - "en": "Changeset {id}" + "en": "Changeset {id}", + "de": "Änderungssatz {id}" } }, { "id": "contributor", "question": { - "en": "What contributor did make this change?" + "en": "Which contributor made this change?", + "de": "Welcher Mitwirkende hat diese Änderung vorgenommen?", + "nl": "Welke bijdrager maakte deze wijziging?" }, "freeform": { "key": "user" }, "render": { - "en": "Change made by {user}" + "en": "Change made by {user}", + "de": "Änderung gemacht von {user}", + "nl": "Wijziging gemaakt door {user}" } }, { "id": "theme-id", "question": { - "en": "What theme was used to make this change?" + "en": "What theme was used to make this change?", + "de": "Welches Thema wurde für diese Änderung verwendet?\"" }, "freeform": { "key": "theme" }, "render": { - "en": "Change with theme {theme}" + "en": "Change with theme {theme}", + "de": "Geändert mit Thema {theme}" } }, { @@ -74,19 +92,27 @@ "key": "locale" }, "question": { - "en": "What locale (language) was this change made in?" + "en": "What locale (language) was this change made in?", + "de": "In welcher Sprache wurde diese Änderung vorgenommen?", + "nl": "In welke locale (taal) werd deze wijziging gemaakt?" }, "render": { - "en": "User locale is {locale}" + "en": "User locale is {locale}", + "de": "Usersprache ist {locale}", + "nl": "De gebruikerstaal is {locale}" } }, { "id": "host", "render": { - "en": "Change with with {host}" + "en": "Change made with {host}", + "de": "Änderung vorgenommen mit {host}", + "nl": "Wijziging gemaakt met {host}" }, "question": { - "en": "What host (website) was this change made with?" + "en": "What host (website) was this change made with?", + "de": "Mit welchem Host / welcher Website wurde diese Änderung gemacht?", + "nl": "Met welke host (website) werd deze wijziging gemaakt?" }, "freeform": { "key": "host" @@ -107,10 +133,12 @@ { "id": "version", "question": { - "en": "What version of MapComplete was used to make this change?" + "en": "What version of MapComplete was used to make this change?", + "de": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?" }, "render": { - "en": "Made with {editor}" + "en": "Made with {editor}", + "de": "Erstellt mit {editor}" }, "freeform": { "key": "editor" @@ -444,7 +472,9 @@ } ], "question": { - "en": "Themename contains {search}" + "en": "Theme name contains {search}", + "de": "Themenname enthält {search}", + "nl": "Themenaam bevat {search}" } } ] @@ -460,7 +490,9 @@ } ], "question": { - "en": "Made by contributor {search}" + "en": "Made by contributor {search}", + "de": "Erstellt von {search}", + "nl": "Gemaakt door bijdrager {search}" } } ] @@ -476,7 +508,9 @@ } ], "question": { - "en": "Not made by contributor {search}" + "en": "Not made by contributor {search}", + "de": "Nicht erstellt von {search}", + "nl": "Niet gemaakt door bijdrager {search}" } } ] @@ -493,7 +527,9 @@ } ], "question": { - "en": "Made before {search}" + "en": "Made before {search}", + "de": "Erstellt vor {search}", + "nl": "Gemaakt voor {search}" } } ] @@ -510,7 +546,9 @@ } ], "question": { - "en": "Made after {search}" + "en": "Made after {search}", + "de": "Erstellt nach {search}", + "nl": "Gemaakt na {search}" } } ] @@ -526,7 +564,9 @@ } ], "question": { - "en": "User language (iso-code) {search}" + "en": "User language (iso-code) {search}", + "de": "Benutzersprache (ISO-Code) {search}", + "nl": "De taal van de bijdrager is {search}" } } ] @@ -542,7 +582,9 @@ } ], "question": { - "en": "Made with host {search}" + "en": "Made with host {search}", + "de": "Erstellt mit Host {search}", + "nl": "Gemaakt met host {search}" } } ] @@ -553,7 +595,9 @@ { "osmTags": "add-image>0", "question": { - "en": "Changeset added at least one image" + "en": "Changeset added at least one image", + "de": "Changeset fügte mindestens ein Bild hinzu", + "nl": "Changeset bevat minstens één afbeelding" } } ] @@ -568,7 +612,8 @@ { "id": "link_to_more", "render": { - "en": "More statistics can be found here" + "en": "More statistics can be found here", + "de": "Mehr Statistiken gibt es hier" } }, { diff --git a/langs/ca.json b/langs/ca.json index 00c82ee33f..d96cbec37b 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -146,7 +146,6 @@ }, "back": "Tornar", "backToIndex": "Torna a la vista general amb tots els mapes temàtics", - "backToMapcomplete": "Tornar a l'explicació general de la petició", "backgroundMap": "Mapa de fons", "cancel": "Cancel·lar", "confirm": "Confirmar", diff --git a/langs/cs.json b/langs/cs.json index 12f30043d1..00d662fbd0 100644 --- a/langs/cs.json +++ b/langs/cs.json @@ -146,7 +146,6 @@ }, "back": "Zpět", "backToIndex": "Návrat na přehled všech tematických map", - "backToMapcomplete": "Zpět na přehled témat", "backgroundMap": "Mapa na pozadí", "cancel": "Zrušit", "confirm": "Potvrdit", diff --git a/langs/da.json b/langs/da.json index b90fe99e1a..9b5e9d7ce0 100644 --- a/langs/da.json +++ b/langs/da.json @@ -95,7 +95,6 @@ "translatedBy": "MapComplete er oversat af {contributors} og {hiddenCount} flere bidragsydere" }, "back": "Tilbage", - "backToMapcomplete": "Tilbage til temaoversigten", "backgroundMap": "Baggrundskort", "cancel": "Afbryd", "confirm": "Bekræft", diff --git a/langs/de.json b/langs/de.json index 963bc1af51..47ed513caa 100644 --- a/langs/de.json +++ b/langs/de.json @@ -161,7 +161,6 @@ }, "back": "Zurück", "backToIndex": "Zurück zur Übersicht aller thematischen Karten", - "backToMapcomplete": "Zurück zur Themenübersicht", "backgroundMap": "Hintergrundkarte auswählen", "backgroundSwitch": "Hintergrund wechseln", "cancel": "Abbrechen", diff --git a/langs/en.json b/langs/en.json index b3107da8c2..61e6a186e2 100644 --- a/langs/en.json +++ b/langs/en.json @@ -92,6 +92,7 @@ "whatIsOsm": "What is OpenStreetMap?" }, "general": { + "404": "This page does not exist", "about": "Easily edit and add OpenStreetMap for a certain theme", "aboutMapComplete": { "intro": "Use MapComplete to add OpenStreetMap info on a single theme. Answer questions, and within minutes your contributions are available everywhere. In most themes you can add pictures or even leave a review. The theme maintainer defines elements, questions and languages for it." @@ -161,7 +162,6 @@ }, "back": "Back", "backToIndex": "Go back to the overview with all thematic maps", - "backToMapcomplete": "Back to the theme overview", "backgroundMap": "Select a background layer", "backgroundSwitch": "Switch background", "cancel": "Cancel", diff --git a/langs/es.json b/langs/es.json index 84e55b3c30..4a3d2da7b4 100644 --- a/langs/es.json +++ b/langs/es.json @@ -102,7 +102,6 @@ }, "back": "Atrás", "backToIndex": "Volver a la vista general con todos los mapas temáticos", - "backToMapcomplete": "Volver a la vista de temas", "backgroundMap": "Mapa de fondo", "cancel": "Cancelar", "confirm": "Confirmar", diff --git a/langs/fr.json b/langs/fr.json index 4a18fdfc60..73846ee81b 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -118,7 +118,6 @@ }, "back": "Retour", "backToIndex": "Revenir vers l'aperçu de toutes les cartes thématiques", - "backToMapcomplete": "Retour à l'aperçu du thème", "backgroundMap": "Fond de plan", "cancel": "Annuler", "confirm": "Confirmer", diff --git a/langs/hu.json b/langs/hu.json index 83bea582fe..afd36563bd 100644 --- a/langs/hu.json +++ b/langs/hu.json @@ -91,7 +91,6 @@ "themeBy": "A téma karbantartója: {author}" }, "back": "Vissza", - "backToMapcomplete": "Vissza a témák áttekintéséhez", "backgroundMap": "Háttértérkép", "cancel": "Mégse", "confirm": "Megerősítés", diff --git a/langs/it.json b/langs/it.json index 68e75e6afe..171f0fcbd3 100644 --- a/langs/it.json +++ b/langs/it.json @@ -96,7 +96,6 @@ "translatedBy": "MapComplete è stata tradotta da {contributors} e da {hiddenCount} contributori aggiuntivi" }, "back": "Indietro", - "backToMapcomplete": "Torna alla panoramica sull'argomento", "backgroundMap": "Mappa di sfondo", "cancel": "Annulla", "confirm": "Conferma", diff --git a/langs/nb_NO.json b/langs/nb_NO.json index e9b8bf4e5a..de0ede216a 100644 --- a/langs/nb_NO.json +++ b/langs/nb_NO.json @@ -125,7 +125,6 @@ "translatedBy": "MapComplete har blitt oversatt av {contributors} og {hiddenCount} andre bidragsytere." }, "back": "Tilbake", - "backToMapcomplete": "Tilbake til temaoversikten", "backgroundMap": "Bakgrunnskart", "cancel": "Avbryt", "confirm": "Bekreft", diff --git a/langs/nl.json b/langs/nl.json index 6929e2303a..4775dd2602 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -148,7 +148,6 @@ }, "back": "Vorige", "backToIndex": "Keer terug naar het overzicht met alle thematische kaarten", - "backToMapcomplete": "Terug naar het themaoverzicht", "backgroundMap": "Selecteer een achtergrondlaag", "cancel": "Annuleren", "confirm": "Bevestigen", diff --git a/langs/pt.json b/langs/pt.json index d73f252986..c6ac285a5b 100644 --- a/langs/pt.json +++ b/langs/pt.json @@ -134,7 +134,6 @@ }, "back": "Voltar", "backToIndex": "Volte para a visão geral com todos os mapas temáticos", - "backToMapcomplete": "Voltar à visão geral do tema", "backgroundMap": "Mapa de fundo", "cancel": "Cancelar", "confirm": "Confirmar", diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index 4983f4569a..3d48b102ef 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -118,7 +118,6 @@ "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者" }, "back": "回去", - "backToMapcomplete": "回到主題總覽", "backgroundMap": "背景地圖", "cancel": "取消", "confirm": "確認", diff --git a/notfound.ts b/notfound.ts index 0da141d4fd..da596ea9d4 100644 --- a/notfound.ts +++ b/notfound.ts @@ -1,5 +1,4 @@ -import { FixedUiElement } from "./UI/Base/FixedUiElement" -import Combine from "./UI/Base/Combine" -import BackToIndex from "./UI/BigComponents/BackToIndex" +import SvelteUIElement from "./UI/Base/SvelteUIElement" +import NotFound from "./UI/NotFound.svelte" -new Combine([new FixedUiElement("This page is not found"), new BackToIndex()]).AttachTo("maindiv") +new SvelteUIElement(NotFound, {}).AttachTo("maindiv") From 782ae609393a3e26a1dc91c98c1ed419f15fc6e4 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 01:43:26 +0200 Subject: [PATCH 34/36] Scripts: improve logging of generateLayerOverview --- scripts/generateLayerOverview.ts | 41 +++++++++++++++----------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 144d429f35..72ae082cfc 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -434,30 +434,27 @@ class LayerOverviewUtils extends Script { const themeInfo = themeFiles[i] const themePath = themeInfo.path let themeFile = themeInfo.parsed - console.log(`Validating ${i}/${themeFiles.length} '${themeInfo.parsed.id}'`) - { - const targetPath = - LayerOverviewUtils.themePath + - "/" + - themePath.substring(themePath.lastIndexOf("/")) - const usedLayers = Array.from( - LayerOverviewUtils.extractLayerIdsFrom(themeFile, false) - ).map((id) => LayerOverviewUtils.layerPath + id + ".json") - if (!forceReload && !this.shouldBeUpdated([themePath, ...usedLayers], targetPath)) { - fixed.set( - themeFile.id, - JSON.parse( - readFileSync( - LayerOverviewUtils.themePath + themeFile.id + ".json", - "utf8" - ) - ) + + const targetPath = + LayerOverviewUtils.themePath + "/" + themePath.substring(themePath.lastIndexOf("/")) + const usedLayers = Array.from( + LayerOverviewUtils.extractLayerIdsFrom(themeFile, false) + ).map((id) => LayerOverviewUtils.layerPath + id + ".json") + + if (!forceReload && !this.shouldBeUpdated([themePath, ...usedLayers], targetPath)) { + fixed.set( + themeFile.id, + JSON.parse( + readFileSync(LayerOverviewUtils.themePath + themeFile.id + ".json", "utf8") ) - skippedThemes.push(themeFile.id) - continue - } - recompiledThemes.push(themeFile.id) + ) + console.log("Skipping", themeFile.id) + skippedThemes.push(themeFile.id) + continue } + console.log(`Validating ${i}/${themeFiles.length} '${themeInfo.parsed.id}'`) + + recompiledThemes.push(themeFile.id) new PrevalidateTheme().convertStrict(themeFile, themePath) try { From 7b3d07e5c489c0d139543cb7e5481e522b435b12 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 01:43:48 +0200 Subject: [PATCH 35/36] Themes: make filters of public bookcase translatable --- .../public_bookcase/public_bookcase.json | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/assets/layers/public_bookcase/public_bookcase.json b/assets/layers/public_bookcase/public_bookcase.json index 6e9aa9666c..3faca922a1 100644 --- a/assets/layers/public_bookcase/public_bookcase.json +++ b/assets/layers/public_bookcase/public_bookcase.json @@ -22,7 +22,7 @@ "source": { "osmTags": "amenity=public_bookcase" }, - "minzoom": 10, + "minzoom": 7, "title": { "render": { "en": "Bookcase", @@ -478,7 +478,10 @@ "id": "kid-books", "options": [ { - "question": "Kinderboeken aanwezig?", + "question": { + "en": "Has children books", + "nl": "Kinderboeken aanwezig" + }, "osmTags": "books~i~.*children.*" } ] @@ -487,7 +490,10 @@ "id": "adult-books", "options": [ { - "question": "Boeken voor volwassenen aanwezig?", + "question": { + "en": "Has books for adults", + "nl": "Boeken voor volwassenen aanwezig" + }, "osmTags": "books~i~.*adults.*" } ] @@ -505,11 +511,17 @@ } }, { - "question": "Binnen?", + "question": { + "en": "Located indoors", + "nl": "Bevindt zich binnen" + }, "osmTags": "indoor=yes" }, { - "question": "Buiten?", + "question": { + "nl": "Bevindt zich buiten", + "en": "Located outdoors" + }, "osmTags": { "or": [ "indoor=no", @@ -518,7 +530,8 @@ } } ] - } + }, + "has_image" ], "mapRendering": [ { From 031c4048a6a18ef12859491a25d9f68819294d04 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 29 Jun 2023 01:44:38 +0200 Subject: [PATCH 36/36] Remove theme import layers from ElementsInViewDetector, fix #1485 --- Logic/Actors/NoElementsInViewDetector.ts | 31 +++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/Logic/Actors/NoElementsInViewDetector.ts b/Logic/Actors/NoElementsInViewDetector.ts index 8721348f08..475a9b4d2e 100644 --- a/Logic/Actors/NoElementsInViewDetector.ts +++ b/Logic/Actors/NoElementsInViewDetector.ts @@ -16,6 +16,7 @@ export default class NoElementsInViewDetector { const minZoom = Math.min( ...themeViewState.layout.layers .filter((l) => Constants.priviliged_layers.indexOf(l.id) < 0) + .filter((l) => !l.id.startsWith("note_import")) .map((l) => l.minzoom) ) const mapProperties = themeViewState.mapProperties @@ -24,28 +25,33 @@ export default class NoElementsInViewDetector { this.hasFeatureInView = state.mapProperties.bounds.stabilized(100).map( (bbox) => { + if (!bbox) { + return undefined + } if (mapProperties.zoom.data < minZoom) { // Not a single layer will display anything as the zoom is to low return "zoom-to-low" } + let minzoomWithData = 9999 + for (const [layerName, source] of themeViewState.perLayerFiltered) { if (priviliged.has(layerName)) { continue } - if ( - mapProperties.zoom.data < themeViewState.layout.getLayer(layerName).minzoom - ) { - continue - } - if (!state.layerState.filteredLayers.get(layerName).isDisplayed.data) { - continue - } const feats = source.features.data if (!(feats?.length > 0)) { // Nope, no data loaded continue } + const layer = themeViewState.layout.getLayer(layerName) + if (mapProperties.zoom.data < layer.minzoom) { + minzoomWithData = Math.min(layer.minzoom) + continue + } + if (!state.layerState.filteredLayers.get(layerName).isDisplayed.data) { + continue + } for (const feat of feats) { if (BBox.get(feat).overlapsWith(bbox)) { @@ -56,13 +62,14 @@ export default class NoElementsInViewDetector { } // If we arrive here, data might have been filtered away - for (const [layerName, source] of themeViewState.perLayer) { + + for (const [layerName, source] of themeViewState.perLayerFiltered) { if (priviliged.has(layerName)) { continue } - if ( - mapProperties.zoom.data < themeViewState.layout.getLayer(layerName).minzoom - ) { + + const layer = themeViewState.layout.getLayer(layerName) + if (mapProperties.zoom.data < layer.minzoom) { continue } const feats = source.features.data