From 4add2d1aff33af88f3f506cc8985cbcc61149cc4 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 21 Jul 2024 10:52:51 +0200 Subject: [PATCH] chore: automated housekeeping... --- Docs/Schemas/LayerConfigJson.schema.json | 21 + Docs/Schemas/LayerConfigJsonJSC.ts | 21 + Docs/Schemas/LayoutConfigJson.schema.json | 21 + Docs/Schemas/LayoutConfigJsonJSC.ts | 21 + .../LineRenderingConfigJson.schema.json | 7 + Docs/Schemas/LineRenderingConfigJsonJSC.ts | 7 + Docs/Schemas/MappingConfigJson.schema.json | 7 + Docs/Schemas/MappingConfigJsonJSC.ts | 7 + .../PointRenderingConfigJson.schema.json | 7 + Docs/Schemas/PointRenderingConfigJsonJSC.ts | 7 + ...tionableTagRenderingConfigJson.schema.json | 14 + .../QuestionableTagRenderingConfigJsonJSC.ts | 14 + Docs/Schemas/RewritableConfigJson.schema.json | 7 + Docs/Schemas/RewritableConfigJsonJSC.ts | 7 + .../TagRenderingConfigJson.schema.json | 7 + Docs/Schemas/TagRenderingConfigJsonJSC.ts | 7 + Docs/Themes/advertising.md | 1 + Docs/Themes/atm.md | 1 + Docs/Themes/bag.md | 1 + Docs/Themes/bicycle_parkings.md | 2 + Docs/Themes/bicycle_rental.md | 1 + Docs/Themes/bicyclelib.md | 1 + Docs/Themes/binoculars.md | 1 + Docs/Themes/blind_osm.md | 1 + Docs/Themes/bookcases.md | 1 + Docs/Themes/cafes_and_pubs.md | 1 + Docs/wikiIndex.txt | 18 +- .../layers/bicycle_rental/bicycle_rental.json | 3 +- assets/layers/climbing_gym/climbing_gym.json | 4 +- .../layers/defibrillator/defibrillator.json | 10 +- assets/layers/firepit/firepit.json | 3 +- assets/layers/icons/icons.json | 19 +- assets/layers/postoffices/postoffices.json | 6 +- assets/layers/questions/questions.json | 37 +- assets/layers/school/school.json | 33 +- assets/themes/advertising/advertising.json | 9 +- assets/themes/atm/atm.json | 15 +- assets/themes/bag/bag.json | 36 +- assets/themes/benches/benches.json | 3 +- .../bicycle_parkings/bicycle_parkings.json | 8 +- .../themes/bicycle_rental/bicycle_rental.json | 9 +- assets/themes/bicyclelib/bicyclelib.json | 6 +- assets/themes/binoculars/binoculars.json | 9 +- assets/themes/blind_osm/blind_osm.json | 6 +- assets/themes/bookcases/bookcases.json | 6 +- .../themes/cafes_and_pubs/cafes_and_pubs.json | 6 +- assets/themes/campersite/campersite.json | 60 +- assets/themes/etymology/etymology.json | 2 +- assets/themes/ghostsigns/ghostsigns.json | 21 +- assets/themes/glutenfree/glutenfree.json | 37 +- assets/themes/lactosefree/lactosefree.json | 37 +- langs/layers/de.json | 865 ++++---- langs/layers/en.json | 882 +++++---- langs/layers/nl.json | 581 +++--- langs/themes/en.json | 4 + langs/themes/es.json | 64 +- langs/themes/zh_Hans.json | 2 +- scripts/generateDocs.ts | 85 +- scripts/generateFavouritesLayer.ts | 16 +- scripts/generateIncludedImages.ts | 11 +- scripts/generateLayerOverview.ts | 14 +- scripts/generateLayouts.ts | 17 +- scripts/handleErrors.ts | 62 +- scripts/serverErrorReport.ts | 44 +- scripts/serverLdScrape.ts | 22 +- src/Logic/ExtraFunctions.ts | 6 +- .../Sources/LastClickFeatureSource.ts | 4 +- src/Logic/ImageProviders/ImageProvider.ts | 5 +- .../ImageProviders/ImageUploadManager.ts | 2 - src/Logic/ImageProviders/Imgur.ts | 4 +- src/Logic/ImageProviders/Mapillary.ts | 2 +- .../ImageProviders/WikimediaImageProvider.ts | 6 +- src/Logic/Osm/Actions/ChangeDescription.ts | 2 +- src/Logic/Osm/Actions/LinkImageAction.ts | 2 - src/Logic/Osm/Changes.ts | 107 +- src/Logic/Osm/ChangesetHandler.ts | 20 +- src/Logic/Osm/OsmConnection.ts | 26 +- src/Logic/SimpleMetaTagger.ts | 6 +- src/Logic/State/UserSettingsMetaTagging.ts | 48 +- src/Logic/Web/NearbyImagesSearch.ts | 96 +- src/Logic/Web/Wikidata.ts | 6 +- .../ThemeConfig/Conversion/Conversion.ts | 14 +- .../ThemeConfig/Conversion/FixImages.ts | 15 +- .../ThemeConfig/Conversion/PrepareLayer.ts | 44 +- .../ThemeConfig/Conversion/PrepareTheme.ts | 10 +- .../ThemeConfig/Conversion/Validation.ts | 4 +- src/Models/ThemeConfig/FilterConfig.ts | 28 +- src/Models/ThemeConfig/LayerConfig.ts | 78 +- src/Models/ThemeConfig/TagRenderingConfig.ts | 50 +- src/Models/ThemeViewState.ts | 114 +- src/UI/Base/FloatOver.svelte | 4 +- src/UI/Base/Hotkeys.ts | 94 +- src/UI/Base/Loading.ts | 2 +- src/UI/Base/SvelteUIElement.ts | 10 +- src/UI/Base/TableOfContents.ts | 2 +- src/UI/Base/TitledPanel.svelte | 1 - src/UI/Base/ToSvelte.svelte | 11 +- src/UI/BigComponents/FilterPanel.svelte | 49 +- src/UI/BigComponents/Filterview.svelte | 7 +- src/UI/BigComponents/HotkeyTable.svelte | 29 +- src/UI/BigComponents/SearchField.svelte | 40 +- .../BigComponents/SelectedElementTitle.svelte | 2 +- .../BigComponents/SelectedElementView.svelte | 5 +- src/UI/Image/DeleteImage.ts | 4 +- src/UI/Image/ImageAttribution.svelte | 6 +- src/UI/Image/NearbyImages.svelte | 52 +- .../InputElement/Helpers/WikidataInput.svelte | 56 +- src/UI/InputElement/InputHelper.svelte | 8 +- src/UI/InputElement/InputHelpers.ts | 2 - src/UI/InputElement/LanguagePicker.svelte | 1 - src/UI/InputElement/Validators.ts | 7 +- .../Validators/StringValidator.ts | 14 +- .../Validators/WikidataValidator.ts | 14 +- .../InputElement/WikidataInputHelper.svelte | 84 +- src/UI/Map/MaplibreMap.svelte | 30 +- src/UI/Map/RasterLayerOverview.svelte | 2 +- src/UI/Map/RasterLayerPicker.svelte | 6 +- src/UI/Map/ShowDataLayer.ts | 4 +- src/UI/PlantNet/SpeciesButton.svelte | 12 +- src/UI/Popup/AddNewPoint/AddNewPoint.svelte | 150 +- src/UI/Popup/AddNewPoint/PresetList.svelte | 3 +- src/UI/Popup/ImportButtons/ImportFlow.svelte | 4 +- src/UI/Popup/MinimapViz.svelte | 8 +- src/UI/Popup/Notes/CreateNewNote.svelte | 2 +- .../TagRendering/TagRenderingQuestion.svelte | 10 +- src/UI/QueryParameterDocumentation.ts | 16 +- src/UI/SpecialVisualizations.ts | 16 +- src/UI/Status/MCService.ts | 2 +- src/UI/Status/ServiceIndicator.svelte | 29 +- src/UI/Status/StatusGUI.svelte | 114 +- src/UI/Status/StatusIcon.svelte | 9 +- src/UI/Studio/SchemaBasedArray.svelte | 9 +- src/UI/ThemeViewGUI.svelte | 30 +- src/UI/Wikipedia/WikidataPreviewBox.ts | 48 +- src/UI/Wikipedia/WikidataQuickfacts.svelte | 21 +- src/UI/Wikipedia/Wikidatapreview.svelte | 29 +- .../WikidatapreviewWithLoading.svelte | 16 +- src/UI/Wikipedia/WikipediaArticle.svelte | 10 +- src/UI/i18n/Locale.ts | 10 +- src/UI/i18n/Translation.ts | 24 +- src/Utils.ts | 8 +- src/Utils/MarkdownUtils.ts | 4 +- src/assets/contributors.json | 24 +- src/assets/language_native.json | 2 +- src/assets/language_translations.json | 1731 ++++++++--------- src/assets/schemas/layerconfigmeta.json | 293 ++- src/assets/schemas/layoutconfigmeta.json | 654 ++++++- .../questionabletagrenderingconfigmeta.json | 11 +- .../schemas/tagrenderingconfigmeta.json | 9 + src/assets/translators.json | 54 +- src/service-worker.ts | 4 +- 151 files changed, 4561 insertions(+), 3315 deletions(-) diff --git a/Docs/Schemas/LayerConfigJson.schema.json b/Docs/Schemas/LayerConfigJson.schema.json index 813886e20..f4b125322 100644 --- a/Docs/Schemas/LayerConfigJson.schema.json +++ b/Docs/Schemas/LayerConfigJson.schema.json @@ -810,6 +810,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -1436,6 +1443,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -1667,6 +1681,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false diff --git a/Docs/Schemas/LayerConfigJsonJSC.ts b/Docs/Schemas/LayerConfigJsonJSC.ts index 081f0b0db..1d9cd1d2c 100644 --- a/Docs/Schemas/LayerConfigJsonJSC.ts +++ b/Docs/Schemas/LayerConfigJsonJSC.ts @@ -803,6 +803,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } }, @@ -1423,6 +1430,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -1653,6 +1667,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } }, diff --git a/Docs/Schemas/LayoutConfigJson.schema.json b/Docs/Schemas/LayoutConfigJson.schema.json index 86d663ac3..077d02824 100644 --- a/Docs/Schemas/LayoutConfigJson.schema.json +++ b/Docs/Schemas/LayoutConfigJson.schema.json @@ -701,6 +701,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -1327,6 +1334,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -1558,6 +1572,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false diff --git a/Docs/Schemas/LayoutConfigJsonJSC.ts b/Docs/Schemas/LayoutConfigJsonJSC.ts index 0365d9044..d6dcb0ec3 100644 --- a/Docs/Schemas/LayoutConfigJsonJSC.ts +++ b/Docs/Schemas/LayoutConfigJsonJSC.ts @@ -694,6 +694,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } }, @@ -1314,6 +1321,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -1544,6 +1558,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } }, diff --git a/Docs/Schemas/LineRenderingConfigJson.schema.json b/Docs/Schemas/LineRenderingConfigJson.schema.json index d7ba3d7a2..1e53b6b7e 100644 --- a/Docs/Schemas/LineRenderingConfigJson.schema.json +++ b/Docs/Schemas/LineRenderingConfigJson.schema.json @@ -482,6 +482,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false diff --git a/Docs/Schemas/LineRenderingConfigJsonJSC.ts b/Docs/Schemas/LineRenderingConfigJsonJSC.ts index ab350931a..79c8bfed5 100644 --- a/Docs/Schemas/LineRenderingConfigJsonJSC.ts +++ b/Docs/Schemas/LineRenderingConfigJsonJSC.ts @@ -475,6 +475,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } } diff --git a/Docs/Schemas/MappingConfigJson.schema.json b/Docs/Schemas/MappingConfigJson.schema.json index 76009aebe..18090ea06 100644 --- a/Docs/Schemas/MappingConfigJson.schema.json +++ b/Docs/Schemas/MappingConfigJson.schema.json @@ -509,6 +509,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false diff --git a/Docs/Schemas/MappingConfigJsonJSC.ts b/Docs/Schemas/MappingConfigJsonJSC.ts index 0c89d99d9..db8a9380b 100644 --- a/Docs/Schemas/MappingConfigJsonJSC.ts +++ b/Docs/Schemas/MappingConfigJsonJSC.ts @@ -502,6 +502,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } }, diff --git a/Docs/Schemas/PointRenderingConfigJson.schema.json b/Docs/Schemas/PointRenderingConfigJson.schema.json index 69ed58d52..038f3bca0 100644 --- a/Docs/Schemas/PointRenderingConfigJson.schema.json +++ b/Docs/Schemas/PointRenderingConfigJson.schema.json @@ -556,6 +556,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false diff --git a/Docs/Schemas/PointRenderingConfigJsonJSC.ts b/Docs/Schemas/PointRenderingConfigJsonJSC.ts index 5e36aff07..a244e2ce9 100644 --- a/Docs/Schemas/PointRenderingConfigJsonJSC.ts +++ b/Docs/Schemas/PointRenderingConfigJsonJSC.ts @@ -549,6 +549,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } } diff --git a/Docs/Schemas/QuestionableTagRenderingConfigJson.schema.json b/Docs/Schemas/QuestionableTagRenderingConfigJson.schema.json index 3a664c5c2..b0fa7cfb9 100644 --- a/Docs/Schemas/QuestionableTagRenderingConfigJson.schema.json +++ b/Docs/Schemas/QuestionableTagRenderingConfigJson.schema.json @@ -223,6 +223,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -618,6 +625,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false diff --git a/Docs/Schemas/QuestionableTagRenderingConfigJsonJSC.ts b/Docs/Schemas/QuestionableTagRenderingConfigJsonJSC.ts index 6e3cd82d7..ba7306667 100644 --- a/Docs/Schemas/QuestionableTagRenderingConfigJsonJSC.ts +++ b/Docs/Schemas/QuestionableTagRenderingConfigJsonJSC.ts @@ -223,6 +223,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -611,6 +618,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } }, diff --git a/Docs/Schemas/RewritableConfigJson.schema.json b/Docs/Schemas/RewritableConfigJson.schema.json index 56638afb7..2055a733b 100644 --- a/Docs/Schemas/RewritableConfigJson.schema.json +++ b/Docs/Schemas/RewritableConfigJson.schema.json @@ -436,6 +436,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false diff --git a/Docs/Schemas/RewritableConfigJsonJSC.ts b/Docs/Schemas/RewritableConfigJsonJSC.ts index f8e6c018f..f52ac7906 100644 --- a/Docs/Schemas/RewritableConfigJsonJSC.ts +++ b/Docs/Schemas/RewritableConfigJsonJSC.ts @@ -429,6 +429,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } } }, diff --git a/Docs/Schemas/TagRenderingConfigJson.schema.json b/Docs/Schemas/TagRenderingConfigJson.schema.json index 0a2661913..f105357b9 100644 --- a/Docs/Schemas/TagRenderingConfigJson.schema.json +++ b/Docs/Schemas/TagRenderingConfigJson.schema.json @@ -167,6 +167,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "definitions": { diff --git a/Docs/Schemas/TagRenderingConfigJsonJSC.ts b/Docs/Schemas/TagRenderingConfigJsonJSC.ts index 3947a39ab..aa77db9fe 100644 --- a/Docs/Schemas/TagRenderingConfigJsonJSC.ts +++ b/Docs/Schemas/TagRenderingConfigJsonJSC.ts @@ -167,6 +167,13 @@ export default { "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "definitions": { diff --git a/Docs/Themes/advertising.md b/Docs/Themes/advertising.md index 277e0e9e6..95e9b710f 100644 --- a/Docs/Themes/advertising.md +++ b/Docs/Themes/advertising.md @@ -29,6 +29,7 @@ Available languages: - pl - it - da + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/Themes/atm.md b/Docs/Themes/atm.md index ea53e0405..a99ef0d20 100644 --- a/Docs/Themes/atm.md +++ b/Docs/Themes/atm.md @@ -35,6 +35,7 @@ Available languages: - it - pl - da + - zh_Hans # Table of contents diff --git a/Docs/Themes/bag.md b/Docs/Themes/bag.md index f7e7eb9fa..0398d644b 100644 --- a/Docs/Themes/bag.md +++ b/Docs/Themes/bag.md @@ -28,6 +28,7 @@ Available languages: - cs - zh_Hant - pl + - zh_Hans # Table of contents diff --git a/Docs/Themes/bicycle_parkings.md b/Docs/Themes/bicycle_parkings.md index 9d99b24b6..6c4f47011 100644 --- a/Docs/Themes/bicycle_parkings.md +++ b/Docs/Themes/bicycle_parkings.md @@ -21,6 +21,8 @@ Available languages: - fr - pl - da + - es + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/Themes/bicycle_rental.md b/Docs/Themes/bicycle_rental.md index 98f8abd4c..9386f3e94 100644 --- a/Docs/Themes/bicycle_rental.md +++ b/Docs/Themes/bicycle_rental.md @@ -29,6 +29,7 @@ Available languages: - zh_Hant - eu - pl + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/Themes/bicyclelib.md b/Docs/Themes/bicyclelib.md index 950c17711..2e6c2482d 100644 --- a/Docs/Themes/bicyclelib.md +++ b/Docs/Themes/bicyclelib.md @@ -35,6 +35,7 @@ Available languages: - es - eu - pt + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/Themes/binoculars.md b/Docs/Themes/binoculars.md index f25d7ace8..59120decf 100644 --- a/Docs/Themes/binoculars.md +++ b/Docs/Themes/binoculars.md @@ -30,6 +30,7 @@ Available languages: - cs - eu - pl + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/Themes/blind_osm.md b/Docs/Themes/blind_osm.md index 5954ef6fa..24c71f0ec 100644 --- a/Docs/Themes/blind_osm.md +++ b/Docs/Themes/blind_osm.md @@ -33,6 +33,7 @@ Available languages: - it - pl - da + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/Themes/bookcases.md b/Docs/Themes/bookcases.md index 9b6b888b3..b425b6177 100644 --- a/Docs/Themes/bookcases.md +++ b/Docs/Themes/bookcases.md @@ -33,6 +33,7 @@ Available languages: - eu - pl - da + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/Themes/cafes_and_pubs.md b/Docs/Themes/cafes_and_pubs.md index c130e136f..a1fe00a80 100644 --- a/Docs/Themes/cafes_and_pubs.md +++ b/Docs/Themes/cafes_and_pubs.md @@ -34,6 +34,7 @@ Available languages: - cs - eu - pl + - zh_Hans # Layers defined in this theme configuration file diff --git a/Docs/wikiIndex.txt b/Docs/wikiIndex.txt index 048aa80fb..ce75be97f 100644 --- a/Docs/wikiIndex.txt +++ b/Docs/wikiIndex.txt @@ -49,7 +49,7 @@ {{service_item |name= [https://mapcomplete.org/cafes_and_pubs cafes_and_pubs] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:ca|en}}, {{#language:es|en}}, {{#language:fr|en}}, {{#language:da|en}}, {{#language:nb_NO|en}}, {{#language:pa_PK|en}}, {{#language:cs|en}}, {{#language:it|en}}, {{#language:zh_Hant|en}}, {{#language:eu|en}}, {{#language:pl|en}} +|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:ca|en}}, {{#language:es|en}}, {{#language:fr|en}}, {{#language:da|en}}, {{#language:nb_NO|en}}, {{#language:pa_PK|en}}, {{#language:cs|en}}, {{#language:it|en}}, {{#language:zh_Hant|en}}, {{#language:eu|en}}, {{#language:pl|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: Coffeehouses, pubs and bars |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -103,7 +103,7 @@ {{service_item |name= [https://mapcomplete.org/bookcases bookcases] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:ru|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:it|en}}, {{#language:hu|en}}, {{#language:es|en}}, {{#language:da|en}}, {{#language:ca|en}}, {{#language:cs|en}}, {{#language:eu|en}}, {{#language:pl|en}} +|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:ru|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:it|en}}, {{#language:hu|en}}, {{#language:es|en}}, {{#language:da|en}}, {{#language:ca|en}}, {{#language:cs|en}}, {{#language:eu|en}}, {{#language:pl|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: A public bookcase is a small streetside cabinet, box, old phone booth or some other objects where books are stored |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -112,7 +112,7 @@ {{service_item |name= [https://mapcomplete.org/advertising advertising] |region= Worldwide -|lang= {{#language:ca|en}}, {{#language:es|en}}, {{#language:en|en}}, {{#language:de|en}}, {{#language:cs|en}}, {{#language:fr|en}}, {{#language:nl|en}}, {{#language:zh_Hant|en}}, {{#language:eu|en}}, {{#language:pl|en}} +|lang= {{#language:ca|en}}, {{#language:es|en}}, {{#language:en|en}}, {{#language:de|en}}, {{#language:cs|en}}, {{#language:fr|en}}, {{#language:nl|en}}, {{#language:zh_Hant|en}}, {{#language:eu|en}}, {{#language:pl|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: Where I can find advertising features? |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -130,7 +130,7 @@ {{service_item |name= [https://mapcomplete.org/atm atm] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:nl|en}}, {{#language:ca|en}}, {{#language:cs|en}}, {{#language:nb_NO|en}}, {{#language:es|en}}, {{#language:id|en}}, {{#language:zh_Hant|en}}, {{#language:eu|en}}, {{#language:it|en}}, {{#language:pl|en}}, {{#language:da|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:nl|en}}, {{#language:ca|en}}, {{#language:cs|en}}, {{#language:nb_NO|en}}, {{#language:es|en}}, {{#language:id|en}}, {{#language:zh_Hant|en}}, {{#language:eu|en}}, {{#language:it|en}}, {{#language:pl|en}}, {{#language:da|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: This map shows ATMs to withdraw or deposit money |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -148,7 +148,7 @@ {{service_item |name= [https://mapcomplete.org/bicycle_parkings bicycle_parkings] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:es|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: A map showing all types of bicycle parkings |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -157,7 +157,7 @@ {{service_item |name= [https://mapcomplete.org/bicycle_rental bicycle_rental] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:id|en}}, {{#language:fr|en}}, {{#language:es|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:da|en}}, {{#language:cs|en}}, {{#language:eu|en}}, {{#language:pl|en}} +|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:id|en}}, {{#language:fr|en}}, {{#language:es|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:da|en}}, {{#language:cs|en}}, {{#language:eu|en}}, {{#language:pl|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: A map with bicycle rental stations and bicycle rental shops |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -166,7 +166,7 @@ {{service_item |name= [https://mapcomplete.org/bicyclelib bicyclelib] |region= Worldwide -|lang= {{#language:nl|en}}, {{#language:en|en}}, {{#language:it|en}}, {{#language:ru|en}}, {{#language:ja|en}}, {{#language:fr|en}}, {{#language:zh_Hant|en}}, {{#language:de|en}}, {{#language:hu|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:da|en}}, {{#language:cs|en}}, {{#language:es|en}}, {{#language:eu|en}}, {{#language:pl|en}} +|lang= {{#language:nl|en}}, {{#language:en|en}}, {{#language:it|en}}, {{#language:ru|en}}, {{#language:ja|en}}, {{#language:fr|en}}, {{#language:zh_Hant|en}}, {{#language:de|en}}, {{#language:hu|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:da|en}}, {{#language:cs|en}}, {{#language:es|en}}, {{#language:eu|en}}, {{#language:pl|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: A bicycle library is a place where bicycles can be lent, often for a small yearly fee |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -175,7 +175,7 @@ {{service_item |name= [https://mapcomplete.org/binoculars binoculars] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:it|en}}, {{#language:nb_NO|en}}, {{#language:zh_Hant|en}}, {{#language:hu|en}}, {{#language:fr|en}}, {{#language:es|en}}, {{#language:ca|en}}, {{#language:da|en}}, {{#language:cs|en}}, {{#language:eu|en}}, {{#language:pl|en}} +|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:de|en}}, {{#language:it|en}}, {{#language:nb_NO|en}}, {{#language:zh_Hant|en}}, {{#language:hu|en}}, {{#language:fr|en}}, {{#language:es|en}}, {{#language:ca|en}}, {{#language:da|en}}, {{#language:cs|en}}, {{#language:eu|en}}, {{#language:pl|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: A map with fixed binoculars |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png @@ -184,7 +184,7 @@ {{service_item |name= [https://mapcomplete.org/blind_osm blind_osm] |region= Worldwide -|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:nl|en}}, {{#language:fr|en}}, {{#language:ca|en}}, {{#language:cs|en}}, {{#language:nb_NO|en}}, {{#language:es|en}}, {{#language:eu|en}}, {{#language:it|en}}, {{#language:pl|en}} +|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:nl|en}}, {{#language:fr|en}}, {{#language:ca|en}}, {{#language:cs|en}}, {{#language:nb_NO|en}}, {{#language:es|en}}, {{#language:eu|en}}, {{#language:it|en}}, {{#language:pl|en}}, {{#language:zh_Hans|en}} |descr= A MapComplete theme: Help to map features relevant for the blind |material= {{yes|[https://mapcomplete.org/ Yes]}} |image= MapComplete_Screenshot.png diff --git a/assets/layers/bicycle_rental/bicycle_rental.json b/assets/layers/bicycle_rental/bicycle_rental.json index 885ac614d..f9c58c0f5 100644 --- a/assets/layers/bicycle_rental/bicycle_rental.json +++ b/assets/layers/bicycle_rental/bicycle_rental.json @@ -471,7 +471,8 @@ "if": "rental=cargo_bike", "then": { "en": "Cargo bikes can be rented here", - "nl": "Bakfietsen kunnen hier gehuurd worden" + "nl": "Bakfietsen kunnen hier gehuurd worden", + "de": "Lastenräder können hier gemietet werden" } } ], diff --git a/assets/layers/climbing_gym/climbing_gym.json b/assets/layers/climbing_gym/climbing_gym.json index c3f27a1ac..7e62511bc 100644 --- a/assets/layers/climbing_gym/climbing_gym.json +++ b/assets/layers/climbing_gym/climbing_gym.json @@ -87,7 +87,9 @@ } ], "lineRendering": [], - "titleIcons": ["icons.defaults"], + "titleIcons": [ + "icons.defaults" + ], "presets": [ { "title": { diff --git a/assets/layers/defibrillator/defibrillator.json b/assets/layers/defibrillator/defibrillator.json index e40eefd2d..d4a37d68b 100644 --- a/assets/layers/defibrillator/defibrillator.json +++ b/assets/layers/defibrillator/defibrillator.json @@ -526,10 +526,12 @@ "type": "text", "key": "defibrillator:location:fr" }, - "condition": {"or":[ - "_country=be", - "defibrillator:location:fr~*" - ]}, + "condition": { + "or": [ + "_country=be", + "defibrillator:location:fr~*" + ] + }, "id": "defibrillator-defibrillator:location:fr" }, "wheelchair-access", diff --git a/assets/layers/firepit/firepit.json b/assets/layers/firepit/firepit.json index bf5047af6..a0cd27170 100644 --- a/assets/layers/firepit/firepit.json +++ b/assets/layers/firepit/firepit.json @@ -113,7 +113,8 @@ "override": { "question": { "en": "Is the firepit available all around the year?", - "nl": "Is deze kampvuurplaats heel het jaar door beschikbaar?" + "nl": "Is deze kampvuurplaats heel het jaar door beschikbaar?", + "de": "Ist diese Feuerstelle rund um das Jahr nutzbar?" } } } diff --git a/assets/layers/icons/icons.json b/assets/layers/icons/icons.json index 900c7c40b..a5fb70601 100644 --- a/assets/layers/icons/icons.json +++ b/assets/layers/icons/icons.json @@ -256,7 +256,8 @@ } ] }, - {"id": "lactosefree", + { + "id": "lactosefree", "labels": [ "defaults", "in_favourite" @@ -264,14 +265,19 @@ "mappings": [ { "if": { - "or":["diet:lactose_free=only","diet:lactose_free=yes","diet:lactose_free=limited"] + "or": [ + "diet:lactose_free=only", + "diet:lactose_free=yes", + "diet:lactose_free=limited" + ] }, "#": "ignore-image-in-then", "then": "lactose free" } ] }, - {"id": "glutenfree", + { + "id": "glutenfree", "labels": [ "defaults", "in_favourite" @@ -279,14 +285,17 @@ "mappings": [ { "if": { - "or":["diet:gluten_free=only","diet:gluten_free=yes","diet:gluten_free=limited"] + "or": [ + "diet:gluten_free=only", + "diet:gluten_free=yes", + "diet:gluten_free=limited" + ] }, "#": "ignore-image-in-then", "then": "gluten free" } ] }, - { "id": "sharelink", "labels": [ diff --git a/assets/layers/postoffices/postoffices.json b/assets/layers/postoffices/postoffices.json index 9835e6550..0d25d2809 100644 --- a/assets/layers/postoffices/postoffices.json +++ b/assets/layers/postoffices/postoffices.json @@ -439,7 +439,8 @@ "en": "You can pick up missed parcels here", "de": "Hier können Sie verpasste Pakete abholen", "ca": "Podeu recollir els paquets perduts aquí", - "cs": "Zmeškané zásilky si můžete vyzvednout zde" + "cs": "Zmeškané zásilky si můžete vyzvednout zde", + "nl": "Je kunt hier gemiste pakjes ophalen" } }, { @@ -463,7 +464,8 @@ "question": { "en": "Can you send parcels to here for pickup?", "de": "Können Sie Pakete zur Abholung hierher schicken?", - "ca": "Pots enviar paquets aquí per a arreplegar-los?" + "ca": "Pots enviar paquets aquí per a arreplegar-los?", + "nl": "Kun je deze plaats gebruiken als afhaalpunt?" }, "freeform": { "key": "post_office:parcel_to", diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index d91d44c94..054992b3c 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -633,7 +633,9 @@ } } ], - "filter": ["filters.dogs"] + "filter": [ + "filters.dogs" + ] }, { "id": "description", @@ -758,7 +760,9 @@ "hideInAnswer": true } ], - "filter": ["filters.open_now"] + "filter": [ + "filters.open_now" + ] }, { "id": "opening_hours_24_7", @@ -1043,7 +1047,10 @@ } } ], - "filter": ["filters.accepts_cash","filters.accepts_cards"] + "filter": [ + "filters.accepts_cash", + "filters.accepts_cards" + ] }, { "id": "payment-options-split", @@ -2124,7 +2131,9 @@ } } ], - "filter": ["filters.has_internet"] + "filter": [ + "filters.has_internet" + ] }, { "id": "internet-fee", @@ -2456,7 +2465,9 @@ } } ], - "filter": ["filters.sugar_free"] + "filter": [ + "filters.sugar_free" + ] }, { "id": "lactose_free", @@ -2477,7 +2488,6 @@ "cs": "Prodává pouze výrobky bez laktózy" }, "icon": "./assets/layers/questions/lactose_free.svg" - }, { "if": "diet:lactose_free=yes", @@ -2487,7 +2497,6 @@ "cs": "Velká nabídka bez laktózy" }, "icon": "./assets/layers/questions/lactose_free.svg" - }, { "if": "diet:lactose_free=limited", @@ -2506,8 +2515,9 @@ } } ], - "filter": ["filters.lactose_free"] - + "filter": [ + "filters.lactose_free" + ] }, { "id": "gluten_free", @@ -2555,8 +2565,9 @@ } } ], - "filter": ["filters.gluten_free"] - + "filter": [ + "filters.gluten_free" + ] }, { "id": "vegan", @@ -2785,7 +2796,8 @@ "id": "seasonal", "question": { "en": "Is {title()} available all around the year?", - "nl": "Is {title()} heel het jaar beschikbaar?" + "nl": "Is {title()} heel het jaar beschikbaar?", + "de": "Ist {title()} rund um das Jahr nutzbar?" }, "mappings": [ { @@ -2842,7 +2854,6 @@ "en": "This facility does have showers" } }, - { "if": "shower=no", "icon": "invalid;./assets/layers/shower/shower.svg", diff --git a/assets/layers/school/school.json b/assets/layers/school/school.json index bf5b410dd..39a4ef0af 100644 --- a/assets/layers/school/school.json +++ b/assets/layers/school/school.json @@ -283,66 +283,77 @@ { "id": "pedagogy", "question": { - "en": "What educational theory is applied on this school?" + "en": "What educational theory is applied on this school?", + "de": "Welche Bildungstheorie wird auf dieser Schule angewendet?" }, "mappings": [ { "if": "pedagogy=mainstream", "then": { - "en": "This school does not use a specific pedagogy" + "en": "This school does not use a specific pedagogy", + "de": "Diese Schule benutzt keine spezifische Pädagogik" } }, { "if": "pedagogy=montessori", "then": { - "en": "This school uses the Montessori method of education" + "en": "This school uses the Montessori method of education", + "de": "Diese Schule nutzt die Montessori Methode der Bildung" } }, { "if": "pedagogy=freinet", "then": { - "en": "This school is associated with the Freinet Modern School Movement" + "en": "This school is associated with the Freinet Modern School Movement", + "de": "Diese Schule ist mit der Freinet Modern School Movement verbunden" } }, { "if": "pedagogy=jenaplan", "then": { - "en": "This school uses the Jenaplan teaching concept" + "en": "This school uses the Jenaplan teaching concept", + "de": "Diese Schule nutzt das Lehrkonzept von Jenaplan" } }, { "if": "pedagogy=waldorf", "then": { - "en": "This school uses the Steiner/Waldorf educational philosophy" + "en": "This school uses the Steiner/Waldorf educational philosophy", + "de": "Diese Schule nutzt die Steiner/Waldorfer Bildungsphilosophie" } }, { "if": "pedagogy=dalton", "then": { - "en": "This school uses the Dalton plan teaching concept" + "en": "This school uses the Dalton plan teaching concept", + "de": "Diese Schule nutzt das Dalton Plan Lehrkonzept" } }, { "if": "pedagogy=outdoor", "then": { - "en": "This school uses outdoor learning" + "en": "This school uses outdoor learning", + "de": "Diese Schule nutzt Outdoor-Lernen" } }, { "if": "pedagogy=reggio_emilia", "then": { - "en": "This school uses the Reggio Emilia approach" + "en": "This school uses the Reggio Emilia approach", + "de": "Diese Schule nutzt den Reggio Emilia-Ansatz" } }, { "if": "pedagogy=sudbury", "then": { - "en": "This school uses the Sudbury system" + "en": "This school uses the Sudbury system", + "de": "Diese Schule nutzt das Sudbury-System" } } ], "render": { - "en": "This school uses {pedagogy}" + "en": "This school uses {pedagogy}", + "de": "Diese Schule benutzt {pedagogy}" }, "freeform": { "key": "pedagogy" diff --git a/assets/themes/advertising/advertising.json b/assets/themes/advertising/advertising.json index e4c0378ce..979dc9448 100644 --- a/assets/themes/advertising/advertising.json +++ b/assets/themes/advertising/advertising.json @@ -12,7 +12,8 @@ "eu": "Publizitatea", "pl": "Reklamy", "it": "Pubblicità", - "da": "Reklamer" + "da": "Reklamer", + "zh_Hans": "广告" }, "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 +28,8 @@ "eu": "Inoiz pentsatu duzu zenbat iragarki dauden gure kale eta errepideetan? Mapa honekin, kalean aurki ditzakezun publizitate-ezaugarri guztiei buruzko informazioa aurkitu eta erants dezakezu", "pl": "Czy zastanawiałeś się kiedyś, ile reklam jest na naszych ulicach i drogach? Dzięki tej mapie możesz znaleźć i dodać informacje o wszystkich funkcjach reklamowych, które możesz znaleźć na ulicy", "pt": "Já se perguntou quantas propagandas existem nas nossas ruas e estradas? Com este mapa pode encontrar e adicionar informações sobre todos os recursos de publicidade que pode encontrar na rua", - "it": "Vi siete mai chiesti quante pubblicità ci sono nelle nostre strade e strade? Con questa mappa è possibile trovare e aggiungere informazioni su tutte le caratteristiche pubblicitarie che si possono trovare sulla strada" + "it": "Vi siete mai chiesti quante pubblicità ci sono nelle nostre strade e strade? Con questa mappa è possibile trovare e aggiungere informazioni su tutte le caratteristiche pubblicitarie che si possono trovare sulla strada", + "zh_Hans": "你是否曾经想过我们的街道和道路上有多少广告?通过这张地图,你可以查找并添加有关街道上所有广告特征的信息" }, "shortDescription": { "ca": "On puc trobar elements publicitaris?", @@ -39,7 +41,8 @@ "nl": "Waar zijn er reclameborden?", "zh_Hant": "我能夠在那裡找到廣告物件?", "eu": "Non aurki ditzaket publizitate ezaugarriak?", - "pl": "Gdzie mogę znaleźć obiekty reklamowe?" + "pl": "Gdzie mogę znaleźć obiekty reklamowe?", + "zh_Hans": "我可以在哪里找到广告功能?" }, "icon": "./assets/themes/advertising/icon.svg", "credits": [ diff --git a/assets/themes/atm/atm.json b/assets/themes/atm/atm.json index 853e60a45..303195dc2 100644 --- a/assets/themes/atm/atm.json +++ b/assets/themes/atm/atm.json @@ -15,7 +15,8 @@ "eu": "Kutxazain automatikoa", "it": "Sportelli bancomat", "pl": "Bankomaty", - "da": "Hæveautomater" + "da": "Hæveautomater", + "zh_Hans": "自动取款机" }, "description": { "en": "This map shows ATMs to withdraw or deposit money", @@ -31,7 +32,8 @@ "eu": "Mapa honek dirua atera edo sartzeko kutxazain automatikoak erakusten ditu", "it": "Questa mappa mostra gli sportelli Bancomat per ritirare o depositare del denaro", "pl": "Ta mapa pokazuje bankomaty, w których można wypłacać lub wpłacać pieniądze", - "da": "Dette kort viser hæveautomater, hvor du kan hæve og indsætte kontanter" + "da": "Dette kort viser hæveautomater, hvor du kan hæve og indsætte kontanter", + "zh_Hans": "这张地图显示了可以取款或存款的自动取款机" }, "icon": "./assets/themes/atm/logo.svg", "layers": [ @@ -99,7 +101,8 @@ "it": "Importa questo sportello bancomat", "pl": "Importuj ten bankomat", "cs": "Importovat tento bankomat", - "da": "Importer denne hæveautomat" + "da": "Importer denne hæveautomat", + "zh_Hans": "导入这个ATM" }, "icon": "./assets/svg/addSmall.svg" } @@ -116,7 +119,8 @@ "cs": "OpenStreetMap ví o bankomatu, který je {_closest_osm_poi_distance} metr daleko. ", "pl": "OpenStreetMap wie o bankomacie oddalonym o {_closest_osm_poi_distance} metry. ", "nl": "OpenStreetMap kent een geldautomaat die {_closest_osm_poi_distance} meter weg is ", - "da": "OpenStreetMap kender en hæveautomatet, som ligger {_closest_osm_poi_distance} meter væk. " + "da": "OpenStreetMap kender en hæveautomatet, som ligger {_closest_osm_poi_distance} meter væk. ", + "zh_Hans": "OpenStreetMap 知道有一个自动取款机,它距离你 {_closest_osm_poi_distance} 米。 " } }, { @@ -137,7 +141,8 @@ "pl": "Dodaj wszystkie sugerowane znaczniki do najbliższego bankomatu", "cs": "Přidání všech navrhovaných značek do nejbližšího bankomatu", "nl": "Voeg alle gesuggereerde tags toe aan de dichtstbijzijnde geldautomaat", - "da": "Tilføj alle foreslåede tags til den nærmeste hæveautomat" + "da": "Tilføj alle foreslåede tags til den nærmeste hæveautomat", + "zh_Hans": "将所有建议的标签添加到距离最近的自动取款机" }, "image": "./assets/svg/addSmall.svg", "maproulette_id": "mr_taskId" diff --git a/assets/themes/bag/bag.json b/assets/themes/bag/bag.json index 088c53015..eb526b223 100644 --- a/assets/themes/bag/bag.json +++ b/assets/themes/bag/bag.json @@ -10,7 +10,8 @@ "es": "Ayudante de importación BAG", "cs": "Pomocník pro import BAG", "zh_Hant": "BAG 匯入助手", - "pl": "Pomocnik importowy BAG" + "pl": "Pomocnik importowy BAG", + "zh_Hans": "BAG 导入助手" }, "description": { "nl": "Dit thema helpt het importeren van BAG data", @@ -22,7 +23,8 @@ "zgh": "ⵉⵜⵜⴰⵡⵙ ⵉⵎⵔⵙⵉ ⴰⴷ ⴳ ⵡⴰⵎⵎⴰⵥ ⵏ ⵜⵎⵓⵛⴰ ⵙⴳ BAG", "es": "Este tema ayuda a importar datos de BAG", "eu": "Gai honek BAGeko datuak inportatzen laguntzen du", - "pl": "Motyw ten pomaga w importowaniu danych z BAG" + "pl": "Motyw ten pomaga w importowaniu danych z BAG", + "zh_Hans": "这个主题帮助导入来自BAG的数据" }, "shortDescription": { "nl": "BAG import helper tool", @@ -33,7 +35,8 @@ "es": "Herramienta de ayuda a la importación BAG", "cs": "Pomocný nástroj pro import BAG", "eu": "BAGak inportatzen laguntzeko tresna", - "pl": "Narzędzie wspomagające import BAG" + "pl": "Narzędzie wspomagające import BAG", + "zh_Hans": "BAG 导入辅助工具" }, "icon": "./assets/themes/bag/logo.svg", "startZoom": 9, @@ -69,7 +72,8 @@ "zgh": "ⵜⴳⴰ ⵜⵙⴰⵖⵓⵍⵜ ⴳ BAG {ref:bag}", "es": "La referencia de BAG es {ref:bag}", "cs": "Reference v BAG je {ref:bag}", - "pl": "Numer referencyjny w BAG to {ref:bag}" + "pl": "Numer referencyjny w BAG to {ref:bag}", + "zh_Hans": "在 BAG 中的参考是 {ref:bag}" }, "mappings": [ { @@ -83,7 +87,8 @@ "ca": "Aquest edifici no té referència al BAG", "zgh": "ⵜⵓⵚⴽⴰ ⴰⴷ ⵓⵔ ⵖⵓⵔⵙ ⵜⴰⵙⴰⵖⵓⵍⵜ ⴳ BAG", "es": "Este edificio no tiene referencia en el BAG", - "pl": "Budynek ten nie ma odniesienia w BAG" + "pl": "Budynek ten nie ma odniesienia w BAG", + "zh_Hans": "这栋建筑在BAG中没有参考信息" } } ] @@ -197,7 +202,8 @@ "zgh": "ⵜⵓⵚⴽⴰⵡⵉⵏ ⵙⴳ ⵡⴰⵔⵔⴰ ⵏ BAG", "es": "Edificios del registro BAG", "cs": "Budovy z registru BAG", - "pl": "Budynki z rejestru BAG" + "pl": "Budynki z rejestru BAG", + "zh_Hans": "BAG 注册中的建筑物" }, "source": { "geoJson": "https://service.pdok.nl/lv/bag/wfs/v2_0?request=GetFeature&service=WFS&version=2.0.0&outputFormat=application%2Fjson%3B%20subtype%3Dgeojson&typeName=bag%3Apand&bbox={x_min}%2C{y_min}%2C{x_max}%2C{y_max}%2CCRS84&srsName=EPSG%3A4326", @@ -252,7 +258,8 @@ "cs": "Zatím nebyly vypočteny správné hodnoty. Aktualizujte stránku", "nb_NO": "Har ikke regnet ut riktige verdier enda. Gjenoppfrisk siden.", "es": "Aún no se han calculado los valores correctos. Actualice esta página", - "pl": "Jeszcze nie obliczono poprawnych wartości. Odśwież tę stronę" + "pl": "Jeszcze nie obliczono poprawnych wartości. Odśwież tę stronę", + "zh_Hans": "尚未计算出正确的值。请刷新此页面" } }, { @@ -281,7 +288,8 @@ "ca": "La referència a BAG és {_bag_obj:ref:bag}", "es": "La referencia en BAG es {_bag_obj:ref:bag}", "cs": "Reference v BAG je {_bag_obj:ref:bag}", - "pl": "Odniesienie w BAG to {_bag_obj:ref:bag}" + "pl": "Odniesienie w BAG to {_bag_obj:ref:bag}", + "zh_Hans": "在 BAG 中的参考文献是 {_bag_obj:ref:bag}" } }, { @@ -297,7 +305,8 @@ "cs": "Tato budova byla postavena v {_bag_obj:start_date}", "nb_NO": "Bygning oppført {_bag_obj:start_date}", "pl": "Ten budynek zbudowano w {_bag_obj:start_date}", - "pt": "Esta construção é de {_bag_obj:start_date}" + "pt": "Esta construção é de {_bag_obj:start_date}", + "zh_Hans": "这座建筑建于 {_bag_obj:start_date}" }, "mappings": [ { @@ -311,7 +320,8 @@ "cs": "Stavba byla zahájena v {_bag_obj:start_date}", "nb_NO": "Oppføring startet {_bag_obj:start_date}", "es": "Este edificio se empezó a construir en {_bag_obj:start_date}", - "pl": "Budynek został zbudowany w {_bag_obj:start_date}" + "pl": "Budynek został zbudowany w {_bag_obj:start_date}", + "zh_Hans": "该建筑始建于 {_bag_obj:start_date}" } } ] @@ -327,7 +337,8 @@ "cs": "Typ budovy je {_bag_obj:building}.", "nb_NO": "Dette er en bygning av typen {_bag_obj:building}", "es": "El edificio es de tipo {_bag_obj:building}", - "pl": "Rodzaj budynku to {_bag_obj:building}" + "pl": "Rodzaj budynku to {_bag_obj:building}", + "zh_Hans": "建筑类型是 {_bag_obj:building}" }, "mappings": [ { @@ -340,7 +351,8 @@ "ca": "El tipus d'edifici serà {_bag_obj:construction}", "cs": "Typ budovy bude {_bag_obj:construction}", "es": "El tipo de edificio será un {_bag_obj:construction}", - "pl": "Budynek będzie o typie {_bag_obj:construction}" + "pl": "Budynek będzie o typie {_bag_obj:construction}", + "zh_Hans": "建筑类型将是 {_bag_obj:construction}" } } ] diff --git a/assets/themes/benches/benches.json b/assets/themes/benches/benches.json index e25e5851b..5e2bfee96 100644 --- a/assets/themes/benches/benches.json +++ b/assets/themes/benches/benches.json @@ -39,7 +39,8 @@ "da": "Dette kort viser alle bænke, der er registreret i OpenStreetMap: Individuelle bænke og bænke, der hører til offentlige transportpladser eller shelters. Med en OpenStreetMap-konto kan du kortlægge nye bænke eller redigere detaljer om eksisterende bænke.", "cs": "Tato mapa zobrazuje všechny lavičky, které jsou zaznamenány v OpenStreetMap: samostatné lavičky a lavičky patřící k zastávkám veřejné dopravy nebo přístřeškům.", "eu": "OpenStreetMap-en erregistratzen diren banku guztiak erakusten ditu mapa honek: garraio publikoko geralekuetako edo babeslekuetako banakako bankuak eta bankuak.", - "pl": "Mapa ta pokazuje wszystkie ławki zarejestrowane w OpenStreetMap: ławki indywidualne oraz ławki należące do przystanków komunikacji miejskiej lub wiat." + "pl": "Mapa ta pokazuje wszystkie ławki zarejestrowane w OpenStreetMap: ławki indywidualne oraz ławki należące do przystanków komunikacji miejskiej lub wiat.", + "zh_Hans": "这张地图显示了所有记录在 OpenStreetMap 中的长椅:包括独立长椅和属于公共交通站点或候车亭的长椅。" }, "shortDescription": { "en": "A map of benches", diff --git a/assets/themes/bicycle_parkings/bicycle_parkings.json b/assets/themes/bicycle_parkings/bicycle_parkings.json index 8a908dfad..eeb95ae95 100644 --- a/assets/themes/bicycle_parkings/bicycle_parkings.json +++ b/assets/themes/bicycle_parkings/bicycle_parkings.json @@ -6,11 +6,15 @@ "ca": "Aparcament de bicicletes", "fr": "Stationnement vélo", "pl": "Parkingi dla rowerów", - "da": "Cykelparkering" + "da": "Cykelparkering", + "es": "Aparcamiento de bicicletas", + "zh_Hans": "自行车停车场" }, "description": { "en": "A map showing all types of bicycle parkings", - "de": "Eine Karte mit allen Arten von Fahrradabstellplätzen" + "de": "Eine Karte mit allen Arten von Fahrradabstellplätzen", + "es": "Un mapa que muestra todos los tipos de aparcamientos de bicicletas", + "zh_Hans": "一张显示所有类型自行车停车设施的地图" }, "icon": "./assets/themes/bicycle_parkings/logo.svg", "layers": [ diff --git a/assets/themes/bicycle_rental/bicycle_rental.json b/assets/themes/bicycle_rental/bicycle_rental.json index bd14568e1..96c0f57dc 100644 --- a/assets/themes/bicycle_rental/bicycle_rental.json +++ b/assets/themes/bicycle_rental/bicycle_rental.json @@ -14,7 +14,8 @@ "cs": "Půjčovna kol", "zh_Hant": "單車租借站", "eu": "Bizikleta alokairua", - "pl": "Wypożyczanie rowerów" + "pl": "Wypożyczanie rowerów", + "zh_Hans": "自行车租赁" }, "description": { "en": "On this map, you'll find the many bicycle rental stations as they are known by OpenStreetMap", @@ -28,7 +29,8 @@ "cs": "Na této mapě najdete půjčovny jízdních kol, jak jsou uvedeny v OpenStreetMap", "eu": "Mapa honetan aurkituko dituzu bizikletak alokatzeko OpenStreetMap-ek ezagutzen dituen estazio ugari", "it": "In questa mappa trovi i luoghi conosciuti da OpenStreetMap dove puoi noleggiare delle biciclette", - "pl": "Na tej mapie znajdziesz wiele stacji wynajmu rowerów, znanych w OpenStreetMap" + "pl": "Na tej mapie znajdziesz wiele stacji wynajmu rowerów, znanych w OpenStreetMap", + "zh_Hans": "在这张地图上,你可以找到许多由 OpenStreetMap 记录的自行车租赁站点" }, "shortDescription": { "en": "A map with bicycle rental stations and bicycle rental shops", @@ -42,7 +44,8 @@ "da": "Et kort med cykeludlejningsstationer og cykeludlejningsbutikker", "cs": "Mapa se stanicemi a obchody pro vypůjčení kol", "eu": "Bizikletak alokatzeko estazioen eta bizikletak alokatzeko denden mapa", - "pl": "Mapa ze stacjami wypożyczania rowerów i wypożyczalniami rowerów" + "pl": "Mapa ze stacjami wypożyczania rowerów i wypożyczalniami rowerów", + "zh_Hans": "一张包含自行车租赁站点和自行车租赁商店的地图" }, "icon": "./assets/themes/bicycle_rental/logo.svg", "layers": [ diff --git a/assets/themes/bicyclelib/bicyclelib.json b/assets/themes/bicyclelib/bicyclelib.json index a2a6f34bc..7184d3612 100644 --- a/assets/themes/bicyclelib/bicyclelib.json +++ b/assets/themes/bicyclelib/bicyclelib.json @@ -20,7 +20,8 @@ "cs": "Bicycle libraries", "es": "Bibliotecas de bicicletas", "eu": "Bizikleta liburutegia", - "pt": "Bibliotecas de bicicletas" + "pt": "Bibliotecas de bicicletas", + "zh_Hans": "自行车图书馆" }, "description": { "nl": "Een fietsbibliotheek is een plaats waar men een fiets kan lenen, vaak voor een klein bedrag per jaar. Een typisch voorbeeld zijn kinderfietsbibliotheken, waar men een fiets op maat van het kind kan lenen. Is het kind de fiets ontgroeid, dan kan het te kleine fietsje omgeruild worden voor een grotere.", @@ -38,7 +39,8 @@ "cs": "\"Bicycle library\" je místo, kde si lze půjčit jízdní kola, často za malý roční poplatek. Významným případem použití jsou \"bicycle libraries\" pro děti, které jim umožňují vyměnit kolo za větší, když ze svého stávajícího kola vyrostou", "es": "Una biblioteca de bicicletas es un lugar donde se prestan bicicletas, a menudo por una pequeña cuota anual. Un caso de uso notable son las bibliotecas de bicicletas para niños, que les permiten cambiar por una bicicleta más grande cuando les queda pequeña", "eu": "Bizikletak uzteko lekua da bizikleta-liburutegia, askotan urteko kuota txiki baten truke. Kasu aipagarri bat haurrentzako bizikleta-liburutegiak dira, egungo bizikleta gainditu dutenean bizikleta handiago baterako aldatzeko aukera ematen dietenak", - "pl": "Biblioteka rowerowa to miejsce, w którym można wypożyczyć rowery, często za niewielką opłatą roczną. Godnym uwagi przypadkiem zastosowania są biblioteki rowerowe dla dzieci, które pozwalają im zmienić rower na większy, gdy wyrosną z obecnego roweru" + "pl": "Biblioteka rowerowa to miejsce, w którym można wypożyczyć rowery, często za niewielką opłatą roczną. Godnym uwagi przypadkiem zastosowania są biblioteki rowerowe dla dzieci, które pozwalają im zmienić rower na większy, gdy wyrosną z obecnego roweru", + "zh_Hans": "自行车图书馆是一个可以借用自行车的地方,通常需要支付小额的年度费用。一个显著的使用场景是儿童自行车图书馆,这允许孩子们在长大后更换成更大的自行车" }, "icon": "./assets/themes/bicyclelib/logo.svg", "layers": [ diff --git a/assets/themes/binoculars/binoculars.json b/assets/themes/binoculars/binoculars.json index a255913bc..de754ea26 100644 --- a/assets/themes/binoculars/binoculars.json +++ b/assets/themes/binoculars/binoculars.json @@ -15,7 +15,8 @@ "pa_PK": "بائینوکولر", "cs": "Dalekohledy", "eu": "Binokularrak", - "pl": "Lornetki" + "pl": "Lornetki", + "zh_Hans": "望远镜" }, "description": { "en": "A map with binoculars fixed in place with a pole. It can typically be found on touristic locations, viewpoints, on top of panoramic towers or occasionally on a nature reserve.", @@ -31,7 +32,8 @@ "da": "Et kort over udsigtskikkert fastgjort på en stang. Det kan typisk findes på turistmæssige steder, udsigtspunkter, på toppen af panoramatårne eller lejlighedsvis på et naturreservat.", "cs": "Mapa s dalekohledem upevněným na místě pomocí tyče. Obvykle se nachází na turistických místech, rozhlednách, vrcholech panoramatických věží nebo příležitostně v přírodních rezervacích.", "eu": "Zutoin batean prismatiko finkoak dituen mapa. Leku turistikoetan, begiratokietan, dorre panoramikoen gainean edo, batzuetan, erreserba natural batean egoten da.", - "pl": "Mapa z lornetkami zamocowanymi na słupku. Zwykle można je odnaleźć w lokalizacjach turystycznych, punktach widokowych, na szczytach wież panoramicznych lub czasami w rezerwacie przyrody." + "pl": "Mapa z lornetkami zamocowanymi na słupku. Zwykle można je odnaleźć w lokalizacjach turystycznych, punktach widokowych, na szczytach wież panoramicznych lub czasami w rezerwacie przyrody.", + "zh_Hans": "一张显示固定在杆子上的望远镜的地图。这种望远镜通常可以在旅游景点、观景点、全景塔顶部或偶尔在自然保护区找到。" }, "shortDescription": { "en": "A map with fixed binoculars", @@ -47,7 +49,8 @@ "da": "Et kort over fastgjorte kikkerter", "cs": "Mapa s pevnými dalekohledy", "eu": "Prismatiko finkoak dituen mapa", - "pl": "Mapa ze stałymi lornetkami" + "pl": "Mapa ze stałymi lornetkami", + "zh_Hans": "一张显示固定望远镜的地图" }, "icon": "./assets/layers/binocular/telescope.svg", "layers": [ diff --git a/assets/themes/blind_osm/blind_osm.json b/assets/themes/blind_osm/blind_osm.json index c07ccd4b6..42c6e5c17 100644 --- a/assets/themes/blind_osm/blind_osm.json +++ b/assets/themes/blind_osm/blind_osm.json @@ -13,7 +13,8 @@ "eu": "OSM itsuentzat", "it": "OSM per i non vedenti", "pl": "OSM dla niewidomych", - "da": "OSM for blinde" + "da": "OSM for blinde", + "zh_Hans": "为盲人设计的OSM" }, "description": { "en": "Help to map features relevant for the blind", @@ -26,7 +27,8 @@ "es": "Ayuda para cartografiar elementos relevantes para invidentes", "eu": "Itsuentzako elementu garrantzitsuak kartografiatzeko laguntza", "it": "Aiuta a mappare le caratteristiche importanti per i non vedenti", - "pl": "Pomóż umieszczać na mapie obiekty ważne dla niewidomych" + "pl": "Pomóż umieszczać na mapie obiekty ważne dla niewidomych", + "zh_Hans": "帮助绘制与盲人相关的设施" }, "icon": "./assets/themes/blind_osm/Blindicon.svg", "startZoom": 20, diff --git a/assets/themes/bookcases/bookcases.json b/assets/themes/bookcases/bookcases.json index a3caa3c36..d2a923292 100644 --- a/assets/themes/bookcases/bookcases.json +++ b/assets/themes/bookcases/bookcases.json @@ -18,7 +18,8 @@ "cs": "Veřejné knihovničky", "eu": "Apalategi publikoak", "pl": "Publiczne regały na książki", - "da": "Bogbytteskabe" + "da": "Bogbytteskabe", + "zh_Hans": "公共书柜" }, "description": { "en": "A public bookcase is a small streetside cabinet, box, old phone booth or some other objects where books are stored. Everyone can place or take a book. This map aims to collect all these bookcases.", @@ -35,7 +36,8 @@ "ca": "Una llibreria pública és un xicotet armari al carrer, una caixa, una vella cabina telefònica o algun altre objecte on es guarden llibres. Tothom pot col·locar o agafar un llibre. Aquest mapa pretén recollir totes aquestes llibreries.", "cs": "Veřejná knihovna je malá pouliční skříňka, krabice, stará telefonní budka nebo jiný předmět, ve kterém jsou uloženy knihy. Kdokoliv do ní může umístit, nebo si z ní vzít knihu. Cílem této mapy je shromáždit všechny tyto knihovny.", "eu": "Kale-liburutegi publiko bat kale-armairu txiki bat da, kaxa, telefono-kabina zaharra edo liburuak gordetzeko beste objektu batzuk. Guztiek jar edo har dezakete liburu bat. Koaderno horiek guztiak biltzea da mapa honen helburua.", - "pl": "Publiczny regał na książki to mała przyuliczna szafka, pudełko, stara budka telefoniczna lub inne przedmioty, w których przechowywane są książki. Każdy może w nich zostawić lub zabrać książkę. Celem tej mapy jest zebranie wszystkich tych regałów." + "pl": "Publiczny regał na książki to mała przyuliczna szafka, pudełko, stara budka telefoniczna lub inne przedmioty, w których przechowywane są książki. Każdy może w nich zostawić lub zabrać książkę. Celem tej mapy jest zebranie wszystkich tych regałów.", + "zh_Hans": "公共书柜是一个小型街边橱柜、盒子、旧电话亭或其他储存书籍的物品。任何人都可以放置或取走一本书。这张地图旨在收集所有这些书柜。" }, "icon": "./assets/themes/bookcases/bookcase.svg", "layers": [ diff --git a/assets/themes/cafes_and_pubs/cafes_and_pubs.json b/assets/themes/cafes_and_pubs/cafes_and_pubs.json index 38ac213b4..1c419c9ff 100644 --- a/assets/themes/cafes_and_pubs/cafes_and_pubs.json +++ b/assets/themes/cafes_and_pubs/cafes_and_pubs.json @@ -17,7 +17,8 @@ "pa_PK": "کیفے یا پب", "cs": "Kavárny a hospody", "eu": "Kafetegiak eta pubak", - "pl": "Kawiarnie i puby" + "pl": "Kawiarnie i puby", + "zh_Hans": "咖啡馆和酒吧" }, "description": { "en": "Coffeehouses, pubs and bars", @@ -33,7 +34,8 @@ "it": "Pub e bar", "zh_Hant": "咖啡廳、俱樂部與酒吧", "eu": "Kafetegiak, pubak eta tabernak", - "pl": "Kawiarnie, puby i bary" + "pl": "Kawiarnie, puby i bary", + "zh_Hans": "咖啡馆、酒吧和酒吧" }, "icon": "./assets/layers/cafe_pub/pub.svg", "layers": [ diff --git a/assets/themes/campersite/campersite.json b/assets/themes/campersite/campersite.json index c1ad85163..a7f595244 100644 --- a/assets/themes/campersite/campersite.json +++ b/assets/themes/campersite/campersite.json @@ -34,7 +34,8 @@ "da": "Denne side samler alle officielle camper-stopsteder og steder, hvor du kan dumpe gråt og sort vand. Du kan tilføje detaljer om de leverede tjenester og omkostningerne. Tilføj billeder og anmeldelser. Dette er en hjemmeside og en webapp. Dataene gemmes i OpenStreetMap, så de vil være gratis for evigt og kan genbruges af enhver app.", "cs": "Na této stránce jsou shromážděna všechna oficiální místa pro zastavení karavanů a místa, kde můžete vypouštět šedou a černou vodu. Můžete přidat podrobnosti o poskytovaných službách a cenách. Přidávejte fotografie a recenze.", "eu": "Karabanak gelditzeko leku ofizial guztiak eta ur gris eta beltzak botatzeko lekuak biltzen ditu. Emandako zerbitzuei eta kostuari buruzko xehetasunak gehitu ditzakezu. Erantsi argazkiak eta aipamenak.", - "pl": "Na tej stronie zebrano wszystkie oficjalne miejsca postoju kamperów oraz miejsca, w których można wylać zanieczyszczoną wodę. Możesz dodać szczegóły dotyczące świadczonych usług i kosztów. Dodaj zdjęcia i recenzje." + "pl": "Na tej stronie zebrano wszystkie oficjalne miejsca postoju kamperów oraz miejsca, w których można wylać zanieczyszczoną wodę. Możesz dodać szczegóły dotyczące świadczonych usług i kosztów. Dodaj zdjęcia i recenzje.", + "zh_Hans": "该网站汇总了所有官方的露营车停留点以及可以倾倒灰水和黑水的地点。你可以添加有关提供的服务和费用的详细信息,并且可以上传图片和撰写评论。" }, "shortDescription": { "en": "Find sites to spend the night with your camper", @@ -83,7 +84,8 @@ "pa_PK": "کیمب‌سائیٹاں", "cs": "Kempovací místa", "eu": "Akanpatzeko tokiak", - "pl": "Miejsca kamperowe" + "pl": "Miejsca kamperowe", + "zh_Hans": "露营地" }, "minzoom": 7, "source": { @@ -159,7 +161,8 @@ "pa_PK": "کیمب‌سائیٹاں", "cs": "kempovací místa", "eu": "Kanpatzeko tokiak", - "pl": "miejsca dla kamperów" + "pl": "miejsca dla kamperów", + "zh_Hans": "露营地" }, "tagRenderings": [ "images", @@ -226,7 +229,8 @@ "cs": "Účtuje si toto místo poplatek?", "eu": "Leku horrek kuota bat kobratzen du?", "pl": "Czy to miejsce pobiera opłatę?", - "pt": "Este lugar cobra alguma taxa?" + "pt": "Este lugar cobra alguma taxa?", + "zh_Hans": "这个地方是否收费?" }, "mappings": [ { @@ -253,7 +257,8 @@ "cs": "Použití je zpoplatněno", "eu": "Erabiltzeko ordaindu behar duzu", "pl": "Wymagana jest opłata, aby skorzystać", - "pt": "Deve pagar para usar" + "pt": "Deve pagar para usar", + "zh_Hans": "需要付费使用" } }, { @@ -275,7 +280,8 @@ "ca": "Es pot utilitzar gratuïtament", "cs": "Lze použít zdarma", "pl": "Można skorzystać za darmo", - "pt": "Pode ser usado de graça" + "pt": "Pode ser usado de graça", + "zh_Hans": "可免费使用" }, "addExtraTags": [ "charge=" @@ -301,7 +307,8 @@ "cs": "Toto místo si účtuje {charge}", "eu": "Leku honek {charge} kobratzen du", "pl": "To miejsce pobiera opłatę w wysokości {charge}", - "pt": "Este lugar cobra {charge}" + "pt": "Este lugar cobra {charge}", + "zh_Hans": "这个地方收费 {charge}" }, "question": { "en": "How much does this place charge?", @@ -320,7 +327,8 @@ "cs": "Kolik si toto místo účtuje?", "eu": "Zenbat kobratzen du leku honek?", "pl": "Ile kosztuje to miejsce?", - "pt": "Quanto este lugar cobra?" + "pt": "Quanto este lugar cobra?", + "zh_Hans": "这个地方的收费是多少?" }, "freeform": { "key": "charge" @@ -422,7 +430,8 @@ "cs": "{capacity} táborníků může toto místo využívat současně", "eu": "{capacity} kanpinlariek aldi berean erabil dezakete leku hau", "pl": "{capacity} kamperów może z tego miejsca korzystać jednocześnie", - "pt": "{capacity} campistas podem usar este lugar ao mesmo tempo" + "pt": "{capacity} campistas podem usar este lugar ao mesmo tempo", + "zh_Hans": "{capacity} 名露营者可以同时使用这个地方" }, "question": { "en": "How many campers can stay here? (skip if there is no obvious number of spaces or allowed vehicles)", @@ -440,7 +449,8 @@ "cs": "Kolik táborníků zde může zůstat? (přeskočte, pokud není zjevný počet míst nebo povolených vozidel)", "eu": "Zenbat kanpinlari gera daitezke hemen? (jauzi egin leku edo ibilgailu kopuru nabaririk ez badago)", "pl": "Ile kamperów może tu przebywać? (pomiń, jeśli nie ma oczywistej liczby miejsc lub dozwolonych pojazdów)", - "pt": "Quantos campistas podem ficar aqui? (pule se não houver um número óbvio de vagas ou veículos permitidos)" + "pt": "Quantos campistas podem ficar aqui? (pule se não houver um número óbvio de vagas ou veículos permitidos)", + "zh_Hans": "这里可以容纳多少辆露营车?(如果没有明显的车位数量或允许的车辆数,请跳过)" }, "freeform": { "key": "capacity", @@ -468,7 +478,8 @@ "cs": "Poskytuje toto místo připojení k internetu?", "eu": "Leku honek Interneterako sarbidea eskaintzen du?", "pl": "Czy to miejsce oferuje dostęp do internetu?", - "pt": "Este lugar fornece acesso a internet?" + "pt": "Este lugar fornece acesso a internet?", + "zh_Hans": "这里有网络连接吗?" }, "mappings": [ { @@ -494,7 +505,8 @@ "nb_NO": "Det finnes tilgang til Internett", "cs": "Připojení k internetu je k dispozici", "pl": "Jest dostęp do internetu", - "pt": "Há acesso à internet" + "pt": "Há acesso à internet", + "zh_Hans": "这里有网络连接" } }, { @@ -521,7 +533,8 @@ "ca": "Hi ha accés a Internet", "cs": "Připojení k internetu je k dispozici", "pl": "Jest dostęp do internetu", - "pt": "Há acesso à Internet" + "pt": "Há acesso à Internet", + "zh_Hans": "这里有网络连接" }, "hideInAnswer": true }, @@ -548,7 +561,8 @@ "ca": "No hi ha accés a Internet", "cs": "Připojení k internetu není k dispozici", "pl": "Nie ma dostępu do internetu", - "pt": "Não há acesso à internet" + "pt": "Não há acesso à internet", + "zh_Hans": "这里没有网络连接" } } ] @@ -596,7 +610,8 @@ "ca": "Heu de pagar un extra per accedir a Internet", "cs": "Přístup k internetu je možný za poplatek", "pl": "Dostęp do internetu jest dodatkowo płatny", - "pt": "Deve pagar um suplemento pelo acesso à internet" + "pt": "Deve pagar um suplemento pelo acesso à internet", + "zh_Hans": "互联网访问需要额外付费" } }, { @@ -621,7 +636,8 @@ "ca": "No cal pagar extra per l'accés a Internet", "cs": "Přístup k internetu je možný bez poplatku", "pl": "Dostęp do internetu nie jest dodatkowo płatny", - "pt": "Não precisa pagar um suplemento pelo acesso à internet" + "pt": "Não precisa pagar um suplemento pelo acesso à internet", + "zh_Hans": "互联网访问无需额外付费" } } ], @@ -868,7 +884,8 @@ "ca": "Més detalls sobre aquest lloc: {description}", "cs": "Další podrobnosti o tomto místě: {description}", "pl": "Więcej szczegółów o tym miejscu: {description}", - "pt": "Mais pormenores sobre este lugar: {description}" + "pt": "Mais pormenores sobre este lugar: {description}", + "zh_Hans": "关于此地的更多细节:{description}" }, "question": { "en": "Would you like to add a general description of this place? (Do not repeat information previously asked or shown above. Please keep it objective - opinions go into the reviews)", @@ -885,7 +902,8 @@ "nb_NO": "Vil du legge til en generell beskrivelse av dette stedet? (Ikke gjenta info det har blitt spurt om eller som vises ovenfor. Hold det objektivt. Meninger henvises til vurderingene.)", "cs": "Chcete přidat obecný popis tohoto místa? (Neopakujte informace, na které jsme se ptali dříve, nebo které byly uvedeny výše. Zachovejte prosím objektivitu - názory patří do hodnocení)", "eu": "Gustatuko litzaizuke toki honen deskribapen orokorra gehitzea? (Ez errepikatu aurretik eskatutako edo adierazitako informazioa. Mesedez, eutsi helburuari - berrikuspenetarako iritziak)", - "pl": "Chcesz dodać ogólny opis tego miejsca? (Nie powtarzaj informacji zadanych wcześniej lub pokazanych powyżej. Zachowaj obiektywizm – opinie trafiają do recenzji)" + "pl": "Chcesz dodać ogólny opis tego miejsca? (Nie powtarzaj informacji zadanych wcześniej lub pokazanych powyżej. Zachowaj obiektywizm – opinie trafiają do recenzji)", + "zh_Hans": "您想添加一个关于此地的一般描述吗?(请勿重复之前询问或显示的信息。请保持客观——意见和评价请在评论中提供)" }, "freeform": { "key": "description", @@ -919,7 +937,8 @@ "cs": "kempovací místa", "eu": "Kanpin bat", "pl": "miejsce dla kampera", - "pt": "uma local de acampamento" + "pt": "uma local de acampamento", + "zh_Hans": "露营地" }, "description": { "en": "Add a new official camper site. These are designated places to stay overnight with your camper. They might look like a real camping or just look like a parking. They might not be signposted at all, but just be defined in a municipal decision. A regular parking intended for campers where it is not expected to spend the night, is -not- a camper site ", @@ -936,7 +955,8 @@ "da": "Tilføj en ny officiel campingplads. Disse er udpegede steder at overnatte med din autocamper. De kan ligne en rigtig campingplads eller bare ligne en parkeringsplads. De er måske slet ikke skiltet, men er blot defineret i en kommunal beslutning. En almindelig parkering beregnet til campister, hvor det ikke forventes at overnatte, er -ikke- en autocamperplads ", "cs": "Přidejte nové oficiální kempovací místo. Jedná se o místa, určená pro přenocování s karavanem. Mohou vypadat jako skutečný kemp nebo jen jako parkoviště. Takováto místa nemusí být označena, ale stačí, pokud jsou pouze definována v rozhodnutí obce. Běžné parkoviště určené pro táborníky, kde se nepovažuje za kempovací místo. ", "eu": "Kanpaleku ofizialeko beste leku bat gehitu du. Gaua zure karabanarekin igarotzeko lekuak dira. Benetako kanpin baten edo, besterik gabe, aparkaleku baten itxura izan dezakete. Baliteke ez egotea inola ere seinaleztatuta, baizik eta udal erabaki batean definitzea. Kanpinlarientzako aparkaleku arrunt bat ez da kanpin bat, gaua bertan pasatzea espero ez bada ere. ", - "pl": "Dodaj nowe oficjalne miejsce dla kamperów. Są to wyznaczone miejsca, w których można przenocować w swoim kamperze. Mogą wyglądać jak prawdziwy kemping lub po prostu wyglądać jak parking. Mogą one w ogóle nie być oznakowane, a jedynie określone w decyzji gminy. Zwykły parking przeznaczony dla kamperów, na którym nie przewiduje się nocowania, nie jest miejscem dla kamperów " + "pl": "Dodaj nowe oficjalne miejsce dla kamperów. Są to wyznaczone miejsca, w których można przenocować w swoim kamperze. Mogą wyglądać jak prawdziwy kemping lub po prostu wyglądać jak parking. Mogą one w ogóle nie być oznakowane, a jedynie określone w decyzji gminy. Zwykły parking przeznaczony dla kamperów, na którym nie przewiduje się nocowania, nie jest miejscem dla kamperów ", + "zh_Hans": "添加一个新的官方露营车场地。这些是专门设置的供露营车过夜的地点。它们可能看起来像真正的露营地,也可能只是看起来像一个停车场。它们可能没有任何标识,仅在市政决策中定义。普通的停车场,尽管可能供露营车使用,但不期望在其中过夜的,不算作露营车场地 " } } ], diff --git a/assets/themes/etymology/etymology.json b/assets/themes/etymology/etymology.json index 01404cda4..f4cf657ab 100644 --- a/assets/themes/etymology/etymology.json +++ b/assets/themes/etymology/etymology.json @@ -13,7 +13,7 @@ "da": "Etymology - hvad er et sted opkaldt efter?", "nb_NO": "Åpent etymologikart", "cs": "Etymologie - podle čeho se ulice jmenuje?", - "es": "Etimología - a qué se debe el nombre de una calle?", + "es": "Etimología: ¿De qué recibe el nombre un lugar?", "pl": "Etymologia - od czego pochodzi nazwa ulicy?" }, "description": { diff --git a/assets/themes/ghostsigns/ghostsigns.json b/assets/themes/ghostsigns/ghostsigns.json index ce5c74aec..f766a96ec 100644 --- a/assets/themes/ghostsigns/ghostsigns.json +++ b/assets/themes/ghostsigns/ghostsigns.json @@ -45,18 +45,21 @@ "id": "historic", "question": { "en": "Is this a ghost sign?", - "de": "Ist das ein Geisterzeichen?" + "de": "Ist das ein Geisterzeichen?", + "es": "¿Es esto una señal fantasma?" }, "questionHint": { "en": "Is this sign for a business that no longer exists or no longer being maintained?", - "de": "Ist dieses Schild für ein Geschäft, das nicht mehr existiert oder nicht mehr gepflegt wird?" + "de": "Ist dieses Schild für ein Geschäft, das nicht mehr existiert oder nicht mehr gepflegt wird?", + "es": "¿Este cartel es para una empresa que ya no existe o que ya no recibe mantenimiento?" }, "mappings": [ { "if": "historic=advertising", "then": { "en": "This is a ghost sign", - "de": "Das ist ein Geisterzeichen" + "de": "Das ist ein Geisterzeichen", + "es": "Esta es una señal fantasma" }, "alsoShowIf": "historic=yes" }, @@ -64,7 +67,8 @@ "if": "historic=", "then": { "en": "This is not a ghost sign, answering this will hide the sign from the map", - "de": "Dies ist kein Geisterzeichen, die Antwort darauf wird das Schild von der Karte verstecken" + "de": "Dies ist kein Geisterzeichen, die Antwort darauf wird das Schild von der Karte verstecken", + "es": "Esta no es una señal fantasma, al responder esto se ocultará la señal del mapa" } } ] @@ -81,19 +85,22 @@ "id": "inscription", "question": { "en": "What is the text on the sign?", - "de": "Was ist der Text auf dem Schild?" + "de": "Was ist der Text auf dem Schild?", + "es": "¿Cuál es el texto del cartel?" }, "freeform": { "key": "inscription", "type": "string", "placeholder": { "en": "Text on the sign", - "de": "Text auf dem Schild" + "de": "Text auf dem Schild", + "es": "Texto en el cartel" } }, "render": { "en": "The text on the sign is: {inscription}", - "de": "Der Text auf dem Schild ist: {inscription}" + "de": "Der Text auf dem Schild ist: {inscription}", + "es": "El texto del cartel es: {inscription}" } }, { diff --git a/assets/themes/glutenfree/glutenfree.json b/assets/themes/glutenfree/glutenfree.json index a4ddf92d3..e4447c236 100644 --- a/assets/themes/glutenfree/glutenfree.json +++ b/assets/themes/glutenfree/glutenfree.json @@ -10,7 +10,11 @@ "layers": [ { "builtin": "food", - "hideTagRenderingsWithLabels": ["gluten_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "gluten_free", + "images", + "reviews" + ], "override": { "source": { "osmTags": { @@ -27,11 +31,14 @@ }, { "builtin": "food", - "hideTagRenderingsWithLabels": ["gluten_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "gluten_free", + "images", + "reviews" + ], "override": { "name": null, "minzoom": 17, - "isCounted": false, "filter": { "sameAs": "food_glutenfree" @@ -40,7 +47,11 @@ }, { "builtin": "ice_cream", - "hideTagRenderingsWithLabels": ["gluten_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "gluten_free", + "images", + "reviews" + ], "override": { "source": { "osmTags": { @@ -57,7 +68,11 @@ }, { "builtin": "ice_cream", - "hideTagRenderingsWithLabels": ["gluten_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "gluten_free", + "images", + "reviews" + ], "override": { "name": null, "minzoom": 17, @@ -69,7 +84,11 @@ }, { "builtin": "shops", - "hideTagRenderingsWithLabels": ["gluten_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "gluten_free", + "images", + "reviews" + ], "override": { "source": { "osmTags": { @@ -86,7 +105,11 @@ }, { "builtin": "shops", - "hideTagRenderingsWithLabels": ["gluten_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "gluten_free", + "images", + "reviews" + ], "override": { "name": null, "minzoom": 17, diff --git a/assets/themes/lactosefree/lactosefree.json b/assets/themes/lactosefree/lactosefree.json index 8b77065c9..dbfe016fa 100644 --- a/assets/themes/lactosefree/lactosefree.json +++ b/assets/themes/lactosefree/lactosefree.json @@ -10,7 +10,11 @@ "layers": [ { "builtin": "food", - "hideTagRenderingsWithLabels": ["lactose_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "lactose_free", + "images", + "reviews" + ], "override": { "source": { "osmTags": { @@ -27,11 +31,14 @@ }, { "builtin": "food", - "hideTagRenderingsWithLabels": ["lactose_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "lactose_free", + "images", + "reviews" + ], "override": { "name": null, "minzoom": 17, - "isCounted": false, "filter": { "sameAs": "food_lactosefree" @@ -40,7 +47,11 @@ }, { "builtin": "ice_cream", - "hideTagRenderingsWithLabels": ["lactose_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "lactose_free", + "images", + "reviews" + ], "override": { "source": { "osmTags": { @@ -57,7 +68,11 @@ }, { "builtin": "ice_cream", - "hideTagRenderingsWithLabels": ["lactose_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "lactose_free", + "images", + "reviews" + ], "override": { "name": null, "minzoom": 17, @@ -69,7 +84,11 @@ }, { "builtin": "shops", - "hideTagRenderingsWithLabels": ["lactose_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "lactose_free", + "images", + "reviews" + ], "override": { "source": { "osmTags": { @@ -86,7 +105,11 @@ }, { "builtin": "shops", - "hideTagRenderingsWithLabels": ["lactose_free","images","reviews"], + "hideTagRenderingsWithLabels": [ + "lactose_free", + "images", + "reviews" + ], "override": { "name": null, "minzoom": 17, diff --git a/langs/layers/de.json b/langs/layers/de.json index b5d63f26e..85c49d1ad 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -35,23 +35,6 @@ "1": { "title": "eine freistehende Posterbox" }, - "10": { - "description": "Ein wasserfestes Textil mit einer aufgedruckten Botschaft, das dauerhaft an einer Wand verankert ist", - "title": "eine Plane" - }, - "11": { - "title": "ein Totem" - }, - "12": { - "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", - "title": "ein Schild" - }, - "13": { - "title": "eine Skulptur" - }, - "14": { - "title": "eine Wandmalerei" - }, "2": { "title": "eine wandmontierte Posterbox" }, @@ -77,6 +60,23 @@ }, "9": { "title": "ein Bildschirm, der an einem Wartehäuschen angebracht ist" + }, + "10": { + "description": "Ein wasserfestes Textil mit einer aufgedruckten Botschaft, das dauerhaft an einer Wand verankert ist", + "title": "eine Plane" + }, + "11": { + "title": "ein Totem" + }, + "12": { + "description": "Verwendet für Werbeschilder, Leuchtreklamen, Logos und institutionelle Eingangsschilder", + "title": "ein Schild" + }, + "13": { + "title": "eine Skulptur" + }, + "14": { + "title": "eine Wandmalerei" } }, "tagRenderings": { @@ -171,9 +171,6 @@ "1": { "then": "Dies ist ein Brett" }, - "10": { - "then": "Dies ist eine Wandmalerei" - }, "2": { "then": "Dies ist eine Litfaßsäule" }, @@ -197,6 +194,9 @@ }, "9": { "then": "Dies ist ein Totem" + }, + "10": { + "then": "Dies ist eine Wandmalerei" } }, "question": "Welche Art von Werbung ist das?", @@ -211,9 +211,6 @@ "1": { "then": "Brett" }, - "10": { - "then": "Wandmalerei" - }, "2": { "then": "Posterbox" }, @@ -237,6 +234,9 @@ }, "9": { "then": "Totem" + }, + "10": { + "then": "Wandmalerei" } } } @@ -283,9 +283,6 @@ "1": { "then": "Es handelt sich um eine Seilbahn, bei der die Kabinen in ständigen Kreisen fahren" }, - "10": { - "then": "Eine Seilrutsche. (Eine Touristenattraktion, bei der abenteuerlustige Menschen mit hoher Geschwindigkeit hinunterfahren) " - }, "2": { "then": "Ein offener Sessellift mit Sitzgelegenheiten und Zugang zur Außenluft." }, @@ -309,6 +306,9 @@ }, "9": { "then": "Ein magic carpet (ein Förderband auf dem Boden)" + }, + "10": { + "then": "Eine Seilrutsche. (Eine Touristenattraktion, bei der abenteuerlustige Menschen mit hoher Geschwindigkeit hinunterfahren) " } }, "question": "Um welchen Seilbahntyp handelt es sich?" @@ -453,15 +453,6 @@ "1": { "then": "Wandbild" }, - "10": { - "then": "Azulejo (spanische dekorative Fliesenarbeit)" - }, - "11": { - "then": "Fliesenarbeit" - }, - "12": { - "then": "Holzschnitzerei" - }, "2": { "then": "Malerei" }, @@ -485,6 +476,15 @@ }, "9": { "then": "Relief" + }, + "10": { + "then": "Azulejo (spanische dekorative Fliesenarbeit)" + }, + "11": { + "then": "Fliesenarbeit" + }, + "12": { + "then": "Holzschnitzerei" } }, "question": "Um welche Art Kunstwerk handelt es sich?", @@ -911,6 +911,17 @@ } }, "tagRenderings": { + "bench-armrest": { + "mappings": { + "0": { + "then": "Diese Sitzbank hat eine oder mehrere Armlehnen" + }, + "1": { + "then": "Diese Sitzbank hat keine Armlehnen" + } + }, + "question": "Hat diese Sitzbank eine oder mehrere Armlehnen?" + }, "bench-artwork": { "mappings": { "0": { @@ -2131,6 +2142,30 @@ "1": { "question": "Verfügt über einen
Schuko-Stecker ohne Erdungsstift (CEE7/4 Typ F)
" }, + "2": { + "question": "Verfügt über einen
europäischen Netzstecker mit Erdungsstift (CEE7/4 Typ E)
Anschluss" + }, + "3": { + "question": "Verfügt über einen
Chademo
Stecker" + }, + "4": { + "question": "Verfügt über einen
Typ 1 (J1772)
Stecker mit Kabel" + }, + "5": { + "question": "Verfügt über einen
Typ 1 (J1772)Stecker ohne Kabel
" + }, + "6": { + "question": "Verfügt über einen
Typ 1 CCS (Typ 1 Combo)
Stecker" + }, + "7": { + "question": "Verfügt über einen
Tesla Supercharger
Stecker" + }, + "8": { + "question": "Hat einen
Typ 2 (Mennekes)
Anschluss" + }, + "9": { + "question": "Hat einen
Typ 2 CCS (Mennekes)
Anschluss" + }, "10": { "question": "Hat einen
Typ 2 (Mennekes)
Anschluss mit Kabel" }, @@ -2161,35 +2196,11 @@ "19": { "question": "Hat ein
SEV 1011 T23 (Type J)
Anschluss" }, - "2": { - "question": "Verfügt über einen
europäischen Netzstecker mit Erdungsstift (CEE7/4 Typ E)
Anschluss" - }, "20": { "question": "Hat ein
AS3112 (Type I)
Anschluss" }, "21": { "question": "Hat ein
NEMA 5-20 (Type B)
Anschluss" - }, - "3": { - "question": "Verfügt über einen
Chademo
Stecker" - }, - "4": { - "question": "Verfügt über einen
Typ 1 (J1772)
Stecker mit Kabel" - }, - "5": { - "question": "Verfügt über einen
Typ 1 (J1772)Stecker ohne Kabel
" - }, - "6": { - "question": "Verfügt über einen
Typ 1 CCS (Typ 1 Combo)
Stecker" - }, - "7": { - "question": "Verfügt über einen
Tesla Supercharger
Stecker" - }, - "8": { - "question": "Hat einen
Typ 2 (Mennekes)
Anschluss" - }, - "9": { - "question": "Hat einen
Typ 2 CCS (Mennekes)
Anschluss" } } } @@ -2245,6 +2256,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)" }, @@ -2275,9 +2310,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)" }, @@ -2308,9 +2340,6 @@ "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" }, @@ -2341,29 +2370,11 @@ "39": { "then": "AS3112 (Typ I)" }, - "4": { - "then": "Chademo-Anschluss" - }, "40": { "then": "NEMA 5-20 (Typ B)" }, "41": { "then": "NEMA 5-20 (Typ B)" - }, - "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?" @@ -2557,6 +2568,30 @@ "1": { "2": "Europäischer Netzstecker mit Erdungsstift (CEE7/4 Typ E)" }, + "2": { + "2": "Chademo-Stecker" + }, + "3": { + "2": "Typ 1 mit Kabel (J1772)" + }, + "4": { + "2": " Typ 1 ohne Kabel (J1772)" + }, + "5": { + "2": "Typ 1 CCS (Typ 1 Combo)" + }, + "6": { + "2": "Tesla Supercharger" + }, + "7": { + "2": "Typ 2 (Mennekes)" + }, + "8": { + "2": "Typ 2 CCS (Mennekes)" + }, + "9": { + "2": "Typ 2 mit Kabel (Mennekes)" + }, "10": { "2": "Tesla Supercharger CCS (Typ 2 CSS von Tesla)" }, @@ -2587,32 +2622,8 @@ "19": { "2": "AS3112 (Typ I)" }, - "2": { - "2": "Chademo-Stecker" - }, "20": { "2": "NEMA 5-20 (Typ B)" - }, - "3": { - "2": "Typ 1 mit Kabel (J1772)" - }, - "4": { - "2": " Typ 1 ohne Kabel (J1772)" - }, - "5": { - "2": "Typ 1 CCS (Typ 1 Combo)" - }, - "6": { - "2": "Tesla Supercharger" - }, - "7": { - "2": "Typ 2 (Mennekes)" - }, - "8": { - "2": "Typ 2 CCS (Mennekes)" - }, - "9": { - "2": "Typ 2 mit Kabel (Mennekes)" } } } @@ -3410,15 +3421,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" }, @@ -3442,6 +3444,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?", @@ -3490,15 +3501,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" }, @@ -3522,6 +3524,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?", @@ -4500,54 +4511,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Keine Bevorzugung von Hunden" - }, - "1": { - "question": "Hunde erlaubt" - }, - "2": { - "question": "Keine Hunde erlaubt" - } - } - }, - "11": { - "options": { - "0": { - "question": "Internetzugang vorhanden" - } - } - }, - "12": { - "options": { - "0": { - "question": "Stromanschluss vorhanden" - } - } - }, - "13": { - "options": { - "0": { - "question": "Hat zuckerfreie Angebote" - } - } - }, - "14": { - "options": { - "0": { - "question": "Hat glutenfreie Angebote" - } - } - }, - "15": { - "options": { - "0": { - "question": "Hat laktosefreie Angebote" - } - } - }, "2": { "options": { "0": { @@ -4618,6 +4581,54 @@ "question": "Nutzung kostenlos" } } + }, + "10": { + "options": { + "0": { + "question": "Keine Bevorzugung von Hunden" + }, + "1": { + "question": "Hunde erlaubt" + }, + "2": { + "question": "Keine Hunde erlaubt" + } + } + }, + "11": { + "options": { + "0": { + "question": "Internetzugang vorhanden" + } + } + }, + "12": { + "options": { + "0": { + "question": "Stromanschluss vorhanden" + } + } + }, + "13": { + "options": { + "0": { + "question": "Hat zuckerfreie Angebote" + } + } + }, + "14": { + "options": { + "0": { + "question": "Hat glutenfreie Angebote" + } + } + }, + "15": { + "options": { + "0": { + "question": "Hat laktosefreie Angebote" + } + } } } }, @@ -4780,6 +4791,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." }, @@ -4810,9 +4845,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." }, @@ -4827,27 +4859,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?" @@ -4967,21 +4978,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" }, @@ -5005,6 +5001,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?", @@ -5758,6 +5769,30 @@ "1": { "then": "Dies ist ein Auditorium" }, + "2": { + "then": "Dies ist ein Schlafzimmer" + }, + "3": { + "then": "Dies ist eine Kapelle" + }, + "4": { + "then": "Dies ist ein Klassenzimmer" + }, + "5": { + "then": "Dies ist ein Klassenzimmer" + }, + "6": { + "then": "Dies ist ein Computerraum" + }, + "7": { + "then": "Dies ist ein Konferenzraum" + }, + "8": { + "then": "Dies ist eine Krypta" + }, + "9": { + "then": "Dies ist eine Küche" + }, "10": { "then": "Dies ist ein Labor" }, @@ -5788,9 +5823,6 @@ "19": { "then": "Dies ist ein Lagerraum" }, - "2": { - "then": "Dies ist ein Schlafzimmer" - }, "20": { "then": "Dies ist ein Technikraum" }, @@ -5799,27 +5831,6 @@ }, "22": { "then": "Dies ist ein Wartezimmer" - }, - "3": { - "then": "Dies ist eine Kapelle" - }, - "4": { - "then": "Dies ist ein Klassenzimmer" - }, - "5": { - "then": "Dies ist ein Klassenzimmer" - }, - "6": { - "then": "Dies ist ein Computerraum" - }, - "7": { - "then": "Dies ist ein Konferenzraum" - }, - "8": { - "then": "Dies ist eine Krypta" - }, - "9": { - "then": "Dies ist eine Küche" } }, "question": "Wie wird dieser Raum genutzt?" @@ -6370,21 +6381,6 @@ "1": { "then": "Dies ist eine Gedenktafel" }, - "10": { - "then": "Das ist ein Kreuz" - }, - "11": { - "then": "Dies ist eine blaue Plaque" - }, - "12": { - "then": "Dies ist ein historischer Panzer, der permanent in den öffentlichen Raum als Denkmal platziert wurde" - }, - "13": { - "then": "Das ist ein Baumdenkmal" - }, - "14": { - "then": "Dies ist ein Grabstein; die Person ist hier begraben" - }, "2": { "then": "Dies ist eine Gedenkbank" }, @@ -6408,6 +6404,21 @@ }, "9": { "then": "Das ist ein Obelisk" + }, + "10": { + "then": "Das ist ein Kreuz" + }, + "11": { + "then": "Dies ist eine blaue Plaque" + }, + "12": { + "then": "Dies ist ein historischer Panzer, der permanent in den öffentlichen Raum als Denkmal platziert wurde" + }, + "13": { + "then": "Das ist ein Baumdenkmal" + }, + "14": { + "then": "Dies ist ein Grabstein; die Person ist hier begraben" } }, "question": "Was für eine Art von Denkmal ist das?", @@ -6591,19 +6602,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Alle Notizen" - }, - "1": { - "question": "Importnotizen ausblenden" - }, - "2": { - "question": "Nur Importnotizen anzeigen" - } - } - }, "2": { "options": { "0": { @@ -6659,6 +6657,19 @@ "question": "Nur offene Notizen anzeigen" } } + }, + "10": { + "options": { + "0": { + "question": "Alle Notizen" + }, + "1": { + "question": "Importnotizen ausblenden" + }, + "2": { + "question": "Nur Importnotizen anzeigen" + } + } } }, "name": "OpenStreetMap-Hinweise", @@ -7037,18 +7048,6 @@ "1": { "then": "Dies ist ein normaler Stellplatz." }, - "10": { - "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." - }, - "11": { - "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." - }, - "12": { - "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." - }, - "13": { - "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." - }, "2": { "then": "Dies ist ein Behindertenstellplatz." }, @@ -7072,6 +7071,18 @@ }, "9": { "then": "Dies ist ein Stellplatz, der für Eltern mit Kindern reserviert ist." + }, + "10": { + "then": "Dies ist ein Stellplatz, der für das Personal reserviert ist." + }, + "11": { + "then": "Dies ist ein Stellplatz, der für Taxis reserviert ist." + }, + "12": { + "then": "Dies ist ein Stellplatz, der für Fahrzeuge mit Anhänger reserviert ist." + }, + "13": { + "then": "Dies ist ein Stellplatz, der für Carsharing reserviert ist." } }, "question": "Welche Art von Stellplatz ist dies?" @@ -7385,6 +7396,30 @@ "1": { "then": "Dies ist eine Struktur aus mehreren angeschlossenen Spielgeräten" }, + "2": { + "then": "Das ist eine Rutsche" + }, + "3": { + "then": "Dies ist ein Sandkasten" + }, + "4": { + "then": "Dies ist ein Springreiter" + }, + "5": { + "then": "Dies ist ein Kletterrahmen" + }, + "6": { + "then": "Dies ist eine Wippe" + }, + "7": { + "then": "Das ist ein Spielhaus" + }, + "8": { + "then": "Dies ist ein Karussell" + }, + "9": { + "then": "Dies ist eine Korbschaukel" + }, "10": { "then": "Dies ist ein Seilzug" }, @@ -7415,35 +7450,11 @@ "19": { "then": "Dies ist eine Jugendherberge" }, - "2": { - "then": "Das ist eine Rutsche" - }, "20": { "then": "Dies ist ein Trichter, mit dem man Trichterball spielen kann" }, "21": { "then": "Dies ist ein sich drehender Kreis" - }, - "3": { - "then": "Dies ist ein Sandkasten" - }, - "4": { - "then": "Dies ist ein Springreiter" - }, - "5": { - "then": "Dies ist ein Kletterrahmen" - }, - "6": { - "then": "Dies ist eine Wippe" - }, - "7": { - "then": "Das ist ein Spielhaus" - }, - "8": { - "then": "Dies ist ein Karussell" - }, - "9": { - "then": "Dies ist eine Korbschaukel" } }, "question": "Was ist das für ein Gerät?", @@ -7811,21 +7822,6 @@ "1": { "then": "2-Cent-Münzen werden akzeptiert" }, - "10": { - "then": "20-Centime-Münzen werden akzeptiert" - }, - "11": { - "then": "½-Schweizer Franken-Münzen werden akzeptiert" - }, - "12": { - "then": "1-Schweizer Franken-Münzen werden akzeptiert" - }, - "13": { - "then": "2-Schweizer Franken-Münzen werden akzeptiert" - }, - "14": { - "then": "5-Schweizer Franken-Münzen werden akzeptiert" - }, "2": { "then": "5-Cent-Münzen werden akzeptiert" }, @@ -7849,6 +7845,21 @@ }, "9": { "then": "10-Centime-Münzen werden akzeptiert" + }, + "10": { + "then": "20-Centime-Münzen werden akzeptiert" + }, + "11": { + "then": "½-Schweizer Franken-Münzen werden akzeptiert" + }, + "12": { + "then": "1-Schweizer Franken-Münzen werden akzeptiert" + }, + "13": { + "then": "2-Schweizer Franken-Münzen werden akzeptiert" + }, + "14": { + "then": "5-Schweizer Franken-Münzen werden akzeptiert" } }, "question": "Mit welchen Münzen kann man hier bezahlen?" @@ -7861,15 +7872,6 @@ "1": { "then": "10-Euro-Scheine werden angenommen" }, - "10": { - "then": "100-Schweizer Franken-Scheine werden akzeptiert" - }, - "11": { - "then": "200-Schweizer Franken-Scheine werden akzeptiert" - }, - "12": { - "then": "1000-Schweizer Franken-Scheine werden akzeptiert" - }, "2": { "then": "20-Euro-Scheine werden angenommen" }, @@ -7893,6 +7895,15 @@ }, "9": { "then": "50-Schweizer Franken-Scheine werden akzeptiert" + }, + "10": { + "then": "100-Schweizer Franken-Scheine werden akzeptiert" + }, + "11": { + "then": "200-Schweizer Franken-Scheine werden akzeptiert" + }, + "12": { + "then": "1000-Schweizer Franken-Scheine werden akzeptiert" } }, "question": "Mit welchen Banknoten kann man hier bezahlen?" @@ -8375,6 +8386,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" }, @@ -8405,9 +8440,6 @@ "19": { "question": "Recycling von Restabfällen" }, - "2": { - "question": "Recycling von Getränkekartons" - }, "20": { "question": "Recycling von Druckerpatronen" }, @@ -8416,27 +8448,6 @@ }, "22": { "question": "Recycling von Kunststoffverpackungen, Metallverpackungen und Getränkekartons (Tetrapak)" - }, - "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" } } }, @@ -8504,6 +8515,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" }, @@ -8534,9 +8569,6 @@ "19": { "then": "Metallschrott kann hier recycelt werden" }, - "2": { - "then": "Dosen können hier recycelt werden" - }, "20": { "then": "Schuhe können hier recycelt werden" }, @@ -8554,27 +8586,6 @@ }, "25": { "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?" @@ -9694,12 +9705,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" }, @@ -9723,6 +9728,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?" @@ -11168,6 +11179,30 @@ "1": { "question": "Verkauf von Getränken" }, + "2": { + "question": "Verkauf von Süßigkeiten" + }, + "3": { + "question": "Verkauf von Lebensmitteln" + }, + "4": { + "question": "Verkauf von Zigaretten" + }, + "5": { + "question": "Verkauf von Kondomen" + }, + "6": { + "question": "Verkauf von Kaffee" + }, + "7": { + "question": "Verkauf von Trinkwasser" + }, + "8": { + "question": "Verkauf von Zeitungen" + }, + "9": { + "question": "Verkauf von Fahrradschläuchen" + }, "10": { "question": "Verkauf von Milch" }, @@ -11198,9 +11233,6 @@ "19": { "question": "Verkauf von Blumen" }, - "2": { - "question": "Verkauf von Süßigkeiten" - }, "20": { "question": "Verkauf von Parkscheinen" }, @@ -11224,27 +11256,6 @@ }, "27": { "question": "Verkauf von Fahrradschlössern" - }, - "3": { - "question": "Verkauf von Lebensmitteln" - }, - "4": { - "question": "Verkauf von Zigaretten" - }, - "5": { - "question": "Verkauf von Kondomen" - }, - "6": { - "question": "Verkauf von Kaffee" - }, - "7": { - "question": "Verkauf von Trinkwasser" - }, - "8": { - "question": "Verkauf von Zeitungen" - }, - "9": { - "question": "Verkauf von Fahrradschläuchen" } } } @@ -11341,6 +11352,30 @@ "1": { "then": "Süßigkeiten werden verkauft" }, + "2": { + "then": "Lebensmittel werden verkauft" + }, + "3": { + "then": "Zigaretten werden verkauft" + }, + "4": { + "then": "Kondome werden verkauft" + }, + "5": { + "then": "Kaffee wird verkauft" + }, + "6": { + "then": "Trinkwasser wird verkauft" + }, + "7": { + "then": "Zeitungen werden verkauft" + }, + "8": { + "then": "Fahrradschläuche werden verkauft" + }, + "9": { + "then": "Milch wird verkauft" + }, "10": { "then": "Brot wird verkauft" }, @@ -11371,9 +11406,6 @@ "19": { "then": "Parkscheine werden verkauft" }, - "2": { - "then": "Lebensmittel werden verkauft" - }, "20": { "then": "Souvenirmünzen werden verkauft" }, @@ -11394,27 +11426,6 @@ }, "26": { "then": "Fahrradschlösser werden verkauft" - }, - "3": { - "then": "Zigaretten werden verkauft" - }, - "4": { - "then": "Kondome werden verkauft" - }, - "5": { - "then": "Kaffee wird verkauft" - }, - "6": { - "then": "Trinkwasser wird verkauft" - }, - "7": { - "then": "Zeitungen werden verkauft" - }, - "8": { - "then": "Fahrradschläuche werden verkauft" - }, - "9": { - "then": "Milch wird verkauft" } }, "question": "Was wird in diesem Automaten verkauft?", @@ -11715,4 +11726,4 @@ "render": "Windrad" } } -} +} \ No newline at end of file diff --git a/langs/layers/en.json b/langs/layers/en.json index 1e9a1830a..57c122ad0 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -35,23 +35,6 @@ "1": { "title": "a freestanding poster box" }, - "10": { - "description": "A piece of waterproof textile with a printed message, permanently anchored on a wall", - "title": "a tarp" - }, - "11": { - "title": "a totem" - }, - "12": { - "description": "Used for advertising signs, neon signs, logos & institutional entrance signs", - "title": "a sign" - }, - "13": { - "title": "a sculpture" - }, - "14": { - "title": "a wall painting" - }, "2": { "title": "a poster box mounted on a wall" }, @@ -77,6 +60,23 @@ }, "9": { "title": "a screen mounted on a transit shelter" + }, + "10": { + "description": "A piece of waterproof textile with a printed message, permanently anchored on a wall", + "title": "a tarp" + }, + "11": { + "title": "a totem" + }, + "12": { + "description": "Used for advertising signs, neon signs, logos & institutional entrance signs", + "title": "a sign" + }, + "13": { + "title": "a sculpture" + }, + "14": { + "title": "a wall painting" } }, "tagRenderings": { @@ -171,9 +171,6 @@ "1": { "then": "This is a board" }, - "10": { - "then": "This is a wall painting" - }, "2": { "then": "This is a column" }, @@ -197,6 +194,9 @@ }, "9": { "then": "This is a totem" + }, + "10": { + "then": "This is a wall painting" } }, "question": "Which type of advertising feature is this?", @@ -211,9 +211,6 @@ "1": { "then": "Board" }, - "10": { - "then": "Wall painting" - }, "2": { "then": "Poster Box" }, @@ -237,6 +234,9 @@ }, "9": { "then": "Totem" + }, + "10": { + "then": "Wall painting" } } } @@ -283,9 +283,6 @@ "1": { "then": "This is a gondola where the cars go around in continuous circles" }, - "10": { - "then": "A zip line. (A touristical attraction where adventurous people go down at high speeds) " - }, "2": { "then": "An open chairlift with seats to sit on and open to the outside air." }, @@ -309,6 +306,9 @@ }, "9": { "then": "A magic carpet (a conveyor belt on the ground)" + }, + "10": { + "then": "A zip line. (A touristical attraction where adventurous people go down at high speeds) " } }, "question": "What type of aerialway is this?" @@ -453,15 +453,6 @@ "1": { "then": "Mural" }, - "10": { - "then": "Azulejo (Spanish decorative tilework)" - }, - "11": { - "then": "Tilework" - }, - "12": { - "then": "Woodcarving" - }, "2": { "then": "Painting" }, @@ -485,6 +476,15 @@ }, "9": { "then": "Relief" + }, + "10": { + "then": "Azulejo (Spanish decorative tilework)" + }, + "11": { + "then": "Tilework" + }, + "12": { + "then": "Woodcarving" } }, "question": "What is the type of this artwork?", @@ -911,6 +911,17 @@ } }, "tagRenderings": { + "bench-armrest": { + "mappings": { + "0": { + "then": "This bench does have one or more armrests" + }, + "1": { + "then": "This bench does not have any armrests" + } + }, + "question": "Does this bench have one or more armrests?" + }, "bench-artwork": { "mappings": { "0": { @@ -2131,6 +2142,30 @@ "1": { "question": "Has a
Schuko wall plug without ground pin (CEE7/4 type F)
connector" }, + "2": { + "question": "Has a
European wall plug with ground pin (CEE7/4 type E)
connector" + }, + "3": { + "question": "Has a
Chademo
connector" + }, + "4": { + "question": "Has a
Type 1 with cable (J1772)
connector" + }, + "5": { + "question": "Has a
Type 1 without cable (J1772)
connector" + }, + "6": { + "question": "Has a
Type 1 CCS (aka Type 1 Combo)
connector" + }, + "7": { + "question": "Has a
Tesla Supercharger
connector" + }, + "8": { + "question": "Has a
Type 2 (mennekes)
connector" + }, + "9": { + "question": "Has a
Type 2 CCS (mennekes)
connector" + }, "10": { "question": "Has a
Type 2 with cable (mennekes)
connector" }, @@ -2161,35 +2196,11 @@ "19": { "question": "Has a
SEV 1011 T23 (Type J)
connector" }, - "2": { - "question": "Has a
European wall plug with ground pin (CEE7/4 type E)
connector" - }, "20": { "question": "Has a
AS3112 (Type I)
connector" }, "21": { "question": "Has a
NEMA 5-20 (Type B)
connector" - }, - "3": { - "question": "Has a
Chademo
connector" - }, - "4": { - "question": "Has a
Type 1 with cable (J1772)
connector" - }, - "5": { - "question": "Has a
Type 1 without cable (J1772)
connector" - }, - "6": { - "question": "Has a
Type 1 CCS (aka Type 1 Combo)
connector" - }, - "7": { - "question": "Has a
Tesla Supercharger
connector" - }, - "8": { - "question": "Has a
Type 2 (mennekes)
connector" - }, - "9": { - "question": "Has a
Type 2 CCS (mennekes)
connector" } } } @@ -2245,6 +2256,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)" }, @@ -2275,9 +2310,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)" }, @@ -2308,9 +2340,6 @@ "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" }, @@ -2341,29 +2370,11 @@ "39": { "then": "AS3112 (Type I)" }, - "4": { - "then": "Chademo" - }, "40": { "then": "NEMA 5-20 (Type B)" }, "41": { "then": "NEMA 5-20 (Type B)" - }, - "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?" @@ -2557,6 +2568,30 @@ "1": { "2": "European wall plug with ground pin (CEE7/4 type E)" }, + "2": { + "2": "Chademo" + }, + "3": { + "2": "Type 1 with cable (J1772)" + }, + "4": { + "2": "Type 1 without cable (J1772)" + }, + "5": { + "2": "Type 1 CCS (aka Type 1 Combo)" + }, + "6": { + "2": "Tesla Supercharger" + }, + "7": { + "2": "Type 2 (mennekes)" + }, + "8": { + "2": "Type 2 CCS (mennekes)" + }, + "9": { + "2": "Type 2 with cable (mennekes)" + }, "10": { "2": "Tesla Supercharger CCS (a branded type2_css)" }, @@ -2587,32 +2622,8 @@ "19": { "2": "AS3112 (Type I)" }, - "2": { - "2": "Chademo" - }, "20": { "2": "NEMA 5-20 (Type B)" - }, - "3": { - "2": "Type 1 with cable (J1772)" - }, - "4": { - "2": "Type 1 without cable (J1772)" - }, - "5": { - "2": "Type 1 CCS (aka Type 1 Combo)" - }, - "6": { - "2": "Tesla Supercharger" - }, - "7": { - "2": "Type 2 (mennekes)" - }, - "8": { - "2": "Type 2 CCS (mennekes)" - }, - "9": { - "2": "Type 2 with cable (mennekes)" } } } @@ -3410,15 +3421,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" }, @@ -3442,6 +3444,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?", @@ -3490,15 +3501,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" }, @@ -3522,6 +3524,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?", @@ -4500,54 +4511,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "No preference towards dogs" - }, - "1": { - "question": "Dogs allowed" - }, - "2": { - "question": "No dogs allowed" - } - } - }, - "11": { - "options": { - "0": { - "question": "Offers internet" - } - } - }, - "12": { - "options": { - "0": { - "question": "Offers electricity" - } - } - }, - "13": { - "options": { - "0": { - "question": "Has a sugar-free offering" - } - } - }, - "14": { - "options": { - "0": { - "question": "Has a gluten free offering" - } - } - }, - "15": { - "options": { - "0": { - "question": "Has a lactose free offering" - } - } - }, "2": { "options": { "0": { @@ -4618,6 +4581,54 @@ "question": "Free to use" } } + }, + "10": { + "options": { + "0": { + "question": "No preference towards dogs" + }, + "1": { + "question": "Dogs allowed" + }, + "2": { + "question": "No dogs allowed" + } + } + }, + "11": { + "options": { + "0": { + "question": "Offers internet" + } + } + }, + "12": { + "options": { + "0": { + "question": "Offers electricity" + } + } + }, + "13": { + "options": { + "0": { + "question": "Has a sugar-free offering" + } + } + }, + "14": { + "options": { + "0": { + "question": "Has a gluten free offering" + } + } + }, + "15": { + "options": { + "0": { + "question": "Has a lactose free offering" + } + } } } }, @@ -4780,6 +4791,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." }, @@ -4810,9 +4845,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." }, @@ -4827,27 +4859,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?" @@ -4967,21 +4978,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" }, @@ -5005,6 +5001,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": "What kind of food is served here?", @@ -5758,6 +5769,30 @@ "1": { "then": "This is a auditorium" }, + "2": { + "then": "This is a bedroom" + }, + "3": { + "then": "This is a chapel" + }, + "4": { + "then": "This is a classroom" + }, + "5": { + "then": "This is a classroom" + }, + "6": { + "then": "This is a computer room" + }, + "7": { + "then": "This is a conference room" + }, + "8": { + "then": "This is a crypt" + }, + "9": { + "then": "This is a kitchen" + }, "10": { "then": "This is a laboratory" }, @@ -5788,9 +5823,6 @@ "19": { "then": "This is a storage room" }, - "2": { - "then": "This is a bedroom" - }, "20": { "then": "This is a technical room" }, @@ -5799,27 +5831,6 @@ }, "22": { "then": "This is a waiting room" - }, - "3": { - "then": "This is a chapel" - }, - "4": { - "then": "This is a classroom" - }, - "5": { - "then": "This is a classroom" - }, - "6": { - "then": "This is a computer room" - }, - "7": { - "then": "This is a conference room" - }, - "8": { - "then": "This is a crypt" - }, - "9": { - "then": "This is a kitchen" } }, "question": "What type of room is this?" @@ -6370,21 +6381,6 @@ "1": { "then": "This is a plaque" }, - "10": { - "then": "This is a cross" - }, - "11": { - "then": "This is a blue plaque" - }, - "12": { - "then": "This is a historic tank, permanently placed in public space as memorial" - }, - "13": { - "then": "This is a memorial tree" - }, - "14": { - "then": "This is a gravestone; the person is buried here" - }, "2": { "then": "This is a commemorative bench" }, @@ -6408,6 +6404,21 @@ }, "9": { "then": "This is an obelisk" + }, + "10": { + "then": "This is a cross" + }, + "11": { + "then": "This is a blue plaque" + }, + "12": { + "then": "This is a historic tank, permanently placed in public space as memorial" + }, + "13": { + "then": "This is a memorial tree" + }, + "14": { + "then": "This is a gravestone; the person is buried here" } }, "question": "What type of memorial is this?", @@ -6591,19 +6602,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "All Notes" - }, - "1": { - "question": "Hide import notes" - }, - "2": { - "question": "Show only import Notes" - } - } - }, "2": { "options": { "0": { @@ -6659,6 +6657,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", @@ -7037,18 +7048,6 @@ "1": { "then": "This is a normal parking space." }, - "10": { - "then": "This is a parking space reserved for staff." - }, - "11": { - "then": "This is a parking space reserved for taxis." - }, - "12": { - "then": "This is a parking space reserved for vehicles towing a trailer." - }, - "13": { - "then": "This is a parking space reserved for car sharing." - }, "2": { "then": "This is a disabled parking space." }, @@ -7072,6 +7071,18 @@ }, "9": { "then": "This is a parking space reserved for parents with children." + }, + "10": { + "then": "This is a parking space reserved for staff." + }, + "11": { + "then": "This is a parking space reserved for taxis." + }, + "12": { + "then": "This is a parking space reserved for vehicles towing a trailer." + }, + "13": { + "then": "This is a parking space reserved for car sharing." } }, "question": "What kind of parking space is this?" @@ -7385,6 +7396,30 @@ "1": { "then": "This is a structure consisting of several connected playground devices" }, + "2": { + "then": "This is a slide" + }, + "3": { + "then": "This is a sand pit" + }, + "4": { + "then": "This is a spring rider" + }, + "5": { + "then": "This is a climbing frame" + }, + "6": { + "then": "This is a seesaw" + }, + "7": { + "then": "This is a playhouse" + }, + "8": { + "then": "This is a roundabout" + }, + "9": { + "then": "This is a basket swing" + }, "10": { "then": "This is a zip wire" }, @@ -7415,35 +7450,11 @@ "19": { "then": "This is a teen shelter" }, - "2": { - "then": "This is a slide" - }, "20": { "then": "This is a funnel used to play with funnel ball" }, "21": { "then": "This is a spinning circle" - }, - "3": { - "then": "This is a sand pit" - }, - "4": { - "then": "This is a spring rider" - }, - "5": { - "then": "This is a climbing frame" - }, - "6": { - "then": "This is a seesaw" - }, - "7": { - "then": "This is a playhouse" - }, - "8": { - "then": "This is a roundabout" - }, - "9": { - "then": "This is a basket swing" } }, "question": "What kind of device is this?", @@ -7811,21 +7822,6 @@ "1": { "then": "2 cent coins are accepted" }, - "10": { - "then": "20 centimes coins are accepted" - }, - "11": { - "then": "½ franc coins are accepted" - }, - "12": { - "then": "1 franc coins are accepted" - }, - "13": { - "then": "2 francs coins are accepted" - }, - "14": { - "then": "5 francs coins are accepted" - }, "2": { "then": "5 cent coins are accepted" }, @@ -7849,6 +7845,21 @@ }, "9": { "then": "10 centimes coins are accepted" + }, + "10": { + "then": "20 centimes coins are accepted" + }, + "11": { + "then": "½ franc coins are accepted" + }, + "12": { + "then": "1 franc coins are accepted" + }, + "13": { + "then": "2 francs coins are accepted" + }, + "14": { + "then": "5 francs coins are accepted" } }, "question": "What coins can you use to pay here?" @@ -7861,15 +7872,6 @@ "1": { "then": "10 euro notes are accepted" }, - "10": { - "then": "100 francs notes are accepted" - }, - "11": { - "then": "200 francs notes are accepted" - }, - "12": { - "then": "1000 francs notes are accepted" - }, "2": { "then": "20 euro notes are accepted" }, @@ -7893,6 +7895,15 @@ }, "9": { "then": "50 francs notes are accepted" + }, + "10": { + "then": "100 francs notes are accepted" + }, + "11": { + "then": "200 francs notes are accepted" + }, + "12": { + "then": "1000 francs notes are accepted" } }, "question": "what notes can you use to pay here?" @@ -8182,6 +8193,23 @@ } } }, + "shower": { + "mappings": { + "0": { + "then": "This facility does have showers with warm water" + }, + "1": { + "then": "This facility does have showers, but the water is not heated" + }, + "2": { + "then": "This facility does have showers" + }, + "3": { + "then": "This facility does not offer a shower" + } + }, + "question": "Does this facility offer showers?" + }, "single_level": { "mappings": { "0": { @@ -8375,6 +8403,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" }, @@ -8405,9 +8457,6 @@ "19": { "question": "Recycling of residual waste" }, - "2": { - "question": "Recycling of beverage cartons" - }, "20": { "question": "Recycling of printer cartridges" }, @@ -8416,27 +8465,6 @@ }, "22": { "question": "Recycling of plastic packaging, metal packaging and drink cartons (PMD)" - }, - "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" } } }, @@ -8504,6 +8532,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" }, @@ -8534,9 +8586,6 @@ "19": { "then": "Scrap metal can be recycled here" }, - "2": { - "then": "Cans can be recycled here" - }, "20": { "then": "Shoes can be recycled here" }, @@ -8554,27 +8603,6 @@ }, "25": { "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?" @@ -9694,12 +9722,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" }, @@ -9723,6 +9745,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?" @@ -11168,6 +11196,30 @@ "1": { "question": "Sale of drinks" }, + "2": { + "question": "Sale of sweets" + }, + "3": { + "question": "Sale of food" + }, + "4": { + "question": "Sale of cigarettes" + }, + "5": { + "question": "Sale of condoms" + }, + "6": { + "question": "Sale of coffee" + }, + "7": { + "question": "Sale of water" + }, + "8": { + "question": "Sale of newspapers" + }, + "9": { + "question": "Sale of bicycle inner tubes" + }, "10": { "question": "Sale of milk" }, @@ -11198,9 +11250,6 @@ "19": { "question": "Sale of flowers" }, - "2": { - "question": "Sale of sweets" - }, "20": { "question": "Sale of parking tickets" }, @@ -11224,27 +11273,6 @@ }, "27": { "question": "Sale of bicycle locks" - }, - "3": { - "question": "Sale of food" - }, - "4": { - "question": "Sale of cigarettes" - }, - "5": { - "question": "Sale of condoms" - }, - "6": { - "question": "Sale of coffee" - }, - "7": { - "question": "Sale of water" - }, - "8": { - "question": "Sale of newspapers" - }, - "9": { - "question": "Sale of bicycle inner tubes" } } } @@ -11341,6 +11369,30 @@ "1": { "then": "Sweets are sold" }, + "2": { + "then": "Food is sold" + }, + "3": { + "then": "Cigarettes are sold" + }, + "4": { + "then": "Condoms are sold" + }, + "5": { + "then": "Coffee is sold" + }, + "6": { + "then": "Drinking water is sold" + }, + "7": { + "then": "Newspapers are sold" + }, + "8": { + "then": "Bicycle inner tubes are sold" + }, + "9": { + "then": "Milk is sold" + }, "10": { "then": "Bread is sold" }, @@ -11371,9 +11423,6 @@ "19": { "then": "Parking tickets are sold" }, - "2": { - "then": "Food is sold" - }, "20": { "then": "Pressed pennies are sold" }, @@ -11394,27 +11443,6 @@ }, "26": { "then": "Bicycle locks are sold" - }, - "3": { - "then": "Cigarettes are sold" - }, - "4": { - "then": "Condoms are sold" - }, - "5": { - "then": "Coffee is sold" - }, - "6": { - "then": "Drinking water is sold" - }, - "7": { - "then": "Newspapers are sold" - }, - "8": { - "then": "Bicycle inner tubes are sold" - }, - "9": { - "then": "Milk is sold" } }, "question": "What does this vending machine sell?", @@ -11715,4 +11743,4 @@ "render": "wind turbine" } } -} +} \ No newline at end of file diff --git a/langs/layers/nl.json b/langs/layers/nl.json index e57b06b5c..74e703e6d 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -27,13 +27,6 @@ "advertising": { "name": "Reclame", "presets": { - "10": { - "description": "Een stuk groot, weerbestendig textiel met opgedrukte reclameboodschap die permanent aan de muur hangt", - "title": "een spandoek" - }, - "14": { - "title": "een muurschildering" - }, "4": { "description": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers", "title": "een uithangbord" @@ -50,6 +43,13 @@ }, "8": { "title": "een scherm op een muur" + }, + "10": { + "description": "Een stuk groot, weerbestendig textiel met opgedrukte reclameboodschap die permanent aan de muur hangt", + "title": "een spandoek" + }, + "14": { + "title": "een muurschildering" } }, "tagRenderings": { @@ -107,9 +107,6 @@ }, "title": { "mappings": { - "10": { - "then": "Muurschildering" - }, "3": { "then": "Aanplakzuil" }, @@ -127,6 +124,9 @@ }, "9": { "then": "Aanplakzuil" + }, + "10": { + "then": "Muurschildering" } } } @@ -208,15 +208,6 @@ "1": { "then": "Muurschildering" }, - "10": { - "then": "Azulejo (Spaanse siertegels)" - }, - "11": { - "then": "Tegelwerk" - }, - "12": { - "then": "Houtsculptuur" - }, "2": { "then": "Schilderij" }, @@ -240,6 +231,15 @@ }, "9": { "then": "Reliëf" + }, + "10": { + "then": "Azulejo (Spaanse siertegels)" + }, + "11": { + "then": "Tegelwerk" + }, + "12": { + "then": "Houtsculptuur" } }, "question": "Wat voor soort kunstwerk is dit?", @@ -561,6 +561,17 @@ } }, "tagRenderings": { + "bench-armrest": { + "mappings": { + "0": { + "then": "Deze bank heeft armleuningen" + }, + "1": { + "then": "Deze bank heeft geen armleuningen" + } + }, + "question": "Heeft deze bank armleuningen?" + }, "bench-artwork": { "mappings": { "0": { @@ -1757,6 +1768,30 @@ "1": { "question": "Heeft een
Schuko stekker zonder aardingspin (CEE7/4 type F)
" }, + "2": { + "question": "Heeft een
Europese stekker met aardingspin (CEE7/4 type E)
" + }, + "3": { + "question": "Heeft een
Chademo
" + }, + "4": { + "question": "Heeft een
Type 1 met kabel (J1772)
" + }, + "5": { + "question": "Heeft een
Type 1 zonder kabel (J1772)
" + }, + "6": { + "question": "Heeft een
Type 1 CCS (ook gekend als Type 1 Combo)
" + }, + "7": { + "question": "Heeft een
Tesla Supercharger
" + }, + "8": { + "question": "Heeft een
Type 2 (mennekes)
" + }, + "9": { + "question": "Heeft een
Type 2 CCS (mennekes)
" + }, "10": { "question": "Heeft een
Type 2 met kabel (J1772)
" }, @@ -1787,35 +1822,11 @@ "19": { "question": "Heeft een
SEV 1011 T23 (Zwitserse 3-pin)
" }, - "2": { - "question": "Heeft een
Europese stekker met aardingspin (CEE7/4 type E)
" - }, "20": { "question": "Heeft een
AS3112 (Australische 3-pin)
" }, "21": { "question": "Heeft een
NEMA 5-20 (VS 3-pin)
" - }, - "3": { - "question": "Heeft een
Chademo
" - }, - "4": { - "question": "Heeft een
Type 1 met kabel (J1772)
" - }, - "5": { - "question": "Heeft een
Type 1 zonder kabel (J1772)
" - }, - "6": { - "question": "Heeft een
Type 1 CCS (ook gekend als Type 1 Combo)
" - }, - "7": { - "question": "Heeft een
Tesla Supercharger
" - }, - "8": { - "question": "Heeft een
Type 2 (mennekes)
" - }, - "9": { - "question": "Heeft een
Type 2 CCS (mennekes)
" } } } @@ -1871,6 +1882,30 @@ "1": { "then": "Schuko stekker zonder aardingspin (CEE7/4 type F)" }, + "2": { + "then": "Europese stekker met aardingspin (CEE7/4 type E)" + }, + "3": { + "then": "Europese stekker met aardingspin (CEE7/4 type E)" + }, + "4": { + "then": "Chademo" + }, + "5": { + "then": "Chademo" + }, + "6": { + "then": "Type 1 met kabel (J1772)" + }, + "7": { + "then": "Type 1 met kabel (J1772)" + }, + "8": { + "then": "Type 1 zonder kabel (J1772)" + }, + "9": { + "then": "Type 1 zonder kabel (J1772)" + }, "10": { "then": "Type 1 CCS (ook gekend als Type 1 Combo)" }, @@ -1901,9 +1936,6 @@ "19": { "then": "Type 2 met kabel (J1772)" }, - "2": { - "then": "Europese stekker met aardingspin (CEE7/4 type E)" - }, "20": { "then": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" }, @@ -1934,9 +1966,6 @@ "29": { "then": "Bosch Active Connect met 3 pinnen aan een kabel" }, - "3": { - "then": "Europese stekker met aardingspin (CEE7/4 type E)" - }, "30": { "then": "Bosch Active Connect met 5 pinnen aan een kabel" }, @@ -1967,29 +1996,11 @@ "39": { "then": "AS3112 (Australische 3-pin)" }, - "4": { - "then": "Chademo" - }, "40": { "then": "NEMA 5-20 (VS 3-pin)" }, "41": { "then": "NEMA 5-20 (VS 3-pin)" - }, - "5": { - "then": "Chademo" - }, - "6": { - "then": "Type 1 met kabel (J1772)" - }, - "7": { - "then": "Type 1 met kabel (J1772)" - }, - "8": { - "then": "Type 1 zonder kabel (J1772)" - }, - "9": { - "then": "Type 1 zonder kabel (J1772)" } }, "question": "Welke aansluitingen zijn hier beschikbaar?" @@ -2183,6 +2194,30 @@ "1": { "2": "Europese stekker met aardingspin (CEE7/4 type E)" }, + "2": { + "2": "Chademo" + }, + "3": { + "2": "Type 1 met kabel (J1772)" + }, + "4": { + "2": "Type 1 zonder kabel (J1772)" + }, + "5": { + "2": "Type 1 CCS (ook gekend als Type 1 Combo)" + }, + "6": { + "2": "Tesla Supercharger" + }, + "7": { + "2": "Type 2 (mennekes)" + }, + "8": { + "2": "Type 2 CCS (mennekes)" + }, + "9": { + "2": "Type 2 met kabel (J1772)" + }, "10": { "2": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)" }, @@ -2213,32 +2248,8 @@ "19": { "2": "AS3112 (Australische 3-pin)" }, - "2": { - "2": "Chademo" - }, "20": { "2": "NEMA 5-20 (VS 3-pin)" - }, - "3": { - "2": "Type 1 met kabel (J1772)" - }, - "4": { - "2": "Type 1 zonder kabel (J1772)" - }, - "5": { - "2": "Type 1 CCS (ook gekend als Type 1 Combo)" - }, - "6": { - "2": "Tesla Supercharger" - }, - "7": { - "2": "Type 2 (mennekes)" - }, - "8": { - "2": "Type 2 CCS (mennekes)" - }, - "9": { - "2": "Type 2 met kabel (J1772)" } } } @@ -3004,15 +3015,6 @@ "1": { "then": "Dit fietspad is geplaveid" }, - "10": { - "then": "Dit fietspad is gemaakt van fijn grind" - }, - "11": { - "then": "Dit fietspad is gemaakt van kiezelsteentjes" - }, - "12": { - "then": "Dit fietspad is gemaakt van aarde" - }, "2": { "then": "Dit fietspad is gemaakt van asfalt" }, @@ -3036,6 +3038,15 @@ }, "9": { "then": "Dit fietspad is gemaakt van grind" + }, + "10": { + "then": "Dit fietspad is gemaakt van fijn grind" + }, + "11": { + "then": "Dit fietspad is gemaakt van kiezelsteentjes" + }, + "12": { + "then": "Dit fietspad is gemaakt van aarde" } }, "question": "Waaruit is het oppervlak van het fietspad van gemaakt?", @@ -3084,15 +3095,6 @@ "1": { "then": "Dit fietspad is geplaveid" }, - "10": { - "then": "Dit fietspad is gemaakt van fijn grind" - }, - "11": { - "then": "Dit fietspad is gemaakt van kiezelsteentjes" - }, - "12": { - "then": "Dit fietspad is gemaakt van aarde" - }, "2": { "then": "Dit fietspad is gemaakt van asfalt" }, @@ -3116,6 +3118,15 @@ }, "9": { "then": "Dit fietspad is gemaakt van grind" + }, + "10": { + "then": "Dit fietspad is gemaakt van fijn grind" + }, + "11": { + "then": "Dit fietspad is gemaakt van kiezelsteentjes" + }, + "12": { + "then": "Dit fietspad is gemaakt van aarde" } }, "question": "Waaruit is het oppervlak van de straat gemaakt?", @@ -4171,21 +4182,6 @@ "1": { "then": "Dit is een frituur" }, - "10": { - "then": "Dit is een Chinees restaurant" - }, - "11": { - "then": "Dit is een Grieks restaurant" - }, - "12": { - "then": "Dit is een Indisch restaurant" - }, - "13": { - "then": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)" - }, - "14": { - "then": "Dit is een Thaïs restaurant" - }, "2": { "then": "Dit is een pastazaak" }, @@ -4209,6 +4205,21 @@ }, "9": { "then": "Dit is een Frans restaurant" + }, + "10": { + "then": "Dit is een Chinees restaurant" + }, + "11": { + "then": "Dit is een Grieks restaurant" + }, + "12": { + "then": "Dit is een Indisch restaurant" + }, + "13": { + "then": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)" + }, + "14": { + "then": "Dit is een Thaïs restaurant" } }, "question": "Welk soort gerechten worden hier geserveerd?", @@ -5260,12 +5271,6 @@ "0": { "then": "Dit is een standbeeld" }, - "10": { - "then": "Dit is een kruis" - }, - "12": { - "then": "Dit is een historische tank, permanent in de publieke ruimte geplaatst als gedenkteken" - }, "2": { "then": "Dit is een zitbank die ook als herdenking dienst doet" }, @@ -5277,6 +5282,12 @@ }, "8": { "then": "Dit is een sculptuur" + }, + "10": { + "then": "Dit is een kruis" + }, + "12": { + "then": "Dit is een historische tank, permanent in de publieke ruimte geplaatst als gedenkteken" } } }, @@ -5428,19 +5439,6 @@ } } }, - "10": { - "options": { - "0": { - "question": "Alle Notes" - }, - "1": { - "question": "Verberg import Notes" - }, - "2": { - "question": "Toon enkel import Notes" - } - } - }, "2": { "options": { "0": { @@ -5496,6 +5494,19 @@ "question": "Toon enkel open Notes" } } + }, + "10": { + "options": { + "0": { + "question": "Alle Notes" + }, + "1": { + "question": "Verberg import Notes" + }, + "2": { + "question": "Toon enkel import Notes" + } + } } }, "name": "OpenStreetMap Notes", @@ -5773,18 +5784,6 @@ "1": { "then": "Dit is een normale parkeerplek." }, - "10": { - "then": "Deze parkeerplek is gereserveerd voor personeel." - }, - "11": { - "then": "Deze parkeerplek is gereserveerd voor taxis." - }, - "12": { - "then": "Deze parkeerplek is gereserveerd voor voertuigen met een aanhanger." - }, - "13": { - "then": "Deze parkeerplek is gereserveerd voor autodelen." - }, "2": { "then": "Dit is een gehandicaptenparkeerplaats." }, @@ -5808,6 +5807,18 @@ }, "9": { "then": "Deze parkeerplek is gereserveerd voor ouders met kinderen." + }, + "10": { + "then": "Deze parkeerplek is gereserveerd voor personeel." + }, + "11": { + "then": "Deze parkeerplek is gereserveerd voor taxis." + }, + "12": { + "then": "Deze parkeerplek is gereserveerd voor voertuigen met een aanhanger." + }, + "13": { + "then": "Deze parkeerplek is gereserveerd voor autodelen." } }, "question": "Wat voor parkeerplek is dit?" @@ -6122,9 +6133,6 @@ "0": { "then": "Dit is een schommel" }, - "11": { - "then": "Dit is een rekstok" - }, "3": { "then": "Dit is een zandbak" }, @@ -6136,6 +6144,9 @@ }, "6": { "then": "Dit is een wipwap" + }, + "11": { + "then": "Dit is een rekstok" } }, "question": "Wat voor speeltoestel is dit?" @@ -6411,21 +6422,6 @@ "1": { "then": "Munten van 2 cent worden geaccepteerd" }, - "10": { - "then": "Munten van 20 rappen worden geaccepteerd" - }, - "11": { - "then": "Munten van ½ frank worden geaccepteerd" - }, - "12": { - "then": "Munten van 1 frank worden geaccepteerd" - }, - "13": { - "then": "Munten van 2 frank worden geaccepteerd" - }, - "14": { - "then": "Munten van 5 frank worden geaccepteerd" - }, "2": { "then": "Munten van 5 cent worden geaccepteerd" }, @@ -6449,6 +6445,21 @@ }, "9": { "then": "Munten van 10 rappen worden geaccepteerd" + }, + "10": { + "then": "Munten van 20 rappen worden geaccepteerd" + }, + "11": { + "then": "Munten van ½ frank worden geaccepteerd" + }, + "12": { + "then": "Munten van 1 frank worden geaccepteerd" + }, + "13": { + "then": "Munten van 2 frank worden geaccepteerd" + }, + "14": { + "then": "Munten van 5 frank worden geaccepteerd" } }, "question": "Met welke munten kan je hier betalen?" @@ -6461,15 +6472,6 @@ "1": { "then": "Biljetten van 10 euro worden geaccepteerd" }, - "10": { - "then": "Biljetten van 100 frank worden geaccepteerd" - }, - "11": { - "then": "Biljetten van 200 frank worden geaccepteerd" - }, - "12": { - "then": "Biljetten van 1000 frank worden geaccepteerd" - }, "2": { "then": "Biljetten van 20 euro worden geaccepteerd" }, @@ -6493,6 +6495,15 @@ }, "9": { "then": "Biljetten van 50 frank worden geaccepteerd" + }, + "10": { + "then": "Biljetten van 100 frank worden geaccepteerd" + }, + "11": { + "then": "Biljetten van 200 frank worden geaccepteerd" + }, + "12": { + "then": "Biljetten van 1000 frank worden geaccepteerd" } }, "question": "Met welke bankbiljetten kan je hier betalen?" @@ -6837,6 +6848,30 @@ "1": { "question": "Recycling van batterijen" }, + "2": { + "question": "Recycling van drankpakken" + }, + "3": { + "question": "Recycling van blikken" + }, + "4": { + "question": "Recycling van kleding" + }, + "5": { + "question": "Recycling van frituurvet" + }, + "6": { + "question": "Recycling van motorolie" + }, + "7": { + "question": "Recycling van tl-buizen" + }, + "8": { + "question": "Recycling van groen afval" + }, + "9": { + "question": "Recycling van glazen flessen" + }, "10": { "question": "Recycling van glas" }, @@ -6867,9 +6902,6 @@ "19": { "question": "Recycling van restafval" }, - "2": { - "question": "Recycling van drankpakken" - }, "20": { "question": "Recycling van inktpatronen" }, @@ -6878,27 +6910,6 @@ }, "22": { "question": "Recycling van plastic verkpakkingen, metalen verkpakkingen en drankpakken (PMD)" - }, - "3": { - "question": "Recycling van blikken" - }, - "4": { - "question": "Recycling van kleding" - }, - "5": { - "question": "Recycling van frituurvet" - }, - "6": { - "question": "Recycling van motorolie" - }, - "7": { - "question": "Recycling van tl-buizen" - }, - "8": { - "question": "Recycling van groen afval" - }, - "9": { - "question": "Recycling van glazen flessen" } } }, @@ -6966,6 +6977,30 @@ "1": { "then": "Drankpakken kunnen hier gerecycled worden" }, + "2": { + "then": "Blikken kunnen hier gerecycled worden" + }, + "3": { + "then": "Kleren kunnen hier gerecycled worden" + }, + "4": { + "then": "Frituurvet kan hier gerecycled worden" + }, + "5": { + "then": "Motorolie kan hier gerecycled worden" + }, + "6": { + "then": "TL-buizen kunnen hier gerecycled worden" + }, + "7": { + "then": "Groen afval kan hier gerecycled worden" + }, + "8": { + "then": "Organisch afval kan hier gerecycled worden" + }, + "9": { + "then": "Glazen flessen kunnen hier gerecycled worden" + }, "10": { "then": "Glas kan hier gerecycled worden" }, @@ -6996,9 +7031,6 @@ "19": { "then": "Oud metaal kan hier gerecycled worden" }, - "2": { - "then": "Blikken kunnen hier gerecycled worden" - }, "20": { "then": "Schoenen kunnen hier gerecycled worden" }, @@ -7016,27 +7048,6 @@ }, "25": { "then": "Fietsen (en fietswrakken) kunnen hier gerecycled worden" - }, - "3": { - "then": "Kleren kunnen hier gerecycled worden" - }, - "4": { - "then": "Frituurvet kan hier gerecycled worden" - }, - "5": { - "then": "Motorolie kan hier gerecycled worden" - }, - "6": { - "then": "TL-buizen kunnen hier gerecycled worden" - }, - "7": { - "then": "Groen afval kan hier gerecycled worden" - }, - "8": { - "then": "Organisch afval kan hier gerecycled worden" - }, - "9": { - "then": "Glazen flessen kunnen hier gerecycled worden" } }, "question": "Wat kan hier gerecycled worden?" @@ -7762,12 +7773,6 @@ "1": { "then": "Deze lantaarn gebruikt LEDs" }, - "10": { - "then": "Deze lantaarn gebruikt hogedruknatriumlampen (oranje met wit)" - }, - "11": { - "then": "Deze lantaarn wordt verlicht met gas" - }, "2": { "then": "Deze lantaarn gebruikt gloeilampen" }, @@ -7791,6 +7796,12 @@ }, "9": { "then": "Deze lantaarn gebruikt lagedruknatriumlampen (monochroom oranje)" + }, + "10": { + "then": "Deze lantaarn gebruikt hogedruknatriumlampen (oranje met wit)" + }, + "11": { + "then": "Deze lantaarn wordt verlicht met gas" } }, "question": "Wat voor verlichting gebruikt deze lantaarn?" @@ -9037,6 +9048,30 @@ "1": { "question": "Verkoop van dranken" }, + "2": { + "question": "Verkoop van snoep" + }, + "3": { + "question": "Verkoop van eten" + }, + "4": { + "question": "Verkoop van sigaretten" + }, + "5": { + "question": "Verkoop van condooms" + }, + "6": { + "question": "Verkoop van koffie" + }, + "7": { + "question": "Verkoop van water" + }, + "8": { + "question": "Verkoop van kranten" + }, + "9": { + "question": "Verkoop van fietsbinnenbanden" + }, "10": { "question": "Verkoop van melk" }, @@ -9067,9 +9102,6 @@ "19": { "question": "Verkoop van bloemen" }, - "2": { - "question": "Verkoop van snoep" - }, "23": { "question": "Verkoop van fietslampjes" }, @@ -9084,27 +9116,6 @@ }, "27": { "question": "Verkoop van fietssloten" - }, - "3": { - "question": "Verkoop van eten" - }, - "4": { - "question": "Verkoop van sigaretten" - }, - "5": { - "question": "Verkoop van condooms" - }, - "6": { - "question": "Verkoop van koffie" - }, - "7": { - "question": "Verkoop van water" - }, - "8": { - "question": "Verkoop van kranten" - }, - "9": { - "question": "Verkoop van fietsbinnenbanden" } } } @@ -9195,6 +9206,30 @@ "1": { "then": "Snoep wordt verkocht" }, + "2": { + "then": "Eten wordt verkocht" + }, + "3": { + "then": "Sigaretten worden verkocht" + }, + "4": { + "then": "Condooms worden verkocht" + }, + "5": { + "then": "Koffie wordt verkocht" + }, + "6": { + "then": "Drinkwater wordt verkocht" + }, + "7": { + "then": "Kranten worden verkocht" + }, + "8": { + "then": "Binnenbanden voor fietsen worden verkocht" + }, + "9": { + "then": "Melk wordt verkocht" + }, "10": { "then": "Brood wordt verkocht" }, @@ -9225,9 +9260,6 @@ "19": { "then": "Parkeerkaarten worden verkocht" }, - "2": { - "then": "Eten wordt verkocht" - }, "21": { "then": "Openbaar vervoerkaartjes worden verkocht" }, @@ -9245,27 +9277,6 @@ }, "26": { "then": "Fietssloten worden verkocht" - }, - "3": { - "then": "Sigaretten worden verkocht" - }, - "4": { - "then": "Condooms worden verkocht" - }, - "5": { - "then": "Koffie wordt verkocht" - }, - "6": { - "then": "Drinkwater wordt verkocht" - }, - "7": { - "then": "Kranten worden verkocht" - }, - "8": { - "then": "Binnenbanden voor fietsen worden verkocht" - }, - "9": { - "then": "Melk wordt verkocht" } }, "question": "Wat verkoopt deze verkoopautomaat?", @@ -9567,4 +9578,4 @@ "render": "windturbine" } } -} +} \ No newline at end of file diff --git a/langs/themes/en.json b/langs/themes/en.json index 48e4dd040..87697011e 100644 --- a/langs/themes/en.json +++ b/langs/themes/en.json @@ -983,6 +983,10 @@ }, "title": "Kerbs and crossings" }, + "lactosefree": { + "description": "A crowdsourced map with lactose free shops and restaurants", + "title": "Lactose free shops and restaurants" + }, "lighthouses": { "description": "Lighthouses are tall buildings with a light on top to guide marine traffic.", "title": "Lighthouses" diff --git a/langs/themes/es.json b/langs/themes/es.json index 02de6a69b..eae3ff534 100644 --- a/langs/themes/es.json +++ b/langs/themes/es.json @@ -979,33 +979,6 @@ "onwheels": { "description": "En este mapa se muestran los lugares accesibles al público en silla de ruedas, que pueden añadirse fácilmente", "layers": { - "19": { - "override": { - "=title": { - "render": "Estadísticas" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Importar" - } - } - }, - "1": { - "render": { - "special": { - "message": "Añadir todas las etiquetas sugeridas" - } - } - } - } - } - }, "4": { "override": { "filter": { @@ -1048,6 +1021,33 @@ "override": { "name": "Plazas de aparcamiento para discapacitados" } + }, + "19": { + "override": { + "=title": { + "render": "Estadísticas" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Importar" + } + } + }, + "1": { + "render": { + "special": { + "message": "Añadir todas las etiquetas sugeridas" + } + } + } + } + } } }, "title": "Sobre ruedas" @@ -1263,6 +1263,10 @@ "stations": { "description": "Ver, editar y añadir detalles a una estación de tren", "layers": { + "3": { + "description": "Capa que muestra las estaciones de tren", + "name": "Estación de Tren" + }, "16": { "description": "Pantallas que muestran los trenes que saldrán de esta estación", "name": "Tableros de salidas", @@ -1294,10 +1298,6 @@ "title": { "render": "Tablero de salidas" } - }, - "3": { - "description": "Capa que muestra las estaciones de tren", - "name": "Estación de Tren" } }, "title": "Estaciones de tren" @@ -1476,4 +1476,4 @@ "shortDescription": "Un mapa con papeleras", "title": "Papeleras" } -} +} \ No newline at end of file diff --git a/langs/themes/zh_Hans.json b/langs/themes/zh_Hans.json index b60d4964c..652a73e52 100644 --- a/langs/themes/zh_Hans.json +++ b/langs/themes/zh_Hans.json @@ -190,4 +190,4 @@ } } } -} +} \ No newline at end of file diff --git a/scripts/generateDocs.ts b/scripts/generateDocs.ts index ea4ef0192..ded990549 100644 --- a/scripts/generateDocs.ts +++ b/scripts/generateDocs.ts @@ -54,15 +54,15 @@ class ToSlideshowJson { sections.push(currentSection) currentSection = [] } - line = line.replace("src=\"../../public/", "src=\"./") - line = line.replace("src=\"../../", "src=\"./") + line = line.replace('src="../../public/', 'src="./') + line = line.replace('src="../../', 'src="./') currentSection.push(line) } sections.push(currentSection) writeFileSync( this._target, JSON.stringify({ - sections: sections.map((s) => s.join("\n")).filter((s) => s.length > 0) + sections: sections.map((s) => s.join("\n")).filter((s) => s.length > 0), }) ) } @@ -81,7 +81,7 @@ class WikiPageGenerator { generate() { let wikiPage = - "{|class=\"wikitable sortable\"\n" + + '{|class="wikitable sortable"\n' + "! Name, link !! Genre !! Covered region !! Language !! Description !! Free materials !! Image\n" + "|-" @@ -139,7 +139,7 @@ export class GenerateDocs extends Script { } this.WriteMarkdownFile("./Docs/Tags_format.md", TagUtils.generateDocs(), [ - "src/Logic/Tags/TagUtils.ts" + "src/Logic/Tags/TagUtils.ts", ]) new ToSlideshowJson( @@ -165,24 +165,20 @@ export class GenerateDocs extends Script { }) this.WriteMarkdownFile("./Docs/SpecialRenderings.md", SpecialVisualizations.HelpMessage(), [ - "src/UI/SpecialVisualizations.ts" + "src/UI/SpecialVisualizations.ts", ]) this.WriteMarkdownFile( "./Docs/CalculatedTags.md", - [ - "# Metatags", - SimpleMetaTaggers.HelpText(), - ExtraFunctions.HelpText() - ].join("\n"), + ["# Metatags", SimpleMetaTaggers.HelpText(), ExtraFunctions.HelpText()].join("\n"), ["src/Logic/SimpleMetaTagger.ts", "src/Logic/ExtraFunctions.ts"] ) this.WriteMarkdownFile("./Docs/SpecialInputElements.md", Validators.HelpText(), [ - "src/UI/InputElement/Validators.ts" + "src/UI/InputElement/Validators.ts", ]) this.WriteMarkdownFile("./Docs/ChangesetMeta.md", Changes.getDocs(), [ "src/Logic/Osm/Changes.ts", - "src/Logic/Osm/ChangesetHandler.ts" + "src/Logic/Osm/ChangesetHandler.ts", ]) new WikiPageGenerator().generate() @@ -225,20 +221,21 @@ export class GenerateDocs extends Script { const warnAutomated = "[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)\n\n" - const generatedFrom = - [ - - "This document is autogenerated from", - autogenSource.map(s => `[${s}](https://github.com/pietervdvn/MapComplete/blob/develop/${s})`).join(", ") - ].join(" ") - + const generatedFrom = [ + "This document is autogenerated from", + autogenSource + .map((s) => `[${s}](https://github.com/pietervdvn/MapComplete/blob/develop/${s})`) + .join(", "), + ].join(" ") writeFileSync(filename, warnAutomated + md + "\n\n" + generatedFrom + "\n") } private generateHotkeyDocs() { new ThemeViewState(new LayoutConfig(bookcases), new Set()) - this.WriteMarkdownFile("./Docs/Hotkeys.md", Hotkeys.generateDocumentation(), ["src/UI/Base/Hotkeys.ts"]) + this.WriteMarkdownFile("./Docs/Hotkeys.md", Hotkeys.generateDocumentation(), [ + "src/UI/Base/Hotkeys.ts", + ]) } private generateBuiltinUnits() { @@ -271,7 +268,7 @@ export class GenerateDocs extends Script { } this.WriteMarkdownFile("./Docs/builtin_units.md", ["# Units", ...els].join("\n\n"), [ - `assets/layers/unit/unit.json` + `assets/layers/unit/unit.json`, ]) } @@ -438,39 +435,41 @@ export class GenerateDocs extends Script { } private generateForTheme(theme: LayoutConfig): void { - const allLayers = AllSharedLayers.getSharedLayersConfigs() - const layersToShow = theme.layers - .filter((l) => !l.id.startsWith("note_import_") && l.id !== "favourite" && Constants.added_by_default.indexOf(l.id) < 0) - const layersToInline = layersToShow.filter(l => !allLayers.has(l.id)) + const layersToShow = theme.layers.filter( + (l) => + !l.id.startsWith("note_import_") && + l.id !== "favourite" && + Constants.added_by_default.indexOf(l.id) < 0 + ) + const layersToInline = layersToShow.filter((l) => !allLayers.has(l.id)) const el = [ - ["##", + [ + "##", theme.title, "(", `[${theme.id}](https://mapcomplete.org/${theme.id})`, - ")" + ")", ].join(" "), "_This document details some technical information about this MapComplete theme, mostly about the attributes used in the theme. Various links point toward more information about the attributes, e.g. to the OpenStreetMap-wiki, to TagInfo or tools creating statistics_", "The theme introduction reads:\n", - "> "+parse_html(theme.description.textFor("en")).textContent.replace(/\n/g, " "), + "> " + parse_html(theme.description.textFor("en")).textContent.replace(/\n/g, " "), "", "This theme contains the following layers:", MarkdownUtils.list( - layersToShow - .map((l) => { - if (allLayers.has(l.id)) { - - return (`[${l.id}](../Layers/${l.id}.md)`) - } - return (`[${l.id} (defined in this theme)](#${l.id.trim().replace(/ /g, "-")})`) - }) + layersToShow.map((l) => { + if (allLayers.has(l.id)) { + return `[${l.id}](../Layers/${l.id}.md)` + } + return `[${l.id} (defined in this theme)](#${l.id.trim().replace(/ /g, "-")})` + }) ), "Available languages:", MarkdownUtils.list(theme.language.filter((ln) => ln !== "_context")), "# Layers defined in this theme configuration file", "These layers can not be reused in different themes.", - ...layersToInline.map(l => l.GenerateDocumentation(null)) + ...layersToInline.map((l) => l.GenerateDocumentation(null)), ].join("\n") this.WriteMarkdownFile( "./Docs/Themes/" + theme.id + ".md", @@ -530,7 +529,9 @@ export class GenerateDocs extends Script { "# Special and other useful layers", "MapComplete has a few data layers available in the theme which have special properties through builtin-hooks. Furthermore, there are some normal layers (which are built from normal Theme-config files) but are so general that they get a mention here.", "# Priviliged layers", - MarkdownUtils.list(Constants.priviliged_layers.map((id) => "[" + id + "](#" + id + ")")), + MarkdownUtils.list( + Constants.priviliged_layers.map((id) => "[" + id + "](#" + id + ")") + ), ...Utils.NoNull( Constants.priviliged_layers.map((id) => AllSharedLayers.sharedLayers.get(id)) ).map((l) => @@ -548,9 +549,11 @@ export class GenerateDocs extends Script { Array.from(AllSharedLayers.sharedLayers.keys()).map( (id) => `[${id}](./Layers/${id}.md)` ) - ) + ), ].join("\n\n") - this.WriteMarkdownFile("./Docs/BuiltinLayers.md", el, ["src/Customizations/AllKnownLayouts.ts"]) + this.WriteMarkdownFile("./Docs/BuiltinLayers.md", el, [ + "src/Customizations/AllKnownLayouts.ts", + ]) } } diff --git a/scripts/generateFavouritesLayer.ts b/scripts/generateFavouritesLayer.ts index fa592b0f6..91199de87 100644 --- a/scripts/generateFavouritesLayer.ts +++ b/scripts/generateFavouritesLayer.ts @@ -73,9 +73,13 @@ export class GenerateFavouritesLayer extends Script { } private addTagRenderings(proto: LayerConfigJson) { - const addedByDefault = (<{labels: string[], id: string}[]> questions.tagRenderings) - .filter(tr => tr?.["labels"]?.indexOf("added_by_default") > 0 || tr?.["labels"]?.indexOf("added_by_default_top") > 0 ) - .map(tr => tr.id) + const addedByDefault = (<{ labels: string[]; id: string }[]>questions.tagRenderings) + .filter( + (tr) => + tr?.["labels"]?.indexOf("added_by_default") > 0 || + tr?.["labels"]?.indexOf("added_by_default_top") > 0 + ) + .map((tr) => tr.id) const blacklistedIds = new Set([ "images", "questions", @@ -87,7 +91,7 @@ export class GenerateFavouritesLayer extends Script { "delete-button", "all-tags", "all_tags", - ...addedByDefault + ...addedByDefault, ]) const generatedTagRenderings: (string | QuestionableTagRenderingConfigJson)[] = [] @@ -236,8 +240,8 @@ export class GenerateFavouritesLayer extends Script { if (seenTitleIcons.has(titleIcon.id)) { continue } - if(titleIcon.id === undefined){ - continue + if (titleIcon.id === undefined) { + continue } seenTitleIcons.add(titleIcon.id) console.log("Adding title icon", titleIcon.id) diff --git a/scripts/generateIncludedImages.ts b/scripts/generateIncludedImages.ts index 3970d2a62..98d3ca19a 100644 --- a/scripts/generateIncludedImages.ts +++ b/scripts/generateIncludedImages.ts @@ -24,7 +24,7 @@ function genImages(dryrun = false) { .replace(/\n/g, " ") .replace(/\r/g, "") .replace(/\\/g, "\\") - .replace(/"/g, "\\\"") + .replace(/"/g, '\\"') .replaceAll(" ", " ") let hasNonAsciiChars = Array.from(svg) @@ -38,20 +38,18 @@ function genImages(dryrun = false) { const nameUC = name.toUpperCase().at(0) + name.substring(1) const svelteCode = - "\n" + + '\n' + svg .replace( " { genImages() - } } diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index e0d1bd380..1716eab47 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -332,7 +332,6 @@ class LayerOverviewUtils extends Script { return sharedQuestions.tagRenderings } - return this.getSharedTagRenderings( doesImageExist, dict, @@ -807,7 +806,11 @@ class LayerOverviewUtils extends Script { ScriptUtils.ReadSvgSync(themeFile.icon, (svg) => { const width: string = svg["$"].width if (width === undefined) { - throw "The logo at " + themeFile.icon + " does not have a defined width" + throw ( + "The logo at " + + themeFile.icon + + " does not have a defined width" + ) } const height: string = svg["$"].height const err = themeFile.hideFromOverview ? console.warn : console.error @@ -818,9 +821,12 @@ class LayerOverviewUtils extends Script { err(e) } - if (width?.endsWith("%")) { - throw "The logo at " + themeFile.icon + " has a relative width; this is not supported" + throw ( + "The logo at " + + themeFile.icon + + " has a relative width; this is not supported" + ) } const w = parseInt(width) diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts index 9f1f5a54e..8fc470efb 100644 --- a/scripts/generateLayouts.ts +++ b/scripts/generateLayouts.ts @@ -457,27 +457,26 @@ class GenerateLayouts extends Script { let ogImage = layout.socialImage let twitterImage = ogImage if (ogImage === LayoutConfig.defaultSocialImage && layout.official) { - try{ + try { ogImage = (await this.createSocialImage(layout, "")) ?? layout.socialImage twitterImage = (await this.createSocialImage(layout, "Wide")) ?? layout.socialImage - }catch (e) { + } catch (e) { console.error("Could not generate image:", e) } } if (twitterImage.endsWith(".svg")) { - try{ - - // svgs are badly supported as social image, we use a generated svg instead - twitterImage = await this.createIcon(twitterImage, 512, alreadyWritten) - }catch (e) { + try { + // svgs are badly supported as social image, we use a generated svg instead + twitterImage = await this.createIcon(twitterImage, 512, alreadyWritten) + } catch (e) { console.error("Could not generate image:", e) } } if (ogImage.endsWith(".svg")) { - try{ + try { ogImage = await this.createIcon(ogImage, 512, alreadyWritten) - }catch (e) { + } catch (e) { console.error("Could not generate image:", e) } } diff --git a/scripts/handleErrors.ts b/scripts/handleErrors.ts index 410493522..178db93e4 100644 --- a/scripts/handleErrors.ts +++ b/scripts/handleErrors.ts @@ -9,7 +9,6 @@ import { ImmutableStore } from "../src/Logic/UIEventSource" import { Utils } from "../src/Utils" class HandleErrors extends Script { - constructor() { super("Inspects the errors made on a given day. Argument: path to errors") } @@ -29,9 +28,10 @@ class HandleErrors extends Script { continue } try { - const parsed: { - ip: string, index: number, date: string, + ip: string + index: number + date: string message: { stacktrace: string message: string @@ -50,18 +50,25 @@ class HandleErrors extends Script { } console.log(e.username, e.layout, e.message, parsed.date) for (const pendingChange of e.pendingChanges) { - console.log("\t https://osm.org/" + pendingChange.type + "/" + pendingChange.id, pendingChange.meta.changeType, pendingChange.doDelete ? "DELETE" : "") + console.log( + "\t https://osm.org/" + pendingChange.type + "/" + pendingChange.id, + pendingChange.meta.changeType, + pendingChange.doDelete ? "DELETE" : "" + ) } - const neededIds = Changes.GetNeededIds(e.pendingChanges) // We _do not_ pass in the Changes object itself - we want the data from OSM directly in order to apply the changes - const osmObjects: { id: string, osmObj: OsmObject | "deleted" }[] = await Promise.all<{ - id: string; - osmObj: OsmObject | "deleted" - }>( - neededIds.map(async id => ({ id, osmObj: await downloader.DownloadObjectAsync(id) })) - ) + const osmObjects: { id: string; osmObj: OsmObject | "deleted" }[] = + await Promise.all<{ + id: string + osmObj: OsmObject | "deleted" + }>( + neededIds.map(async (id) => ({ + id, + osmObj: await downloader.DownloadObjectAsync(id), + })) + ) const objects = osmObjects .filter((obj) => obj.osmObj !== "deleted") @@ -69,40 +76,53 @@ class HandleErrors extends Script { const { toUpload, refused } = Changes.fragmentChanges(e.pendingChanges, objects) - const changes: { newObjects: OsmObject[] modifiedObjects: OsmObject[] deletedObjects: OsmObject[] } = new Changes({ dryRun: new ImmutableStore(true), - osmConnection + osmConnection, }).CreateChangesetObjects(toUpload, objects) const changeset = Changes.createChangesetFor("", changes) - const path = "error_changeset_" + parsed.index + "_" + e.layout + "_" + e.username + ".osc" - if(changeset === ""){ - console.log("Changes for "+parsed.index+": empty changeset, not creating a file for it") - }else if (createdChangesets.has(changeset)) { - console.log("Changeset " + parsed.index + " is identical to previously seen changeset, not writing to file") + const path = + "error_changeset_" + parsed.index + "_" + e.layout + "_" + e.username + ".osc" + if ( + changeset === + "" + ) { + console.log( + "Changes for " + + parsed.index + + ": empty changeset, not creating a file for it" + ) + } else if (createdChangesets.has(changeset)) { + console.log( + "Changeset " + + parsed.index + + " is identical to previously seen changeset, not writing to file" + ) } else { writeFileSync(path, changeset, "utf8") createdChangesets.add(changeset) } const refusedContent = JSON.stringify(refused) if (refusedFiles.has(refusedContent)) { - console.log("Refused changes for " + parsed.index + " is identical to previously seen changeset, not writing to file") + console.log( + "Refused changes for " + + parsed.index + + " is identical to previously seen changeset, not writing to file" + ) } else { writeFileSync(path + ".refused.json", refusedContent, "utf8") refusedFiles.add(refusedContent) } console.log("Written", path, "with " + e.pendingChanges.length + " changes") - } catch (e) { console.log("Parsing line failed:", e) } } - } } diff --git a/scripts/serverErrorReport.ts b/scripts/serverErrorReport.ts index acc0c848a..f07aad553 100644 --- a/scripts/serverErrorReport.ts +++ b/scripts/serverErrorReport.ts @@ -6,7 +6,6 @@ import ScriptUtils from "./ScriptUtils" import { IncomingMessage } from "node:http" class ServerErrorReport extends Script { - private errorReport = 0 constructor() { @@ -14,7 +13,8 @@ class ServerErrorReport extends Script { } private getFilename(logDirectory: string, d: Date): string { - return logDirectory + + return ( + logDirectory + "/" + d.getUTCFullYear() + "_" + @@ -22,11 +22,18 @@ class ServerErrorReport extends Script { "_" + d.getUTCDate() + ".lines.json" + ) } - public reportError(path: string, queryParams: URLSearchParams, req: IncomingMessage, body: string | undefined, logDirectory: string): string { + public reportError( + path: string, + queryParams: URLSearchParams, + req: IncomingMessage, + body: string | undefined, + logDirectory: string + ): string { if (!body) { - throw "{\"error\": \"No body; use a post request\"}" + throw '{"error": "No body; use a post request"}' } console.log(body) const ip = req.headers["x-forwarded-for"] @@ -39,14 +46,13 @@ class ServerErrorReport extends Script { const d = new Date() const file = this.getFilename(logDirectory, d) const date = d.toISOString() - const contents = - "\n" + JSON.stringify({ ip, index: this.errorReport, date, message: body }) + const contents = "\n" + JSON.stringify({ ip, index: this.errorReport, date, message: body }) if (!existsSync(file)) { writeFileSync(file, contents) } else { appendFileSync(file, contents) } - this. errorReport++ + this.errorReport++ return `{"status":"ok", "nr": ${this.errorReport}}` } @@ -58,8 +64,8 @@ class ServerErrorReport extends Script { console.log("Created this directory") } - if (!existsSync(logDirectory+"/csp")) { - mkdirSync(logDirectory+"/csp") + if (!existsSync(logDirectory + "/csp")) { + mkdirSync(logDirectory + "/csp") console.log("Created this directory") } @@ -75,23 +81,33 @@ class ServerErrorReport extends Script { errorsToday = contents.split("\n").length } return JSON.stringify({ - "online": true, - "errors_today": errorsToday, + online: true, + errors_today: errorsToday, }) }, }, { mustMatch: "report", mimetype: "application/json", - handle: async (path: string, queryParams: URLSearchParams, req: IncomingMessage, body: string | undefined) => { + handle: async ( + path: string, + queryParams: URLSearchParams, + req: IncomingMessage, + body: string | undefined + ) => { return this.reportError(path, queryParams, req, body, logDirectory) }, }, { mustMatch: "csp", mimetype: "application/json", - handle: async (path: string, queryParams: URLSearchParams, req: IncomingMessage, body: string | undefined) => { - return this.reportError(path, queryParams, req, body, logDirectory+"/csp") + handle: async ( + path: string, + queryParams: URLSearchParams, + req: IncomingMessage, + body: string | undefined + ) => { + return this.reportError(path, queryParams, req, body, logDirectory + "/csp") }, }, ]) diff --git a/scripts/serverLdScrape.ts b/scripts/serverLdScrape.ts index 661fe01ac..799698a89 100644 --- a/scripts/serverLdScrape.ts +++ b/scripts/serverLdScrape.ts @@ -54,16 +54,18 @@ class ServerLdScrape extends Script { const start = new Date() const cache: Record = {} new Server(port, {}, [ - {mustMatch: "status", - mimetype: "application/json", - handle: async () => { - return JSON.stringify({ - online: true, - cached_entries: Object.keys(cache).length, - booted: start, - uptime: Math.floor((new Date().getTime() - start.getTime()) / 1000) - }) - }}, + { + mustMatch: "status", + mimetype: "application/json", + handle: async () => { + return JSON.stringify({ + online: true, + cached_entries: Object.keys(cache).length, + booted: start, + uptime: Math.floor((new Date().getTime() - start.getTime()) / 1000), + }) + }, + }, { mustMatch: "extractgraph", mimetype: "application/ld+json", diff --git a/src/Logic/ExtraFunctions.ts b/src/Logic/ExtraFunctions.ts index 20c6723d9..0da3cd5b6 100644 --- a/src/Logic/ExtraFunctions.ts +++ b/src/Logic/ExtraFunctions.ts @@ -521,12 +521,14 @@ export class ExtraFunctions { public static HelpText(): string { const elems: string[] = [] for (const func of ExtraFunctions.allFuncs) { - elems.push("### "+func._name, func._doc, MarkdownUtils.list(func._args)) + elems.push("### " + func._name, func._doc, MarkdownUtils.list(func._args)) } return [ ExtraFunctions.intro, - MarkdownUtils.list(ExtraFunctions.allFuncs.map((func) => `[${func._name}](#${func._name})`)), + MarkdownUtils.list( + ExtraFunctions.allFuncs.map((func) => `[${func._name}](#${func._name})`) + ), ...elems, ].join("\n") } diff --git a/src/Logic/FeatureSource/Sources/LastClickFeatureSource.ts b/src/Logic/FeatureSource/Sources/LastClickFeatureSource.ts index 71d90914f..830d20333 100644 --- a/src/Logic/FeatureSource/Sources/LastClickFeatureSource.ts +++ b/src/Logic/FeatureSource/Sources/LastClickFeatureSource.ts @@ -57,9 +57,7 @@ export class LastClickFeatureSource implements FeatureSource { this._features = new UIEventSource([]) this.features = this._features clickSource.addCallbackAndRunD(({ lon, lat, mode }) => { - this._features.setData([ - this.createFeature(lon, lat, mode) - ]) + this._features.setData([this.createFeature(lon, lat, mode)]) }) } diff --git a/src/Logic/ImageProviders/ImageProvider.ts b/src/Logic/ImageProviders/ImageProvider.ts index 613eda941..28b55d020 100644 --- a/src/Logic/ImageProviders/ImageProvider.ts +++ b/src/Logic/ImageProviders/ImageProvider.ts @@ -68,7 +68,10 @@ export default abstract class ImageProvider { public abstract ExtractUrls(key: string, value: string): Promise[]> - public abstract DownloadAttribution(providedImage: {url: string, id: string}): Promise + public abstract DownloadAttribution(providedImage: { + url: string + id: string + }): Promise public abstract apiUrls(): string[] } diff --git a/src/Logic/ImageProviders/ImageUploadManager.ts b/src/Logic/ImageProviders/ImageUploadManager.ts index a1885224c..4b88623b7 100644 --- a/src/Logic/ImageProviders/ImageUploadManager.ts +++ b/src/Logic/ImageProviders/ImageUploadManager.ts @@ -129,8 +129,6 @@ export class ImageUploadManager { tags?.data?.["_orig_theme"] ) - - if (!action) { return } diff --git a/src/Logic/ImageProviders/Imgur.ts b/src/Logic/ImageProviders/Imgur.ts index dc8ae1369..28f205d23 100644 --- a/src/Logic/ImageProviders/Imgur.ts +++ b/src/Logic/ImageProviders/Imgur.ts @@ -97,7 +97,9 @@ export class Imgur extends ImageProvider implements ImageUploader { const hash = url.substr("https://i.imgur.com/".length).split(/\.jpe?g/i)[0] const apiUrl = "https://api.imgur.com/3/image/" + hash - const response = await Utils.downloadJsonCached<{data: {description: string, datetime: string, views: number}}>(apiUrl, 365 * 24 * 60 * 60, { + const response = await Utils.downloadJsonCached<{ + data: { description: string; datetime: string; views: number } + }>(apiUrl, 365 * 24 * 60 * 60, { Authorization: "Client-ID " + Constants.ImgurApiKey, }) diff --git a/src/Logic/ImageProviders/Mapillary.ts b/src/Logic/ImageProviders/Mapillary.ts index 62a6c465d..f9322c28e 100644 --- a/src/Logic/ImageProviders/Mapillary.ts +++ b/src/Logic/ImageProviders/Mapillary.ts @@ -133,7 +133,7 @@ export class Mapillary extends ImageProvider { return [this.PrepareUrlAsync(key, value)] } - public async DownloadAttribution(providedImage: {id: string}): Promise { + public async DownloadAttribution(providedImage: { id: string }): Promise { const mapillaryId = providedImage.id const metadataUrl = "https://graph.mapillary.com/" + diff --git a/src/Logic/ImageProviders/WikimediaImageProvider.ts b/src/Logic/ImageProviders/WikimediaImageProvider.ts index 5c969dbce..6edc901ac 100644 --- a/src/Logic/ImageProviders/WikimediaImageProvider.ts +++ b/src/Logic/ImageProviders/WikimediaImageProvider.ts @@ -82,8 +82,8 @@ export class WikimediaImageProvider extends ImageProvider { public PrepUrl(value: undefined): undefined public PrepUrl(value: string): ProvidedImage - public PrepUrl(value: string | undefined): ProvidedImage | undefined{ - if(value === undefined){ + public PrepUrl(value: string | undefined): ProvidedImage | undefined { + if (value === undefined) { return undefined } value = WikimediaImageProvider.removeCommonsPrefix(value) @@ -120,7 +120,7 @@ export class WikimediaImageProvider extends ImageProvider { return [Promise.resolve(this.UrlForImage("File:" + value))] } - public async DownloadAttribution(img: {url: string}): Promise { + public async DownloadAttribution(img: { url: string }): Promise { const filename = WikimediaImageProvider.ExtractFileName(img.url) if (filename === "") { diff --git a/src/Logic/Osm/Actions/ChangeDescription.ts b/src/Logic/Osm/Actions/ChangeDescription.ts index 65de2ab95..846de3203 100644 --- a/src/Logic/Osm/Actions/ChangeDescription.ts +++ b/src/Logic/Osm/Actions/ChangeDescription.ts @@ -203,6 +203,6 @@ export class ChangeDescriptionTools { changes: ChangeDescription[], mappings: Map ): ChangeDescription[] { - return changes.map(c =>ChangeDescriptionTools.rewriteIds(c, mappings)) + return changes.map((c) => ChangeDescriptionTools.rewriteIds(c, mappings)) } } diff --git a/src/Logic/Osm/Actions/LinkImageAction.ts b/src/Logic/Osm/Actions/LinkImageAction.ts index d70d7fc1c..d0706062e 100644 --- a/src/Logic/Osm/Actions/LinkImageAction.ts +++ b/src/Logic/Osm/Actions/LinkImageAction.ts @@ -55,6 +55,4 @@ export default class LinkImageAction extends OsmChangeAction { this._currentTags.ping() return tagChangeAction.CreateChangeDescriptions() } - - } diff --git a/src/Logic/Osm/Changes.ts b/src/Logic/Osm/Changes.ts index 8b959b222..18d359d11 100644 --- a/src/Logic/Osm/Changes.ts +++ b/src/Logic/Osm/Changes.ts @@ -133,50 +133,50 @@ export class Changes { [ { key: "comment", - docs: "The changeset comment. Will be a fixed string, mentioning the theme" + docs: "The changeset comment. Will be a fixed string, mentioning the theme", }, { key: "theme", - docs: "The name of the theme that was used to create this change. " + docs: "The name of the theme that was used to create this change. ", }, { key: "source", value: "survey", - docs: "The contributor had their geolocation enabled while making changes" + docs: "The contributor had their geolocation enabled while making changes", }, { key: "change_within_{distance}", - docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. This gives an indication of proximity and if they truly surveyed or were armchair-mapping" + docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. This gives an indication of proximity and if they truly surveyed or were armchair-mapping", }, { key: "change_over_{distance}", - docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. If they were over 5000m away, the might have been armchair-mapping" + docs: "If the contributor enabled their geolocation, this will hint how far away they were from the objects they edited. If they were over 5000m away, the might have been armchair-mapping", }, { key: "created_by", value: "MapComplete ", - docs: "The piece of software used to create this changeset; will always start with MapComplete, followed by the version number" + docs: "The piece of software used to create this changeset; will always start with MapComplete, followed by the version number", }, { key: "locale", value: "en|nl|de|...", - docs: "The code of the language that the contributor used MapComplete in. Hints what language the user speaks." + docs: "The code of the language that the contributor used MapComplete in. Hints what language the user speaks.", }, { key: "host", value: "https://mapcomplete.org/", - docs: "The URL that the contributor used to make changes. One can see the used instance with this" + docs: "The URL that the contributor used to make changes. One can see the used instance with this", }, { key: "imagery", - docs: "The identifier of the used background layer, this will probably be an identifier from the [editor layer index](https://github.com/osmlab/editor-layer-index)" - } + docs: "The identifier of the used background layer, this will probably be an identifier from the [editor layer index](https://github.com/osmlab/editor-layer-index)", + }, ], "default" ), ...addSource(ChangeTagAction.metatags, "ChangeTag"), ...addSource(ChangeLocationAction.metatags, "ChangeLocation"), - ...addSource(DeleteAction.metatags, "DeleteAction") + ...addSource(DeleteAction.metatags, "DeleteAction"), // TODO /* ...DeleteAction.metatags, @@ -198,11 +198,11 @@ export class Changes { docs, specialMotivation ? "This might give a reason per modified node or way" - : "" + : "", ].join("\n"), - source + source, ]) - ) + ), ].join("\n\n") } @@ -248,12 +248,12 @@ export class Changes { public async applyAction(action: OsmChangeAction): Promise { const changeDescriptions = await action.Perform(this) - const remapped = ChangeDescriptionTools.rewriteAllIds(changeDescriptions, this._changesetHandler._remappings) - - remapped[0].meta.distanceToObject = this.calculateDistanceToChanges( - action, - remapped + const remapped = ChangeDescriptionTools.rewriteAllIds( + changeDescriptions, + this._changesetHandler._remappings ) + + remapped[0].meta.distanceToObject = this.calculateDistanceToChanges(action, remapped) this.applyChanges(remapped) } @@ -420,12 +420,11 @@ export class Changes { } } - // ----------------- SORT OBJECTS ------------------- const result = { newObjects: [], modifiedObjects: [], - deletedObjects: [] + deletedObjects: [], } objects.forEach((v, id) => { @@ -534,12 +533,12 @@ export class Changes { private async getOsmObject(id: string, downloader: OsmObjectDownloader) { try { try { - // Important: we do **not** cache this request, we _always_ need a fresh version! const osmObj = await downloader.DownloadObjectAsync(id, 0) return { id, osmObj } } catch (e) { - const msg = "Could not download OSM-object " + + const msg = + "Could not download OSM-object " + id + " trying again before dropping it from the changes (" + e + @@ -549,11 +548,8 @@ export class Changes { return { id, osmObj } } } catch (e) { - const msg = "Could not download OSM-object " + - id + - " dropping it from the changes (" + - e + - ")" + const msg = + "Could not download OSM-object " + id + " dropping it from the changes (" + e + ")" this._reportError(msg) this.errors.data.push(e) this.errors.ping() @@ -561,26 +557,33 @@ export class Changes { } } - public static fragmentChanges(pending: ChangeDescription[], objects: OsmObject[]): { - refused: ChangeDescription[]; + public static fragmentChanges( + pending: ChangeDescription[], + objects: OsmObject[] + ): { + refused: ChangeDescription[] toUpload: ChangeDescription[] } { const refused: ChangeDescription[] = [] const toUpload: ChangeDescription[] = [] // All ids which have an 'update' - const createdIds = - new Set(pending.filter(cd => cd.changes !== undefined).map(cd => cd.id)) - pending.forEach(c => { + const createdIds = new Set( + pending.filter((cd) => cd.changes !== undefined).map((cd) => cd.id) + ) + pending.forEach((c) => { if (c.id < 0) { if (createdIds.has(c.id)) { toUpload.push(c) } else { - reportError(`Got an orphaned change. The 'creation'-change description for ${c.type}/${c.id} got lost. Permanently dropping this change:`+JSON.stringify(c)) + reportError( + `Got an orphaned change. The 'creation'-change description for ${c.type}/${c.id} got lost. Permanently dropping this change:` + + JSON.stringify(c) + ) } return } - const matchFound = !!objects.find(o => o.id === c.id && o.type === c.type) + const matchFound = !!objects.find((o) => o.id === c.id && o.type === c.type) if (matchFound) { toUpload.push(c) } else { @@ -588,8 +591,7 @@ export class Changes { } }) - return {refused, toUpload} - + return { refused, toUpload } } /** @@ -604,7 +606,7 @@ export class Changes { // We _do not_ pass in the Changes object itself - we want the data from OSM directly in order to apply the changes const downloader = new OsmObjectDownloader(this.backend, undefined) let osmObjects = await Promise.all<{ id: string; osmObj: OsmObject | "deleted" }>( - neededIds.map(id => this.getOsmObject(id, downloader)) + neededIds.map((id) => this.getOsmObject(id, downloader)) ) osmObjects = Utils.NoNull(osmObjects) @@ -640,14 +642,14 @@ export class Changes { ([key, count]) => ({ key: key, value: count, - aggregate: true + aggregate: true, }) ) const motivations = pending .filter((descr) => descr.meta.specialMotivation !== undefined) .map((descr) => ({ key: descr.meta.changeType + ":" + descr.type + "/" + descr.id, - value: descr.meta.specialMotivation + value: descr.meta.specialMotivation, })) const distances = Utils.NoNull(pending.map((descr) => descr.meta.distanceToObject)) @@ -678,7 +680,7 @@ export class Changes { return { key, value: count, - aggregate: true + aggregate: true, } }) ) @@ -693,26 +695,25 @@ export class Changes { const metatags: ChangesetTag[] = [ { key: "comment", - value: comment + value: comment, }, { key: "theme", - value: theme + value: theme, }, ...perType, ...motivations, - ...perBinMessage + ...perBinMessage, ] - - let {toUpload, refused} = Changes.fragmentChanges( - pending, objects - ) + let { toUpload, refused } = Changes.fragmentChanges(pending, objects) await this._changesetHandler.UploadChangeset( (csId, remappings) => { if (remappings.size > 0) { - toUpload = toUpload.map((ch) => ChangeDescriptionTools.rewriteIds(ch, remappings)) + toUpload = toUpload.map((ch) => + ChangeDescriptionTools.rewriteIds(ch, remappings) + ) } const changes: { @@ -756,9 +757,9 @@ export class Changes { ) console.log( "Using current-open-changeset-" + - theme + - " from the preferences, got " + - openChangeset.data + theme + + " from the preferences, got " + + openChangeset.data ) const refused = await self.flushSelectChanges(pendingChanges, openChangeset) @@ -777,7 +778,7 @@ export class Changes { ) // We keep all the refused changes to try them again - this.pendingChanges.setData(refusedChanges.flatMap(c => c)) + this.pendingChanges.setData(refusedChanges.flatMap((c) => c)) } catch (e) { console.error( "Could not handle changes - probably an old, pending changeset in localstorage with an invalid format; erasing those", diff --git a/src/Logic/Osm/ChangesetHandler.ts b/src/Logic/Osm/ChangesetHandler.ts index 315a8a960..4b5846ba9 100644 --- a/src/Logic/Osm/ChangesetHandler.ts +++ b/src/Logic/Osm/ChangesetHandler.ts @@ -94,7 +94,6 @@ export class ChangesetHandler { return hasChange } - /** * The full logic to upload a change to one or more elements. * @@ -155,7 +154,11 @@ export class ChangesetHandler { if (this._reportError) { this._reportError(e) } - console.warn("Could not open/upload changeset due to ", e, "trying again with a another fresh changeset ") + console.warn( + "Could not open/upload changeset due to ", + e, + "trying again with a another fresh changeset " + ) openChangeset.setData(undefined) throw e @@ -188,7 +191,12 @@ export class ChangesetHandler { await this.UpdateTags(csId, rewrittenTags) } catch (e) { if (this._reportError) { - this._reportError("Could not reuse changeset " + csId + ", might be closed: " + (e.stacktrace ?? ("" + e))) + this._reportError( + "Could not reuse changeset " + + csId + + ", might be closed: " + + (e.stacktrace ?? "" + e) + ) } console.warn("Could not upload, changeset is probably closed: ", e) openChangeset.setData(undefined) @@ -237,7 +245,7 @@ export class ChangesetHandler { if (newMetaTag === undefined) { extraMetaTags.push({ key: key, - value: oldCsTags[key] + value: oldCsTags[key], }) continue } @@ -374,11 +382,11 @@ export class ChangesetHandler { ["locale", Locale.language.data], ["host", `${window.location.origin}${window.location.pathname}`], ["source", setSourceAsSurvey ? "survey" : undefined], - ["imagery", this.changes.state["backgroundLayer"]?.data?.id] + ["imagery", this.changes.state["backgroundLayer"]?.data?.id], ].map(([key, value]) => ({ key, value, - aggregate: false + aggregate: false, })) } diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index 71b2869f9..d3d9ec219 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -214,7 +214,7 @@ export class OsmConnection { this.auth.xhr( { method: "GET", - path: "/api/0.6/user/details" + path: "/api/0.6/user/details", }, (err, details: XMLDocument) => { if (err != null) { @@ -326,9 +326,9 @@ export class OsmConnection { method, headers: header, content, - path: `/api/0.6/${path}` + path: `/api/0.6/${path}`, }, - function(err, response) { + function (err, response) { if (err !== null) { error(err) } else { @@ -408,7 +408,7 @@ export class OsmConnection { "notes.json", content, { - "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", }, true ) @@ -449,7 +449,7 @@ export class OsmConnection { file: gpx, description: options.description, tags: options.labels?.join(",") ?? "", - visibility: options.visibility + visibility: options.visibility, } if (!contents.description) { @@ -457,9 +457,9 @@ export class OsmConnection { } const extras = { file: - "; filename=\"" + + '; filename="' + (options.filename ?? "gpx_track_mapcomplete_" + new Date().toISOString()) + - "\"\r\nContent-Type: application/gpx+xml" + '"\r\nContent-Type: application/gpx+xml', } const boundary = "987654" @@ -467,7 +467,7 @@ export class OsmConnection { let body = "" for (const key in contents) { body += "--" + boundary + "\r\n" - body += "Content-Disposition: form-data; name=\"" + key + "\"" + body += 'Content-Disposition: form-data; name="' + key + '"' if (extras[key] !== undefined) { body += extras[key] } @@ -478,7 +478,7 @@ export class OsmConnection { const response = await this.post("gpx/create", body, { "Content-Type": "multipart/form-data; boundary=" + boundary, - "Content-Length": "" + body.length + "Content-Length": "" + body.length, }) const parsed = JSON.parse(response) console.log("Uploaded GPX track", parsed) @@ -499,9 +499,9 @@ export class OsmConnection { { method: "POST", - path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}` + path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}`, }, - function(err) { + function (err) { if (err !== null) { error(err) } else { @@ -516,7 +516,7 @@ export class OsmConnection { * To be called by land.html */ public finishLogin(callback: (previousURL: string) => void) { - this.auth.authenticate(function() { + this.auth.authenticate(function () { // Fully authed at this point console.log("Authentication successful!") const previousLocation = LocalStorageSource.Get("location_before_login") @@ -534,7 +534,7 @@ export class OsmConnection { : window.location.protocol + "//" + window.location.host + "/land.html", singlepage: true, // We always use 'singlePage', it is the most stable - including in PWA auto: true, - apiUrl: this._oauth_config.api_url ?? this._oauth_config.url + apiUrl: this._oauth_config.api_url ?? this._oauth_config.url, }) } diff --git a/src/Logic/SimpleMetaTagger.ts b/src/Logic/SimpleMetaTagger.ts index 389d0f0dc..9bfd3ae2c 100644 --- a/src/Logic/SimpleMetaTagger.ts +++ b/src/Logic/SimpleMetaTagger.ts @@ -635,7 +635,7 @@ export default class SimpleMetaTaggers { isLazy: true, }, (feature: Feature, layer: LayerConfig, tagsStore: UIEventSource) => { - if(tagsStore === undefined){ + if (tagsStore === undefined) { return } Utils.AddLazyPropertyAsync(feature.properties, "_currency", async () => { @@ -780,11 +780,11 @@ export default class SimpleMetaTaggers { subElements.push("## Metatags calculated by MapComplete") subElements.push( - "The following values are always calculated, by default, by MapComplete and are available automatically on all elements in every theme" + "The following values are always calculated, by default, by MapComplete and are available automatically on all elements in every theme" ) for (const metatag of SimpleMetaTaggers.metatags) { subElements.push( - "### "+metatag.keys.join(", "), + "### " + metatag.keys.join(", "), metatag.doc, metatag.isLazy ? "This is a lazy metatag and is only calculated when needed" : "" ) diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts index 33a5ae85b..6e568c5c3 100644 --- a/src/Logic/State/UserSettingsMetaTagging.ts +++ b/src/Logic/State/UserSettingsMetaTagging.ts @@ -1,14 +1,42 @@ import { Utils } from "../../Utils" /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ export class ThemeMetaTagging { - public static readonly themeName = "usersettings" + public static readonly themeName = "usersettings" - public metaTaggging_for_usersettings(feat: {properties: Record}) { - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) - Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) ) - Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) - feat.properties['__current_backgroun'] = 'initial_value' - } -} \ No newline at end of file + public metaTaggging_for_usersettings(feat: { properties: Record }) { + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => + feat.properties._description + .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) + ?.at(1) + ) + Utils.AddLazyProperty( + feat.properties, + "_d", + () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? "" + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.href.match(/mastodon|en.osm.town/) !== null + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty(feat.properties, "_mastodon_link", () => + ((feat) => { + const e = document.createElement("div") + e.innerHTML = feat.properties._d + return Array.from(e.getElementsByTagName("a")).filter( + (a) => a.getAttribute("rel")?.indexOf("me") >= 0 + )[0]?.href + })(feat) + ) + Utils.AddLazyProperty( + feat.properties, + "_mastodon_candidate", + () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a + ) + feat.properties["__current_backgroun"] = "initial_value" + } +} diff --git a/src/Logic/Web/NearbyImagesSearch.ts b/src/Logic/Web/NearbyImagesSearch.ts index c8b58cb1f..3895362d2 100644 --- a/src/Logic/Web/NearbyImagesSearch.ts +++ b/src/Logic/Web/NearbyImagesSearch.ts @@ -17,14 +17,15 @@ interface ImageFetcher { fetchImages(lat: number, lon: number): Promise readonly name: string - } - class CachedFetcher implements ImageFetcher { private readonly _fetcher: ImageFetcher private readonly _zoomlevel: number - private readonly cache: Map> = new Map>() + private readonly cache: Map> = new Map< + number, + Promise + >() public readonly name: string constructor(fetcher: ImageFetcher, zoomlevel: number = 19) { @@ -71,20 +72,17 @@ class NearbyImageUtils { const da = GeoOperations.distanceBetween([a.coordinates.lng, a.coordinates.lat], c) const db = GeoOperations.distanceBetween([b.coordinates.lng, b.coordinates.lat], c) return da - db - }) } } - class P4CImageFetcher implements ImageFetcher { - public static readonly services = ["mapillary", "flickr", "kartaview", "wikicommons"] as const public static readonly apiUrls = ["https://api.flickr.com"] - private _options: { maxDaysOld: number, searchRadius: number } + private _options: { maxDaysOld: number; searchRadius: number } public readonly name: P4CService - constructor(service: P4CService, options?: { maxDaysOld: number, searchRadius: number }) { + constructor(service: P4CService, options?: { maxDaysOld: number; searchRadius: number }) { this.name = service this._options = options } @@ -95,22 +93,19 @@ class P4CImageFetcher implements ImageFetcher { const searchRadius = this._options?.searchRadius ?? 100 try { - return await picManager.startPicsRetrievalAround( new P4C.LatLng(lat, lon), searchRadius, { mindate: new Date().getTime() - maxAgeSeconds, towardscenter: false, - - }, + } ) } catch (e) { console.log("P4C image fetcher failed with", e) throw e } } - } /** @@ -165,9 +160,7 @@ class ImagesInLoadedDataFetcher implements ImageFetcher { } } - class MapillaryFetcher implements ImageFetcher { - public readonly name = "mapillary_new" private readonly _panoramas: "only" | "no" | undefined private readonly _max_images: 100 | number @@ -176,9 +169,9 @@ class MapillaryFetcher implements ImageFetcher { private readonly end_captured_at?: Date constructor(options?: { - panoramas: undefined | "only" | "no", - max_images?: 100 | number, - start_captured_at?: Date, + panoramas: undefined | "only" | "no" + max_images?: 100 | number + start_captured_at?: Date end_captured_at?: Date }) { this._panoramas = options?.panoramas @@ -188,12 +181,19 @@ class MapillaryFetcher implements ImageFetcher { } async fetchImages(lat: number, lon: number): Promise { - const boundingBox = new BBox([[lon, lat]]).padAbsolute(0.003) - let url = "https://graph.mapillary.com/images?fields=computed_geometry,creator,id,thumb_256_url,thumb_original_url,compass_angle&bbox=" - + [boundingBox.getWest(), boundingBox.getSouth(), boundingBox.getEast(), boundingBox.getNorth()].join(",") - + "&access_token=" + encodeURIComponent(Constants.mapillary_client_token_v4) - + "&limit=" + this._max_images + let url = + "https://graph.mapillary.com/images?fields=computed_geometry,creator,id,thumb_256_url,thumb_original_url,compass_angle&bbox=" + + [ + boundingBox.getWest(), + boundingBox.getSouth(), + boundingBox.getEast(), + boundingBox.getNorth(), + ].join(",") + + "&access_token=" + + encodeURIComponent(Constants.mapillary_client_token_v4) + + "&limit=" + + this._max_images { if (this._panoramas === "no") { url += "&is_pano=false" @@ -201,21 +201,28 @@ class MapillaryFetcher implements ImageFetcher { url += "&is_pano=true" } if (this.start_captured_at) { - url += "&start_captured_at="+ this.start_captured_at?.toISOString() + url += "&start_captured_at=" + this.start_captured_at?.toISOString() } if (this.end_captured_at) { - url += "&end_captured_at="+ this.end_captured_at?.toISOString() + url += "&end_captured_at=" + this.end_captured_at?.toISOString() } } const response = await Utils.downloadJson<{ - data: { id: string, creator: string, computed_geometry: Point, is_pano: boolean,thumb_256_url: string, thumb_original_url: string, compass_angle: number }[] + data: { + id: string + creator: string + computed_geometry: Point + is_pano: boolean + thumb_256_url: string + thumb_original_url: string + compass_angle: number + }[] }>(url) const pics: P4CPicture[] = [] for (const img of response.data) { - const c = img.computed_geometry.coordinates - if(img.thumb_original_url === undefined){ + if (img.thumb_original_url === undefined) { continue } pics.push({ @@ -224,7 +231,7 @@ class MapillaryFetcher implements ImageFetcher { coordinates: { lng: c[0], lat: c[1] }, thumbUrl: img.thumb_256_url, osmTags: { - "mapillary":img.id + mapillary: img.id, }, details: { isSpherical: img.is_pano, @@ -241,22 +248,24 @@ export class CombinedFetcher { private readonly sources: ReadonlyArray public static apiUrls = P4CImageFetcher.apiUrls - constructor(radius: number, maxage: Date, indexedFeatures: IndexedFeatureSource) { this.sources = [ new ImagesInLoadedDataFetcher(indexedFeatures, radius), new MapillaryFetcher({ panoramas: "no", max_images: 25, - start_captured_at : maxage + start_captured_at: maxage, }), new P4CImageFetcher("mapillary"), new P4CImageFetcher("wikicommons"), - ].map(f => new CachedFetcher(f)) + ].map((f) => new CachedFetcher(f)) } - public getImagesAround(lon: number, lat: number): { - images: Store, + public getImagesAround( + lon: number, + lat: number + ): { + images: Store state: Store> } { const src = new UIEventSource([]) @@ -264,9 +273,9 @@ export class CombinedFetcher { for (const source of this.sources) { state.data[source.name] = "loading" state.ping() - source.fetchImages(lat, lon) - .then(pics => { - console.log(source.name,"==>>",pics) + source.fetchImages(lat, lon).then( + (pics) => { + console.log(source.name, "==>>", pics) state.data[source.name] = "done" state.ping() if (src.data === undefined) { @@ -276,27 +285,26 @@ export class CombinedFetcher { const seenIds = new Set() for (const p4CPicture of [...src.data, ...pics]) { const id = p4CPicture.pictureUrl - if(seenIds.has(id)){ + if (seenIds.has(id)) { continue } newList.push(p4CPicture) seenIds.add(id) - if(id === undefined){ - - console.log("Img:", p4CPicture) + if (id === undefined) { + console.log("Img:", p4CPicture) } } NearbyImageUtils.sortByDistance(newList, lon, lat) src.setData(newList) } - }, err => { + }, + (err) => { console.error("Could not load images from", source.name, "due to", err) state.data[source.name] = "error" state.ping() - }) + } + ) } return { images: src, state } } - } - diff --git a/src/Logic/Web/Wikidata.ts b/src/Logic/Web/Wikidata.ts index b5d3a0a4c..c3ff77f9a 100644 --- a/src/Logic/Web/Wikidata.ts +++ b/src/Logic/Web/Wikidata.ts @@ -119,7 +119,9 @@ export interface WikidataAdvancedSearchoptions extends WikidataSearchoptions { notInstanceOf?: number[] } -interface SparqlResult {results: { bindings: {item, label, description, num}[] }} +interface SparqlResult { + results: { bindings: { item; label; description; num }[] } +} /** * Utility functions around wikidata @@ -422,7 +424,7 @@ export default class Wikidata { } const url = "https://www.wikidata.org/wiki/Special:EntityData/" + id + ".json" - const entities = (await Utils.downloadJsonCached<{entities}>(url, 10000)).entities + const entities = (await Utils.downloadJsonCached<{ entities }>(url, 10000)).entities const firstKey = Array.from(Object.keys(entities))[0] // Roundabout way to fetch the entity; it might have been a redirect const response = entities[firstKey] diff --git a/src/Models/ThemeConfig/Conversion/Conversion.ts b/src/Models/ThemeConfig/Conversion/Conversion.ts index b9799b442..1c8dc641c 100644 --- a/src/Models/ThemeConfig/Conversion/Conversion.ts +++ b/src/Models/ThemeConfig/Conversion/Conversion.ts @@ -41,7 +41,7 @@ export abstract class Conversion { fixed = this.convert(json, context) } catch (e) { console.error(e) - context.err("ERROR WHILE RUNNING STEP " + this.name+": "+e) + context.err("ERROR WHILE RUNNING STEP " + this.name + ": " + e) fixed = undefined } for (const msg of context.messages) { @@ -54,12 +54,11 @@ export abstract class Conversion { throw new Error( [ "Detected one or more errors, stopping now:", - context.getAll("error").map((e) => e.context.path.join(".") + ": " + e.message) + context.getAll("error").map((e) => e.context.path.join(".") + ": " + e.message), ].join("\n\t") ) } return fixed - } public andThenF(f: (tout: TOut) => X): Conversion { @@ -69,8 +68,7 @@ export abstract class Conversion { public abstract convert(json: TIn, context: ConversionContext): TOut } -export abstract class DesugaringStep extends Conversion { -} +export abstract class DesugaringStep extends Conversion {} export class Pipe extends Conversion { private readonly _step0: Conversion @@ -257,7 +255,7 @@ export class Cached extends Conversion { const converted = this._step.convert(json, context) Object.defineProperty(json, this.key, { value: converted, - enumerable: false + enumerable: false, }) return converted } @@ -270,8 +268,8 @@ export class Fuse extends DesugaringStep { constructor(doc: string, ...steps: DesugaringStep[]) { super( (doc ?? "") + - "This fused pipeline of the following steps: " + - steps.map((s) => s.name).join(", "), + "This fused pipeline of the following steps: " + + steps.map((s) => s.name).join(", "), Utils.Dedup([].concat(...steps.map((step) => step.modifiedAttributes))), "Fuse(" + steps.map((s) => s.name).join(", ") + ")" ) diff --git a/src/Models/ThemeConfig/Conversion/FixImages.ts b/src/Models/ThemeConfig/Conversion/FixImages.ts index cc1fc7a55..50c67153b 100644 --- a/src/Models/ThemeConfig/Conversion/FixImages.ts +++ b/src/Models/ThemeConfig/Conversion/FixImages.ts @@ -55,13 +55,12 @@ export class ExtractImages extends Conversion< } static isImageType(metapath: any): boolean { - if (metapath.hints.typehint === "icon" || - metapath.hints.typehint === "image") { + if (metapath.hints.typehint === "icon" || metapath.hints.typehint === "image") { return true } - const types = metapath.hints.types?.split(";").map(x => x.trim()) - if (types?.some(t => t === "icon" || t === "image")) { + const types = metapath.hints.types?.split(";").map((x) => x.trim()) + if (types?.some((t) => t === "icon" || t === "image")) { return true } @@ -120,7 +119,7 @@ export class ExtractImages extends Conversion< const allRenderedValuesAreImages = ExtractImages.isImageType(metapath) const found = Utils.CollectPath(metapath.path, json) - if(found.length === 0){ + if (found.length === 0) { continue } @@ -177,7 +176,7 @@ export class ExtractImages extends Conversion< } else { allFoundImages.push({ path: img.leaf, - context: context + "." + path + context: context + "." + path, }) } } @@ -191,7 +190,7 @@ export class ExtractImages extends Conversion< .ExtractImages(false) .map((path) => ({ path, - context: context + "." + path + context: context + "." + path, })) ) } @@ -211,7 +210,7 @@ export class ExtractImages extends Conversion< } allFoundImages.push({ context: context.path.join(".") + "." + foundElement.path.join("."), - path: foundElement.leaf + path: foundElement.leaf, }) } } diff --git a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts index adcde9045..dc2ba8050 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts @@ -7,10 +7,13 @@ import { FirstOf, Fuse, On, - SetDefault + SetDefault, } from "./Conversion" import { LayerConfigJson } from "../Json/LayerConfigJson" -import { MinimalTagRenderingConfigJson, TagRenderingConfigJson } from "../Json/TagRenderingConfigJson" +import { + MinimalTagRenderingConfigJson, + TagRenderingConfigJson, +} from "../Json/TagRenderingConfigJson" import { Utils } from "../../../Utils" import RewritableConfigJson from "../Json/RewritableConfigJson" import SpecialVisualizations from "../../../UI/SpecialVisualizations" @@ -63,24 +66,27 @@ class ExpandFilter extends DesugaringStep { const newFilters: FilterConfigJson[] = [] const filters = <(FilterConfigJson | string)[]>json.filter - for (let i = 0; i < json.tagRenderings?.length; i++){ - const tagRendering = json.tagRenderings[i] - if(!tagRendering?.filter){ + for (let i = 0; i < json.tagRenderings?.length; i++) { + const tagRendering = json.tagRenderings[i] + if (!tagRendering?.filter) { continue } for (const filterName of tagRendering.filter ?? []) { - if(typeof filterName !== "string"){ - context.enters("tagRenderings",i,"filter").err("Not a string: "+ filterName) + if (typeof filterName !== "string") { + context.enters("tagRenderings", i, "filter").err("Not a string: " + filterName) } - const exists = filters.some(existing => { - const id : string = existing["id"] ?? existing - return filterName === id || (filterName.startsWith("filters.") && filterName.endsWith("."+id)) + const exists = filters.some((existing) => { + const id: string = existing["id"] ?? existing + return ( + filterName === id || + (filterName.startsWith("filters.") && filterName.endsWith("." + id)) + ) }) - if(exists){ + if (exists) { continue } - if(!filterName){ - context.err("Got undefined as filter expansion in "+tagRendering["id"]) + if (!filterName) { + context.err("Got undefined as filter expansion in " + tagRendering["id"]) continue } filters.push(filterName) @@ -89,7 +95,7 @@ class ExpandFilter extends DesugaringStep { for (let i = 0; i < filters.length; i++) { const filter = filters[i] - if(filter === undefined){ + if (filter === undefined) { continue } if (typeof filter !== "string") { @@ -141,9 +147,9 @@ class ExpandFilter extends DesugaringStep { const expandedFilter = (<(FilterConfigJson | string)[]>layer.filter).find( (f) => typeof f !== "string" && f.id === expectedId ) - if(expandedFilter === undefined){ - context.err("Did not find filter with name "+filter) - }else{ + if (expandedFilter === undefined) { + context.err("Did not find filter with name " + filter) + } else { newFilters.push(expandedFilter) } } else { @@ -644,7 +650,6 @@ export class AddQuestionBox extends DesugaringStep { } export class AddEditingElements extends DesugaringStep { - private readonly _desugaring: DesugaringContext private readonly _addedByDefaultAtTop: QuestionableTagRenderingConfigJson[] private readonly _addedByDefault: QuestionableTagRenderingConfigJson[] @@ -669,7 +674,6 @@ export class AddEditingElements extends DesugaringStep { return Utils.NoNull(idsInOrder.map((id) => this._desugaring.tagRenderings.get(id))) } - convert(json: LayerConfigJson, _: ConversionContext): LayerConfigJson { if (this._desugaring.tagRenderings === null) { return json @@ -734,7 +738,7 @@ export class AddEditingElements extends DesugaringStep { const trc: QuestionableTagRenderingConfigJson = { id: "all-tags", render: { "*": "{all_tags()}" }, - labels:["ignore_docs"], + labels: ["ignore_docs"], metacondition: { or: [ "__featureSwitchIsDebugging=true", diff --git a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts index dca64f6b9..dec7a7109 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts @@ -71,8 +71,8 @@ class SubstituteLayer extends Conversion { }[] = [] for (const layerConfig of alreadyLoaded) { - try { const layerDeps = DependencyCalculator.getLayerDependencies( new LayerConfig(layerConfig, themeId + "(dependencies)") @@ -402,7 +401,10 @@ class AddDependencyLayersToTheme extends DesugaringStep { } catch (e) { console.error(e) throw ( - "Detecting layer dependencies for " + layerConfig?.id + " failed due to " + e + "Detecting layer dependencies for " + + layerConfig?.id + + " failed due to " + + e ) } } diff --git a/src/Models/ThemeConfig/Conversion/Validation.ts b/src/Models/ThemeConfig/Conversion/Validation.ts index cd07d94a2..6bd73bf4a 100644 --- a/src/Models/ThemeConfig/Conversion/Validation.ts +++ b/src/Models/ThemeConfig/Conversion/Validation.ts @@ -1761,7 +1761,7 @@ export class ValidateFilter extends DesugaringStep { // Calling another filter, we skip return filter } - if(filter === undefined){ + if (filter === undefined) { context.err("Trying to validate a filter, but this filter is undefined") return undefined } @@ -1990,7 +1990,7 @@ export class ValidateThemeEnsemble extends Conversion< >() for (const theme of json) { - if(theme.id === "personal"){ + if (theme.id === "personal") { continue } for (const layer of theme.layers) { diff --git a/src/Models/ThemeConfig/FilterConfig.ts b/src/Models/ThemeConfig/FilterConfig.ts index ea5eef310..eff90cb2c 100644 --- a/src/Models/ThemeConfig/FilterConfig.ts +++ b/src/Models/ThemeConfig/FilterConfig.ts @@ -25,11 +25,13 @@ export default class FilterConfig { public readonly defaultSelection?: number constructor(json: FilterConfigJson, context: string) { - if(typeof json === "string"){ - throw "Got a non-expanded filter, just a string: "+json + if (typeof json === "string") { + throw "Got a non-expanded filter, just a string: " + json } if (json.options === undefined) { - throw `A filter without options was given at ${context}. The ID is ${JSON.stringify(json)}` + throw `A filter without options was given at ${context}. The ID is ${JSON.stringify( + json + )}` } if (json.id === undefined) { throw `A filter without id was found at ${context}` @@ -209,16 +211,16 @@ export default class FilterConfig { Utils.NoNull(["id", "question", "osmTags", hasField ? "fields" : undefined]), this.options.map((opt, i) => { const isDefault = this.options.length > 1 && (this.defaultSelection ?? 0) == i - return Utils.NoNull([ - this.id + "." + i, - isDefault - ? `*${opt.question.txt}* (default)` - : opt.question, - opt.osmTags?.asHumanString() ?? "", - opt.fields?.length > 0 - ? (opt.fields.map((f) => f.name + " (" + f.type + ")")).join(" ") - : undefined, - ]) + return ( + Utils.NoNull([ + this.id + "." + i, + isDefault ? `*${opt.question.txt}* (default)` : opt.question, + opt.osmTags?.asHumanString() ?? "", + opt.fields?.length > 0 + ? opt.fields.map((f) => f.name + " (" + f.type + ")").join(" ") + : undefined, + ]) + ) }) ) } diff --git a/src/Models/ThemeConfig/LayerConfig.ts b/src/Models/ThemeConfig/LayerConfig.ts index d2cd38ef3..4f132bf9f 100644 --- a/src/Models/ThemeConfig/LayerConfig.ts +++ b/src/Models/ThemeConfig/LayerConfig.ts @@ -93,7 +93,7 @@ export default class LayerConfig extends WithContextLoader { overpassScript: json.source["overpassScript"], isOsmCache: json.source["isOsmCache"], mercatorCrs: json.source["mercatorCrs"], - idKey: json.source["idKey"] + idKey: json.source["idKey"], }, json.id ) @@ -162,7 +162,7 @@ export default class LayerConfig extends WithContextLoader { let preciseInput: PreciseInput = { preferredBackground: ["photo"], snapToLayers: undefined, - maxSnapDistance: undefined + maxSnapDistance: undefined, } if (pr["preciseInput"] !== undefined) { throw ( @@ -175,7 +175,7 @@ export default class LayerConfig extends WithContextLoader { let snapToLayers = pr.snapToLayer preciseInput = { snapToLayers, - maxSnapDistance: pr.maxSnapDistance ?? 10 + maxSnapDistance: pr.maxSnapDistance ?? 10, } } @@ -187,7 +187,7 @@ export default class LayerConfig extends WithContextLoader { `${translationContext}.presets.${i}.description` ), preciseInput: preciseInput, - exampleImages: pr.exampleImages + exampleImages: pr.exampleImages, } return config }) @@ -293,10 +293,10 @@ export default class LayerConfig extends WithContextLoader { this.filters = [] } else { this.filters = (json.filter ?? []) - .filter(f => typeof f !== "string") + .filter((f) => typeof f !== "string") .map((option, i) => { - return new FilterConfig(option, `layers:${this.id}.filter.${i}`) - }) + return new FilterConfig(option, `layers:${this.id}.filter.${i}`) + }) } { @@ -311,7 +311,7 @@ export default class LayerConfig extends WithContextLoader { } this.titleIcons = this.ParseTagRenderings(json.titleIcons ?? [], { - readOnlyMode: true + readOnlyMode: true, }) this.title = this.tr("title", undefined, translationContext) @@ -412,7 +412,7 @@ export default class LayerConfig extends WithContextLoader { [ "", "This layer is loaded from an external source, namely ", - "`" + this.source.geojsonSource + "`" + "`" + this.source.geojsonSource + "`", ].join("\n\n") ) } @@ -428,10 +428,8 @@ export default class LayerConfig extends WithContextLoader { usingLayer = [ "## Themes using this layer", MarkdownUtils.list( - (usedInThemes ?? []).map( - (id) => (`[${id}](https://mapcomplete.org/${id})`) - ) - ) + (usedInThemes ?? []).map((id) => `[${id}](https://mapcomplete.org/${id})`) + ), ] } else if (this.source !== null) { usingLayer = ["No themes use this layer"] @@ -442,45 +440,46 @@ export default class LayerConfig extends WithContextLoader { extraProps.push( [ "This layer will automatically load ", - (`[${dep.neededLayer}](./${dep.neededLayer}.md)`), + `[${dep.neededLayer}](./${dep.neededLayer}.md)`, " into the layout as it depends on it: ", dep.reason, - "(" + dep.context + ")" + "(" + dep.context + ")", ].join(" ") ) } for (const revDep of Utils.Dedup(layerIsNeededBy?.get(this.id) ?? [])) { extraProps.push( - [ - "This layer is needed as dependency for layer", - (`[${revDep}](#${revDep})`) - ].join(" ") + ["This layer is needed as dependency for layer", `[${revDep}](#${revDep})`].join( + " " + ) ) } const tableRows: string[][] = Utils.NoNull( this.tagRenderings .map((tr) => tr.FreeformValues()) - .filter(values => values !== undefined) - .filter(values => values.key !== "id") + .filter((values) => values !== undefined) + .filter((values) => values.key !== "id") .map((values) => { - const embedded: (string)[] = values.values?.map((v) => + const embedded: string[] = values.values?.map((v) => Link.OsmWiki(values.key, v, true).SetClass("mr-2").AsMarkdown() ) ?? ["_no preset options defined, or no values in them_"] - const statistics = `https://taghistory.raifer.tech/?#***/${encodeURIComponent(values.key)}/` + const statistics = `https://taghistory.raifer.tech/?#***/${encodeURIComponent( + values.key + )}/` const tagInfo = `https://taginfo.openstreetmap.org/keys/${values.key}#values` return [ [ ``, ``, - Link.OsmWiki(values.key).AsMarkdown() + Link.OsmWiki(values.key).AsMarkdown(), ].join(" "), values.type === undefined ? "Multiple choice" : `[${values.type}](../SpecialInputElements.md#${values.type})`, - embedded.join(" ") + embedded.join(" "), ] }) ) @@ -488,31 +487,30 @@ export default class LayerConfig extends WithContextLoader { let quickOverview: string[] = [] if (tableRows.length > 0) { quickOverview = [ - ("**Warning:**"), + "**Warning:**", "this quick overview is incomplete", MarkdownUtils.table( ["attribute", "type", "values which are supported by this layer"], tableRows - ) + ), ] } let overpassLink: string = undefined if (this.source !== undefined) { try { - overpassLink = ( + overpassLink = "[Execute on overpass](" + Overpass.AsOverpassTurboLink(this.source.osmTags.optimize()) .replaceAll("(", "%28") - .replaceAll(")", "%29") - + ")" - ) + .replaceAll(")", "%29") + + ")" } catch (e) { console.error("Could not generate overpasslink for " + this.id) } } - const filterDocs: (string)[] = [] + const filterDocs: string[] = [] if (this.filters.length > 0) { filterDocs.push("## Filters") filterDocs.push(...this.filters.map((filter) => filter.GenerateDocs())) @@ -538,8 +536,8 @@ export default class LayerConfig extends WithContextLoader { } else { tagsDescription.push( "Elements must match the expression **" + - neededTags.asHumanString(true, false, {}) + - "**" + neededTags.asHumanString(true, false, {}) + + "**" ) } @@ -551,17 +549,21 @@ export default class LayerConfig extends WithContextLoader { return [ [ "# " + this.id + "\n", - this._basedOn ? `This layer is based on [${this._basedOn}](../Layers/${this._basedOn}.md)` : "", - this.description, "\n"].join("\n\n"), + this._basedOn + ? `This layer is based on [${this._basedOn}](../Layers/${this._basedOn}.md)` + : "", + this.description, + "\n", + ].join("\n\n"), MarkdownUtils.list(extraProps), ...usingLayer, ...tagsDescription, "## Supported attributes", quickOverview, ...this.tagRenderings - .filter(tr => tr.labels.indexOf("ignore_docs") < 0) + .filter((tr) => tr.labels.indexOf("ignore_docs") < 0) .map((tr) => tr.GenerateDocumentation()), - ...filterDocs + ...filterDocs, ].join("\n\n") } diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index 263dd3c16..9a70f6bab 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -8,7 +8,7 @@ import { Tag } from "../../Logic/Tags/Tag" import Link from "../../UI/Base/Link" import { MappingConfigJson, - QuestionableTagRenderingConfigJson + QuestionableTagRenderingConfigJson, } from "./Json/QuestionableTagRenderingConfigJson" import Validators, { ValidatorType } from "../../UI/InputElement/Validators" import { TagRenderingConfigJson } from "./Json/TagRenderingConfigJson" @@ -204,7 +204,7 @@ export default class TagRenderingConfig { inline: json.freeform.inline ?? false, default: json.freeform.default, postfixDistinguished: json.freeform.postfixDistinguished?.trim(), - args: json.freeform.helperArgs + args: json.freeform.helperArgs, } if (json.freeform["extraTags"] !== undefined) { throw `Freeform.extraTags is defined. This should probably be 'freeform.addExtraTag' (at ${context})` @@ -416,7 +416,7 @@ export default class TagRenderingConfig { iconClass, addExtraTags, searchTerms: mapping.searchTerms, - priorityIf: prioritySearch + priorityIf: prioritySearch, } if (isQuestionable) { if (hideInAnswer !== true && mp.if !== undefined && !mp.if.isUsableAsAnswer()) { @@ -517,7 +517,7 @@ export default class TagRenderingConfig { then: new TypedTranslation( this.render.replace("{" + this.freeform.key + "}", leftover).translations, this.render.context - ) + ), }) } } @@ -567,7 +567,7 @@ export default class TagRenderingConfig { return { then: this.render.PartialSubs({ [this.freeform.key]: v.trim() }), icon: this.renderIcon, - iconClass: this.renderIconClass + iconClass: this.renderIconClass, } } } @@ -622,7 +622,7 @@ export default class TagRenderingConfig { key: commonKey, values: Utils.NoNull( values.map((arr) => arr.filter((item) => item.k === commonKey)[0]?.v) - ) + ), } } @@ -637,7 +637,7 @@ export default class TagRenderingConfig { return { key, type: this.freeform.type, - values + values, } } catch (e) { console.error("Could not create FreeformValues for tagrendering", this.id) @@ -743,7 +743,7 @@ export default class TagRenderingConfig { // Either no mappings, or this is a radio-button selected freeform value const tag = new And([ new Tag(this.freeform.key, freeformValue), - ...(this.freeform.addExtraTags ?? []) + ...(this.freeform.addExtraTags ?? []), ]) const newProperties = tag.applyOn(currentProperties) if (this.invalidValues?.matchesProperties(newProperties)) { @@ -767,7 +767,7 @@ export default class TagRenderingConfig { selectedMappings.push( new And([ new Tag(this.freeform.key, freeformValue), - ...(this.freeform.addExtraTags ?? []) + ...(this.freeform.addExtraTags ?? []), ]) ) } @@ -795,12 +795,12 @@ export default class TagRenderingConfig { if (useFreeform) { return new And([ new Tag(this.freeform.key, freeformValue), - ...(this.freeform.addExtraTags ?? []) + ...(this.freeform.addExtraTags ?? []), ]) } else if (singleSelectedMapping !== undefined) { return new And([ this.mappings[singleSelectedMapping].if, - ...(this.mappings[singleSelectedMapping].addExtraTags ?? []) + ...(this.mappings[singleSelectedMapping].addExtraTags ?? []), ]) } else { console.error("TagRenderingConfig.ConstructSpecification has a weird fallback for", { @@ -808,7 +808,7 @@ export default class TagRenderingConfig { singleSelectedMapping, multiSelectedMapping, currentProperties, - useFreeform + useFreeform, }) return undefined @@ -838,11 +838,11 @@ export default class TagRenderingConfig { } const msgs: string[] = [ icon + - " " + - "*" + - m.then.textFor(lang) + - "* is shown if with " + - m.if.asHumanString(true, false, {}) + " " + + "*" + + m.then.textFor(lang) + + "* is shown if with " + + m.if.asHumanString(true, false, {}), ] if (m.hideInAnswer === true) { @@ -851,7 +851,7 @@ export default class TagRenderingConfig { if (m.ifnot !== undefined) { msgs.push( "Unselecting this answer will add " + - m.ifnot.asHumanString(true, false, {}) + m.ifnot.asHumanString(true, false, {}) ) } return msgs.join(". ") @@ -875,7 +875,7 @@ export default class TagRenderingConfig { if (this.labels?.length > 0) { labels = [ "This tagrendering has labels ", - ...this.labels.map((label) => "`" + label + "`") + ...this.labels.map((label) => "`" + label + "`"), ].join("\n") } @@ -888,15 +888,13 @@ export default class TagRenderingConfig { freeform, mappings, condition, - labels + labels, ].join("\n") } public - usedTags() - : - TagsFilter[] { + usedTags(): TagsFilter[] { const tags: TagsFilter[] = [] tags.push( this.metacondition, @@ -924,9 +922,7 @@ export default class TagRenderingConfig { */ public - settableKeys() - : - string[] | undefined { + settableKeys(): string[] | undefined { const toDelete = new Set() if (this.freeform) { toDelete.add(this.freeform.key) @@ -975,7 +971,7 @@ export class TagRenderingConfigUtils { const oldMappingsCloned = clone.mappings?.map((m) => ({ ...m, - priorityIf: m.priorityIf ?? TagUtils.Tag("id~*") + priorityIf: m.priorityIf ?? TagUtils.Tag("id~*"), })) ?? [] clone.mappings = [...oldMappingsCloned, ...extraMappings] return clone diff --git a/src/Models/ThemeViewState.ts b/src/Models/ThemeViewState.ts index 2f4c61aa5..c0b6d1029 100644 --- a/src/Models/ThemeViewState.ts +++ b/src/Models/ThemeViewState.ts @@ -161,7 +161,7 @@ export default class ThemeViewState implements SpecialVisualizationState { this.featureSwitches = new FeatureSwitchState(layout) this.guistate = new MenuState( this.featureSwitches.featureSwitchWelcomeMessage.data, - layout.id, + layout.id ) this.map = new UIEventSource(undefined) const geolocationState = new GeoLocationState() @@ -177,14 +177,14 @@ export default class ThemeViewState implements SpecialVisualizationState { oauth_token: QueryParameters.GetQueryParameter( "oauth_token", undefined, - "Used to complete the login", + "Used to complete the login" ), }) this.userRelatedState = new UserRelatedState( this.osmConnection, layout, this.featureSwitches, - this.mapProperties, + this.mapProperties ) this.userRelatedState.fixateNorth.addCallbackAndRunD((fixated) => { this.mapProperties.allowRotating.setData(fixated !== "yes") @@ -195,13 +195,13 @@ export default class ThemeViewState implements SpecialVisualizationState { geolocationState, this.selectedElement, this.mapProperties, - this.userRelatedState.gpsLocationHistoryRetentionTime, + this.userRelatedState.gpsLocationHistoryRetentionTime ) this.geolocationControl = new GeolocationControlState(this.geolocation, this.mapProperties) this.availableLayers = AvailableRasterLayers.layersAvailableAt( this.mapProperties.location, - this.osmConnection.isLoggedIn, + this.osmConnection.isLoggedIn ) const self = this @@ -209,7 +209,7 @@ export default class ThemeViewState implements SpecialVisualizationState { this.osmConnection, layout.layers, layout.id, - this.featureSwitches.featureSwitchLayerDefault, + this.featureSwitches.featureSwitchLayerDefault ) { @@ -218,7 +218,7 @@ export default class ThemeViewState implements SpecialVisualizationState { const isDisplayed = QueryParameters.GetBooleanQueryParameter( "overlay-" + rasterInfo.id, rasterInfo.defaultState ?? true, - "Whether or not overlay layer " + rasterInfo.id + " is shown", + "Whether or not overlay layer " + rasterInfo.id + " is shown" ) const state = { isDisplayed } overlayLayerStates.set(rasterInfo.id, state) @@ -243,7 +243,7 @@ export default class ThemeViewState implements SpecialVisualizationState { this.osmConnection.Backend(), (id) => self.layerState.filteredLayers.get(id).isDisplayed, mvtAvailableLayers, - this.fullNodeDatabase, + this.fullNodeDatabase ) let currentViewIndex = 0 @@ -261,7 +261,7 @@ export default class ThemeViewState implements SpecialVisualizationState { id: "current_view_" + currentViewIndex, }), ] - }), + }) ) this.featuresInView = new BBoxFeatureSource(layoutSource, this.mapProperties.bounds) @@ -279,19 +279,19 @@ export default class ThemeViewState implements SpecialVisualizationState { featureSwitches: this.featureSwitches, }, layout?.isLeftRightSensitive() ?? false, - (e) => this.reportError(e), + (e) => this.reportError(e) ) this.historicalUserLocations = this.geolocation.historicalUserLocations this.newFeatures = new NewGeometryFromChangesFeatureSource( this.changes, layoutSource, - this.featureProperties, + this.featureProperties ) layoutSource.addSource(this.newFeatures) const perLayer = new PerLayerFeatureSourceSplitter( Array.from(this.layerState.filteredLayers.values()).filter( - (l) => l.layerDef?.source !== null, + (l) => l.layerDef?.source !== null ), new ChangeGeometryApplicator(this.indexedFeatures, this.changes), { @@ -302,10 +302,10 @@ export default class ThemeViewState implements SpecialVisualizationState { "Got ", features.length, "leftover features, such as", - features[0].properties, + features[0].properties ) }, - }, + } ) this.perLayer = perLayer.perLayer } @@ -345,12 +345,12 @@ export default class ThemeViewState implements SpecialVisualizationState { this.lastClickObject = new LastClickFeatureSource( this.layout, this.mapProperties.lastClickLocation, - this.userRelatedState.addNewFeatureMode, + this.userRelatedState.addNewFeatureMode ) this.osmObjectDownloader = new OsmObjectDownloader( this.osmConnection.Backend(), - this.changes, + this.changes ) this.perLayerFiltered = this.showNormalDataOn(this.map) @@ -361,7 +361,7 @@ export default class ThemeViewState implements SpecialVisualizationState { currentZoom: this.mapProperties.zoom, layerState: this.layerState, bounds: this.visualFeedbackViewportBounds, - }, + } ) this.hasDataInView = new NoElementsInViewDetector(this).hasFeatureInView this.imageUploadManager = new ImageUploadManager( @@ -369,15 +369,15 @@ export default class ThemeViewState implements SpecialVisualizationState { Imgur.singleton, this.featureProperties, this.osmConnection, - this.changes, + this.changes ) this.favourites = new FavouritesFeatureSource(this) const longAgo = new Date() - longAgo.setTime(new Date().getTime() - 5 * 365 * 24 * 60 * 60 * 1000 ) + longAgo.setTime(new Date().getTime() - 5 * 365 * 24 * 60 * 60 * 1000) this.nearbyImageSearcher = new CombinedFetcher(50, longAgo, this.indexedFeatures) this.featureSummary = this.setupSummaryLayer( - new LayerConfig(summaryLayer, "summaryLayer", true), + new LayerConfig(summaryLayer, "summaryLayer", true) ) this.toCacheSavers = this.initSaveToLocalStorage() this.initActors() @@ -417,7 +417,7 @@ export default class ThemeViewState implements SpecialVisualizationState { LayoutSource.fromCacheZoomLevel, fs, this.featureProperties, - fs.layer.layerDef.maxAgeOfCache, + fs.layer.layerDef.maxAgeOfCache ) toLocalStorage.set(layerId, storage) }) @@ -430,7 +430,7 @@ export default class ThemeViewState implements SpecialVisualizationState { const doShowLayer = this.mapProperties.zoom.map( (z) => (fs.layer.isDisplayed?.data ?? true) && z >= (fs.layer.layerDef?.minzoom ?? 0), - [fs.layer.isDisplayed], + [fs.layer.isDisplayed] ) if (!doShowLayer.data && this.featureSwitches.featureSwitchFilter.data === false) { @@ -447,7 +447,7 @@ export default class ThemeViewState implements SpecialVisualizationState { fs.layer, fs, (id) => this.featureProperties.getStore(id), - this.layerState.globalFilters, + this.layerState.globalFilters ) filteringFeatureSource.set(layerName, filtered) @@ -591,7 +591,7 @@ export default class ThemeViewState implements SpecialVisualizationState { return } this.selectClosestAtCenter(0) - }, + } ) for (let i = 1; i < 9; i++) { @@ -609,7 +609,7 @@ export default class ThemeViewState implements SpecialVisualizationState { onUp: true, }, doc, - () => this.selectClosestAtCenter(i - 1), + () => this.selectClosestAtCenter(i - 1) ) } @@ -626,7 +626,7 @@ export default class ThemeViewState implements SpecialVisualizationState { if (this.featureSwitches.featureSwitchBackgroundSelection.data) { this.guistate.backgroundLayerSelectionIsOpened.setData(true) } - }, + } ) Hotkeys.RegisterHotkey( { @@ -638,14 +638,14 @@ export default class ThemeViewState implements SpecialVisualizationState { if (this.featureSwitches.featureSwitchFilter.data) { this.guistate.openFilterView() } - }, + } ) Hotkeys.RegisterHotkey( { shift: "O" }, Translations.t.hotkeyDocumentation.selectMapnik, () => { this.mapProperties.rasterLayer.setData(AvailableRasterLayers.osmCarto) - }, + } ) const setLayerCategory = (category: EliCategory) => { const available = this.availableLayers.data @@ -653,7 +653,7 @@ export default class ThemeViewState implements SpecialVisualizationState { const best = RasterLayerUtils.SelectBestLayerAccordingTo( available, category, - current.data, + current.data ) console.log("Best layer for category", category, "is", best.properties.id) current.setData(best) @@ -662,26 +662,26 @@ export default class ThemeViewState implements SpecialVisualizationState { Hotkeys.RegisterHotkey( { nomod: "O" }, Translations.t.hotkeyDocumentation.selectOsmbasedmap, - () => setLayerCategory("osmbasedmap"), + () => setLayerCategory("osmbasedmap") ) Hotkeys.RegisterHotkey( { nomod: "M" }, Translations.t.hotkeyDocumentation.selectMap, - () => setLayerCategory("map"), + () => setLayerCategory("map") ) Hotkeys.RegisterHotkey( { nomod: "P" }, Translations.t.hotkeyDocumentation.selectAerial, - () => setLayerCategory("photo"), + () => setLayerCategory("photo") ) Hotkeys.RegisterHotkey( { nomod: "L" }, Translations.t.hotkeyDocumentation.geolocate, () => { this.geolocationControl.handleClick() - }, + } ) return true }) @@ -693,7 +693,7 @@ export default class ThemeViewState implements SpecialVisualizationState { Translations.t.hotkeyDocumentation.translationMode, () => { Locale.showLinkToWeblate.setData(!Locale.showLinkToWeblate.data) - }, + } ) } @@ -704,7 +704,7 @@ export default class ThemeViewState implements SpecialVisualizationState { const normalLayers = this.layout.layers.filter( (l) => Constants.priviliged_layers.indexOf(l.id) < 0 && - !l.id.startsWith("note_import"), + !l.id.startsWith("note_import") ) const maxzoom = Math.min(...normalLayers.map((l) => l.minzoom)) @@ -712,7 +712,7 @@ export default class ThemeViewState implements SpecialVisualizationState { (l) => Constants.priviliged_layers.indexOf(l.id) < 0 && l.source.geojsonSource === undefined && - l.doCount, + l.doCount ) const summaryTileSource = new SummaryTileSource( Constants.SummaryServer, @@ -721,7 +721,7 @@ export default class ThemeViewState implements SpecialVisualizationState { this.mapProperties, { isActive: this.mapProperties.zoom.map((z) => z < maxzoom), - }, + } ) const src = new SummaryTileSourceRewriter(summaryTileSource, this.layerState.filteredLayers) @@ -743,12 +743,12 @@ export default class ThemeViewState implements SpecialVisualizationState { gps_location_history: this.geolocation.historicalUserLocations, gps_track: this.geolocation.historicalUserLocationsTrack, selected_element: new StaticFeatureSource( - this.selectedElement.map((f) => (f === undefined ? empty : [f])), + this.selectedElement.map((f) => (f === undefined ? empty : [f])) ), range: new StaticFeatureSource( this.mapProperties.maxbounds.map((bbox) => - bbox === undefined ? empty : [bbox.asGeoJson({ id: "range" })], - ), + bbox === undefined ? empty : [bbox.asGeoJson({ id: "range" })] + ) ), current_view: this.currentView, favourite: this.favourites, @@ -763,7 +763,7 @@ export default class ThemeViewState implements SpecialVisualizationState { ShowDataLayer.showRange( this.map, new StaticFeatureSource([bbox.asGeoJson({ id: "range" })]), - this.featureSwitches.featureSwitchIsTesting, + this.featureSwitches.featureSwitchIsTesting ) } const currentViewLayer = this.layout.layers.find((l) => l.id === "current_view") @@ -777,7 +777,7 @@ export default class ThemeViewState implements SpecialVisualizationState { currentViewLayer, this.layout, this.osmObjectDownloader, - this.featureProperties, + this.featureProperties ) }) } @@ -821,20 +821,20 @@ export default class ThemeViewState implements SpecialVisualizationState { const lastClickLayerConfig = new LayerConfig( last_click_layerconfig, - "last_click", + "last_click" ) const lastClickFiltered = lastClickLayerConfig.isShown === undefined ? specialLayers.last_click : specialLayers.last_click.features.mapD((fs) => - fs.filter((f) => { - const matches = lastClickLayerConfig.isShown.matchesProperties( - f.properties, - ) - console.debug("LastClick ", f, "matches", matches) - return matches - }), - ) + fs.filter((f) => { + const matches = lastClickLayerConfig.isShown.matchesProperties( + f.properties + ) + console.debug("LastClick ", f, "matches", matches) + return matches + }) + ) new ShowDataLayer(this.map, { features: new StaticFeatureSource(lastClickFiltered), layer: lastClickLayerConfig, @@ -859,7 +859,7 @@ export default class ThemeViewState implements SpecialVisualizationState { this.selectedElement.addCallback((selected) => { if (selected === undefined) { this.focusOnMap() - }else{ + } else { this.lastClickObject.clear() } }) @@ -881,7 +881,7 @@ export default class ThemeViewState implements SpecialVisualizationState { this.mapProperties.rasterLayer, this.availableLayers, this.featureSwitches.backgroundLayerId, - this.userRelatedState.preferredBackgroundLayer, + this.userRelatedState.preferredBackgroundLayer ) } @@ -892,7 +892,13 @@ export default class ThemeViewState implements SpecialVisualizationState { public async reportError(message: string | Error | XMLHttpRequest) { const isTesting = this.featureSwitchIsTesting.data - console.log(isTesting ? ">>> _Not_ reporting error to report server as testmode is on" : ">>> Reporting error to", Constants.ErrorReportServer, message) + console.log( + isTesting + ? ">>> _Not_ reporting error to report server as testmode is on" + : ">>> Reporting error to", + Constants.ErrorReportServer, + message + ) if (isTesting) { return } diff --git a/src/UI/Base/FloatOver.svelte b/src/UI/Base/FloatOver.svelte index b64f4b624..8ed605ba0 100644 --- a/src/UI/Base/FloatOver.svelte +++ b/src/UI/Base/FloatOver.svelte @@ -38,12 +38,12 @@
dispatch("close")} use:ariaLabel={Translations.t.general.backToMap} > - +
diff --git a/src/UI/Base/Hotkeys.ts b/src/UI/Base/Hotkeys.ts index f43d1d5ba..03dfb1b28 100644 --- a/src/UI/Base/Hotkeys.ts +++ b/src/UI/Base/Hotkeys.ts @@ -30,18 +30,18 @@ export default class Hotkeys { public static RegisterHotkey( key: ( | { - ctrl: string - } + ctrl: string + } | { - shift: string - } + shift: string + } | { - alt: string - } + alt: string + } | { - nomod: string - } - ) & { + nomod: string + } + ) & { onUp?: boolean }, documentation: string | Translation, @@ -63,7 +63,7 @@ export default class Hotkeys { return } if (key["ctrl"] !== undefined) { - document.addEventListener("keydown", function(event) { + document.addEventListener("keydown", function (event) { if (event.ctrlKey && event.key === keycode) { if (action() !== false) { event.preventDefault() @@ -71,7 +71,7 @@ export default class Hotkeys { } }) } else if (key["shift"] !== undefined) { - document.addEventListener(type, function(event) { + document.addEventListener(type, function (event) { if (Hotkeys.textElementSelected(event)) { // A text element is selected, we don't do anything special return @@ -83,7 +83,7 @@ export default class Hotkeys { } }) } else if (key["alt"] !== undefined) { - document.addEventListener(type, function(event) { + document.addEventListener(type, function (event) { if (event.altKey && event.key === keycode) { if (action() !== false) { event.preventDefault() @@ -91,7 +91,7 @@ export default class Hotkeys { } }) } else if (key["nomod"] !== undefined) { - document.addEventListener(type, function(event) { + document.addEventListener(type, function (event) { if (Hotkeys.textElementSelected(event) && keycode !== "Escape") { // A text element is selected, we don't do anything special return @@ -106,18 +106,17 @@ export default class Hotkeys { } } - static prepareDocumentation(docs: { - key: { ctrl?: string; shift?: string; alt?: string; nomod?: string; onUp?: boolean } - documentation: string | Translation - alsoTriggeredBy: Translation[] - }[]){ + static prepareDocumentation( + docs: { + key: { ctrl?: string; shift?: string; alt?: string; nomod?: string; onUp?: boolean } + documentation: string | Translation + alsoTriggeredBy: Translation[] + }[] + ) { let byKey: [string, string | Translation, Translation[] | undefined][] = docs .map(({ key, documentation, alsoTriggeredBy }) => { - const modifiers = Object.keys(key).filter( - (k) => k !== "nomod" && k !== "onUp" - ) - let keycode: string = - key["ctrl"] ?? key["shift"] ?? key["alt"] ?? key["nomod"] + const modifiers = Object.keys(key).filter((k) => k !== "nomod" && k !== "onUp") + let keycode: string = key["ctrl"] ?? key["shift"] ?? key["alt"] ?? key["nomod"] if (keycode.length == 1) { keycode = keycode.toUpperCase() } @@ -128,7 +127,7 @@ export default class Hotkeys { return <[string, string | Translation, Translation[] | undefined]>[ modifiers.join("+"), documentation, - alsoTriggeredBy + alsoTriggeredBy, ] }) .sort() @@ -141,36 +140,41 @@ export default class Hotkeys { return byKey } - static generateDocumentationFor(docs: { - key: { ctrl?: string; shift?: string; alt?: string; nomod?: string; onUp?: boolean } - documentation: string | Translation - alsoTriggeredBy: Translation[] - }[], language: string): string { - + static generateDocumentationFor( + docs: { + key: { ctrl?: string; shift?: string; alt?: string; nomod?: string; onUp?: boolean } + documentation: string | Translation + alsoTriggeredBy: Translation[] + }[], + language: string + ): string { const tr = Translations.t.hotkeyDocumentation - function t(t: Translation | string){ - if(typeof t === "string"){ + function t(t: Translation | string) { + if (typeof t === "string") { return t } return t.textFor(language) } - const contents: string[][] = this.prepareDocumentation(docs) - .map(([key, doc, alsoTriggeredBy]) => { - let keyEl: string = [key, ...(alsoTriggeredBy??[])].map(k => "`"+t(k)+"`").join(" ") - return [keyEl, t(doc)] - }) + const contents: string[][] = this.prepareDocumentation(docs).map( + ([key, doc, alsoTriggeredBy]) => { + let keyEl: string = [key, ...(alsoTriggeredBy ?? [])] + .map((k) => "`" + t(k) + "`") + .join(" ") + return [keyEl, t(doc)] + } + ) return [ - "# "+t(tr.title), + "# " + t(tr.title), t(tr.intro), - MarkdownUtils.table( - [t(tr.key), t(tr.action)], - contents - ) - ].join("\n") + MarkdownUtils.table([t(tr.key), t(tr.action)], contents), + ].join("\n") } - public static generateDocumentation(language?: string){ - return Hotkeys.generateDocumentationFor(Hotkeys._docs.data, language?? Locale.language.data) + public static generateDocumentation(language?: string) { + return Hotkeys.generateDocumentationFor( + Hotkeys._docs.data, + language ?? Locale.language.data + ) } private static textElementSelected(event: KeyboardEvent): boolean { diff --git a/src/UI/Base/Loading.ts b/src/UI/Base/Loading.ts index f63a3813d..dcdae595d 100644 --- a/src/UI/Base/Loading.ts +++ b/src/UI/Base/Loading.ts @@ -2,7 +2,7 @@ import Combine from "./Combine" import Translations from "../i18n/Translations" import BaseUIElement from "../BaseUIElement" import SvelteUIElement from "./SvelteUIElement" -import {default as LoadingSvg} from "../../assets/svg/Loading.svelte" +import { default as LoadingSvg } from "../../assets/svg/Loading.svelte" export default class Loading extends Combine { constructor(msg?: BaseUIElement | string) { const t = Translations.W(msg) ?? Translations.t.general.loading diff --git a/src/UI/Base/SvelteUIElement.ts b/src/UI/Base/SvelteUIElement.ts index 79fc5e8e2..79bec4fba 100644 --- a/src/UI/Base/SvelteUIElement.ts +++ b/src/UI/Base/SvelteUIElement.ts @@ -27,7 +27,7 @@ export default class SvelteUIElement< constructor(svelteElement, props?: Props, events?: Events, slots?: Slots) { super() - this._svelteComponent = svelteElement + this._svelteComponent = svelteElement this._props = props ?? {} this._events = events this._slots = slots @@ -49,15 +49,15 @@ export default class SvelteUIElement< return el } - public getClass(){ - if(this.clss.size === 0){ + public getClass() { + if (this.clss.size === 0) { return undefined } return this.clss } - public getStyle(){ - if(this.style === ""){ + public getStyle() { + if (this.style === "") { return undefined } return this.style diff --git a/src/UI/Base/TableOfContents.ts b/src/UI/Base/TableOfContents.ts index ed5e9989a..e75ee7b31 100644 --- a/src/UI/Base/TableOfContents.ts +++ b/src/UI/Base/TableOfContents.ts @@ -98,7 +98,7 @@ export default class TableOfContents { const intro = md.substring(0, firstTitleIndex) const splitPoint = intro.lastIndexOf("\n") - return md.substring(0, splitPoint) +"\n" + toc + md.substring(splitPoint) + return md.substring(0, splitPoint) + "\n" + toc + md.substring(splitPoint) } public static generateStructure( diff --git a/src/UI/Base/TitledPanel.svelte b/src/UI/Base/TitledPanel.svelte index 859529e32..c1641ce2d 100644 --- a/src/UI/Base/TitledPanel.svelte +++ b/src/UI/Base/TitledPanel.svelte @@ -1,5 +1,4 @@ diff --git a/src/UI/Base/ToSvelte.svelte b/src/UI/Base/ToSvelte.svelte index ab10bf674..68de5d907 100644 --- a/src/UI/Base/ToSvelte.svelte +++ b/src/UI/Base/ToSvelte.svelte @@ -7,14 +7,14 @@ let elem: HTMLElement let html: HTMLElement let isSvelte = false - let uiElement : BaseUIElement | SvelteUIElement | undefined + let uiElement: BaseUIElement | SvelteUIElement | undefined let svelteElem: SvelteUIElement onMount(() => { uiElement = typeof construct === "function" ? construct() : construct if (uiElement?.["isSvelte"]) { isSvelte = true - svelteElem = uiElement + svelteElem = uiElement return } @@ -32,7 +32,12 @@ {#if isSvelte} - + {:else} {/if} diff --git a/src/UI/BigComponents/FilterPanel.svelte b/src/UI/BigComponents/FilterPanel.svelte index 0104f6b5d..9b83bc082 100644 --- a/src/UI/BigComponents/FilterPanel.svelte +++ b/src/UI/BigComponents/FilterPanel.svelte @@ -53,31 +53,28 @@ - {#each layout.layers as layer} - - {/each} -
- - -
- - {#each layout.tileLayerSources as tilesource} - - {/each} + {#each layout.layers as layer} + + {/each} +
+ + +
+ {#each layout.tileLayerSources as tilesource} + + {/each} - - diff --git a/src/UI/BigComponents/Filterview.svelte b/src/UI/BigComponents/Filterview.svelte index 1aa5957a3..e669b6d66 100644 --- a/src/UI/BigComponents/Filterview.svelte +++ b/src/UI/BigComponents/Filterview.svelte @@ -43,13 +43,10 @@ {#if filteredLayer.layerDef.name}
-
- layer.defaultIcon()} - /> +
+ layer.defaultIcon()} />
- {#if $zoomlevel < layer.minzoom} diff --git a/src/UI/BigComponents/HotkeyTable.svelte b/src/UI/BigComponents/HotkeyTable.svelte index 86ba4b1a9..63ca146a3 100644 --- a/src/UI/BigComponents/HotkeyTable.svelte +++ b/src/UI/BigComponents/HotkeyTable.svelte @@ -1,5 +1,4 @@ - +
@@ -25,30 +23,27 @@ - - - + + + + - {#each byKey as [key, doc, alsoTriggeredBy] } + {#each byKey as [key, doc, alsoTriggeredBy]} - + + {/each}
-
-
+
{#if alsoTriggeredBy}
- -
{key}
-
{alsoTriggeredBy}
- +
{key}
+
{alsoTriggeredBy}
- {:else} -
{key}
+
{key}
{/if}
-
diff --git a/src/UI/BigComponents/SearchField.svelte b/src/UI/BigComponents/SearchField.svelte index 4ddc736de..b0d2accec 100644 --- a/src/UI/BigComponents/SearchField.svelte +++ b/src/UI/BigComponents/SearchField.svelte @@ -9,22 +9,19 @@ import { ariaLabel } from "../../Utils/ariaLabel" import { Translation } from "../i18n/Translation" - - const dispatch = createEventDispatcher<{search: string}>() + const dispatch = createEventDispatcher<{ search: string }>() export let searchValue: UIEventSource export let placeholderText: Translation = Translations.t.general.search.search export let feedback = new UIEventSource(undefined) - let isRunning: boolean = false let inputElement: HTMLInputElement - function _performSearch(){ + function _performSearch() { dispatch("search", searchValue.data) } -
@@ -32,21 +29,24 @@ {#if isRunning} {Translations.t.general.search.searching} {:else} -
- - { - feedback.set(undefined) - return keypr.key === "Enter" ? _performSearch() : undefined - }} - bind:value={$searchValue} - use:placeholder={placeholderText} - use:ariaLabel={Translations.t.general.search.search} - /> -
state.selectedElement.setData(undefined)} style="border: 0 !important; padding: 0 !important;" use:ariaLabel={Translations.t.general.backToMap} diff --git a/src/UI/BigComponents/SelectedElementView.svelte b/src/UI/BigComponents/SelectedElementView.svelte index f3842b778..bb1d5261c 100644 --- a/src/UI/BigComponents/SelectedElementView.svelte +++ b/src/UI/BigComponents/SelectedElementView.svelte @@ -22,7 +22,9 @@ selectedElement.properties.id ) - let isAddNew = tags.mapD(t => t?.id?.startsWith(LastClickFeatureSource.newPointElementId) ?? false) + let isAddNew = tags.mapD( + (t) => t?.id?.startsWith(LastClickFeatureSource.newPointElementId) ?? false + ) function getLayer(properties: Record) { if (properties.id === "settings") { @@ -81,7 +83,6 @@ class="selected-element-view flex h-full w-full flex-col gap-y-1 overflow-y-auto" class:p1={!$isAddNew} class:px-4={!$isAddNew} - tabindex="-1" > {#each $knownTagRenderings as config (config.id)} diff --git a/src/UI/Image/DeleteImage.ts b/src/UI/Image/DeleteImage.ts index 760213563..787560df6 100644 --- a/src/UI/Image/DeleteImage.ts +++ b/src/UI/Image/DeleteImage.ts @@ -49,7 +49,9 @@ export default class DeleteImage extends Toggle { .Clone() .SetClass("bg-white pl-4 pr-4") .SetStyle("border-bottom-left-radius:30rem; border-bottom-right-radius: 30rem;") - const openDelete = new SvelteUIElement(Delete_icon).SetStyle("width: 2em; height: 2em; display:block;") + const openDelete = new SvelteUIElement(Delete_icon).SetStyle( + "width: 2em; height: 2em; display:block;" + ) const deleteDialog = new ClickableToggle( new Combine([deleteButton, cancelButton]).SetClass("flex flex-col background-black"), openDelete diff --git a/src/UI/Image/ImageAttribution.svelte b/src/UI/Image/ImageAttribution.svelte index 2398e7072..b62ce1baf 100644 --- a/src/UI/Image/ImageAttribution.svelte +++ b/src/UI/Image/ImageAttribution.svelte @@ -8,7 +8,7 @@ /** * A small element showing the attribution of a single image */ - export let image: Partial & {id: string, url: string} + export let image: Partial & { id: string; url: string } let license: Store = UIEventSource.FromPromise( image.provider?.DownloadAttribution(image) ) @@ -16,9 +16,9 @@ {#if $license !== undefined} -
+
{#if icon !== undefined} -
+
{/if} diff --git a/src/UI/Image/NearbyImages.svelte b/src/UI/Image/NearbyImages.svelte index fff20b7b0..753d6c8d9 100644 --- a/src/UI/Image/NearbyImages.svelte +++ b/src/UI/Image/NearbyImages.svelte @@ -26,47 +26,63 @@ let imagesProvider = state.nearbyImageSearcher - let loadedImages = AllImageProviders.LoadImagesFor(tags).mapD(loaded => new Set(loaded.map(img => img.url))) + let loadedImages = AllImageProviders.LoadImagesFor(tags).mapD( + (loaded) => new Set(loaded.map((img) => img.url)) + ) let imageState = imagesProvider.getImagesAround(lon, lat) - let result: Store = imageState.images.mapD((pics: P4CPicture[]) => pics.filter((p: P4CPicture) => - !loadedImages.data.has(p.pictureUrl) // We don't show any image which is already linked - && !p.details.isSpherical, - ).slice(0, 25), [loadedImages]) - - let someLoading = imageState.state.mapD(stateRecord => Object.values(stateRecord).some(v => v === "loading")) - let errors = imageState.state.mapD(stateRecord => Object.keys(stateRecord).filter(k => stateRecord[k] === "error")) + let result: Store = imageState.images.mapD( + (pics: P4CPicture[]) => + pics + .filter( + (p: P4CPicture) => + !loadedImages.data.has(p.pictureUrl) && // We don't show any image which is already linked + !p.details.isSpherical + ) + .slice(0, 25), + [loadedImages] + ) + let someLoading = imageState.state.mapD((stateRecord) => + Object.values(stateRecord).some((v) => v === "loading") + ) + let errors = imageState.state.mapD((stateRecord) => + Object.keys(stateRecord).filter((k) => stateRecord[k] === "error") + )
- {#if $result.length === 0} {#if $someLoading} -
+
- {:else } + {:else} {/if} {:else}
{#each $result as image (image.pictureUrl)} - - - + + + {/each}
{/if} -
+
{#if $someLoading && $result.length > 0} {/if} {#if $errors.length > 0} - + {/if}
- +
diff --git a/src/UI/InputElement/Helpers/WikidataInput.svelte b/src/UI/InputElement/Helpers/WikidataInput.svelte index 4e85f3148..96479f2d2 100644 --- a/src/UI/InputElement/Helpers/WikidataInput.svelte +++ b/src/UI/InputElement/Helpers/WikidataInput.svelte @@ -3,7 +3,6 @@ * Allows to search through wikidata and to select one value */ - import Translations from "../../i18n/Translations" import Tr from "../../Base/Tr.svelte" import { ImmutableStore, Store, Stores, UIEventSource } from "../../../Logic/UIEventSource" @@ -30,13 +29,13 @@ let selectedMany: Record = {} let previouslySeen = new Map() - $:{ + $: { if (selectedWikidataSingle) { value.setData(selectedWikidataSingle.id) } } - $:{ + $: { const v = [] for (const id in selectedMany) { if (selectedMany[id]) { @@ -46,11 +45,10 @@ value.setData(v.join(";")) } - let tooShort = new ImmutableStore<{ success: WikidataResponse[] }>({ success: undefined }) - let searchResult: Store<{ success?: WikidataResponse[]; error?: any }> = searchValue - .bind((searchText) => { + let searchResult: Store<{ success?: WikidataResponse[]; error?: any }> = searchValue.bind( + (searchText) => { if (searchText.length < 3 && !searchText.match(/[qQ][0-9]+/)) { return tooShort } @@ -62,18 +60,19 @@ lang, maxCount: 5, notInstanceOf, - instanceOf + instanceOf, }) WikidataValidator._searchCache.set(key, promise) } return Stores.FromPromiseWithErr(promise) - }) + } + ) - let selectedWithoutSearch: Store = searchResult.map(sr => { + let selectedWithoutSearch: Store = searchResult.map((sr) => { for (const wikidataItem of sr?.success ?? []) { previouslySeen.set(wikidataItem.id, wikidataItem) } - let knownIds: Set = new Set(sr?.success?.map(item => item.id)) + let knownIds: Set = new Set(sr?.success?.map((item) => item.id)) const seen = [selectedWikidataSingle] for (const id in selectedMany) { if (selectedMany[id]) { @@ -81,9 +80,8 @@ seen.push(item) } } - return Utils.NoNull(seen).filter(i => !knownIds.has(i.id)) + return Utils.NoNull(seen).filter((i) => !knownIds.has(i.id)) }) -

@@ -91,33 +89,37 @@

- + {#if $searchValue.trim().length === 0} - + {:else if $searchValue.trim().length < 3} - + {:else if $searchResult === undefined} -
+
{:else if $searchResult.error !== undefined} -
+
{:else if $searchResult.success} {#if $searchResult.success.length === 0} - + {:else} {#each $searchResult.success as wikidata} - -
diff --git a/src/UI/Popup/MinimapViz.svelte b/src/UI/Popup/MinimapViz.svelte index 13f490c09..8cdba1440 100644 --- a/src/UI/Popup/MinimapViz.svelte +++ b/src/UI/Popup/MinimapViz.svelte @@ -31,11 +31,7 @@ let idList = [value] if (Array.isArray(value)) { idList = value - } else if ( - key !== "id" && - typeof value === "string" && - value?.startsWith("[") - ) { + } else if (key !== "id" && typeof value === "string" && value?.startsWith("[")) { // This is a list of values idList = JSON.parse(value) } @@ -59,7 +55,7 @@ let mla = new MapLibreAdaptor(mlmap, { rasterLayer: state.mapProperties.rasterLayer, zoom: new UIEventSource(17), - maxzoom: new UIEventSource(17) + maxzoom: new UIEventSource(17), }) mla.allowMoving.setData(false) diff --git a/src/UI/Popup/Notes/CreateNewNote.svelte b/src/UI/Popup/Notes/CreateNewNote.svelte index 01c660173..da6a3cffd 100644 --- a/src/UI/Popup/Notes/CreateNewNote.svelte +++ b/src/UI/Popup/Notes/CreateNewNote.svelte @@ -123,7 +123,7 @@
- +
diff --git a/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte b/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte index de4a77f9c..e096759b8 100644 --- a/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte +++ b/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte @@ -200,7 +200,7 @@ allowDeleteOfFreeform && !$freeformInput && !$freeformInputUnvalidated && - !checkedMappings?.some(m => m) && + !checkedMappings?.some((m) => m) && $tags[config.freeform.key] // We need to have a current value in order to delete it ) { selectedTags = new Tag(config.freeform.key, "") @@ -495,7 +495,7 @@ - {#if config.freeform?.key && allowDeleteOfFreeform && !checkedMappings?.some(m => m) && !$freeformInput && !$freeformInputUnvalidated && $tags[config.freeform.key]} + {#if config.freeform?.key && allowDeleteOfFreeform && !checkedMappings?.some((m) => m) && !$freeformInput && !$freeformInputUnvalidated && $tags[config.freeform.key]} - - Automatically check again every 10s - + Automatically check again every 10s
-{#if $trafficLightIsOnline?.["success"] } +{#if $trafficLightIsOnline?.["success"]} Enable traffic light {/if} @@ -351,12 +331,16 @@ {/each} - + method: "POST", + body: JSON.stringify({ + message: "Test via the status page, not an actual error", + version: Constants.vNumber, + }), + }) + }} +> + Test error report function + diff --git a/src/UI/Status/StatusIcon.svelte b/src/UI/Status/StatusIcon.svelte index 08fbc3bd2..cb11eefc5 100644 --- a/src/UI/Status/StatusIcon.svelte +++ b/src/UI/Status/StatusIcon.svelte @@ -13,16 +13,15 @@ {#if status === "online"} - + {:else if status === "degraded"} - + {:else if status === "offline"} - + {:else if status === undefined} -
+
{:else} ? {status} {/if} - diff --git a/src/UI/Studio/SchemaBasedArray.svelte b/src/UI/Studio/SchemaBasedArray.svelte index aa80f0a55..ffe12eb9d 100644 --- a/src/UI/Studio/SchemaBasedArray.svelte +++ b/src/UI/Studio/SchemaBasedArray.svelte @@ -99,13 +99,18 @@ function genTitle(value: any, singular: string, i: number): Translation { try { - if (schema.hints.title) { const v = Function("value", "return " + schema.hints.title)(value) return Translations.T(v) } } catch (e) { - console.log("Warning: could not translate a title for " + `${singular} ${i} with function ` + schema.hints.title + " and value " + JSON.stringify(value)) + console.log( + "Warning: could not translate a title for " + + `${singular} ${i} with function ` + + schema.hints.title + + " and value " + + JSON.stringify(value) + ) } return Translations.T(`${singular} ${i}`) } diff --git a/src/UI/ThemeViewGUI.svelte b/src/UI/ThemeViewGUI.svelte index feefe1ab6..3c8ecb69b 100644 --- a/src/UI/ThemeViewGUI.svelte +++ b/src/UI/ThemeViewGUI.svelte @@ -213,7 +213,7 @@
- +
{#if $visualFeedback} @@ -286,10 +286,8 @@ on:keydown={forwardEventToMap} htmlElem={openCurrentViewLayerButton} > -
- currentViewLayer.defaultIcon()} - /> +
+ currentViewLayer.defaultIcon()} />
{/if} @@ -300,10 +298,8 @@
Testmode
{#if state.osmConnection.Backend().startsWith("https://master.apis.dev.openstreetmap.org")} -
- Testserver -
- {/if} +
Testserver
+ {/if}
Faking a user (Testmode)
@@ -551,13 +547,13 @@ state.guistate.backgroundLayerSelectionIsOpened.setData(false) }} > - + @@ -583,7 +579,7 @@
- +
diff --git a/src/UI/Wikipedia/WikidataPreviewBox.ts b/src/UI/Wikipedia/WikidataPreviewBox.ts index b4b83d690..ef9793d5a 100644 --- a/src/UI/Wikipedia/WikidataPreviewBox.ts +++ b/src/UI/Wikipedia/WikidataPreviewBox.ts @@ -6,45 +6,24 @@ import Gender_inter from "../../assets/svg/Gender_inter.svelte" import Gender_trans from "../../assets/svg/Gender_trans.svelte" import Gender_queer from "../../assets/svg/Gender_queer.svelte" - -export default class WikidataPreviewBox { +export default class WikidataPreviewBox { private static isHuman = [{ p: 31 /*is a*/, q: 5 /* human */ }] public static extraProperties: { requires?: { p: number; q?: number }[] property: string textMode?: Map - display: - | TypedTranslation<{ value }> - | Map, + display: TypedTranslation<{ value }> | Map }[] = [ { requires: WikidataPreviewBox.isHuman, property: "P21", display: new Map([ - [ - "Q6581097", - Gender_male - ], - [ - "Q6581072", - Gender_female - ], - [ - "Q1097630", - Gender_inter - ], - [ - "Q1052281", - Gender_trans /*'transwomen'*/ - ], - [ - "Q2449503", - Gender_trans /*'transmen'*/ - ], - [ - "Q48270", - Gender_queer - ] + ["Q6581097", Gender_male], + ["Q6581072", Gender_female], + ["Q1097630", Gender_inter], + ["Q1052281", Gender_trans /*'transwomen'*/], + ["Q2449503", Gender_trans /*'transmen'*/], + ["Q48270", Gender_queer], ]), textMode: new Map([ ["Q6581097", "♂️"], @@ -52,19 +31,18 @@ export default class WikidataPreviewBox { ["Q1097630", "⚥️"], ["Q1052281", "🏳️‍⚧️" /*'transwomen'*/], ["Q2449503", "🏳️‍⚧️" /*'transmen'*/], - ["Q48270", "🏳️‍🌈 ⚧"] - ]) + ["Q48270", "🏳️‍🌈 ⚧"], + ]), }, { property: "P569", requires: WikidataPreviewBox.isHuman, - display: Translations.t.general.wikipedia.previewbox.born + display: Translations.t.general.wikipedia.previewbox.born, }, { property: "P570", requires: WikidataPreviewBox.isHuman, - display: Translations.t.general.wikipedia.previewbox.died - } + display: Translations.t.general.wikipedia.previewbox.died, + }, ] - } diff --git a/src/UI/Wikipedia/WikidataQuickfacts.svelte b/src/UI/Wikipedia/WikidataQuickfacts.svelte index 7d4a29dbf..bac311926 100644 --- a/src/UI/Wikipedia/WikidataQuickfacts.svelte +++ b/src/UI/Wikipedia/WikidataQuickfacts.svelte @@ -1,5 +1,4 @@ {#if propertiesToRender.length > 0} -
+
{#each propertiesToRender as property} - {#if typeof property.display === "string" } + {#if typeof property.display === "string"} {property.display} {:else if property.display instanceof Translation} - + {:else} - + {/if} {/each}
{/if} - diff --git a/src/UI/Wikipedia/Wikidatapreview.svelte b/src/UI/Wikipedia/Wikidatapreview.svelte index d47a3c3d1..de5cbe0fa 100644 --- a/src/UI/Wikipedia/Wikidatapreview.svelte +++ b/src/UI/Wikipedia/Wikidatapreview.svelte @@ -1,5 +1,4 @@ -
- +
{#if imageUrl} {/if} -
- - diff --git a/src/UI/Wikipedia/WikidatapreviewWithLoading.svelte b/src/UI/Wikipedia/WikidatapreviewWithLoading.svelte index 98129c66a..97cbd02c4 100644 --- a/src/UI/Wikipedia/WikidatapreviewWithLoading.svelte +++ b/src/UI/Wikipedia/WikidatapreviewWithLoading.svelte @@ -10,13 +10,14 @@ export let wikidataId: Store export let imageStyle: string = undefined - let wikidata: Store<{ success: WikidataResponse } | { error: any }> = wikidataId.stabilized(100).bind((id) => { - if (id === undefined || id === "" || id === "Q") { - return null - } - return Wikidata.LoadWikidataEntry(id) - }) - + let wikidata: Store<{ success: WikidataResponse } | { error: any }> = wikidataId + .stabilized(100) + .bind((id) => { + if (id === undefined || id === "" || id === "Q") { + return null + } + return Wikidata.LoadWikidataEntry(id) + }) {#if $wikidata === undefined} @@ -28,7 +29,6 @@ {$wikidata["error"]}
{:else} - diff --git a/src/UI/Wikipedia/WikipediaArticle.svelte b/src/UI/Wikipedia/WikipediaArticle.svelte index 86198f9fe..5ba7eb688 100644 --- a/src/UI/Wikipedia/WikipediaArticle.svelte +++ b/src/UI/Wikipedia/WikipediaArticle.svelte @@ -18,12 +18,11 @@ ) -
+
{#if $titleOnly} {$wikipediaDetails.title} {/if} - {#if $wikipediaDetails.wikidata} {/if} @@ -36,7 +35,12 @@ {:else} {#if $wikipediaDetails.articleUrl} - + diff --git a/src/UI/i18n/Locale.ts b/src/UI/i18n/Locale.ts index 1446e914a..c74381c36 100644 --- a/src/UI/i18n/Locale.ts +++ b/src/UI/i18n/Locale.ts @@ -12,7 +12,7 @@ export default class Locale { public static showLinkOnMobile: UIEventSource = new UIEventSource(false) public static language: UIEventSource = Locale.setup() - public static getBestSupportedLanguage(browserLanguage?: string){ + public static getBestSupportedLanguage(browserLanguage?: string) { browserLanguage ??= navigator.languages?.[0] ?? navigator.language ?? "en" console.log("Browser language is", browserLanguage) const availableLanguages = Object.keys(native) @@ -22,10 +22,10 @@ export default class Locale { } browserLanguage = browserLanguage.replace(/[-_].*/g, "") const hasBrowserLangFallback = availableLanguages.indexOf(browserLanguage) >= 0 - if(hasBrowserLangFallback){ - return browserLanguage + if (hasBrowserLangFallback) { + return browserLanguage } - console.log("Language",browserLanguage,"not supported, defaulting to english") + console.log("Language", browserLanguage, "not supported, defaulting to english") return "en" } @@ -72,7 +72,7 @@ export default class Locale { } else { let browserLanguage = "en" if (typeof navigator !== "undefined") { - browserLanguage = Locale.getBestSupportedLanguage() + browserLanguage = Locale.getBestSupportedLanguage() } source = LocalStorageSource.Get("language", browserLanguage) } diff --git a/src/UI/i18n/Translation.ts b/src/UI/i18n/Translation.ts index dc9586719..24b1679fb 100644 --- a/src/UI/i18n/Translation.ts +++ b/src/UI/i18n/Translation.ts @@ -22,7 +22,7 @@ export class Translation extends BaseUIElement { constructor( translations: string | Record, context?: string, - strictLanguages?: boolean, + strictLanguages?: boolean ) { super() this._strictLanguages = strictLanguages @@ -62,7 +62,7 @@ export class Translation extends BaseUIElement { `. The offending object is: `, translations[translationsKey], "\n current translations are: ", - translations, + translations ) throw ( "Error in an object depicting a translation: a non-string object was found. (" + @@ -75,7 +75,7 @@ export class Translation extends BaseUIElement { if (count === 0) { console.error( "Constructing a translation, but the object containing translations is empty " + - (context ?? "No context given"), + (context ?? "No context given") ) } } @@ -94,7 +94,7 @@ export class Translation extends BaseUIElement { [], (f) => { this.onDestroy = f - }, + } ) } return this._currentLanguage @@ -113,7 +113,7 @@ export class Translation extends BaseUIElement { static ExtractAllTranslationsFrom( object: any, - context = "", + context = "" ): { context: string; tr: Translation }[] { const allTranslations: { context: string; tr: Translation }[] = [] for (const key in object) { @@ -127,7 +127,7 @@ export class Translation extends BaseUIElement { } if (typeof v === "object") { allTranslations.push( - ...Translation.ExtractAllTranslationsFrom(v, context + "." + key), + ...Translation.ExtractAllTranslationsFrom(v, context + "." + key) ) } } @@ -254,7 +254,7 @@ export class Translation extends BaseUIElement { */ public OnEveryLanguage( f: (s: string, language: string) => string, - context?: string, + context?: string ): Translation { const newTranslations = {} for (const lang in this.translations) { @@ -337,7 +337,7 @@ export class Translation extends BaseUIElement { const htmlElement = document.createElement("div") htmlElement.innerHTML = render const images = Array.from(htmlElement.getElementsByTagName("img")).map( - (img) => img.src, + (img) => img.src ) allIcons.push(...images) } else { @@ -350,7 +350,7 @@ export class Translation extends BaseUIElement { .map((img) => img.match(/src=("[^"]+"|'[^']+'|[^/ ]+)/)) .filter((match) => match != null) .map((match) => - match[1].trim().replace(/^['"]/, "").replace(/['"]$/, ""), + match[1].trim().replace(/^['"]/, "").replace(/['"]$/, "") ) allIcons.push(...sources) } @@ -398,7 +398,7 @@ export class TypedTranslation> extends Translation } PartialSubs( - text: Partial & Record, + text: Partial & Record ): TypedTranslation> { const newTranslations: Record = {} for (const lang in this.translations) { @@ -415,7 +415,7 @@ export class TypedTranslation> extends Translation PartialSubsTr( key: string, - replaceWith: Translation, + replaceWith: Translation ): TypedTranslation> { const newTranslations: Record = {} const toSearch = "{" + key + "}" @@ -434,7 +434,7 @@ export class TypedTranslation> extends Translation for (const missingLanguage of missingLanguages) { newTranslations[missingLanguage] = baseTemplate.replaceAll( toSearch, - replaceWith.textFor(missingLanguage), + replaceWith.textFor(missingLanguage) ) } diff --git a/src/Utils.ts b/src/Utils.ts index 7d064ebd3..e3cdbe3cc 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -386,7 +386,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be * Null/Undefined is returned as is. If an emtpy array is given, a new empty array will be returned */ public static Dedup(arr: NonNullable): NonNullable - public static Dedup(arr: undefined):undefined + public static Dedup(arr: undefined): undefined public static Dedup(arr: string[] | undefined): string[] | undefined public static Dedup(arr: string[]): string[] { if (arr === undefined || arr === null) { @@ -1267,9 +1267,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be return track[str2.length][str1.length] } - public static MapToObj( - d: Map - ): Record; + public static MapToObj(d: Map): Record public static MapToObj( d: Map, onValue: (t: V, key: string) => T @@ -1281,7 +1279,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be const o = {} const keys = Array.from(d.keys()) keys.sort() - onValue ??= (v => v) + onValue ??= (v) => v for (const key of keys) { o[key] = onValue(d.get(key), key) } diff --git a/src/Utils/MarkdownUtils.ts b/src/Utils/MarkdownUtils.ts index 703a30dae..db5eeccce 100644 --- a/src/Utils/MarkdownUtils.ts +++ b/src/Utils/MarkdownUtils.ts @@ -15,9 +15,9 @@ export default class MarkdownUtils { } static list(strings: string[]): string { - if(strings.length === 0){ + if (strings.length === 0) { return "" } - return "\n\n"+strings.map((item) => " - " + item).join("\n")+"\n\n" + return "\n\n" + strings.map((item) => " - " + item).join("\n") + "\n\n" } } diff --git a/src/assets/contributors.json b/src/assets/contributors.json index aa15deff2..effdf2d19 100644 --- a/src/assets/contributors.json +++ b/src/assets/contributors.json @@ -1,7 +1,7 @@ { "contributors": [ { - "commits": 7646, + "commits": 7767, "contributor": "Pieter Vander Vennet" }, { @@ -104,6 +104,10 @@ "commits": 12, "contributor": "Bavo Vanderghote" }, + { + "commits": 11, + "contributor": "Flo Edelmann" + }, { "commits": 11, "contributor": "Thibault Molleman" @@ -114,11 +118,11 @@ }, { "commits": 10, - "contributor": "LiamSimons" + "contributor": "danieldegroot2" }, { - "commits": 9, - "contributor": "Flo Edelmann" + "commits": 10, + "contributor": "LiamSimons" }, { "commits": 9, @@ -140,10 +144,6 @@ "commits": 8, "contributor": "Mateusz Konieczny" }, - { - "commits": 7, - "contributor": "danieldegroot2" - }, { "commits": 7, "contributor": "OliNau" @@ -176,6 +176,10 @@ "commits": 3, "contributor": "Léo Villeveygoux" }, + { + "commits": 2, + "contributor": "Niklas Vogel" + }, { "commits": 2, "contributor": "eMerzh" @@ -240,6 +244,10 @@ "commits": 2, "contributor": "Stanislas Gueniffey" }, + { + "commits": 1, + "contributor": "Bart Louwers" + }, { "commits": 1, "contributor": "Manuel Tassi" diff --git a/src/assets/language_native.json b/src/assets/language_native.json index 3847089e4..c7869833f 100644 --- a/src/assets/language_native.json +++ b/src/assets/language_native.json @@ -1,5 +1,6 @@ { "ca": "català", + "cs": "čeština", "da": "dansk", "de": "Deutsch", "en": "English", @@ -22,7 +23,6 @@ "ru": "русский язык", "sl": "slovenščina", "sv": "svenska", - "zgh": "ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ ⵜⴰⵎⵖⵔⵉⴱⵉⵜ", "zh_Hans": "简体中文", "zh_Hant": "繁體中文" } \ No newline at end of file diff --git a/src/assets/language_translations.json b/src/assets/language_translations.json index ba6be35cb..6601239b5 100644 --- a/src/assets/language_translations.json +++ b/src/assets/language_translations.json @@ -1,18 +1,18 @@ { "aa": { - "ca": "àfar", + "ca": "llengua àfar", "cs": "afarština", "de": "Afar", "en": "Afar", "eo": "afara lingvo", "es": "idioma afar", "eu": "Afarrera", - "fi": "afar", + "fi": "afarin kieli", "fr": "afar", "gl": "Lingua afar", "he": "עפרית", "hu": "afar", - "id": "Afar", + "id": "Bahasa Afar", "it": "afar", "ja": "アファル語", "nb_NO": "afar", @@ -21,10 +21,7 @@ "pt": "Língua afar", "pt_BR": "língua afar", "ru": "афарский язык", - "sl": "afarščina", "sv": "afar", - "zh_Hans": "阿法尔语", - "zh_Hant": "阿法爾語", "_meta": { "dir": [ "left-to-right" @@ -45,7 +42,7 @@ "gl": "Lingua abkhaza", "he": "אבחזית", "hu": "abház", - "id": "Abkhaz", + "id": "Bahasa Abkhaz", "it": "abcaso", "ja": "アブハズ語", "nb_NO": "abkhasisk", @@ -54,7 +51,7 @@ "pt": "Língua abecásia", "pt_BR": "Língua abecásia", "ru": "абхазский язык", - "sl": "abhaščina", + "sl": "Abhaščina", "sv": "abchaziska", "zh_Hans": "阿布哈兹语", "zh_Hant": "阿布哈茲語", @@ -76,12 +73,12 @@ "eo": "abaza lingvo", "es": "abaza", "eu": "abazera", - "fi": "abazan kieli", + "fi": "Abazan kieli", "fr": "abaza", "gl": "Lingua abaza", "he": "אבזית", "hu": "abaza", - "id": "Abaza", + "id": "Bahasa Abaza", "it": "lingua abazina", "ja": "アバザ語", "nb_NO": "abazinsk", @@ -90,7 +87,6 @@ "pt": "Língua abaza", "pt_BR": "Língua abaza", "ru": "абазинский язык", - "sl": "abaščina", "sv": "abazinska", "zh_Hans": "阿巴扎语", "zh_Hant": "阿巴扎語", @@ -107,7 +103,6 @@ "eo": "Mezopotamia araba dialekto", "es": "árabe mesopotámico", "fr": "arabe mésopotamien", - "he": "ערבית עיראקית", "id": "Bahasa Arab Mesopotamia", "ja": "アラビア語イラク方言", "nl": "Mesopotamisch-Arabisch", @@ -117,7 +112,6 @@ "ru": "иракский диалект арабского языка", "sl": "mezopotamska arabščina", "sv": "irakisk arabiska", - "zh_Hant": "美索不達米亞阿拉伯語", "_meta": { "dir": [ "right-to-left" @@ -147,12 +141,12 @@ "eo": "adigea lingvo", "es": "adigués", "eu": "adigera", - "fi": "adyge", + "fi": "adygen kieli", "fr": "adyguéen", "gl": "Lingua adigue", "he": "אדיגית", "hu": "adigei", - "id": "Adyghe", + "id": "bahasa Adyghe", "it": "adighè", "ja": "アディゲ語", "nb_NO": "adygeisk", @@ -171,6 +165,37 @@ ] } }, + "aeb": { + "ca": "àrab tunisià", + "cs": "tuniština", + "da": "Tunesisk arabisk", + "de": "Tunesisch-Arabisch", + "en": "Tunisian Arabic", + "eo": "tunizia araba lingvo", + "es": "árabe tunecino", + "fi": "tunisianarabia", + "fr": "arabe tunisien", + "he": "ערבית תוניסאית", + "id": "Bahasa Arab Tunisia", + "it": "arabo tunisino", + "ja": "アラビア語チュニジア方言", + "nb_NO": "tunisisk arabisk", + "nl": "Tunesisch-Arabisch", + "pl": "tunezyjski", + "pt": "árabe tunisino", + "pt_BR": "Árabe tunisino", + "ru": "Тунисский диалект арабского языка", + "sl": "tunizijska arabščina", + "sv": "tunisisk arabiska", + "zh_Hans": "突尼斯阿拉伯语", + "zh_Hant": "突尼西亞阿拉伯語", + "_meta": { + "dir": [ + "left-to-right", + "right-to-left" + ] + } + }, "af": { "ca": "afrikaans", "cs": "afrikánština", @@ -232,10 +257,9 @@ "eo": "Levantenia araba dialekto", "es": "árabe levantino", "fr": "arabe levantin", - "gl": "Árabe levantino", "he": "ערבית לבנטינית", - "id": "Arab Levant", - "it": "arabo levantino", + "id": "Arab Syam", + "it": "lingue arabe levantine", "ja": "アラビア語レバント方言", "nl": "Levantijns-Arabisch", "pl": "dialekty syryjsko-palestyńskie języka arabskiego", @@ -257,7 +281,7 @@ "en": "Akan", "eo": "akanaj lingvoj", "es": "lenguas akánicas", - "fi": "akan", + "fi": "akanin kieli", "fr": "akan", "gl": "Lingua akan", "he": "אקאן", @@ -270,7 +294,6 @@ "pt": "língua akan", "pt_BR": "língua akan", "ru": "акан", - "sl": "akanščina", "sv": "akan", "zh_Hans": "阿肯语", "zh_Hant": "阿寒語", @@ -291,12 +314,11 @@ "fi": "Aklanon", "fr": "aklanon", "gl": "Lingua aklanon", - "id": "Bahasa Aklanon", + "id": "bahasa Akyan", "it": "lingua Aklan", "ja": "アクラノン語", "pl": "Język aklanon", "pt": "Língua aklan", - "ru": "акланон", "sv": "aklan", "_meta": { "dir": [ @@ -319,7 +341,6 @@ "nl": "Alabama", "pl": "język alabama", "ru": "Алабамский язык", - "sl": "alabamščina", "sv": "alabama", "_meta": { "dir": [ @@ -332,7 +353,7 @@ "cs": "gegština", "da": "gegisk", "de": "Gegisch", - "en": "Gheg", + "en": "Gheg Albanian", "eo": "geg-albana lingvo", "es": "Albanés guego", "eu": "gheg albaniera", @@ -393,13 +414,11 @@ "fr": "altaï méridional", "gl": "Lingua altai meridional", "he": "אלטאית דרומית", - "id": "bahasa Altai Selatan", "it": "lingua altai meridionale", "ja": "南アルタイ語", "nb_NO": "Søraltaisk", "nl": "Zuid-Altajs", "ru": "aлтайский язык", - "sl": "južna altajščina", "sv": "sydaltaiska", "zh_Hant": "南阿爾泰語", "_meta": { @@ -417,12 +436,12 @@ "eo": "amhara lingvo", "es": "amhárico", "eu": "Amharera", - "fi": "amhara", + "fi": "amharan kieli", "fr": "amharique", "gl": "Lingua amhárica", "he": "אמהרית", "hu": "amhara", - "id": "Amhara", + "id": "Bahasa Amhar", "it": "amarico", "ja": "アムハラ語", "nb_NO": "amharisk", @@ -449,7 +468,7 @@ "de": "Amisisch", "en": "Amis", "es": "idioma amis", - "fi": "amis", + "fi": "Amisin kieli", "fr": "amis", "gl": "Lingua amis", "id": "Bahasa Amis", @@ -459,7 +478,6 @@ "pl": "Język amis", "pt": "língua amis", "ru": "амисский язык", - "sl": "amisijščina", "sv": "amis", "zh_Hans": "阿美语", "zh_Hant": "阿美語", @@ -483,7 +501,7 @@ "gl": "Lingua aragonesa", "he": "אראגונית", "hu": "aragóniai", - "id": "bahasa Aragon", + "id": "Bahasa Aragon", "it": "aragonese", "ja": "アラゴン語", "nb_NO": "aragonesisk", @@ -508,7 +526,7 @@ "en": "Angika", "eo": "angika", "es": "Idioma angika", - "fi": "angika", + "fi": "Angika", "fr": "angika", "gl": "Lingua angika", "it": "lingua angika", @@ -532,7 +550,6 @@ "eo": "pemona lingvo", "es": "Idioma pemón", "fr": "pemon", - "gl": "Lingua pemón", "it": "pemon", "ja": "ペモン語", "nb_NO": "Pemón", @@ -540,7 +557,6 @@ "pt": "Língua taurepangue", "pt_BR": "Língua taurepangue", "ru": "Пемонский язык", - "sl": "pemonščina", "sv": "pemon", "_meta": { "dir": [ @@ -556,10 +572,9 @@ "eo": "Levantenia araba dialekto", "es": "árabe levantino", "fr": "arabe levantin", - "gl": "Árabe levantino", "he": "ערבית לבנטינית", - "id": "Arab Levant", - "it": "arabo levantino", + "id": "Arab Syam", + "it": "lingue arabe levantine", "ja": "アラビア語レバント方言", "nl": "Levantijns-Arabisch", "pl": "dialekty syryjsko-palestyńskie języka arabskiego", @@ -574,6 +589,67 @@ ] } }, + "ar": { + "ca": "àrab", + "cs": "arabština", + "da": "arabisk", + "de": "Arabisch", + "en": "Arabic", + "eo": "araba lingvo", + "es": "árabe", + "eu": "arabiera", + "fi": "arabia", + "fr": "arabe", + "gl": "árabe", + "he": "ערבית", + "hu": "arab", + "id": "bahasa Arab", + "it": "arabo", + "ja": "アラビア語", + "nb_NO": "arabisk", + "nl": "Arabisch", + "pl": "język arabski", + "pt": "árabe", + "pt_BR": "árabe", + "ru": "арабский язык", + "sl": "arabščina", + "sv": "arabiska", + "zh_Hans": "阿拉伯语", + "zh_Hant": "阿拉伯語", + "_meta": { + "countries": [ + "AE", + "AF", + "BH", + "DJ", + "DZ", + "EG", + "ER", + "IQ", + "JO", + "KM", + "KW", + "LB", + "LY", + "MA", + "MR", + "OM", + "PS", + "QA", + "SA", + "SD", + "SO", + "SS", + "SY", + "TD", + "TN", + "YE" + ], + "dir": [ + "right-to-left" + ] + } + }, "arn": { "ca": "mapudungun", "cs": "mapučština", @@ -595,7 +671,7 @@ "pl": "Język mapudungun", "pt": "mapudungun", "ru": "мапуче", - "sl": "mapudungunščina", + "sl": "Mapudungun", "sv": "mapudungun", "zh_Hans": "马普切语", "zh_Hant": "馬普切語", @@ -617,13 +693,13 @@ "fr": "arabe algérien", "gl": "Árabe alxeriano", "hu": "algériai arab", - "id": "Arab Aljazair", + "id": "Bahasa Arab Aljazair", "it": "arabo algerino", "ja": "アラビア語アルジェリア方言", "nb_NO": "algerisk-arabisk", "nl": "Algerijns-Arabisch", "pt": "árabe argelino", - "ru": "алжирский диалект арабского языка", + "ru": "Алжирский диалект арабского языка", "sl": "alžirska arabščina", "sv": "algerisk arabiska", "zh_Hant": "阿爾及利亞阿拉伯語", @@ -643,7 +719,7 @@ "es": "árabe marroquí", "eu": "marokoar arabiera", "fi": "marokonarabia", - "fr": "arabe marocain", + "fr": "Darija marocain", "gl": "árabe marroquí", "he": "ערבית מרוקאית", "id": "Bahasa Arab Maroko", @@ -677,7 +753,7 @@ "gl": "Árabe exipcio", "he": "ערבית מצרית", "hu": "egyiptomi arab", - "id": "Arab Mesir", + "id": "bahasa Arab Mesir", "it": "arabo egiziano", "ja": "アラビア語エジプト方言", "nb_NO": "egyptisk arabisk", @@ -748,7 +824,6 @@ "pt": "língua de sinais americana", "pt_BR": "língua de sinais americana", "ru": "амслен", - "sl": "ameriški znakovni jezik", "sv": "amerikanskt teckenspråk", "zh_Hant": "美國手語", "_meta": { @@ -772,7 +847,7 @@ "gl": "lingua asturiana", "he": "אסטורית", "hu": "asztúriai", - "id": "Asturia", + "id": "Bahasa Asturia", "it": "asturiano", "ja": "アストゥリアス語", "nb_NO": "asturiansk", @@ -797,17 +872,15 @@ "de": "Atikamekw", "en": "Atikamekw", "es": "atikamekw", - "fi": "atikamekw", + "fi": "Atikamekw", "fr": "atikamekw", "gl": "Lingua atikamekw", - "he": "אטיקמק", "it": "lingua atikamekw", "ja": "アティカメク語", "nb_NO": "atikamekw", "nl": "Atikamekw", "pt": "Língua atikamekw", "ru": "aтикамек", - "sl": "atimeščina", "sv": "atikamekw", "zh_Hans": "阿提卡米克语", "zh_Hant": "阿提卡米克語", @@ -825,20 +898,20 @@ "eo": "avara lingvo", "es": "avar", "eu": "avarera", - "fi": "avaari", + "fi": "Avaarin kieli", "fr": "avar", "gl": "Lingua avar", "he": "אווארית", "hu": "avar", - "id": "Avar", + "id": "Bahasa Avar", "it": "avaro", "ja": "アヴァル語", "nb_NO": "avarisk", "nl": "Avaars", "pl": "język awarski", - "pt": "Língua ávara", + "pt": "Língua avar", "ru": "аварский язык", - "sl": "avarščina", + "sl": "Avarščina", "sv": "avariska", "_meta": { "dir": [ @@ -853,10 +926,10 @@ "eo": "avadhia", "es": "awadhi", "eu": "Awadhiera", - "fi": "awadhi", + "fi": "Awadhin kieli", "fr": "awadhi", "gl": "Lingua awadhi", - "he": "אוודית", + "he": "אוודהית", "id": "Bahasa Awadhi", "it": "awadhi", "ja": "アワディー語", @@ -866,7 +939,6 @@ "pt": "Língua awadhi", "pt_BR": "Língua awadhi", "ru": "авадхи", - "sl": "avadščina", "sv": "awadhi", "zh_Hans": "阿瓦德语", "zh_Hant": "阿瓦德語", @@ -899,7 +971,7 @@ "pt": "Língua aymará", "pt_BR": "Língua aimará", "ru": "аймара", - "sl": "ajmarščina", + "sl": "Ajmarščina", "sv": "aymara", "zh_Hans": "艾马拉语", "zh_Hant": "艾馬拉語", @@ -924,10 +996,10 @@ "eu": "azerbaijanera", "fi": "azeri", "fr": "azéri", - "gl": "Lingua azarí", + "gl": "Lingua azerí", "he": "אזרית", "hu": "azeri", - "id": "bahasa Azerbaijan", + "id": "Bahasa Azeri", "it": "azero", "ja": "アゼルバイジャン語", "nb_NO": "aserbajdsjansk", @@ -950,28 +1022,6 @@ ] } }, - "azb": { - "ca": "àzeri del sud", - "cs": "jižní ázerbájdžánština", - "de": "Südaserbaidschanisch", - "en": "South Azerbaijani", - "eo": "sud-azerbajĝana lingvo", - "fi": "eteläazeri", - "fr": "azéri du Sud", - "he": "אזרבייג'נית דרומית", - "ja": "南アゼルバイジャン語", - "nl": "Zuid-Azerbeidzjaans", - "ru": "южно-азербайджанский язык", - "sl": "južna azerbajdžanščina", - "sv": "sydazerbajdzjanska", - "zh_Hans": "南阿塞拜疆语", - "zh_Hant": "南阿塞拜疆語", - "_meta": { - "dir": [ - "right-to-left" - ] - } - }, "ba": { "ca": "baixkir", "cs": "baškirština", @@ -986,7 +1036,7 @@ "gl": "Lingua baskir", "he": "בשקירית", "hu": "baskír", - "id": "bahasa Bashkir", + "id": "Bahasa Bashkir", "it": "baschiro", "ja": "バシキール語", "nb_NO": "basjkirsk", @@ -995,14 +1045,13 @@ "pt": "Língua bashkir", "pt_BR": "Língua bashkir", "ru": "башкирский язык", - "sl": "baškirščina", + "sl": "Baškirščina", "sv": "basjkiriska", "zh_Hans": "巴什基尔语", "zh_Hant": "巴什基爾語", "_meta": { "dir": [ - "left-to-right", - "right-to-left" + "left-to-right" ] } }, @@ -1015,11 +1064,11 @@ "eo": "balia lingvo", "es": "balinés", "eu": "baliera", - "fi": "bali", + "fi": "Balin kieli", "fr": "balinais", "gl": "Lingua balinesa", "he": "באלינזית", - "id": "Bali", + "id": "Bahasa Bali", "it": "balinese", "ja": "バリ語", "nb_NO": "balinesisk", @@ -1047,12 +1096,12 @@ "eo": "bavara lingvo", "es": "bávaro", "eu": "Bavariera", - "fi": "baijeri", + "fi": "Baijerin kieli", "fr": "bavarois", "gl": "Lingua bavaresa", "he": "בווארית", "hu": "bajor", - "id": "Bavaria", + "id": "Bahasa Bayern", "it": "bavarese", "ja": "バイエルン・オーストリア語", "nb_NO": "bairisk", @@ -1079,7 +1128,7 @@ "eo": "Ĵemajtia dialekto", "es": "Idioma samogitiano", "eu": "samogatiera", - "fi": "samogiitti", + "fi": "Samogiitti", "fr": "samogitien", "gl": "Samoxiciano", "hu": "szamogit", @@ -1110,11 +1159,11 @@ "eo": "Batak Toba", "es": "Batak Toba", "eu": "Batak Toba", - "fi": "batak-toba", + "fi": "Batak Toba", "fr": "batak toba", "gl": "Lingua toba batak", "hu": "Batak Toba", - "id": "bahasa Batak Toba", + "id": "Bahasa Batak Toba", "it": "lingua batak toba", "ja": "バタク・トバ語", "nb_NO": "Batak Toba", @@ -1122,8 +1171,8 @@ "pl": "język batak toba", "pt": "Batak Toba", "pt_BR": "Batak Toba", - "ru": "тоба", - "sl": "tobabataščina", + "ru": "Тоба", + "sl": "Batak Toba", "sv": "toba batak", "_meta": { "dir": [ @@ -1136,7 +1185,6 @@ "en": "West Coast Bajau", "fr": "bajau de la côte occidentale", "gl": "Lingua bajaw da costa occidental", - "ja": "サマ・バジャウ諸語", "nb_NO": "vestkystbajau", "nl": "Westkust-Bajau", "ru": "баджо западного побережья", @@ -1156,7 +1204,7 @@ "eu": "Bedawi hizkuntza", "fi": "Bedžan kieli", "fr": "bedja", - "id": "Beja", + "id": "Bahasa Beja", "it": "begia", "ja": "ベジャ語", "nb_NO": "Beja", @@ -1176,7 +1224,6 @@ "bfi": { "ca": "llengau de signes britànica", "cs": "britský znakový jazyk", - "da": "brittisk tegnsprog", "de": "Britische Gebärdensprache", "en": "British Sign Language", "eo": "brita signolingvo", @@ -1184,7 +1231,7 @@ "fi": "brittiläinen viittomakieli", "fr": "langue des signes britannique", "he": "שפת הסימנים הבריטית", - "id": "Bahasa Isyarat Inggris", + "id": "Bahasa Isyarat Britania", "it": "lingua dei segni britannica", "ja": "イギリス手話", "nb_NO": "britisk tegnspråk", @@ -1192,7 +1239,6 @@ "pl": "brytyjski język migowy", "pt": "língua de sinais britânica", "ru": "британский жестовый язык", - "sl": "britanski znakovni jezik", "sv": "brittiskt teckenspråk", "_meta": { "dir": [ @@ -1267,12 +1313,12 @@ "eo": "bhojpura lingvo", "es": "Idioma bopurí", "eu": "bhojpuri", - "fi": "bhodžpuri", + "fi": "Bhodžpurin kieli", "fr": "bhodjpouri", "gl": "Lingua bhojpuri", "he": "בוג'פורית", "hu": "bhódzspurí", - "id": "Bhojpuri", + "id": "bahasa Bhojpuri", "it": "bhojpuri", "ja": "ボージュプリー語", "nb_NO": "Bhojpuri", @@ -1298,12 +1344,12 @@ "eo": "bhojpura lingvo", "es": "Idioma bopurí", "eu": "bhojpuri", - "fi": "bhodžpuri", + "fi": "Bhodžpurin kieli", "fr": "bhodjpouri", "gl": "Lingua bhojpuri", "he": "בוג'פורית", "hu": "bhódzspurí", - "id": "Bhojpuri", + "id": "bahasa Bhojpuri", "it": "bhojpuri", "ja": "ボージュプリー語", "nb_NO": "Bhojpuri", @@ -1328,7 +1374,7 @@ "eo": "bislama lingvo", "es": "Bislama", "eu": "Bislama", - "fi": "bislama", + "fi": "Bislama", "fr": "bichelamar", "gl": "Bislama", "he": "ביסלמה", @@ -1354,7 +1400,7 @@ } }, "bla": { - "ca": "llengua blackfoot", + "ca": "blackfoot", "de": "Blackfoot", "en": "Blackfoot", "eo": "nigrapieda lingvo", @@ -1379,22 +1425,6 @@ ] } }, - "blk": { - "en": "Pa'O", - "fr": "pa'o", - "gl": "Lingua pa'o", - "ja": "パーオー語", - "nl": "Pa'O", - "pt": "Língua Pa'O", - "ru": "пао", - "sl": "pa'O", - "sv": "pa'o", - "_meta": { - "dir": [ - "left-to-right" - ] - } - }, "bm": { "ca": "bàmbara", "cs": "bambarština", @@ -1404,22 +1434,20 @@ "eo": "bambara lingvo", "es": "bambara", "eu": "Banbara hizkuntza", - "fi": "bambara", + "fi": "bambaran kieli", "fr": "bambara", "gl": "Lingua bambara", "he": "במברה", "hu": "bambara", "id": "Bahasa Bambara", - "it": "bambara", + "it": "Bambara", "ja": "バンバラ語", "nb_NO": "bambara", "nl": "Bambara", "pl": "język bambara", "pt": "Língua bambara", "ru": "бамана", - "sl": "bambarščina", "sv": "bambara", - "zh_Hant": "班巴拉語", "_meta": { "countries": [ "ML" @@ -1431,31 +1459,30 @@ } }, "bn": { - "ca": "bangla", + "ca": "bengalí", "cs": "bengálština", - "da": "Bangla", + "da": "bengali", "de": "Bengalisch", "en": "Bangla", "eo": "bengala lingvo", - "es": "bangla", + "es": "bengalí", "eu": "bengalera", "fi": "bengali", - "fr": "bangla", + "fr": "bengali", "gl": "lingua bengalí", "he": "בנגלית", - "hu": "bangla", - "id": "bahasa Bengali", + "hu": "bengáli", + "id": "Bahasa Bengali", "it": "bengali", "ja": "ベンガル語", - "nb_NO": "bangla", + "nb_NO": "bengali", "nl": "Bengaals", "pl": "język bengalski", - "pt": "língua bangla", - "pt_BR": "língua bangla", + "pt": "língua bengali", + "pt_BR": "língua bengali", "ru": "бенгальский язык", "sl": "bengalščina", - "sv": "bangla", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⴱⵏⴳⴰⵍⵉⵜ", + "sv": "bengali", "zh_Hans": "孟加拉语", "zh_Hant": "孟加拉語", "_meta": { @@ -1473,7 +1500,6 @@ "eu": "bununera", "fi": "bununin kieli", "fr": "bunun", - "he": "בונון", "id": "Bahasa Bunun", "it": "lingua bunun", "ja": "ブヌン語", @@ -1498,12 +1524,12 @@ "eo": "tibeta lingvo", "es": "tibetano", "eu": "Tibetera", - "fi": "tiibetti", + "fi": "tiibetin kieli", "fr": "tibétain", "gl": "Lingua tibetana", "he": "טיבטית", "hu": "tibeti", - "id": "Tibet", + "id": "bahasa Tibet Lhasa", "it": "tibetano", "ja": "チベット語", "nb_NO": "tibetansk", @@ -1527,7 +1553,7 @@ "en": "Bishnupriya Manipuri", "eo": "biŝnuprija manipura lingvo", "es": "Bishnupriya manipurí", - "fi": "bišnupria", + "fi": "Bishnupriya Manipuri", "fr": "manipourî de Bishnupriyay", "gl": "Lingua bishnupriya manipuri", "he": "בישנופרייה מניפורי", @@ -1538,8 +1564,7 @@ "nl": "Bishnupriya Manipuri", "pl": "Język bisznuprija-manipuri", "pt": "Bishnupriya Manipuri", - "ru": "бишнуприя-манипури", - "sl": "bišnuprijska manipurščina", + "ru": "Бишнуприя-манипури", "sv": "bishnupriya manipuri", "zh_Hans": "比什努普里亚-曼尼普尔语", "zh_Hant": "比什努普里亞-曼尼普爾語", @@ -1558,7 +1583,6 @@ "nl": "Bachtiarisch", "pl": "Język bachtiarski", "ru": "Бахтиярский язык", - "sl": "bahtijarščina", "sv": "bakhtiari", "zh_Hans": "巴赫蒂亚语", "zh_Hant": "巴赫蒂亞語", @@ -1568,6 +1592,39 @@ ] } }, + "br": { + "ca": "bretó", + "cs": "bretonština", + "da": "bretonsk", + "de": "Bretonisch", + "en": "Breton", + "eo": "bretona lingvo", + "es": "bretón", + "eu": "Bretainiera", + "fi": "bretoni", + "fr": "breton", + "gl": "lingua bretoa", + "he": "ברטונית", + "hu": "breton", + "id": "Bahasa Breton", + "it": "bretone", + "ja": "ブルトン語", + "nb_NO": "bretonsk", + "nl": "Bretons", + "pl": "język bretoński", + "pt": "bretão", + "pt_BR": "língua bretã", + "ru": "бретонский язык", + "sl": "bretonščina", + "sv": "bretonska", + "zh_Hans": "布列塔尼语", + "zh_Hant": "布列塔尼語", + "_meta": { + "dir": [ + "left-to-right" + ] + } + }, "brx": { "ca": "bodo", "cs": "jazyk Bodo", @@ -1578,7 +1635,7 @@ "fi": "Bodon kieli", "fr": "bodo", "he": "בודו", - "id": "Bodo", + "id": "Bahasa Bodo", "it": "bodo", "ja": "ボド語", "nb_NO": "Bodo", @@ -1586,7 +1643,6 @@ "pl": "Język bodo", "pt": "Língua bodo", "ru": "Бодо", - "sl": "bodojščina", "sv": "bodo", "_meta": { "dir": [ @@ -1599,7 +1655,7 @@ "cs": "abinomn", "en": "Abinomn", "es": "Idioma abinomn", - "fi": "abinomn", + "fi": "Abinomn", "fr": "abinomn", "gl": "Lingua abinomn", "id": "Abinomn", @@ -1629,7 +1685,7 @@ "gl": "Lingua burushaski", "he": "בורושסקי", "hu": "burusaszki", - "id": "Burushaski", + "id": "Bahasa Burushaski", "it": "lingua burushaski", "ja": "ブルシャスキー語", "nl": "Burushaski", @@ -1663,10 +1719,9 @@ }, "btm": { "cs": "Mandailing", - "en": "Mandailing Batak", + "en": "Mandailing", "fr": "batak mandailing", - "gl": "Lingua mandailing", - "id": "bahasa Batak Mandailing", + "id": "Bahasa Mandailing", "ja": "バタク・マンダイリン語", "nl": "Batak Mandailing", "pl": "język batak mandailing", @@ -1687,7 +1742,7 @@ "en": "Bugis", "eo": "buĝia lingvo", "es": "idioma buguinés", - "fi": "bugi", + "fi": "Bugin kieli", "fr": "bouguinais", "gl": "Lingua bugi", "hu": "bugisz", @@ -1701,7 +1756,6 @@ "ru": "бугийский язык", "sl": "buginščina", "sv": "buginesiska", - "zh_Hant": "布吉語", "_meta": { "dir": [ "left-to-right" @@ -1714,9 +1768,9 @@ "de": "Burjatisch", "en": "Buryat", "eo": "burjata lingvo", - "es": "buriato", + "es": "idioma buriato", "eu": "Buriatera", - "fi": "burjaatti", + "fi": "Burjaatin kieli", "fr": "bouriate", "gl": "Lingua buriata", "he": "בוריאטית", @@ -1730,9 +1784,7 @@ "pt": "Língua buriata", "pt_BR": "Língua buriata", "ru": "бурятский язык", - "sl": "burjatščina", "sv": "burjatiska", - "zh_Hans": "布里亚特语", "zh_Hant": "布里亞特語", "_meta": { "dir": [ @@ -1779,7 +1831,7 @@ "gl": "lingua catalá", "he": "קטלאנית", "hu": "katalán", - "id": "bahasa Katalan", + "id": "Katalan", "it": "catalano", "ja": "カタルーニャ語", "nb_NO": "katalansk", @@ -1818,9 +1870,7 @@ "pl": "Język kaqchikel", "pt": "Língua caqchiquel", "ru": "Какчикельский язык", - "sl": "kakčikelščina", "sv": "cakchiquel", - "zh_Hant": "喀克其奎語", "_meta": { "dir": [ "left-to-right" @@ -1829,7 +1879,6 @@ }, "cal": { "ca": "carolinià", - "cs": "karolínština", "de": "Karolinisch", "en": "Carolinian", "eo": "karolina lingvo", @@ -1857,14 +1906,12 @@ "en": "Chakma", "eo": "ĉakma lingvo", "fr": "changma kodha", - "he": "צ׳אקמה", "ja": "チャクマ語", "nl": "Chakma", "pl": "język czakma", "pt": "língua chakma", "pt_BR": "língua chakma", "ru": "чакма", - "sl": "čakmijščina", "sv": "chakma", "_meta": { "dir": [ @@ -1882,7 +1929,7 @@ "fr": "mindong", "gl": "Lingua ming dong", "he": "מין מזרחית", - "id": "Min Timur", + "id": "Bahasa Min Timur", "it": "min dong", "ja": "閩東語", "nb_NO": "Mindong", @@ -1891,13 +1938,12 @@ "pt": "Língua min oriental", "pt_BR": "Min Dong", "ru": "Восточноминьский язык", - "sl": "min dong", "sv": "mindong", "zh_Hans": "闽东语", "zh_Hant": "閩東語", "_meta": { "dir": [ - "vertical right-to-left", + "top-to-bottom", "left-to-right" ] } @@ -1911,12 +1957,12 @@ "eo": "ĉeĉena lingvo", "es": "checheno", "eu": "txetxenera", - "fi": "tšetšeeni", + "fi": "Tšetšeenin kieli", "fr": "tchétchène", "gl": "Lingua chechena", "he": "צ'צ'נית", "hu": "csecsen", - "id": "bahasa Chechnya", + "id": "Bahasa Chechnya", "it": "ceceno", "ja": "チェチェン語", "nb_NO": "tsjetsjensk", @@ -1944,12 +1990,12 @@ "eo": "cebua lingvo", "es": "cebuano", "eu": "cebuera", - "fi": "cebuano", - "fr": "cébouano", + "fi": "Cebun kieli", + "fr": "cebouan", "gl": "Lingua cebuana", "he": "סבואנו", "hu": "szebuano", - "id": "bahasa Cebu", + "id": "Cebu", "it": "cebuano", "ja": "セブ語", "nb_NO": "cebuano", @@ -1975,7 +2021,7 @@ "eo": "ĉamora lingvo", "es": "idioma chamorro", "eu": "Chamorro", - "fi": "tšamorro", + "fi": "Tšamorron kieli", "fr": "chamorro", "gl": "Lingua chamorra", "he": "צ'מורו", @@ -2002,14 +2048,12 @@ "eo": "ĉinuka piĝino", "fi": "chinook-jargon", "fr": "chinook", - "gl": "Xerga chinook", "he": "עגה של הצ'ינוק", "ja": "チヌーク・ジャーゴン", "nb_NO": "Chinook jargon", "nl": "Chinook Jargon", "pt": "Jargão chinook", "ru": "чинукский жаргон", - "sl": "činuški žargon", "sv": "chinookjargong", "zh_Hans": "奇努克混合语", "zh_Hant": "支努幹混合語", @@ -2026,7 +2070,7 @@ "en": "Choctaw", "eo": "ĉakta lingvo", "es": "idioma choctaw", - "fi": "choctaw", + "fi": "Choctawin kieli", "fr": "choctaw", "gl": "lingua choctaw", "hu": "csaktó", @@ -2055,12 +2099,12 @@ "eo": "Ĉeroka lingvo", "es": "cheroqui", "eu": "Txerokiera", - "fi": "cherokee", + "fi": "Cherokeen kieli", "fr": "cherokee", - "gl": "Lingua cherokee", + "gl": "Lingua cheroqui", "he": "צ'רוקי", "hu": "cseroki", - "id": "Cherokee", + "id": "Bahasa Cherokee", "it": "cherokee", "ja": "チェロキー語", "nb_NO": "cherokesisk", @@ -2086,7 +2130,7 @@ "eo": "Ĉejena lingvo", "es": "cheyene", "eu": "Cheyennera", - "fi": "cheyenne", + "fi": "Cheyennen kieli", "fr": "cheyenne", "gl": "Lingua cheyenne", "he": "שאיין", @@ -2099,7 +2143,6 @@ "pl": "język czejeński", "pt": "Língua cheyenne", "ru": "шайенский язык", - "sl": "šejenščina", "sv": "cheyenne", "zh_Hans": "夏延语", "zh_Hant": "夏安語", @@ -2123,7 +2166,7 @@ "gl": "lingua kurda central", "he": "סוראנית", "hu": "szoráni", - "id": "Sorani", + "id": "Soranî", "it": "sorani", "ja": "ソラニー", "nl": "Sorani", @@ -2151,10 +2194,10 @@ "eu": "Txuktxiera", "fi": "Tšuktšin kieli", "fr": "tchouktche", - "gl": "Lingua chukchi", + "gl": "Lingua Chukoto", "he": "צ'וקצ'ית", "hu": "csukcs", - "id": "Chukchi", + "id": "Bahasa Chukchi", "it": "lingua ciukcia", "ja": "チュクチ語", "nb_NO": "Luoravetlansk", @@ -2162,7 +2205,7 @@ "pl": "Język czukocki", "pt": "Língua chukoto", "ru": "чукотский язык", - "sl": "čukotščina", + "sl": "Čukotščina", "sv": "tjuktjiska", "_meta": { "dir": [ @@ -2192,14 +2235,14 @@ "en": "Corsican", "eo": "korsika lingvo", "es": "corso", - "eu": "korsikera", - "fi": "korsika", + "eu": "Korsikera", + "fi": "Korsikan kieli", "fr": "corse", - "gl": "corso", + "gl": "Lingua corsa", "he": "קורסיקאית", "hu": "korzikai", - "id": "bahasa Korsika", - "it": "corso", + "id": "Bahasa Korsika", + "it": "Lingua corsa", "ja": "コルシカ語", "nb_NO": "korsikansk", "nl": "Corsicaans", @@ -2217,9 +2260,7 @@ "cpx": { "de": "Pu-Xian", "en": "Pu-Xian Min", - "es": "Pu-Xian", "fr": "puxian", - "it": "Pu-Xian Min", "ja": "莆仙語", "nb_NO": "Puxian", "nl": "Puxian", @@ -2243,7 +2284,7 @@ "eo": "kria lingvo", "es": "idioma cree", "eu": "cree hizkuntza", - "fi": "cree", + "fi": "Cree", "fr": "cri", "gl": "Lingua cree", "he": "קרי", @@ -2278,7 +2319,7 @@ "gl": "Lingua tártara de Crimea", "he": "טטרית של קרים", "hu": "krími tatár", - "id": "Tatar Krimea", + "id": "Bahasa Tatar Krimea", "it": "tataro di Crimea", "ja": "クリミア・タタール語", "nb_NO": "krimtatarisk", @@ -2310,7 +2351,7 @@ "gl": "Crioulo das Seychelles", "he": "קריאולית סיישלית", "hu": "seychelle-i kreol", - "id": "Kreol Seychelles", + "id": "Bahasa Kreol Seychelles", "it": "creolo delle Seychelles", "ja": "セーシェル・クレオール語", "nb_NO": "seychellisk kreol", @@ -2325,6 +2366,42 @@ ] } }, + "cs": { + "ca": "txec", + "cs": "čeština", + "da": "tjekkisk", + "de": "Tschechisch", + "en": "Czech", + "eo": "ĉeĥa lingvo", + "es": "checo", + "eu": "txekiera", + "fi": "tšekki", + "fr": "tchèque", + "gl": "lingua checa", + "he": "צ'כית", + "hu": "cseh", + "id": "Bahasa Ceska", + "it": "ceco", + "ja": "チェコ語", + "nb_NO": "tsjekkisk", + "nl": "Tsjechisch", + "pl": "język czeski", + "pt": "checo", + "pt_BR": "língua tcheca", + "ru": "чешский язык", + "sl": "češčina", + "sv": "tjeckiska", + "zh_Hans": "捷克语", + "zh_Hant": "捷克語", + "_meta": { + "countries": [ + "CZ" + ], + "dir": [ + "left-to-right" + ] + } + }, "csb": { "ca": "caixubi", "cs": "kašubština", @@ -2365,14 +2442,12 @@ "fr": "chittagonien", "gl": "Lingua chittagoniana", "he": "צ'יטגונית", - "id": "Chittagong", + "id": "Bahasa Chittagonia", "it": "lingua chittagonian", "ja": "チッタゴン語", - "nb_NO": "Chittagong", "pl": "Język chatgaya", "pt": "Língua chittagong", "pt_BR": "Língua chittagong", - "sl": "čitagonščina", "sv": "chittagoniska", "_meta": { "dir": [ @@ -2394,7 +2469,7 @@ "gl": "Lingua chuvash", "he": "צ'ובשית", "hu": "csuvas", - "id": "Chuvash", + "id": "Bahasa Chuvash", "it": "ciuvascio", "ja": "チュヴァシ語", "nb_NO": "tsjuvasjisk", @@ -2436,7 +2511,7 @@ "pt": "galês", "pt_BR": "galês", "ru": "валлийский язык", - "sl": "valižanščina", + "sl": "velščina", "sv": "kymriska", "zh_Hans": "威尔士语", "zh_Hant": "威爾士語", @@ -2491,7 +2566,7 @@ "eo": "Dagbania lingvo", "es": "dagbani", "eu": "Dagbani", - "fi": "dagbani", + "fi": "Dagbanin kieli", "fr": "dagbani", "gl": "Lingua dagbani", "it": "Dagbani", @@ -2502,7 +2577,6 @@ "pt": "Língua dagbani", "pt_BR": "Língua dagbani", "ru": "дагбани", - "sl": "dagbanščina", "sv": "dagbani", "_meta": { "dir": [ @@ -2535,7 +2609,6 @@ "ru": "немецкий язык", "sl": "nemščina", "sv": "tyska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵍⵉⵎⴰⵏⵜ", "zh_Hans": "德语", "zh_Hant": "德語", "_meta": { @@ -2566,12 +2639,10 @@ "id": "Bahasa Dinka", "it": "lingua dinka", "ja": "ディンカ語", - "nb_NO": "dinka", "nl": "Dinka", "pl": "język dinka", "pt": "Língua dinka", "ru": "Динка", - "sl": "dinščina", "sv": "dinka", "_meta": { "dir": [ @@ -2593,7 +2664,7 @@ "gl": "Lingua zazaki", "he": "זאזאקי", "hu": "zazaki", - "id": "Zaza", + "id": "bahasa Zazaki", "it": "zazaki", "ja": "ザザキ語", "nb_NO": "zazaisk", @@ -2643,12 +2714,11 @@ "eo": "malsuprasoraba lingvo", "es": "bajo sorabo", "eu": "Behe sorabiera", - "fi": "alasorbi", "fr": "bas-sorabe", "gl": "Baixo sorabo", "he": "סורבית תחתית", "hu": "alsó szorb", - "id": "Sorbia Hilir", + "id": "Bahasa Sorbia Hilir", "it": "sorabo inferiore", "ja": "低地ソルブ語", "nl": "Nedersorbisch", @@ -2656,7 +2726,7 @@ "pt": "baixo sorábio", "pt_BR": "Baixo sorábio", "ru": "нижнелужицкий язык", - "sl": "dolnja lužiška srbščina", + "sl": "Dolnjesrbščina", "sv": "lågsorbiska", "_meta": { "dir": [ @@ -2687,7 +2757,6 @@ "en": "Doteli", "eo": "Doteli", "es": "Doteli", - "fi": "doteli", "fr": "dotyali", "gl": "Lingua doteli", "ja": "ドテリ語", @@ -2736,12 +2805,12 @@ "eo": "maldiva lingvo", "es": "maldivo", "eu": "Maldivera", - "fi": "divehi", + "fi": "Divehin kieli", "fr": "maldivien", "gl": "lingua maldivana", "he": "דיבהי", "hu": "maldív", - "id": "Maladewa", + "id": "Divehi", "it": "maldiviano", "ja": "ディベヒ語", "nb_NO": "dhivehi", @@ -2786,7 +2855,7 @@ "pt": "língua butanesa", "pt_BR": "Língua butanesa", "ru": "дзонг-кэ", - "sl": "butanščina", + "sl": "Dzongkha", "sv": "dzongkha", "zh_Hans": "宗卡语", "zh_Hant": "宗喀語", @@ -2808,12 +2877,12 @@ "eo": "evea lingvo", "es": "ewé", "eu": "eweera", - "fi": "ewe", + "fi": "ewen kieli", "fr": "ewé", "gl": "Lingua ewe", - "he": "אווה", + "he": "אבגבה", "hu": "eve", - "id": "Ewe", + "id": "Bahasa Ewe", "it": "ewe", "ja": "エウェ語", "nb_NO": "ewe", @@ -2832,7 +2901,7 @@ "efi": { "ca": "efik", "de": "Efik", - "en": "Efik", + "en": "Ibibio", "eo": "efika lingvo", "es": "Idioma efik", "fi": "Efik", @@ -2844,7 +2913,6 @@ "nb_NO": "Efik", "nl": "Efik", "pt": "Língua efik", - "sl": "efiščina", "sv": "efik", "zh_Hant": "艾菲克語", "_meta": { @@ -2859,8 +2927,7 @@ "en": "Emilian", "eo": "emiliaj lingvoj", "es": "emiliano", - "eu": "emiliera", - "fi": "emilia", + "fi": "Emilian kieli", "fr": "émilien", "hu": "emilián", "id": "bahasa Emilia", @@ -2869,7 +2936,6 @@ "nl": "Emiliaans", "pt": "dialeto emiliano", "ru": "эмилианский", - "sl": "emilijščina", "sv": "emilianska", "zh_Hant": "艾米利亞語", "_meta": { @@ -2895,15 +2961,14 @@ "id": "Yunani Modern", "it": "greco moderno", "ja": "現代ギリシア語", - "nb_NO": "gresk", + "nb_NO": "nygresk", "nl": "Nieuwgrieks", - "pl": "język grecki", - "pt": "grego", + "pl": "język nowogrecki", + "pt": "grego moderno", "pt_BR": "língua grega", - "ru": "греческий язык", - "sl": "grščina", - "sv": "grekiska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⴳⵔⵉⴽⵜ", + "ru": "новогреческий язык", + "sl": "novogrščina", + "sv": "nygrekiska", "zh_Hans": "希腊语", "zh_Hant": "希臘語", "_meta": { @@ -2941,7 +3006,6 @@ "ru": "английский язык", "sl": "angleščina", "sv": "engelska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵏⴳⵍⵉⵣⵜ", "zh_Hans": "英语", "zh_Hant": "英語", "_meta": { @@ -3069,7 +3133,6 @@ "ru": "испанский язык", "sl": "španščina", "sv": "spanska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵙⴱⵍⵢⵓⵏⵜ", "zh_Hans": "西班牙语", "zh_Hant": "西班牙語", "_meta": { @@ -3108,14 +3171,12 @@ "fi": "alaskanjupik", "fr": "yupik de l'Alaska central", "gl": "Lingua iupik de Alasca central", - "he": "יופיקית מרכזית", "it": "lingua yupik centrale", "ja": "中央アラスカ・ユピック語", "nb_NO": "Alaskayupik", "nl": "Joepik", "pl": "Język yupik środkowy", - "pt": "Língua iúpique do Alasca Central", - "ru": "центрально-юпикский язык", + "ru": "Центрально-юпикский язык", "sv": "centraljupik", "zh_Hans": "中阿拉斯加尤皮克语", "_meta": { @@ -3138,7 +3199,7 @@ "gl": "lingua estoniana", "he": "אסטונית", "hu": "észt", - "id": "bahasa Estonia", + "id": "Esti", "it": "estone", "ja": "エストニア語", "nb_NO": "estisk", @@ -3173,7 +3234,7 @@ "gl": "lingua éuscara", "he": "בסקית", "hu": "baszk", - "id": "Basque", + "id": "Bahasa Basque", "it": "basco", "ja": "バスク語", "nb_NO": "baskisk", @@ -3196,7 +3257,7 @@ "ca": "extremeny", "de": "Extremadurisch", "en": "Extremaduran", - "eo": "ekstremadura lingvovario", + "eo": "ekstremadura lingvo", "es": "extremeño", "eu": "Extremadurera", "fi": "extremadura", @@ -3212,7 +3273,6 @@ "ru": "Эстремадурский язык", "sl": "ekstremadurščina", "sv": "extremaduriska", - "zh_Hant": "埃斯特雷馬杜拉語", "_meta": { "dir": [ "left-to-right" @@ -3268,7 +3328,7 @@ "gl": "Lingua dari", "he": "דארי", "hu": "dari", - "id": "bahasa Dari", + "id": "Dari", "it": "dari", "ja": "ダリー語", "nb_NO": "dari", @@ -3279,7 +3339,7 @@ "ru": "дари", "sl": "darijščina", "sv": "dari", - "zh_Hans": "达里语", + "zh_Hans": "达利语", "zh_Hant": "達利語", "_meta": { "dir": [ @@ -3296,10 +3356,10 @@ "eo": "fula lingvo", "es": "fula", "eu": "fula", - "fi": "fulani", + "fi": "Fulani", "fr": "peul", "gl": "Lingua fula", - "he": "פולה", + "he": "שפת הפולה", "hu": "ful", "id": "Bahasa Fula", "it": "fula", @@ -3334,10 +3394,10 @@ "eu": "finlandiera", "fi": "suomi", "fr": "finnois", - "gl": "lingua finesa", + "gl": "finés", "he": "פינית", "hu": "finn", - "id": "bahasa Finlandia", + "id": "Suomi", "it": "finlandese", "ja": "フィンランド語", "nb_NO": "finsk", @@ -3384,7 +3444,6 @@ "ru": "филиппинский язык", "sl": "filipinščina", "sv": "filippinska", - "zh_Hans": "菲律宾语", "zh_Hant": "菲律賓語", "_meta": { "dir": [ @@ -3406,7 +3465,6 @@ "gl": "meänkieli", "he": "מאנקיילי", "hu": "meänkieli", - "id": "bahasa Meänkieli", "it": "lingua meänkieli", "ja": "メアンキエリ", "nb_NO": "tornedalsfinsk", @@ -3415,7 +3473,6 @@ "pt": "Língua meänkieli", "pt_BR": "Língua meänkieli", "ru": "Меянкиели", - "sl": "meänkieli", "sv": "meänkieli", "zh_Hans": "梅安语", "zh_Hant": "梅安語", @@ -3436,9 +3493,8 @@ "fi": "võro", "fr": "võro", "gl": "Lingua võro", - "he": "וירו", "hu": "võro", - "id": "Võro", + "id": "Bahasa Võro", "it": "võro", "ja": "ヴォロ語", "nb_NO": "sørestisk", @@ -3446,7 +3502,6 @@ "pl": "język võro", "pt": "Língua võro", "ru": "выруский диалект", - "sl": "võro", "sv": "võro", "zh_Hans": "沃罗语", "_meta": { @@ -3464,12 +3519,12 @@ "eo": "fiĝia lingvo", "es": "fiyiano", "eu": "Fijiera", - "fi": "fidži", + "fi": "Fidžin kieli", "fr": "fidjien", "gl": "Lingua fidxiana", "he": "פיג'ית", "hu": "fidzsi", - "id": "Fiji", + "id": "Bahasa Fiji", "it": "figiano", "ja": "フィジー語", "nb_NO": "fijiansk", @@ -3478,10 +3533,7 @@ "pt": "Língua fidjiana", "pt_BR": "Língua fijiana", "ru": "фиджийский язык", - "sl": "fidžijščina", "sv": "fijianska", - "zh_Hans": "斐济语", - "zh_Hant": "斐濟語", "_meta": { "countries": [ "FJ" @@ -3505,7 +3557,7 @@ "gl": "Lingua kven", "he": "קוון", "hu": "kven", - "id": "Kven", + "id": "Bahasa Kven", "it": "kven", "ja": "クヴェン語", "nb_NO": "kvensk", @@ -3531,7 +3583,7 @@ "eo": "feroa lingvo", "es": "feroés", "eu": "Faroera", - "fi": "fääri", + "fi": "fäärin kieli", "fr": "féroïen", "gl": "lingua feroesa", "he": "פארואזית", @@ -3560,7 +3612,7 @@ "eo": "fonua lingvo", "es": "idioma fon", "eu": "Fonera", - "fi": "fon", + "fi": "Fonin kieli", "fr": "fon-gbe", "gl": "Lingua fon", "he": "פון", @@ -3605,7 +3657,6 @@ "ru": "французский язык", "sl": "francoščina", "sv": "franska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⴼⵕⴰⵏⵚⵉⵚⵜ", "zh_Hans": "法语", "zh_Hant": "法語", "_meta": { @@ -3653,13 +3704,12 @@ "es": "francés cajún", "eu": "Louisianako frantses", "fr": "français de Louisiane", - "id": "Prancis Louisiana", + "id": "Bahasa Prancis Louisiana", "it": "francese cajun", "ja": "ケイジャン・フランス語", "nl": "Cajun-Frans", "pt": "francês cajun", "ru": "Кажунский диалект французского языка", - "sl": "louisianska francoščina", "sv": "louisianafranska", "_meta": { "dir": [ @@ -3676,12 +3726,12 @@ "eo": "arpitana lingvo", "es": "franco-provenzal", "eu": "Frankoprovenzera", - "fi": "arpitaani", + "fi": "Arpitaani", "fr": "francoprovençal", "gl": "Lingua francoprovenzal", "he": "פרנקו-פרובנסאלית", "hu": "frankoprovanszál", - "id": "Franco-Provençal", + "id": "Bahasa Arpitan", "it": "francoprovenzale", "ja": "アルピタン語", "nb_NO": "frankoprovençalsk", @@ -3701,21 +3751,21 @@ "frr": { "ca": "frisó septentrional", "da": "Nordfrisisk", - "de": "nordfriesische Sprache", + "de": "Nordfriesisch", "en": "North Frisian", "eo": "nordfrisa lingvo", "es": "frisón septentrional", "eu": "Iparraldeko frisiera", - "fi": "pohjoisfriisi", + "fi": "Pohjoisfriisi", "fr": "frison septentrional", "gl": "Lingua frisoa setentrional", "he": "פריזית צפונית", "hu": "északi fríz", - "id": "Frisia Utara", + "id": "Bahasa Frisia Utara", "it": "frisone settentrionale", "ja": "北フリジア語", "nb_NO": "nordfrisisk", - "nl": "Noord-Friese talen", + "nl": "Noord-Fries", "pl": "język północnofryzyjski", "pt": "frisão setentrional", "ru": "севернофризский язык", @@ -3729,20 +3779,6 @@ ] } }, - "fuf": { - "en": "Pular", - "fr": "pular", - "gl": "Lingua pular", - "ja": "プラー語", - "nl": "Pular", - "sv": "pular", - "_meta": { - "dir": [ - "left-to-right", - "right-to-left" - ] - } - }, "fur": { "ca": "furlà", "cs": "furlanština", @@ -3752,12 +3788,12 @@ "eo": "friula lingvo", "es": "friulano", "eu": "Friuliera", - "fi": "friuli", + "fi": "Friulin kieli", "fr": "frioulan", "gl": "Lingua friulana", "he": "פורלן", "hu": "friuli", - "id": "Friuli", + "id": "Bahasa Friuli", "it": "friulano", "ja": "フリウリ語", "nb_NO": "friulisk", @@ -3767,7 +3803,6 @@ "ru": "фриульский язык", "sl": "furlanščina", "sv": "friuliska", - "zh_Hant": "佛里烏利語", "_meta": { "dir": [ "left-to-right" @@ -3783,12 +3818,12 @@ "eo": "okcidentfrisa lingvo", "es": "frisón occidental", "eu": "Mendebaldeko frisiera", - "fi": "länsifriisi", + "fi": "länsifriisin kieli", "fr": "frison occidental", "gl": "Lingua frisoa occidental", "he": "פריזית מערבית", "hu": "nyugati fríz", - "id": "Frisia Barat", + "id": "Bahasa Frisia Barat", "it": "frisone occidentale", "ja": "西フリジア語", "nb_NO": "vestfrisisk", @@ -3797,7 +3832,6 @@ "pt": "frísio ocidental", "pt_BR": "frísio ocidental", "ru": "западнофризский язык", - "sl": "zahodna frizijščina", "sv": "västfrisiska", "zh_Hans": "西弗里斯兰语", "zh_Hant": "西菲士蘭語", @@ -3821,7 +3855,7 @@ "gl": "lingua irlandesa", "he": "אירית", "hu": "ír", - "id": "bahasa Irlandia", + "id": "Bahasa Irlandia", "it": "irlandese", "ja": "アイルランド語", "nb_NO": "irsk", @@ -3855,7 +3889,6 @@ "he": "גה", "it": "lingua ga", "ja": "ガ語", - "nb_NO": "ga", "nl": "Ga", "pl": "Język ga", "ru": "Га", @@ -3905,7 +3938,7 @@ "en": "Gan Chinese", "eo": "gana lingvo", "es": "chino gan", - "fi": "gan-kiina", + "fi": "Gan-kiina", "fr": "gan", "gl": "Gan", "he": "סינית גאן", @@ -3922,7 +3955,7 @@ "zh_Hant": "贛語", "_meta": { "dir": [ - "vertical right-to-left" + "top-to-bottom" ] } }, @@ -3932,7 +3965,7 @@ "eo": "franc-gujana kreola lingvo", "es": "Criollo de Guayana Francesa", "fi": "Ranskan Guayanan kreoli", - "fr": "Créole guyanais", + "fr": "créole guyanais", "gl": "Crioulo da Güiana Francesa", "it": "lingua creola della Guyana francese", "ja": "仏領ギアナのクレオール語", @@ -3958,12 +3991,12 @@ "eo": "skotgaela lingvo", "es": "gaélico escocés", "eu": "Eskoziako gaelera", - "fi": "gaeli", + "fi": "Gaeli", "fr": "gaélique écossais", "gl": "Lingua gaélica escocesa", "he": "גאלית סקוטית", "hu": "skót gael", - "id": "Gaelik Skotlandia", + "id": "Bahasa Gaelik Skotlandia", "it": "gaelico scozzese", "ja": "スコットランド・ゲール語", "nb_NO": "skotsk-gælisk", @@ -3994,7 +4027,7 @@ "gl": "Lingua kiribatiana", "he": "גילברטית", "hu": "gilberti", - "id": "Kiribati", + "id": "Bahasa Kiribati", "it": "gilbertese", "ja": "キリバス語", "nb_NO": "Kiribatisk", @@ -4044,17 +4077,16 @@ }, "glk": { "ca": "gilaki", - "cs": "Gilákština", "de": "Gilaki", "en": "Gilaki", "eo": "gila lingvo", "es": "gileki", "eu": "Gilaki", - "fi": "gilaki", + "fi": "Gilakin kieli", "fr": "gilaki", "gl": "Lingua gilaki", "hu": "gilaki", - "id": "Gilaki", + "id": "Bahasa Gilaki", "it": "gilaki", "ja": "ギラキ語", "nb_NO": "Gileki", @@ -4062,9 +4094,7 @@ "pl": "Język giliański", "pt": "Língua gilaki", "ru": "гилякский язык", - "sl": "gilaščina", "sv": "gilaki", - "zh_Hant": "吉拉基語", "_meta": { "dir": [ "right-to-left" @@ -4080,7 +4110,7 @@ "eo": "gvarania lingvo", "es": "guaraní", "eu": "Guaraniera", - "fi": "guarani", + "fi": "Guaranin kieli", "fr": "guarani", "gl": "lingua guaraní", "he": "גוארני", @@ -4094,9 +4124,8 @@ "pt": "língua guarani", "pt_BR": "língua guarani", "ru": "гуарани", - "sl": "gvaranščina", + "sl": "Gvaranščina", "sv": "guaraní", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⴳⵡⴰⵔⴰⵏⵉⵜ", "zh_Hans": "瓜纳尼语", "zh_Hant": "瓜拉尼語", "_meta": { @@ -4112,12 +4141,10 @@ "gom": { "de": "Goa-Konkani", "en": "Goan Konkani", - "fi": "goankonkani", "fr": "konkani de Goa", "he": "קונקנית של גואה", "ja": "ゴア・コンカニ語", "nl": "Goa-Konkani", - "sl": "gojevska konkanščina", "sv": "goakonkani", "_meta": { "dir": [ @@ -4134,7 +4161,7 @@ "eo": "gorontala lingvo", "es": "Idioma gorontalo", "eu": "Gorontalo", - "fi": "gorontalo", + "fi": "Gorontalon kieli", "fr": "gorontalo", "gl": "Gorontalo", "id": "Gorontalo", @@ -4146,7 +4173,7 @@ "pt": "Gorontalo", "pt_BR": "Gorontalo", "ru": "Горонтало", - "sl": "gorontalščina", + "sl": "Gorontalo", "sv": "gorontalo", "zh_Hans": "哥伦打洛语", "zh_Hant": "哥倫打洛語", @@ -4163,7 +4190,6 @@ "gl": "Pidgin ghanés", "nl": "Ghanees-Pidgin", "ru": "ганский пиджин английского", - "sl": "ganska kreolščina", "sv": "ghanansk pidginengelska", "_meta": { "dir": [ @@ -4179,7 +4205,7 @@ "eo": "germana signolingvo", "es": "lengua de señas alemana", "fi": "saksalainen viittomakieli", - "fr": "langue des signes allemande - DGS", + "fr": "Langue des signes allemande - DGS", "hu": "német jelnyelv", "id": "Bahasa Isyarat Jerman", "it": "lingua dei segni tedesca", @@ -4190,7 +4216,6 @@ "pt": "língua gestual alemã", "pt_BR": "língua de sinais alemã", "ru": "германский жестовый язык", - "sl": "nemški znakovni jezik", "sv": "tyskt teckenspråk", "zh_Hans": "德国手语", "zh_Hant": "德國手語", @@ -4213,7 +4238,7 @@ "gl": "Lingua alsaciana", "he": "אלזסית", "hu": "elzászi", - "id": "Alsace", + "id": "bahasa Elsass", "it": "dialetto alsaziano", "ja": "アルザス語", "nb_NO": "elsassisk", @@ -4222,7 +4247,6 @@ "pt": "Língua alsaciana", "pt_BR": "Língua alsaciana", "ru": "эльзасский диалект", - "sl": "alzaščina", "sv": "elsassiska", "_meta": { "dir": [ @@ -4244,7 +4268,7 @@ "gl": "lingua guxaratí", "he": "גוג'ראטית", "hu": "gudzsaráti", - "id": "Gujarat", + "id": "Bahasa Gujarati", "it": "gujarati", "ja": "グジャラート語", "nb_NO": "gujarati", @@ -4268,7 +4292,6 @@ "eo": "vajua lingvo", "es": "Idioma wayú", "eu": "Wayuu hizkuntza", - "fi": "wayuu", "fr": "wayuu", "gl": "Lingua wayuu", "it": "lingua wayuu", @@ -4287,12 +4310,9 @@ }, "guw": { "ca": "gun", - "cs": "gunština", "de": "Gun", "en": "Gun", - "eo": "gungbea lingvo", "es": "Idioma Gungbe", - "fi": "gun", "fr": "gun-gbe", "gl": "Lingua gun", "he": "גון", @@ -4320,7 +4340,7 @@ "gl": "Lingua manx", "he": "מאנית", "hu": "manx", - "id": "Man", + "id": "Bahasa Manx", "it": "mannese", "ja": "マン島語", "nb_NO": "mansk", @@ -4329,7 +4349,7 @@ "pt": "Língua manesa", "pt_BR": "manês", "ru": "мэнский язык", - "sl": "manščina", + "sl": "Manska gelščina", "sv": "manx", "_meta": { "dir": [ @@ -4346,7 +4366,7 @@ "eo": "haŭsa lingvo", "es": "hausa", "eu": "Hausa", - "fi": "hausa", + "fi": "hausan kieli", "fr": "haoussa", "gl": "Lingua hausa", "he": "האוסה", @@ -4360,7 +4380,6 @@ "pt": "Língua haúça", "pt_BR": "língua hauçá", "ru": "хауса", - "sl": "havščina", "sv": "hausa", "zh_Hant": "豪薩語", "_meta": { @@ -4404,7 +4423,7 @@ "en": "Hakka Chinese", "eo": "hakaa lingvo", "es": "chino hakka", - "fi": "hakka-kiina", + "fi": "Hakka-kiina", "fr": "hakka", "gl": "Lingua hakka", "he": "האקה", @@ -4423,7 +4442,7 @@ "zh_Hant": "客家話", "_meta": { "dir": [ - "vertical right-to-left" + "top-to-bottom" ] } }, @@ -4436,12 +4455,12 @@ "eo": "havaja lingvo", "es": "hawaiano", "eu": "hawaiiera", - "fi": "havaiji", + "fi": "havaijin kieli", "fr": "hawaïen", "gl": "Lingua hawaiana", "he": "הוואית", "hu": "hawaii", - "id": "bahasa Hawaii", + "id": "Bahasa Hawaii", "it": "hawaiano", "ja": "ハワイ語", "nb_NO": "hawaiisk", @@ -4452,7 +4471,6 @@ "ru": "гавайский язык", "sl": "havajščina", "sv": "hawaiiska", - "zh_Hans": "夏威夷语", "zh_Hant": "夏威夷語", "_meta": { "dir": [ @@ -4474,7 +4492,7 @@ "gl": "lingua hebrea", "he": "עברית", "hu": "héber", - "id": "bahasa Ibrani", + "id": "Ibrani", "it": "ebraico", "ja": "ヘブライ語", "nb_NO": "hebraisk", @@ -4505,11 +4523,11 @@ "eo": "Fiĝia hindia lingvo", "es": "hindi de Fiyi", "eu": "Fijiko hindi", - "fi": "fidžinhindi", + "fi": "Fidžinhindi", "fr": "hindi des Fidji", "gl": "Hindi de Fidxi", "he": "הינדוסטני", - "id": "Hindi Fiji", + "id": "Bahasa Fiji Hindi", "it": "hindi figiano", "ja": "フィジー・ヒンディー語", "nb_NO": "Fijiansk hindi", @@ -4534,7 +4552,7 @@ "fi": "Hiligainon kieli", "fr": "hiligaïnon", "hu": "ilongo", - "id": "Hiligaynon", + "id": "Bahasa Hiligaynon", "it": "lingua hiligaynon", "ja": "ヒリガイノン語", "nl": "Hiligaynon", @@ -4543,7 +4561,6 @@ "ru": "Хилигайнон", "sl": "hiligajnonščina", "sv": "hiligaynon", - "zh_Hant": "希利蓋農語", "_meta": { "dir": [ "left-to-right" @@ -4557,7 +4574,7 @@ "en": "Hindko", "fi": "Hindko", "fr": "hindko", - "id": "Hindko", + "id": "Bahasa Hindko", "it": "Hindko", "ja": "ヒンドコ語", "nb_NO": "hindko", @@ -4583,7 +4600,7 @@ "eo": "hirimotua lingvo", "es": "Hiri motu", "eu": "Hiri Motu", - "fi": "hiri-motu", + "fi": "Hiri motu", "fr": "hiri motou", "gl": "Hiri Motu", "he": "הארי מוטו", @@ -4598,7 +4615,6 @@ "ru": "хири-моту", "sl": "hiri motu", "sv": "hiri motu", - "zh_Hant": "希里摩圖語", "_meta": { "countries": [ "PG" @@ -4664,7 +4680,7 @@ "gl": "Alto sorabo", "he": "סורבית עילית", "hu": "felsőszorb", - "id": "Sorbia Hulu", + "id": "Bahasa Sorbia Hulu", "it": "alto sorabo", "ja": "高地ソルブ語", "nl": "Oppersorbisch", @@ -4672,7 +4688,7 @@ "pt": "alto sorábio", "pt_BR": "Alto sorábio", "ru": "верхнелужицкий язык", - "sl": "zgornjelužiščina", + "sl": "Zgornjelužiščina", "sv": "högsorbiska", "zh_Hans": "上索布语", "zh_Hant": "上索布语", @@ -4686,7 +4702,7 @@ "ca": "crioll haitià", "cs": "haitská kreolština", "da": "haitisk", - "de": "Haitianisch-Kreolisch", + "de": "Haitianisch", "en": "Haitian Creole", "eo": "haitia kreola lingvo", "es": "criollo haitiano", @@ -4696,7 +4712,7 @@ "gl": "Crioulo haitiano", "he": "קריאולית האיטית", "hu": "haiti kreol", - "id": "Kreol Haiti", + "id": "Bahasa Kreol Haiti", "it": "creolo haitiano", "ja": "ハイチ語", "nb_NO": "haitisk", @@ -4769,7 +4785,7 @@ "gl": "lingua armenia", "he": "ארמנית", "hu": "örmény", - "id": "bahasa Armenia", + "id": "Bahasa Armenia", "it": "armeno", "ja": "アルメニア語", "nb_NO": "armensk", @@ -4792,16 +4808,13 @@ }, "hyw": { "ca": "armeni occidental", - "cs": "Západní Arménština", "de": "Westarmenisch", "en": "Western Armenian", "eo": "okcident-armena lingvo", "es": "armenio occidental", - "fi": "länsiarmenia", "fr": "arménien occidental", "gl": "Armenio occidental", "he": "ארמנית מערבית", - "hu": "Nyugat-örmény nyelv", "id": "Armenia Barat", "it": "dialetto armeno occidentale", "ja": "西アルメニア語", @@ -4827,7 +4840,7 @@ "eo": "herera lingvo", "es": "herero", "eu": "Hereroera", - "fi": "herero", + "fi": "Hereron kieli", "fr": "héréro", "gl": "Lingua herero", "hu": "herero", @@ -4840,9 +4853,7 @@ "pt": "hereró", "pt_BR": "Língua hereró", "ru": "Гереро", - "sl": "hererščina", "sv": "herero", - "zh_Hant": "赫雷羅語", "_meta": { "dir": [ "left-to-right" @@ -4874,7 +4885,7 @@ "ru": "индонезийский язык", "sl": "indonezijščina", "sv": "indonesiska", - "zh_Hans": "印尼语", + "zh_Hans": "印度尼西亚语", "zh_Hant": "印尼語", "_meta": { "countries": [ @@ -4892,7 +4903,7 @@ "eo": "Siĉuana jia lingvo", "es": "Idioma nuosu", "eu": "nuosu", - "fi": "sichuanin-yi", + "fi": "Sichuanin-yi", "fr": "nuosu", "gl": "Lingua nuosu", "he": "שפת נווסוו", @@ -4904,7 +4915,6 @@ "pt": "Língua Nuosu", "ru": "носу", "sv": "nuosu", - "zh_Hant": "彝語北部方言", "_meta": { "dir": [ "left-to-right" @@ -4915,11 +4925,11 @@ "ca": "inupiaq", "cs": "Inupiaq", "de": "Inupiaq", - "en": "Iñupiaq", + "en": "Inupiaq", "eo": "inupiaka lingvo", "es": "Idioma iñupiaq", "eu": "inupiaq", - "fi": "inupiatun", + "fi": "Inupiatun", "fr": "inupiaq", "gl": "Lingua inupiaq", "he": "אינופיאק", @@ -4947,7 +4957,7 @@ "en": "Ilocano", "eo": "iloka lingvo", "es": "ilocano", - "fi": "iloko", + "fi": "Iloko", "fr": "ilocano", "gl": "Lingua ilocana", "hu": "ilokano", @@ -4976,12 +4986,12 @@ "eo": "inguŝa lingvo", "es": "ingusetio", "eu": "Inguxera", - "fi": "inguuši", + "fi": "Inguušin kieli", "fr": "ingouche", "gl": "Lingua ingusetia", "he": "אינגושית", "hu": "ingus", - "id": "Ingush", + "id": "Bahasa Ingush", "it": "lingua inguscia", "ja": "イングーシ語", "nb_NO": "ingusjisk", @@ -5058,7 +5068,6 @@ "ru": "итальянский язык", "sl": "italijanščina", "sv": "italienska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵟⴰⵍⵢⴰⵏⵉⵜ", "zh_Hans": "意大利语", "zh_Hant": "義大利語", "_meta": { @@ -5080,9 +5089,9 @@ "de": "Inuktitut", "en": "Inuktitut", "eo": "inuktituta lingvo", - "es": "inuktitut", + "es": "lenguas inuit", "eu": "Inuitera", - "fi": "inuktitut", + "fi": "Inuktitut", "fr": "inuktitut", "gl": "Lingua inuktitut", "he": "אינוקטיטוט", @@ -5131,7 +5140,6 @@ "ru": "японский язык", "sl": "japonščina", "sv": "japanska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵏⵉⴱⵓⵏⵜ", "zh_Hans": "日语", "zh_Hant": "日語", "_meta": { @@ -5146,20 +5154,20 @@ } }, "jam": { - "ca": "crioll anglès de Jamaica", + "ca": "jamaican", "cs": "Jamajský patois", "da": "Patois", - "de": "Jamaikanisch-Kreolisch", + "de": "Jamaika-Kreolisch", "en": "Jamaican Patois", "eo": "jamajka-kreola lingvo", - "es": "criollo jamaicano", + "es": "Criollo jamaicano", "eu": "Jamaikako kreolera", - "fi": "jamaikankreoli", + "fi": "Jamaikankreoli", "fr": "créole jamaïcain", "gl": "Patois xamaicano", "he": "ג'מייקנית קריאולית", "hu": "jamaicai angol", - "id": "Patois Jamaika", + "id": "Patwa Jamaika", "it": "lingua creola giamaicana", "ja": "ジャマイカ・クレオール語", "nl": "Jamaicaans-Patois", @@ -5167,10 +5175,9 @@ "pt": "Patoá jamaicano", "pt_BR": "Patoá jamaicano", "ru": "ямайский креольский язык", - "sl": "jamajški patois", "sv": "patwa", - "zh_Hans": "牙买加克里奥尔语", - "zh_Hant": "牙買加克里奧爾語", + "zh_Hans": "牙买加土语", + "zh_Hant": "牙買加土語", "_meta": { "dir": [ "left-to-right" @@ -5180,11 +5187,10 @@ "jax": { "en": "Jambi Malay", "fr": "malais jambi", - "id": "Melayu Jambi", + "id": "Bahasa Melayu Jambi", "ja": "ジャンビ・マレー語", "pl": "Język jambi", "ru": "Джамби", - "sl": "džambijska malajščina", "sv": "jambimalajiska", "_meta": { "dir": [ @@ -5201,7 +5207,7 @@ "eo": "java lingvo", "es": "javanés", "eu": "Javera", - "fi": "jaava", + "fi": "jaavan kieli", "fr": "javanais", "gl": "Lingua xavanesa", "he": "ג'אווה", @@ -5240,7 +5246,7 @@ "gl": "lingua xeorxiana", "he": "גאורגית", "hu": "grúz", - "id": "bahasa Georgia", + "id": "Bahasa Georgia", "it": "georgiano", "ja": "ジョージア語", "nb_NO": "georgisk", @@ -5270,12 +5276,12 @@ "eo": "karakalpaka lingvo", "es": "Idioma karakalpako", "eu": "Karakalpakera", - "fi": "karakalpakki", + "fi": "karapalkki", "fr": "karakalpak", "gl": "Lingua karakalpak", "he": "קראקלפקית", "hu": "karakalpak", - "id": "Karakalpak", + "id": "Bahasa Karakalpak", "it": "karakalpako", "ja": "カラカルパク語", "nl": "Karakalpaks", @@ -5292,30 +5298,28 @@ } }, "kab": { - "ca": "cabilenc", + "ca": "cabil", "da": "Kabylsk", "de": "Kabylisch", "en": "Kabyle", "eo": "kabila lingvo", "es": "cabilio", "eu": "kabiliera", - "fi": "kabyyli", + "fi": "Kabyyli", "fr": "kabyle", - "gl": "cabilio", + "gl": "Lingua cabilia", "he": "קבילית", "hu": "kabil", - "id": "Bahasa Kabyle", "it": "cabilo", - "ja": "カビール語", + "ja": "カビル語", "nb_NO": "Kabylsk", "nl": "Kabylisch", - "pl": "kabylski", - "pt": "cabila", - "pt_BR": "cabila", + "pl": "Język kabylski", + "pt": "Língua cabila", + "pt_BR": "Língua cabila", "ru": "кабильский язык", "sl": "kabilščina", "sv": "kabyliska", - "zgh": "ⵜⴰⵇⴱⴰⵢⵍⵉⵜ", "zh_Hant": "卡拜爾語", "_meta": { "dir": [ @@ -5331,12 +5335,11 @@ "eo": "kabarda lingvo", "es": "cabardino", "eu": "Kabardera", - "fi": "kabardi", + "fi": "Kabardin kieli", "fr": "kabarde", "gl": "Lingua kabardina", "he": "קברדינית", "hu": "kabard", - "id": "Kabardia", "it": "cabardo", "ja": "カバルド語", "nb_NO": "kabardisk", @@ -5344,7 +5347,6 @@ "pl": "Język kabardyjski", "pt": "Língua cabardiana", "ru": "кабардино-черкесский язык", - "sl": "kabardinščina", "sv": "kabardinska", "zh_Hans": "卡巴尔达语", "zh_Hant": "卡巴爾達語", @@ -5374,7 +5376,6 @@ "pt": "Língua kabiyé", "ru": "Кабийе", "sv": "kabiye", - "zh_Hant": "卡比耶語", "_meta": { "dir": [ "left-to-right" @@ -5382,18 +5383,16 @@ } }, "kcg": { - "ca": "tyap", + "ca": "katab", "de": "Tjap", "en": "Tyap", "es": "Katab", - "fi": "tyap", + "fi": "Tyap", "fr": "tyap", "gl": "Lingua tyap", "ja": "カタブ語", "nl": "Tyap", - "sl": "tjapščina", "sv": "katab", - "zh_Hant": "提亞普語", "_meta": { "dir": [ "left-to-right" @@ -5409,8 +5408,8 @@ "eo": "Kabo-Verda kreolo", "es": "criollo caboverdiano", "fi": "Kapverdenkreoli", - "fr": "créole cap-verdien", - "gl": "crioulo caboverdiano", + "fr": "créole du Cap-Vert", + "gl": "Crioulo caboverdiano", "he": "קריאולית כף ורדה", "it": "creolo capoverdiano", "ja": "カーボベルデ・クレオール語", @@ -5436,12 +5435,12 @@ "eo": "konga lingvo", "es": "kikongo", "eu": "Kikongo", - "fi": "kongo", + "fi": "kongon kieli", "fr": "kikongo", "gl": "Lingua congo", "he": "קונגו", "hu": "kikongo", - "id": "Kongo", + "id": "Bahasa Kongo", "it": "kongo", "ja": "コンゴ語", "nb_NO": "kongo", @@ -5466,7 +5465,6 @@ "ja": "カインガング語", "nb_NO": "Kaingang", "nl": "Kaingang", - "pl": "Języki caingang", "pt": "Língua caingangue", "pt_BR": "Língua kaingáng", "ru": "Каинганг", @@ -5492,7 +5490,6 @@ "pl": "Język khasi", "pt": "Língua khasi", "ru": "Кхаси", - "sl": "kasijščina", "sv": "khasi", "zh_Hans": "卡西语", "zh_Hant": "卡西語", @@ -5506,7 +5503,6 @@ "en": "Khams Tibetan", "fr": "tibétain khamké", "hu": "khami tibeti", - "id": "Tibet Khams", "ja": "カム・チベット語", "pl": "Język kham", "pt": "Tibetano khams", @@ -5521,7 +5517,6 @@ "khw": { "de": "Khowar", "en": "Khowar", - "es": "Khowar", "fi": "Khowarin kieli", "fr": "khowar", "id": "Bahasa Khowar", @@ -5533,7 +5528,6 @@ "pt": "Língua khovar", "ru": "кховар", "sv": "khowar", - "zh_Hant": "科瓦語", "_meta": { "dir": [ "right-to-left" @@ -5548,7 +5542,7 @@ "eo": "kikuja lingvo", "es": "kikuyu", "eu": "kikuyuera", - "fi": "kikuju", + "fi": "Kikujun kieli", "fr": "kikuyu", "gl": "Lingua kikuyu", "he": "קיקויו", @@ -5578,7 +5572,6 @@ "en": "Kwanyama", "eo": "kuanjama lingvo", "es": "idioma kuanyama", - "fi": "kuanjama", "fr": "kwanyama", "gl": "Lingua kwanyama", "hu": "kvanyama", @@ -5588,7 +5581,6 @@ "pl": "Język kwanyama", "pt": "Língua cuanhama", "ru": "кваньяма", - "sl": "kvanjamščina", "sv": "kwanyama", "zh_Hans": "夸摩马语", "zh_Hant": "誇摩馬語", @@ -5603,7 +5595,6 @@ "en": "Khmu", "es": "Idioma khmu", "fr": "khmu", - "id": "Khmu", "ja": "クム語", "pl": "Język khmu", "pt": "Língua Khmu", @@ -5623,7 +5614,6 @@ "nl": "Oostelijk Pwo", "pt": "Língua pwo leste", "ru": "Восточный пво", - "sl": "vzhodni pwo", "sv": "östlig pwo", "_meta": { "dir": [ @@ -5645,7 +5635,7 @@ "gl": "Lingua casaca", "he": "קזחית", "hu": "kazak", - "id": "Kazakh", + "id": "bahasa Kazakh", "it": "kazako", "ja": "カザフ語", "nb_NO": "kasakhisk", @@ -5668,6 +5658,38 @@ ] } }, + "kl": { + "ca": "Groenlandès", + "cs": "grónština", + "da": "grønlandsk", + "de": "Grönländisch", + "en": "Greenlandic", + "eo": "gronlanda lingvo", + "es": "groenlandés", + "eu": "groenlandiera", + "fi": "grönlannin kieli", + "fr": "groenlandais", + "gl": "Lingua grenlandesa", + "he": "גרינלנדית", + "hu": "grönlandi", + "id": "bahasa Greenland", + "it": "groenlandese", + "ja": "グリーンランド語", + "nb_NO": "grønlandsk", + "nl": "Groenlands", + "pl": "język grenlandzki", + "pt": "gronelandês", + "ru": "гренландский язык", + "sl": "grenlandščina", + "sv": "grönländska", + "zh_Hans": "格陵兰语", + "zh_Hant": "格陵蘭語", + "_meta": { + "dir": [ + "left-to-right" + ] + } + }, "km": { "ca": "khmer", "cs": "khmerština", @@ -5703,24 +5725,6 @@ ] } }, - "kmz": { - "ca": "turc de Khorasan", - "de": "Chorasan-Türkisch", - "en": "Khorasani Turkic", - "es": "Idioma turco de Jorasán", - "fi": "Khorasaninturkin kieli", - "fr": "turc du Khorassan", - "it": "lingua khorasani", - "ja": "ホラサン・トルコ語", - "pt": "Língua turca coraçone", - "ru": "Хорасанско-тюркский язык", - "sl": "korasanska turščina", - "_meta": { - "dir": [ - "right-to-left" - ] - } - }, "kn": { "ca": "kannada", "cs": "kannadština", @@ -5767,7 +5771,7 @@ "gl": "lingua coreana", "he": "קוריאנית", "hu": "koreai", - "id": "bahasa Korea", + "id": "Korea", "it": "coreano", "ja": "朝鮮語", "nb_NO": "koreansk", @@ -5778,7 +5782,6 @@ "ru": "корейский язык", "sl": "korejščina", "sv": "koreanska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⴽⵓⵔⵉⵜ", "zh_Hans": "朝鲜语", "zh_Hant": "韓語", "_meta": { @@ -5801,7 +5804,7 @@ "eo": "komipermjaka lingvo", "es": "komi permio", "eu": "komi-permyak", - "fi": "komipermjakki", + "fi": "komipermjakin kieli", "fr": "komi-permiak", "gl": "Lingua komi-permyac", "hu": "permják", @@ -5812,7 +5815,6 @@ "pl": "język komi-permiacki", "pt": "Língua komi-permyak", "ru": "коми-пермяцкий язык", - "sl": "permjaščina", "sv": "komi-permjakiska", "zh_Hans": "彼尔姆科米语", "zh_Hant": "彼爾姆科米語", @@ -5830,7 +5832,7 @@ "eo": "kanura lingvo", "es": "kanuri", "eu": "Kanuri hizkuntza", - "fi": "kanuri", + "fi": "Kanurin kieli", "fr": "kanouri", "gl": "Lingua kanuri", "he": "קאנורי", @@ -5843,7 +5845,6 @@ "pt": "Língua kanuri", "ru": "Канури", "sv": "kanuri", - "zh_Hant": "卡努里語", "_meta": { "dir": [ "right-to-left", @@ -5853,13 +5854,12 @@ }, "krc": { "ca": "karatxai-balkar", - "cs": "karačajsko-balkarština", "de": "Karatschai-Balkarisch", "en": "Karachay-Balkar", "eo": "karaĉaja-balkara lingvo", "es": "idioma karachái-bálkaro", "eu": "Karatxaiera-balkarera", - "fi": "karatšai-balkaari", + "fi": "Karatšai-balkaarin kieli", "fr": "karatchaï-balkar", "gl": "Lingua carachaio-bálcara", "he": "קראצ׳י-בלקר", @@ -5872,7 +5872,6 @@ "pl": "Język karaczajsko-bałkarski", "pt": "Língua carachaio-bálcara", "ru": "карачаево-балкарский язык", - "sl": "karačajska balkarščina", "sv": "karatjajbalkariska", "zh_Hans": "卡拉恰伊-巴尔卡尔语", "zh_Hant": "卡拉恰伊-巴爾卡爾語", @@ -5892,15 +5891,13 @@ "fi": "Krion kieli", "fr": "krio", "gl": "Lingua krio", - "hu": "krio", - "id": "Krio", + "id": "Bahasa Krio", "it": "lingua krio", "ja": "クリオ語", "nl": "Krio", "pl": "Język krio", "pt": "Língua krio", "ru": "Крио", - "sl": "krio", "sv": "krio", "zh_Hans": "克里奥语", "zh_Hant": "克里奧語", @@ -5920,7 +5917,7 @@ "fr": "harayen", "he": "קריאית", "id": "bahasa Karaik’a", - "it": "haraio", + "it": "caraio", "ja": "キナライア語", "nb_NO": "Kinaray-a", "nl": "Kinaray-a", @@ -5977,12 +5974,12 @@ "eo": "kaŝmira lingvo", "es": "cachemir", "eu": "kaxmirera", - "fi": "kašmiri", + "fi": "Kašmirin kieli", "fr": "cachemiri", "gl": "Lingua caxemiresa", "he": "קשמירית", "hu": "kasmíri", - "id": "Kashmir", + "id": "Bahasa Kashmiri", "it": "kashmiri", "ja": "カシミール語", "nb_NO": "kasjmiri", @@ -5991,7 +5988,7 @@ "pt": "língua caxemira", "pt_BR": "Língua caxemira", "ru": "кашмирский язык", - "sl": "kašmirščina", + "sl": "Kašmirščina", "sv": "kashmiri", "zh_Hans": "克什米尔语", "zh_Hant": "喀什米爾語", @@ -6020,7 +6017,6 @@ "pt": "Língua ripuária", "ru": "рипуарские диалекты", "sv": "ripuariska", - "zh_Hant": "利普里安語", "_meta": { "dir": [ "left-to-right" @@ -6036,7 +6032,7 @@ "eo": "kurmanĝa lingvo", "es": "kurmanji", "eu": "Kurmanji", - "fi": "kurmandži", + "fi": "Kurmandži", "fr": "kurmandji", "gl": "lingua kurda", "he": "כורמנג'ית", @@ -6066,7 +6062,6 @@ }, "kum": { "ca": "kumyk", - "da": "kumykisk", "de": "Kumykisch", "en": "Kumyk", "eo": "kumika lingvo", @@ -6076,7 +6071,7 @@ "fr": "koumyk", "he": "קומיקית", "hu": "kumik", - "id": "Kumyk", + "id": "Bahasa Kumyk", "it": "cumucco", "ja": "クムク語", "nb_NO": "kumykisk", @@ -6085,9 +6080,7 @@ "pt": "Língua kumyk", "pt_BR": "Língua kumyk", "ru": "кумыкский язык", - "sl": "kumiščina", "sv": "kumykiska", - "zh_Hant": "庫梅克語", "_meta": { "dir": [ "left-to-right", @@ -6110,7 +6103,6 @@ "pl": "Język kutenai", "pt": "Língua kutenai", "ru": "Кутенай", - "sl": "kutenajščina", "sv": "kootenai", "zh_Hans": "库特奈语", "zh_Hant": "庫特奈語", @@ -6134,7 +6126,7 @@ "gl": "lingua komi", "he": "קומי", "hu": "komi", - "id": "Komi", + "id": "Bahasa Komi", "it": "comi", "ja": "コミ語", "nb_NO": "syrjensk", @@ -6142,9 +6134,7 @@ "pl": "język komi", "pt": "língua komi", "ru": "коми язык", - "sl": "komijščina", "sv": "komi", - "zh_Hant": "科米語", "_meta": { "dir": [ "left-to-right" @@ -6164,7 +6154,7 @@ "fr": "kerinci", "gl": "Kerinci", "hu": "Kerinci", - "id": "bahasa Kerinci", + "id": "Bahasa Kerinci", "it": "kerinci", "ja": "クリンチ語", "nb_NO": "Kerinci", @@ -6172,7 +6162,7 @@ "pl": "język kerinci", "pt": "Kerinci", "pt_BR": "Kerinci", - "sl": "kerinščina", + "sl": "Kerinci", "sv": "kerinci", "_meta": { "dir": [ @@ -6189,12 +6179,12 @@ "eo": "kornvala lingvo", "es": "córnico", "eu": "Kornubiera", - "fi": "korni", + "fi": "Korni", "fr": "cornique", "gl": "Lingua córnica", "he": "קורנית", "hu": "korni", - "id": "bahasa Kernowek", + "id": "Bahasa Kernowek", "it": "cornico", "ja": "コーンウォール語", "nb_NO": "kornisk", @@ -6235,7 +6225,7 @@ "pt": "quirguiz", "pt_BR": "Língua quirguiz", "ru": "киргизский язык", - "sl": "kirgiščina", + "sl": "Kirgiščina", "sv": "kirgiziska", "zh_Hans": "柯尔克孜语", "zh_Hant": "吉爾吉斯語", @@ -6249,6 +6239,38 @@ ] } }, + "lad": { + "ca": "judeocastellà", + "cs": "ladino", + "da": "Ladino", + "de": "Sephardisch", + "en": "Judaeo-Spanish", + "eo": "judhispana lingvo", + "es": "judeoespañol", + "eu": "Ladino", + "fi": "ladino", + "fr": "judéo-espagnol", + "gl": "Lingua xudeu-española", + "he": "לאדינו", + "hu": "ladino", + "id": "Bahasa Ladino", + "it": "giudeo-spagnolo", + "ja": "ラディーノ語", + "nb_NO": "jødespansk", + "nl": "Ladino", + "pl": "ladino", + "pt": "judeu-espanhol", + "pt_BR": "Judeu-espanhol", + "ru": "сефардский язык", + "sl": "sefardščina", + "sv": "ladino", + "_meta": { + "dir": [ + "left-to-right", + "right-to-left" + ] + } + }, "lag": { "de": "Langi", "en": "Rangi", @@ -6314,7 +6336,7 @@ "gl": "Lingua lezguia", "he": "לזגית", "hu": "lezg", - "id": "Lezgin", + "id": "Bahasa Lezgia", "it": "lesgo", "ja": "レズギ語", "nb_NO": "lezgisk", @@ -6323,7 +6345,7 @@ "pt": "Língua lezgui", "pt_BR": "Língua lezgui", "ru": "лезгинский язык", - "sl": "lezginščina", + "sl": "Lezginščina", "sv": "lezginska", "zh_Hans": "列兹金语", "zh_Hant": "列茲金語", @@ -6342,7 +6364,7 @@ "eo": "ganda lingvo", "es": "luganda", "eu": "luganda", - "fi": "ganda", + "fi": "Gandan kieli", "fr": "luganda", "gl": "Lingua luganda", "he": "לוגנדה", @@ -6355,9 +6377,8 @@ "pl": "Język luganda", "pt": "Língua luganda", "ru": "Луганда", - "sl": "lugandščina", "sv": "luganda", - "zh_Hant": "盧干達語", + "zh_Hant": "烏干達語", "_meta": { "dir": [ "left-to-right" @@ -6372,12 +6393,12 @@ "eo": "limburga lingvo", "es": "limburgués", "eu": "limburgera", - "fi": "limburg", + "fi": "limburgin kieli", "fr": "limbourgeois", "gl": "Lingua limburguesa", "he": "לימבורגית", "hu": "limburgi nyelv", - "id": "Limburg", + "id": "Bahasa Limburgish", "it": "limburghese", "ja": "リンブルフ語", "nb_NO": "limburgsk", @@ -6409,7 +6430,7 @@ "gl": "Lingua lígur", "he": "ליגורית", "hu": "ligur", - "id": "Liguria", + "id": "Bahasa Liguria", "it": "lingua ligure", "ja": "リグリア語", "nb_NO": "ligurisk", @@ -6434,12 +6455,11 @@ "fi": "laki", "fr": "laki", "gl": "Lingua laki", - "id": "Laki", + "id": "Bahasa Laki", "ja": "ラーク語", "nl": "Laki", "pt": "Laki", "ru": "лаки", - "sl": "lakiščina", "sv": "lekî", "_meta": { "dir": [ @@ -6469,7 +6489,6 @@ "pt": "Língua dacota", "pt_BR": "Língua dacota", "ru": "лакота", - "sl": "lakotščina", "sv": "lakota", "zh_Hans": "拉科塔语", "_meta": { @@ -6487,7 +6506,7 @@ "eo": "ladina lingvo", "es": "ladino", "eu": "Ladino", - "fi": "ladini", + "fi": "Ladinin kieli", "fr": "ladin", "gl": "Lingua ladina", "he": "לדינית", @@ -6500,7 +6519,6 @@ "pl": "Język ladyński", "pt": "língua ladino-dolomítica", "ru": "ладинский язык", - "sl": "ladinščina", "sv": "ladinska", "zh_Hans": "拉迪恩语", "zh_Hant": "拉迪恩語", @@ -6519,10 +6537,10 @@ "eo": "lombarda lingvo", "es": "lombardo", "eu": "Lombardiera", - "fi": "lombardi", + "fi": "lombardin kieli", "fr": "lombard", "gl": "Lingua lombarda", - "he": "לומברד", + "he": "לומברד (שפה)", "hu": "lombard", "id": "bahasa Lombard", "it": "lingua lombarda", @@ -6534,7 +6552,6 @@ "ru": "ломбардский язык", "sl": "lombardščina", "sv": "lombardiska", - "zh_Hant": "倫巴底語", "_meta": { "dir": [ "left-to-right" @@ -6563,7 +6580,6 @@ "pl": "język lingala", "pt": "Língua lingala", "ru": "лингала", - "sl": "lingalščina", "sv": "lingala", "zh_Hant": "林格拉語", "_meta": { @@ -6638,14 +6654,12 @@ "de": "Nördliches Luri", "en": "Northern Luri", "es": "luri septentrional", - "fi": "pohjoisluri", "fr": "lori du Nord", "gl": "lingua luri setentrional", "it": "luri del nord", "ja": "北ロル語", "nl": "Noordelijk Luri", "pt": "luri setentrional", - "sl": "severna luriščina", "sv": "nordluriska", "_meta": { "dir": [ @@ -6667,7 +6681,7 @@ "gl": "lingua lituana", "he": "ליטאית", "hu": "litván", - "id": "bahasa Lituania", + "id": "bahasa Lituavi", "it": "lituano", "ja": "リトアニア語", "nb_NO": "litauisk", @@ -6698,47 +6712,19 @@ "eo": "latgala lingvo", "es": "Idioma latgaliano", "eu": "Latgaliera", - "fi": "latgalli", + "fi": "latgallin kieli", "fr": "latgalien", "gl": "Lingua latgaliá", "he": "לטגלית", "hu": "latgal", - "id": "Latgalia", + "id": "Bahasa Latgalia", "it": "letgallo", "ja": "ラトガリア語", "nl": "Letgaals", "pl": "język łatgalski", "pt": "Língua latgália", "ru": "латгальский язык", - "sl": "latgalščiina", "sv": "lettgalliska", - "zh_Hant": "拉特加萊語", - "_meta": { - "dir": [ - "left-to-right" - ] - } - }, - "lua": { - "ca": "tshiluba", - "de": "Tschiluba", - "en": "Luba-Kasai", - "eo": "luba lingvo", - "es": "chiluba", - "fi": "Luban kieli", - "fr": "luba-kasaï", - "gl": "Lingua tshiluba", - "id": "Bahasa Luba-Kasai", - "it": "lingua tshiluba", - "ja": "ルバ語", - "nb_NO": "Luba", - "nl": "Luba-Kasai", - "pl": "Język luba", - "pt": "Língua tshiluba", - "ru": "луба", - "sv": "Luba-Kasai", - "zh_Hans": "鲁巴-开赛语", - "zh_Hant": "魯巴-開賽語", "_meta": { "dir": [ "left-to-right" @@ -6775,7 +6761,6 @@ "ja": "南ロル語", "nl": "Zuid-Luri", "ru": "южнолурский язык", - "sl": "južna luriščina", "sv": "sydluriska", "_meta": { "dir": [ @@ -6794,10 +6779,10 @@ "eu": "letoniera", "fi": "latvia", "fr": "letton", - "gl": "lingua letoa", + "gl": "lingua letona", "he": "לטבית", "hu": "lett", - "id": "bahasa Latvia", + "id": "Latvi", "it": "lettone", "ja": "ラトビア語", "nb_NO": "latvisk", @@ -6856,7 +6841,6 @@ "pl": "Język lazyjski", "pt": "laz", "ru": "лазский язык", - "sl": "lazijščina", "sv": "laziska", "zh_Hans": "拉兹語", "zh_Hant": "拉茲語", @@ -6873,11 +6857,11 @@ "en": "Madurese", "eo": "madura lingvo", "es": "madurés", - "fi": "madura", + "fi": "Maduran kieli", "fr": "madurais", "gl": "Lingua maduresa", "he": "מאדורית", - "id": "bahasa Madura", + "id": "Madura", "it": "madurese", "ja": "マドゥラ語", "nl": "Madurees", @@ -6886,7 +6870,6 @@ "ru": "Мадурский язык", "sl": "madureščina", "sv": "maduresiska", - "zh_Hant": "馬都拉語", "_meta": { "dir": [ "left-to-right" @@ -6901,12 +6884,12 @@ "eo": "maitila lingvo", "es": "Maithili", "eu": "mahitiliera", - "fi": "maithili", + "fi": "Maithilin kieli", "fr": "maïthili", "gl": "Lingua maithili", "he": "מאיטהילית", "hu": "maithili", - "id": "Maithili", + "id": "Bahasa Maithili", "it": "maithili", "ja": "マイティリー語", "nb_NO": "Maithili", @@ -6915,7 +6898,6 @@ "pt": "Língua maithili", "pt_BR": "Língua maithili", "ru": "майтхили", - "sl": "maitilščina", "sv": "maithili", "zh_Hans": "迈蒂利语", "_meta": { @@ -6946,7 +6928,6 @@ "pt": "Língua moksha", "pt_BR": "Língua moksha", "ru": "мокшанский язык", - "sl": "mokšanščina", "sv": "moksja", "_meta": { "dir": [ @@ -6991,7 +6972,7 @@ "gl": "Lingua malgaxe", "he": "מלגשית", "hu": "malgas", - "id": "bahasa Malagasi", + "id": "Bahasa Malagasi", "it": "malgascio", "ja": "マダガスカル語", "nb_NO": "gassisk", @@ -7000,7 +6981,6 @@ "pt": "Língua malgaxe", "pt_BR": "Língua malgaxe", "ru": "малагасийский язык", - "sl": "malgaščina", "sv": "malagassiska", "zh_Hans": "马达加斯加语", "zh_Hant": "馬達加斯加語", @@ -7022,12 +7002,12 @@ "eo": "marŝala lingvo", "es": "marshalés", "eu": "Marshallera", - "fi": "marshall", + "fi": "Marshallin kieli", "fr": "marshallais", "gl": "Lingua marshalesa", "he": "מרשלית", "hu": "Marshall-szigeteki", - "id": "Marshall", + "id": "Bahasa Marshall", "it": "marshallese", "ja": "マーシャル語", "nb_NO": "marshallesisk", @@ -7049,12 +7029,12 @@ } }, "mhr": { - "ca": "mari oriental", + "ca": "txeremís oriental", "de": "Wiesenmari", "en": "Meadow Mari", "es": "mari de las praderas", "eu": "ekialdeko mari", - "fi": "niittymari", + "fi": "niittymarin kieli", "fr": "mari des prairies", "gl": "Lingua mari das pradeiras", "hu": "mezei mari", @@ -7065,15 +7045,49 @@ "pl": "maryjski łąkowy", "pt": "Língua mari das campinas", "ru": "луговомарийский язык", - "sl": "travniška marijščina", "sv": "östmariska", - "zh_Hant": "草原馬里語", "_meta": { "dir": [ "left-to-right" ] } }, + "mi": { + "ca": "maori", + "cs": "maorština", + "da": "maori", + "de": "Māori", + "en": "Māori", + "eo": "maoria lingvo", + "es": "maorí", + "eu": "maoriera", + "fi": "Maorin kieli", + "fr": "māori", + "gl": "Lingua maorí", + "he": "מאורית", + "hu": "maori", + "id": "Bahasa Maori", + "it": "māori", + "ja": "マオリ語", + "nb_NO": "maorisk", + "nl": "Maori", + "pl": "język maori", + "pt": "língua maori", + "pt_BR": "língua maori", + "ru": "маори", + "sl": "maorščina", + "sv": "maori", + "zh_Hans": "毛利语", + "zh_Hant": "毛利語", + "_meta": { + "countries": [ + "NZ" + ], + "dir": [ + "left-to-right" + ] + } + }, "mic": { "ca": "micmac", "cs": "mikmačtina", @@ -7091,7 +7105,6 @@ "nl": "Mi'kmaq", "pl": "Język mikmak", "ru": "микмак", - "sl": "mikmaščina", "sv": "micmac", "_meta": { "dir": [ @@ -7107,11 +7120,11 @@ "eo": "minankabaŭa lingvo", "es": "minangkabau", "eu": "Minangkabauera", - "fi": "minangkabau", + "fi": "Minangkabaun kieli", "fr": "minangkabau", "gl": "Lingua minangkabau", "he": "מינאנגקבאו", - "id": "bahasa Minangkabau", + "id": "Bahasa Minangkabau", "it": "minangkabau", "ja": "ミナンカバウ語", "nb_NO": "Minangkabau", @@ -7187,8 +7200,8 @@ "nb_NO": "malayalam", "nl": "Malayalam", "pl": "język malajalam", - "pt": "língua malaiala", - "pt_BR": "língua malaiala", + "pt": "malaiala", + "pt_BR": "Língua malaiala", "ru": "малаялам", "sl": "malajalamščina", "sv": "malayalam", @@ -7257,7 +7270,6 @@ "pl": "język mandżurski", "pt": "Língua manchu", "ru": "маньчжурский язык", - "sl": "mandžurščina", "sv": "manchuiska", "zh_Hans": "满语", "zh_Hant": "滿語", @@ -7275,7 +7287,7 @@ "eo": "manipura lingvo", "es": "meitei", "eu": "Manipurera", - "fi": "manipuri", + "fi": "Manipurin kieli", "fr": "meitei", "gl": "Lingua meitei", "id": "Bahasa Manipuri", @@ -7286,7 +7298,6 @@ "pl": "Język manipuri", "pt": "Língua manipuri", "ru": "манипури", - "sl": "manipurščina", "sv": "meitei", "zh_Hans": "曼尼普尔语", "zh_Hant": "曼尼普爾語", @@ -7302,10 +7313,9 @@ "en": "Mon", "eo": "Mon", "es": "Mon", - "fi": "mon", "fr": "môn", "gl": "lingua mon", - "id": "Mon", + "id": "Bahasa Mon", "it": "lingua mon", "ja": "モン語", "nb_NO": "mon", @@ -7313,7 +7323,6 @@ "pl": "język mon", "pt": "língua mon", "ru": "монский язык", - "sl": "monščina", "sv": "mon", "zh_Hans": "孟语", "zh_Hant": "孟語", @@ -7331,18 +7340,18 @@ "eo": "moldava lingvo", "es": "moldavo", "eu": "Moldaviera", - "fi": "moldova", + "fi": "Moldavian kieli", "fr": "moldave", "gl": "lingua moldova", "he": "מולדובנית", "hu": "moldáv", - "id": "Moldova", + "id": "bahasa Moldova", "it": "moldavo", "ja": "モルドバ語", "nb_NO": "moldovsk", "nl": "Moldavisch", - "pl": "język mołdawski", - "pt": "língua moldávia", + "pl": "Język mołdawski", + "pt": "Língua moldávia", "pt_BR": "língua moldávia", "ru": "молдавский язык", "sl": "moldavščina", @@ -7361,13 +7370,11 @@ "es": "innu", "eu": "Innuera", "fr": "innu-aimun", - "he": "אינו־איימון", "id": "Bahasa Innu", "it": "innu-aimun", "ja": "モンタニェ語", "nl": "Innu", "ru": "Монтанье-наскапи", - "sl": "inujščina", "sv": "innu-aimun", "_meta": { "dir": [ @@ -7400,8 +7407,8 @@ "ru": "маратхи", "sl": "maratščina", "sv": "marathi", - "zh_Hans": "马拉提语", - "zh_Hant": "馬拉提語", + "zh_Hans": "马拉地语", + "zh_Hant": "馬拉地語", "_meta": { "dir": [ "left-to-right" @@ -7423,12 +7430,12 @@ } }, "mrj": { - "ca": "mari occidental", + "ca": "txeremís occidental", "de": "Bergmari", "en": "Hill Mari", "es": "mari de las colinas", "eu": "mendebaldeko mari", - "fi": "vuorimari", + "fi": "vuorimarin kieli", "fr": "mari des montagnes", "gl": "Lingua mari das montañas", "hu": "hegyi mari", @@ -7439,9 +7446,7 @@ "pl": "maryjski górski", "pt": "mari ocidental", "ru": "горномарийский язык", - "sl": "hribovska marijščina", "sv": "västmariska", - "zh_Hant": "山地馬里語", "_meta": { "dir": [ "left-to-right" @@ -7473,7 +7478,6 @@ "ru": "малайский язык", "sl": "malajščina", "sv": "malajiska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵎⴰⵍⴰⵢⵜ", "zh_Hans": "马来语", "zh_Hant": "馬來語", "_meta": { @@ -7513,7 +7517,6 @@ "ru": "мальтийский язык", "sl": "malteščina", "sv": "maltesiska", - "zh_Hant": "馬爾他語", "_meta": { "countries": [ "MT" @@ -7550,11 +7553,11 @@ "en": "Muscogee", "eo": "krika lingvo", "es": "idioma maskoki", - "fi": "creek", + "fi": "Creekin kieli", "fr": "creek", "gl": "Lingua muscogee", "hu": "muszkogi", - "id": "Muscogee", + "id": "Bahasa Muskogee", "it": "lingua creek", "ja": "マスコギ語", "nl": "Muskogi", @@ -7562,7 +7565,6 @@ "pt": "Língua creek", "pt_BR": "Língua creek", "ru": "Крикский язык", - "sl": "muskoščina", "sv": "muskogi", "_meta": { "dir": [ @@ -7577,12 +7579,12 @@ "eo": "miranda lingvo", "es": "mirandés", "eu": "Mirandes", - "fi": "mirandeesi", + "fi": "Mirandeesi", "fr": "mirandais", "gl": "lingua mirandesa", "he": "מירנדזית", "hu": "mirandai", - "id": "Miranda", + "id": "Bahasa Miranda", "it": "mirandese", "ja": "ミランダ語", "nb_NO": "mirandesisk", @@ -7643,7 +7645,7 @@ "gl": "birmano", "he": "בורמזית", "hu": "burmai", - "id": "bahasa Myanmar", + "id": "bahasa Burma", "it": "birmano", "ja": "ビルマ語", "nb_NO": "burmesisk", @@ -7685,7 +7687,7 @@ "pt": "Língua erzya", "pt_BR": "Língua erzya", "ru": "эрзянский язык", - "sl": "erzjanščina", + "sl": "Erzjanščina", "sv": "erzya", "_meta": { "dir": [ @@ -7701,12 +7703,12 @@ "eo": "mazandarana lingvo", "es": "mazandaraní", "eu": "Mazandarandera", - "fi": "mazandarani", + "fi": "Mazandaranin kieli", "fr": "mazandarani", "gl": "Lingua mazanderani", "he": "מאזנדראנית", "hu": "mázandaráni", - "id": "Mazandaran", + "id": "Bahasa Mazandaran", "it": "mazanderani", "ja": "マーザンダラーン語", "nb_NO": "Mazandarani", @@ -7715,7 +7717,6 @@ "pt": "Língua mazandarani", "pt_BR": "Língua mazandarani", "ru": "мазандеранский язык", - "sl": "mazandaranščina", "sv": "mazenderani", "_meta": { "dir": [ @@ -7731,7 +7732,7 @@ "eo": "naura lingvo", "es": "nauruano", "eu": "Nauruera", - "fi": "nauru", + "fi": "Naurun kieli", "fr": "nauruan", "gl": "Lingua nauruana", "he": "נאורית", @@ -7765,7 +7766,7 @@ "eo": "minnana lingvo", "es": "chino min nan", "eu": "hegoaldeko min", - "fi": "minnan", + "fi": "Minnan", "fr": "minnan", "gl": "lingua min nam", "he": "מין דרומי", @@ -7785,7 +7786,7 @@ "zh_Hant": "閩南語", "_meta": { "dir": [ - "vertical right-to-left" + "top-to-bottom" ] } }, @@ -7803,7 +7804,7 @@ "gl": "Lingua napolitana", "he": "נפוליטנית", "hu": "nápolyi", - "id": "Napoli", + "id": "Bahasa Napolitan", "it": "lingua napoletana", "ja": "ナポリ語", "nb_NO": "napolitansk", @@ -7866,7 +7867,7 @@ "gl": "Lingua baixo alemá", "he": "גרמנית תחתית", "hu": "alnémet", - "id": "Jerman Hilir", + "id": "Bahasa Sachsen Hilir", "it": "lingue basso-tedesche", "ja": "低地ドイツ語", "nb_NO": "nedertysk", @@ -7892,12 +7893,12 @@ "eo": "nepala lingvo", "es": "nepalí", "eu": "nepalera", - "fi": "nepali", + "fi": "nepalin kieli", "fr": "népalais", "gl": "Lingua nepalesa", "he": "נפאלית", "hu": "nepáli", - "id": "Nepal", + "id": "Bahasa Nepali", "it": "nepalese", "ja": "ネパール語", "nb_NO": "nepali", @@ -7925,12 +7926,12 @@ "eo": "nevara lingvo", "es": "Newari", "eu": "newarera", - "fi": "newari", + "fi": "Newari", "fr": "newari", "gl": "Lingua newari", "he": "נפאל בהאסה", "hu": "névári", - "id": "Newar", + "id": "bahasa Newar", "it": "nepal bhasa", "ja": "ネパール・バサ語", "nb_NO": "Nepal bhasa", @@ -7938,7 +7939,6 @@ "pl": "Język newarski", "pt": "Língua bhasa", "ru": "неварский язык", - "sl": "nevarščina", "sv": "newari", "_meta": { "dir": [ @@ -7953,18 +7953,16 @@ "eo": "ndonga lingvo", "es": "ndonga", "eu": "Ndonga", - "fi": "ndonga", + "fi": "Ndonga", "fr": "ndonga", "gl": "Lingua ndonga", "hu": "ndonga", - "id": "Dialek Ndonga", "it": "ndonga", "ja": "ンドンガ語", "nl": "Ndonga", "pl": "Język ndonga", "pt": "Ndonga", "ru": "Ндонга", - "sl": "ndonga", "sv": "ndonga", "_meta": { "dir": [ @@ -7976,7 +7974,7 @@ "de": "Nias", "en": "Nias", "eo": "niasa lingvo", - "fi": "nias", + "fi": "Niasin kieli", "fr": "niha", "gl": "Lingua nias", "id": "Bahasa Nias", @@ -7986,7 +7984,6 @@ "pl": "Język nias", "pt": "Língua nias", "ru": "Ниасский язык", - "sl": "niaščina", "sv": "nias", "zh_Hans": "尼亚斯语", "zh_Hant": "尼亞斯語", @@ -8008,7 +8005,7 @@ "fr": "niuéen", "he": "ניואית", "hu": "niuei", - "id": "Niue", + "id": "Bahasa Niue", "it": "lingua niueana", "ja": "ニウエ語", "nb_NO": "Niuisk", @@ -8048,7 +8045,6 @@ "ru": "нидерландский язык", "sl": "nizozemščina", "sv": "nederländska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵀⵓⵍⴰⵏⴷⵉⵜ", "zh_Hans": "荷兰语", "zh_Hant": "荷蘭語", "_meta": { @@ -8087,7 +8083,6 @@ "ru": "нюнорск", "sl": "nynorsk", "sv": "nynorska", - "zh_Hans": "新挪威语", "zh_Hant": "新挪威語", "_meta": { "countries": [ @@ -8142,7 +8137,7 @@ "es": "idioma tailandés septentrional", "fr": "thaï du Nord", "he": "תאית צפונית", - "id": "Thai Utara", + "id": "bahasa Thai Utara", "it": "thailandese settentrionale", "ja": "北タイ語", "nl": "Noordelijk Thai", @@ -8165,7 +8160,7 @@ "de": "Nogaisch", "en": "Nogai", "eo": "nogaja lingvo", - "es": "Nogai", + "es": "nogai", "eu": "nogaiera", "fi": "Nogain kieli", "fr": "nogaï", @@ -8178,7 +8173,6 @@ "pl": "Język nogajski", "pt": "Língua nogai", "ru": "ногайский язык", - "sl": "nogajščina", "sv": "nogai", "_meta": { "dir": [ @@ -8187,9 +8181,7 @@ } }, "nqo": { - "en": "NKo", - "eu": "mandingera", - "fi": "n’ko", + "en": "N'Ko", "fr": "n'ko", "gl": "Lingua n'ko", "ja": "ンコ語", @@ -8226,7 +8218,6 @@ "pt": "língua ndebele", "pt_BR": "língua ndebele", "ru": "южный ндебеле", - "sl": "južna ndebelščina", "sv": "sydndebele", "zh_Hans": "南恩德贝莱语", "zh_Hant": "南恩德貝萊語", @@ -8248,7 +8239,7 @@ "es": "guernseyés", "fi": "Guernésiais", "fr": "guernesiais", - "id": "Guernésiais", + "id": "bahasa Guernésiais", "it": "dialetto guernesiais", "ja": "ガーンジー島方言", "nb_NO": "guernésiais", @@ -8256,7 +8247,7 @@ "pl": "Dgèrnésiais", "pt": "Guernésiais", "ru": "Гернсийский диалект нормандского языка", - "sl": "guernseyščina", + "sl": "Guernseyščina", "sv": "guernésiais", "zh_Hans": "根西方言", "_meta": { @@ -8268,18 +8259,17 @@ "nso": { "ca": "pedi", "cs": "severní sotho", - "da": "nordsotho", "de": "Nord-Sotho", "en": "Northern Sotho", "eo": "peda lingvo", "es": "Sesotho sa leboa", "eu": "pediera", - "fi": "pohjoissotho", + "fi": "Pohjoissothon kieli", "fr": "sotho du Nord", "gl": "Lingua sotho do norte", "he": "סוטו צפונית", "hu": "északi szoto", - "id": "Sotho Utara", + "id": "Bahasa Sepedi", "it": "sotho del nord", "ja": "北ソト語", "nb_NO": "nordsotho", @@ -8312,7 +8302,7 @@ "he": "נאוואחו", "hu": "navahó", "id": "Bahasa Navajo", - "it": "navajo", + "it": "lingua navajo", "ja": "ナバホ語", "nb_NO": "navajo", "nl": "Navajo", @@ -8320,7 +8310,6 @@ "pt": "Língua navaja", "pt_BR": "Língua navaja", "ru": "навахо", - "sl": "navaščina", "sv": "navajo", "_meta": { "dir": [ @@ -8337,12 +8326,12 @@ "eo": "njanĝa lingvo", "es": "chichewa", "eu": "txewera", - "fi": "njandža", + "fi": "njandžan kieli", "fr": "chewa", "gl": "lingua chichewa", "he": "צ'ואה", "hu": "cseva", - "id": "Chewa", + "id": "Bahasa Chichewa", "it": "chewa", "ja": "チェワ語", "nb_NO": "chewa", @@ -8352,7 +8341,6 @@ "ru": "ньянджа", "sl": "čičevščina", "sv": "chichewa", - "zh_Hans": "切瓦语", "_meta": { "countries": [ "MW", @@ -8366,16 +8354,12 @@ "nys": { "de": "Noongar", "en": "Noongar", - "es": "noongar", "eu": "nyungar", - "fr": "nyungar", - "gl": "noongar", - "he": "נונגאר", - "it": "noongar", - "ja": "ヌーンガー語", - "nl": "Nyungar", - "sl": "nungarščina", - "sv": "nyungar", + "fr": "nyungan", + "gl": "Lngua noongar", + "ja": "ニュンガル語", + "nl": "Nyunga", + "sv": "nyunga", "_meta": { "dir": [ "left-to-right" @@ -8396,7 +8380,7 @@ "gl": "lingua occitana", "he": "אוקסיטנית", "hu": "okcitán", - "id": "bahasa Oksitan", + "id": "Oksitan", "it": "occitano", "ja": "オック語", "nb_NO": "oksitansk", @@ -8450,14 +8434,13 @@ "eo": "olonec-karela lingvo", "fi": "livvinkarjala", "fr": "olonetsien", - "gl": "lingua livvi", + "gl": "Lingua livvi", "it": "lingua livvi", "ja": "リッヴィ語", "nb_NO": "livvisk", "nl": "Olonetsisch", - "pl": "dialekt ołoniecki", + "pl": "Dialekt ołoniecki", "ru": "ливвиковское наречие", - "sl": "livijščina", "sv": "livvi", "zh_Hant": "利維卡累利阿語", "_meta": { @@ -8475,7 +8458,7 @@ "eo": "oroma lingvo", "es": "oromo", "eu": "Oromoera", - "fi": "oromo", + "fi": "oromon kieli", "fr": "oromo", "gl": "Lingua oromo", "he": "אורומו", @@ -8488,9 +8471,7 @@ "pl": "Język oromo", "pt": "Língua oromo", "ru": "оромо", - "sl": "oromoščina", "sv": "oromo", - "zh_Hant": "奧羅莫語", "_meta": { "dir": [ "left-to-right" @@ -8531,7 +8512,7 @@ "gl": "Lingua oriya", "he": "אורייה", "hu": "orija", - "id": "Odia", + "id": "Oriya", "it": "oriya", "ja": "オリヤー語", "nb_NO": "oriya", @@ -8587,13 +8568,11 @@ "en": "Osage", "fi": "Osagen kieli", "fr": "osage", - "he": "אוסייג'", - "id": "Osage", "it": "lingua osage", "ja": "オセージ語", - "nb_NO": "osage", + "nb_NO": "Osage", "nl": "Osage", - "ru": "оседжи", + "ru": "Оседжи", "sv": "osage", "_meta": { "dir": [ @@ -8620,7 +8599,6 @@ "pl": "Elfdalski", "pt": "Älvdalsmål", "ru": "эльвдальский диалект", - "sl": "elfdalščina", "sv": "älvdalska", "_meta": { "dir": [ @@ -8632,17 +8610,17 @@ "ca": "panjabi (Shahmukhi)", "cs": "paňdžábština (šáhmukhí)", "da": "Punjabi (Shahmukhi)", - "de": "Panjabi (Schahmuchi)", + "de": "Panjabi (Shahmukhi)", "en": "Punjabi (Shahmukhi)", "eo": "panĝaba lingvo (Ŝahmuĥi-ortografio)", - "es": "punyabí (Shahmuji)", + "es": "panyabí (Shahmuji)", "eu": "Punjabera (Shahmukhi)", - "fi": "pandžabi (Shahmukhi)", + "fi": "punjabin kieli (Shahmukhi)", "fr": "pendjabi (shahmukhi)", "gl": "lingua punjabi (Shahmukhi)", "he": "פנג'אבי (אלפבית שאהמוקי)", "hu": "pandzsábi (Shahmukhi)", - "id": "Punjab (Abjad Shahmukhi)", + "id": "Bahasa Punjab (Abjad Shahmukhi)", "it": "punjabi (Shahmukhī)", "ja": "パンジャーブ語 (シャームキー文字)", "nb_NO": "panjabi (Shahmukhi)", @@ -8651,7 +8629,7 @@ "pt": "Língua panjabi (Shahmukhi)", "ru": "панджаби (Шахмукхи)", "sl": "pandžabščina (šahmuki)", - "sv": "punjabi (shahmukhi)", + "sv": "punjabi (Shahmukhi)", "zh_Hans": "旁遮普语 (Shahmukhi)", "zh_Hant": "旁遮普語 (Shahmukhi)", "_meta": { @@ -8670,7 +8648,7 @@ "eo": "pangasina lingvo", "es": "pangasinense", "eu": "pagasinanera", - "fi": "pangasinan", + "fi": "Pangasinanin kieli", "fr": "pangassinais", "gl": "Lingua pangasinesa", "hu": "pangasinan", @@ -8681,8 +8659,7 @@ "nl": "Pangasinan", "pl": "Język pangasinan", "pt": "Língua pangasinesa", - "ru": "пангасинанский язык", - "sl": "pangasinščina", + "ru": "Пангасинанский язык", "sv": "pangasinan", "zh_Hans": "邦阿西楠语", "_meta": { @@ -8700,12 +8677,12 @@ "eo": "Papiamento", "es": "papiamento", "eu": "Papiamento", - "fi": "papiamentu", + "fi": "Papiamentu", "fr": "papiamento", "gl": "Papiamento", "he": "פאפיאמנטו", "hu": "papiamentu", - "id": "Papiamento", + "id": "Bahasa Papiamento", "it": "lingua papiamento", "ja": "パピアメント語", "nb_NO": "papiamento", @@ -8713,7 +8690,7 @@ "pl": "Język papiamento", "pt": "Papiamento", "ru": "папьяменто", - "sl": "papiamento", + "sl": "Papiamento", "sv": "papiamento", "zh_Hans": "帕皮阿门托语", "zh_Hant": "帕皮阿門托語", @@ -8725,19 +8702,18 @@ }, "pcd": { "ca": "picard", - "cs": "pikardština", "da": "Pikardisk", "de": "Picardisch", "en": "Picard", "eo": "pikarda franca dialekto", "es": "picardo", "eu": "Pikardiera", - "fi": "picardi", + "fi": "Picardin kieli", "fr": "picard", "gl": "Lingua picarda", "he": "פיקארד", "hu": "pikárd", - "id": "Picardia", + "id": "Bahasa Picard", "it": "piccardo", "ja": "ピカルディ語", "nb_NO": "pikardisk", @@ -8761,7 +8737,7 @@ "eo": "pensilvangermana dialekto", "es": "alemán de Pensilvania", "eu": "Pennsylvaniako aleman", - "fi": "pennsylvaniansaksa", + "fi": "Pennsylvaniansaksa", "fr": "allemand de Pennsylvanie", "gl": "Alemán de Pensilvania", "hu": "pennsylvaniai német", @@ -8773,7 +8749,7 @@ "pl": "język niemiecki w Pensylwanii", "pt": "Alemão da Pensilvânia", "ru": "пенсильванско-немецкий диалект", - "sl": "pensilvanska nemščina", + "sl": "Pensilvanska nemščina", "sv": "pennsylvaniatyska", "_meta": { "dir": [ @@ -8798,7 +8774,6 @@ "pl": "plautdietsch", "pt": "Plautdietsch", "ru": "Немецко-платский диалект", - "sl": "menonitska nizka nemščina", "sv": "plautdietsch", "_meta": { "dir": [ @@ -8818,13 +8793,11 @@ "fr": "palatin", "gl": "Alemán do Palatinado", "hu": "pfalzi", - "id": "Jerman Palatinate", "it": "tedesco palatino", "ja": "プファルツ語", "nl": "Paltsisch", - "pl": "gwary palatynackie", + "pl": "Gwary palatynackie", "ru": "Пфальцский диалект", - "sl": "pfalška nemščina", "sv": "pfalziska", "_meta": { "dir": [ @@ -8854,7 +8827,6 @@ "pt_BR": "Língua pitcairnesa", "ru": "питкэрнский язык", "sv": "pitcairnesiska", - "zh_Hant": "皮特肯語", "_meta": { "dir": [ "left-to-right" @@ -8873,9 +8845,7 @@ "pl": "Język neosalomoński", "pt": "Língua pijin", "ru": "Пиджин Соломоновых Островов", - "sl": "salomonski pidžin", "sv": "pijin", - "zh_Hant": "皮京語", "_meta": { "dir": [ "left-to-right" @@ -8915,7 +8885,7 @@ "gl": "lingua polaca", "he": "פולנית", "hu": "lengyel", - "id": "bahasa Polandia", + "id": "bahasa Polski", "it": "polacco", "ja": "ポーランド語", "nb_NO": "polsk", @@ -8939,18 +8909,17 @@ }, "pms": { "ca": "piemontès", - "cs": "Piemontština", "de": "Piemontesisch", "en": "Piedmontese", "eo": "piemonta lingvo", "es": "piamontés", "eu": "Piemontera", - "fi": "piemonte", + "fi": "Piemonten kieli", "fr": "piémontais", "gl": "Lingua piemontesa", "he": "פיימונטית", "hu": "piemonti", - "id": "bahasa Piemonte", + "id": "Bahasa Piemonte", "it": "lingua piemontese", "ja": "ピエモンテ語", "nb_NO": "piemontesisk", @@ -8959,7 +8928,6 @@ "pt": "Língua piemontesa", "pt_BR": "Língua piemontesa", "ru": "пьемонтский язык", - "sl": "piemonteščina", "sv": "piemontesiska", "zh_Hans": "皮埃蒙特语", "zh_Hant": "皮埃蒙特語", @@ -8976,7 +8944,6 @@ "en": "Pontic Greek", "eo": "Ponta greka lingvo", "es": "griego póntico", - "fi": "pontoksenkreikka", "fr": "grec pontique", "gl": "Grego póntico", "hu": "pontoszi görög", @@ -8988,7 +8955,6 @@ "pl": "język pontyjski", "pt": "Grego do Ponto", "ru": "понтийский язык", - "sl": "pontščina", "sv": "pontisk grekiska", "zh_Hant": "旁狄希臘語", "_meta": { @@ -9010,7 +8976,7 @@ "gl": "Lingua prusiana antiga", "he": "פרוסית עתיקה", "hu": "óporosz", - "id": "Prusia Kuno", + "id": "Bahasa Prusia Kuno", "it": "antico prussiano", "ja": "プロシア語", "nb_NO": "gammelprøyssisk", @@ -9019,9 +8985,7 @@ "pt": "prussiano antigo", "pt_BR": "Prussiano antigo", "ru": "прусский язык", - "sl": "stara pruščina", "sv": "prusiska", - "zh_Hant": "普魯士語", "_meta": { "dir": [ "left-to-right" @@ -9037,7 +9001,7 @@ "eo": "paŝtuna lingvo", "es": "pastún", "eu": "paxtuera", - "fi": "paštu", + "fi": "paštun kieli", "fr": "pachto", "gl": "Lingua paxta", "he": "פשטו", @@ -9089,7 +9053,6 @@ "ru": "португальский язык", "sl": "portugalščina", "sv": "portugisiska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⴱⵓⵔⵜⵓⴳⴰⵍⵉⵜ", "zh_Hans": "葡萄牙语", "zh_Hant": "葡萄牙語", "_meta": { @@ -9197,9 +9160,7 @@ "pl": "Język kicze", "pt": "Língua quiché", "ru": "киче", - "sl": "kihejščina", "sv": "quiché", - "zh_Hant": "基切語", "_meta": { "dir": [ "left-to-right" @@ -9224,7 +9185,6 @@ "pl": "język maoryski Wysp Cooka", "pt": "Maori das Ilhas Cook", "ru": "кукский язык", - "sl": "cookovootoška maorščina", "sv": "rarotongesiska", "zh_Hant": "庫克羣島毛利人", "_meta": { @@ -9239,16 +9199,16 @@ "en": "Romagnol", "eo": "romanja lingvo", "es": "romañol", - "fi": "romagnoli", + "fi": "romagnolin kieli", "fr": "romagnol", "hu": "romagnai nyelv", - "id": "bahasa Romagna", + "id": "bahasa Romagnol", "it": "romagnolo", "ja": "ロマーニャ語", "nl": "Romagnools", "pt": "romagnol", "ru": "Романьольский язык", - "sl": "romanjščina", + "sl": "romanjolščina", "sv": "romagnol", "zh_Hans": "罗马涅语", "zh_Hant": "羅馬涅語", @@ -9263,7 +9223,7 @@ "de": "Tarifit", "en": "Tarifit", "es": "rifeño", - "eu": "Tarifit", + "eu": "Tmaziɣt", "fi": "Tarifit", "fr": "rifain", "gl": "Lingua rifeña", @@ -9276,12 +9236,14 @@ "ru": "Рифский язык", "sl": "tarifit", "sv": "rif", - "zgh": "ⵜⴰⵔⵉⴼⵉⵜ", "zh_Hans": "里夫语", "zh_Hant": "里夫語", "_meta": { "dir": [ - "left-to-right" + "right-to-left", + "left-to-right", + "top-to-bottom", + "bottom-to-top" ] } }, @@ -9290,7 +9252,7 @@ "en": "Rakhine", "fr": "arakanais", "gl": "Lingua arakanesa", - "id": "Rakhine", + "id": "bahasa Rakhine", "ja": "ラカイン語", "nl": "Arakanees", "pl": "Język arakański", @@ -9330,7 +9292,6 @@ "ru": "романшский язык", "sl": "retoromanščina", "sv": "rätoromanska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵔⵓⵎⴰⵏⵛⵜ", "_meta": { "countries": [ "CH" @@ -9349,7 +9310,6 @@ "ja": "カルパティア・ロマ語", "nl": "Karpathisch-Romani", "ru": "Карпатские диалекты цыганского языка", - "sl": "karpatska romščna", "sv": "centralromani", "_meta": { "dir": [ @@ -9366,12 +9326,12 @@ "eo": "cigana lingvo", "es": "romaní", "eu": "erromaniera", - "fi": "romani", + "fi": "romanikieli", "fr": "romani", "gl": "lingua romaní", "he": "רומאני", "hu": "cigány nyelv", - "id": "bahasa Romani", + "id": "Bahasa Romani", "it": "romaní", "ja": "ロマ語", "nb_NO": "romanés", @@ -9396,7 +9356,7 @@ "eo": "burunda lingvo", "es": "kirundi", "eu": "kirundi", - "fi": "kirundi", + "fi": "Kirundi", "fr": "kirundi", "gl": "Lingua kirundi", "he": "קירונדי", @@ -9409,9 +9369,7 @@ "pl": "język rundi", "pt": "Língua kirundi", "ru": "рунди", - "sl": "rundščina", "sv": "kirundi", - "zh_Hans": "基隆迪语", "_meta": { "countries": [ "BI" @@ -9435,7 +9393,7 @@ "gl": "lingua romanesa", "he": "רומנית", "hu": "román", - "id": "bahasa Rumania", + "id": "Rumania", "it": "romeno", "ja": "ルーマニア語", "nb_NO": "rumensk", @@ -9482,7 +9440,6 @@ "ru": "русский язык", "sl": "ruščina", "sv": "ryska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵔⵓⵙⵉⵜ", "zh_Hans": "俄语", "zh_Hant": "俄語", "_meta": { @@ -9532,8 +9489,8 @@ "rup": { "ca": "aromanès", "cs": "arumunština", - "da": "aromunsk", - "de": "Aromunische Sprache", + "da": "Aromunsk", + "de": "Aromunisch", "en": "Aromanian", "eo": "arumana lingvo", "es": "arumano", @@ -9543,8 +9500,8 @@ "gl": "Lingua arromanesa", "he": "ארומנית", "hu": "aromán", - "id": "Aromania", - "it": "Lingua arumena", + "id": "Bahasa Arumania", + "it": "arumeno", "ja": "アルーマニア語", "nb_NO": "arumensk", "nl": "Aroemeens", @@ -9568,7 +9525,7 @@ "eo": "ruanda lingvo", "es": "kiñaruanda", "eu": "kinyaruanda", - "fi": "ruanda", + "fi": "ruandan kieli", "fr": "kinyarwanda", "gl": "Lingua ruanda", "he": "קינירואנדה", @@ -9581,9 +9538,7 @@ "pl": "język ruanda", "pt": "Língua kinyarwanda", "ru": "руанда", - "sl": "ruandščina", "sv": "rwanda", - "zh_Hans": "卢旺达语", "zh_Hant": "盧安達語", "_meta": { "countries": [ @@ -9606,15 +9561,14 @@ "gl": "Lingua okinawana", "he": "השפה האוקינאווית", "hu": "okinavai nyelv", - "id": "Okinawa", + "id": "Bahasa Okinawa", "it": "lingua di Okinawa", "ja": "沖縄語", "nb_NO": "Okinawa", "nl": "Okinawaans", "pl": "Język okinawski", "pt": "okinawano", - "ru": "окинавский язык", - "sl": "okinavščina", + "ru": "Окинавский язык", "sv": "okinawianska", "zh_Hans": "冲绳语", "zh_Hant": "沖繩語", @@ -9639,7 +9593,7 @@ "gl": "Lingua sakha", "he": "סאחה", "hu": "jakut", - "id": "bahasa Yakut", + "id": "Bahasa Yakut", "it": "sacha", "ja": "サハ語", "nb_NO": "sakha", @@ -9647,7 +9601,6 @@ "pl": "Język jakucki", "pt": "Língua iacuta", "ru": "якутский язык", - "sl": "jakutščina", "sv": "jakutiska", "_meta": { "dir": [ @@ -9664,12 +9617,12 @@ "eo": "santala lingvo", "es": "idioma santalí", "eu": "Santali", - "fi": "santali", + "fi": "Santalin kieli", "fr": "santâlî", "gl": "lingua santali", "he": "סנטלית", "hu": "szantáli", - "id": "Santal", + "id": "Bahasa Santali", "it": "santali", "ja": "サンタル語", "nb_NO": "Santali", @@ -9700,7 +9653,7 @@ "gl": "Lingua sarda", "he": "סרדו", "hu": "szárd", - "id": "Sardinia", + "id": "Bahasa Sardinia", "it": "sardo", "ja": "サルデーニャ語", "nb_NO": "sardisk", @@ -9708,7 +9661,7 @@ "pl": "Język sardyński", "pt": "Língua sarda", "ru": "сардинский язык", - "sl": "sardinščina", + "sl": "Sardinščina", "sv": "sardiska", "zh_Hans": "撒丁语", "zh_Hant": "薩丁尼亞語", @@ -9732,7 +9685,7 @@ "gl": "Lingua siciliana", "he": "סיציליאנית", "hu": "szicíliai", - "id": "Sisilia", + "id": "Bahasa Sisilia", "it": "siciliano", "ja": "シチリア語", "nb_NO": "siciliansk", @@ -9758,12 +9711,12 @@ "eo": "skota lingvo", "es": "escocés", "eu": "eskoziera", - "fi": "skotti", + "fi": "Skotin kieli", "fr": "scots", - "gl": "Lingua scots", + "gl": "Lingua escocesa", "he": "סקוטית", "hu": "scots", - "id": "bahasa Skots", + "id": "Bahasa Scots", "it": "lingua scots", "ja": "スコットランド語", "nb_NO": "skotsk", @@ -9792,13 +9745,13 @@ "gl": "Lingua sassaresa", "he": "סאסארזה", "hu": "sassari", - "id": "Sassari", - "it": "lingua sassarese", + "id": "Bahasa Sassari", + "it": "(lingua) sassarese", "ja": "サッサリ・サルデーニャ語", "nl": "Sassarees", "pl": "Dialekt sassarski", "ru": "сассарский язык", - "sl": "sasarščina", + "sl": "Sasarščina", "sv": "sassaresiska", "zh_Hans": "萨萨里语", "zh_Hant": "薩薩里語", @@ -9817,7 +9770,7 @@ "eo": "Sudaj Kurdaj dialektoj", "fr": "kurde du Sud", "he": "כורדית דרומית", - "id": "Kurdi Selatan", + "id": "Bahasa Kurdi Selatan", "it": "lingua curda meridionale", "ja": "南部クルド語", "nl": "Zuid-Koerdisch", @@ -9825,7 +9778,6 @@ "pt": "Curdo meridional", "pt_BR": "Curdo meridional", "ru": "южнокурдский язык", - "sl": "južna kurdščina", "sv": "sydkurdiska", "zh_Hans": "南库尔德语", "zh_Hant": "南庫德語", @@ -9849,7 +9801,6 @@ "gl": "Lingua saami setentrional", "he": "סאמי צפונית", "hu": "északi számi", - "id": "Sami Utara", "it": "sami settentrionale", "ja": "北部サーミ語", "nb_NO": "nordsamisk", @@ -9882,7 +9833,6 @@ "pl": "Język seri", "pt": "Língua seri", "ru": "Сери", - "sl": "serijščina", "sv": "seri", "zh_Hant": "塞裏語", "_meta": { @@ -9915,7 +9865,7 @@ "eo": "sangoa lingvo", "es": "idioma sango", "eu": "Sango", - "fi": "sango", + "fi": "Sango", "fr": "sango", "gl": "Lingua sango", "he": "סאנגו", @@ -9941,47 +9891,14 @@ ] } }, - "sh": { - "ca": "serbocroat", - "cs": "srbochorvatština", - "da": "serbokroatisk", - "de": "Serbokroatisch", - "en": "Serbo-Croatian", - "eo": "serbokroata lingvo", - "es": "serbocroata", - "eu": "Serbokroaziera", - "fi": "serbokroaatti", - "fr": "serbo-croate", - "gl": "Lingua serbocroata", - "he": "סרבו-קרואטית", - "hu": "szerbhorvát", - "id": "bahasa Serbo-Kroasia", - "it": "serbo-croato", - "ja": "セルビア・クロアチア語", - "nb_NO": "serbokroatisk", - "nl": "Servo-Kroatisch", - "pl": "język serbsko-chorwacki", - "pt": "Língua servo-croata", - "pt_BR": "Língua servo-croata", - "ru": "сербохорватский язык", - "sl": "srbohrvaščina", - "sv": "serbokroatiska", - "zh_Hans": "塞尔维亚-克罗地亚语", - "zh_Hant": "塞爾維亞-克羅地亞語", - "_meta": { - "dir": [ - "left-to-right" - ] - } - }, "shi": { "ca": "taixelhit", "cs": "tašelhit", "de": "Taschelhit", - "en": "Tachelhit", + "en": "Shilha", "eo": "ŝelha lingvo", "es": "chilha", - "fi": "tašelhit", + "fi": "Tašelhit", "fr": "chleuh", "gl": "Lingua shilha", "he": "תשלחית", @@ -9994,12 +9911,13 @@ "ru": "Шильхские языки", "sl": "tašelhit", "sv": "tachelhit", - "zgh": "ⵜⴰⵛⵍⵃⵉⵜ", "zh_Hans": "施卢赫语", "zh_Hant": "施盧赫語", "_meta": { "dir": [ "left-to-right", + "top-to-bottom", + "bottom-to-top", "right-to-left" ] } @@ -10010,10 +9928,10 @@ "en": "Shan", "eo": "ŝana lingvo", "es": "shan", - "fi": "shan", + "fi": "Shanin kieli", "fr": "shan", "gl": "Lingua shan", - "id": "Shan", + "id": "Bahasa Shan", "it": "lingua shan", "ja": "シャン語", "nl": "Shan", @@ -10021,7 +9939,6 @@ "pt": "língua shan", "pt_BR": "Língua shan", "ru": "шанский язык", - "sl": "šanščina", "sv": "shan", "zh_Hans": "掸语", "zh_Hant": "撣語", @@ -10045,12 +9962,13 @@ "pl": "język chaouia", "pt": "Língua chaouis", "ru": "Шавия", - "sl": "šavijščina", "sv": "shawiya", "_meta": { "dir": [ + "right-to-left", "left-to-right", - "right-to-left" + "top-to-bottom", + "bottom-to-top" ] } }, @@ -10063,7 +9981,7 @@ "eo": "sinhala lingvo", "es": "cingalés", "eu": "Sinhala", - "fi": "sinhali", + "fi": "Sinhali", "fr": "singhalais", "gl": "Lingua cingalesa", "he": "סינהלית", @@ -10077,7 +9995,7 @@ "pt": "Língua cingalesa", "pt_BR": "Língua cingalesa", "ru": "сингальский язык", - "sl": "singalščina", + "sl": "sinhalščina", "sv": "singalesiska", "zh_Hant": "僧伽羅語", "_meta": { @@ -10122,9 +10040,7 @@ "fi": "kiltinänsaame", "fr": "same de Kildin", "gl": "Lingua saami de Kildin", - "he": "סאמית קילדינית", "hu": "kildini számi", - "id": "Sami Kildin", "it": "lingua sami di Kildin", "ja": "キルディン・サーミ語", "nb_NO": "kildinsamisk", @@ -10159,9 +10075,7 @@ "pl": "język ter", "pt": "sami de Ter", "ru": "йоканьгско-саамский язык", - "sl": "terska samijščina", "sv": "tersamiska", - "zh_Hant": "特爾薩米語", "_meta": { "dir": [ "left-to-right" @@ -10178,7 +10092,6 @@ "fi": "uumajansaame", "fr": "same d'Ume", "gl": "Lingua saami de Ume", - "he": "סאמית אומית", "hu": "umei számi", "it": "lingua sami di Ume", "ja": "ウーメ・サーミ語", @@ -10220,7 +10133,6 @@ "ru": "словацкий язык", "sl": "slovaščina", "sv": "slovakiska", - "zh_Hans": "斯洛伐克语", "zh_Hant": "斯洛伐克語", "_meta": { "countries": [ @@ -10283,7 +10195,6 @@ "nl": "Silezisch-Duits", "pl": "dialekt śląski języka niemieckiego", "ru": "силезские диалекты немецкого языка", - "sl": "šlezijska nemščina", "sv": "schlesisk tyska", "zh_Hans": "西里西亚语", "zh_Hant": "西里西亞語", @@ -10302,12 +10213,12 @@ "eo": "samoa lingvo", "es": "samoano", "eu": "Samoera", - "fi": "samoa", + "fi": "samoan kieli", "fr": "samoan", "gl": "Lingua samoana", "he": "סמואית", "hu": "szamoai", - "id": "Samoa", + "id": "Bahasa Samoa", "it": "samoano", "ja": "サモア語", "nb_NO": "samoansk", @@ -10315,10 +10226,7 @@ "pl": "język samoański", "pt": "Língua samoana", "ru": "самоанский язык", - "sl": "samojščina", "sv": "samoanska", - "zh_Hans": "萨摩亚语", - "zh_Hant": "薩摩亞語", "_meta": { "countries": [ "WS" @@ -10339,9 +10247,8 @@ "fi": "eteläsaame", "fr": "same du Sud", "gl": "Lingua saami meridional", - "he": "סאמי דרומית", "hu": "déli számi", - "id": "bahasa Sami Selatan", + "id": "Bahasa Sami Selatan", "it": "sami meridionale", "ja": "南部サーミ語", "nb_NO": "sørsamisk", @@ -10370,9 +10277,7 @@ "fi": "luulajansaame", "fr": "same de Lule", "gl": "Lingua saami de Lule", - "he": "סאמית לולית", "hu": "lulei számi", - "id": "Sami Lule", "it": "lingua sami di Lule", "ja": "ルレ・サーミ語", "nb_NO": "lulesamisk", @@ -10402,9 +10307,7 @@ "fi": "inarinsaame", "fr": "same d'Inari", "gl": "Lingua saami de Inari", - "he": "סאמית אינארית", "hu": "inari számi", - "id": "Sami Inari", "it": "sami di Inari", "ja": "イナリ・サーミ語", "nb_NO": "enaresamisk", @@ -10432,7 +10335,6 @@ "fi": "koltansaame", "fr": "same skolt", "gl": "Lingua saami de Skolt", - "he": "סאמית סקולטית", "hu": "kolta számi", "it": "lingua sami skolt", "ja": "スコルト・サーミ語", @@ -10442,7 +10344,7 @@ "pt": "kíngua sami de Skolt", "pt_BR": "Língua sami de Skolt", "ru": "колтта-саамский язык", - "sl": "skoltska samijščina", + "sl": "sokltska samijščina", "sv": "skoltsamiska", "zh_Hans": "斯科尔特萨米语", "zh_Hant": "斯科爾特薩米語", @@ -10459,8 +10361,7 @@ "en": "Shona", "eo": "Ŝona lingvo", "es": "shona", - "eu": "Shonera", - "fi": "šona", + "fi": "šonan kieli", "fr": "shona", "gl": "Lingua shona", "he": "שונה", @@ -10473,7 +10374,6 @@ "pl": "Język shona", "pt": "Língua chona", "ru": "шона", - "sl": "šonščina", "sv": "shona", "zh_Hant": "修納語", "_meta": { @@ -10494,12 +10394,12 @@ "eo": "somala lingvo", "es": "somalí", "eu": "somaliera", - "fi": "somali", + "fi": "somalin kieli", "fr": "somali", "gl": "Lingua somalí", "he": "סומלית", "hu": "szomáli", - "id": "bahasa Somali", + "id": "Bahasa Somali", "it": "somalo", "ja": "ソマリ語", "nb_NO": "somali", @@ -10508,7 +10408,6 @@ "pt": "Língua somali", "pt_BR": "Língua somali", "ru": "сомалийский язык", - "sl": "somalščina", "sv": "somaliska", "zh_Hans": "索马里语", "zh_Hant": "索馬利亞語", @@ -10522,13 +10421,12 @@ } }, "sou": { - "ca": "tailandès meridional", "de": "Südthailändisch", "en": "Southern Thai", "eo": "sud-taja lingvo", "fr": "thaï du Sud", "he": "תאית דרומית", - "id": "Thai Selatan", + "id": "Bahasa Thai Selatan", "ja": "南タイ語", "nl": "Zuidelijk Thai", "pl": "Język południowotajski", @@ -10554,10 +10452,10 @@ "eu": "albaniera", "fi": "albania", "fr": "albanais", - "gl": "lingua albanesa", + "gl": "Lingua albanesa", "he": "אלבנית", "hu": "albán", - "id": "Albania", + "id": "Bahasa Albania", "it": "albanese", "ja": "アルバニア語", "nb_NO": "albansk", @@ -10568,7 +10466,6 @@ "ru": "албанский язык", "sl": "albanščina", "sv": "albanska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵍⴱⴰⵏⵉⵜ", "zh_Hans": "阿尔巴尼亚语", "zh_Hant": "阿爾巴尼亞語", "_meta": { @@ -10590,7 +10487,7 @@ "eo": "srana lingvo", "es": "sranan tongo", "eu": "Sranan Tongo", - "fi": "sranantongo", + "fi": "Sranantongo", "fr": "sranan", "gl": "Sranan tongo", "he": "סרנן טונגו", @@ -10603,7 +10500,7 @@ "pl": "sranan tongo", "pt": "Sranan", "ru": "cранан-тонго", - "sl": "surinamščina", + "sl": "Surinamščina", "sv": "sranan", "zh_Hans": "苏里南语", "zh_Hant": "蘇利南語", @@ -10618,7 +10515,6 @@ "en": "Sirionó", "es": "sirionó", "fr": "sirionó", - "gl": "Lingnua sirionó", "ja": "シリオノ語", "nb_NO": "sirionó", "nl": "Sirionó", @@ -10639,12 +10535,12 @@ "eo": "svazia lingvo", "es": "suazi", "eu": "swaziera", - "fi": "swazi", + "fi": "swazin kieli", "fr": "swati", "gl": "Lingua suazi", "he": "סווזי", "hu": "szvázi", - "id": "Swazi", + "id": "Bahasa Swati", "it": "swati", "ja": "スワジ語", "nb_NO": "swazi", @@ -10653,9 +10549,8 @@ "pt": "língua suázi", "pt_BR": "língua suázi", "ru": "свати", - "sl": "svazijščina", "sv": "siswati", - "zh_Hans": "斯瓦蒂语", + "zh_Hans": "斯威士语", "zh_Hant": "史瓦濟語", "_meta": { "countries": [ @@ -10676,12 +10571,12 @@ "eo": "sota lingvo", "es": "sesotho", "eu": "sothoera", - "fi": "eteläsotho", + "fi": "eteläsothon kieli", "fr": "sotho du Sud", "gl": "Lingua sotho", "he": "ססוטו", "hu": "déli szoto", - "id": "Sotho", + "id": "Bahasa Sesotho", "it": "sotho del sud", "ja": "ソト語", "nb_NO": "sotho", @@ -10692,7 +10587,6 @@ "ru": "сесото", "sl": "sesotščina", "sv": "sesotho", - "zh_Hant": "索托語", "_meta": { "countries": [ "LS", @@ -10715,7 +10609,7 @@ "fr": "shelta", "gl": "Shelta", "he": "שלטה", - "id": "Shelta", + "id": "bahasa Shelta", "it": "lingua shelta", "ja": "シェルタ語", "nb_NO": "Shelta", @@ -10724,7 +10618,6 @@ "pt": "Língua shelta", "ru": "шелта", "sv": "shelta", - "zh_Hant": "雪爾塔語", "_meta": { "dir": [ "left-to-right" @@ -10751,7 +10644,6 @@ "pl": "Język fryzyjski saterlandzki", "pt": "frisão oriental", "ru": "Затерландский фризский язык", - "sl": "saterska frizijščina", "sv": "saterfrisiska", "zh_Hans": "萨特弗里斯兰语", "zh_Hant": "薩特菲士蘭語", @@ -10775,7 +10667,7 @@ "gl": "Sunda", "he": "סונדנזית", "hu": "szundai", - "id": "bahasa Sunda", + "id": "Sunda", "it": "sunda", "ja": "スンダ語", "nb_NO": "sundanesisk", @@ -10786,8 +10678,6 @@ "ru": "сунданский язык", "sl": "sundanščina", "sv": "sunda", - "zh_Hans": "巽他语", - "zh_Hant": "巽他語", "_meta": { "dir": [ "left-to-right" @@ -10845,7 +10735,7 @@ "gl": "Lingua suahili", "he": "סוואהילי", "hu": "szuahéli", - "id": "Swahili", + "id": "Bahasa Swahili", "it": "swahili", "ja": "スワヒリ語", "nb_NO": "swahili", @@ -10854,9 +10744,8 @@ "pt": "Língua suaíli", "pt_BR": "língua suaíli", "ru": "суахили", - "sl": "svahili", + "sl": "Svahili", "sv": "swahili", - "zh_Hans": "斯瓦希里语", "zh_Hant": "史瓦希利語", "_meta": { "countries": [ @@ -10866,13 +10755,12 @@ "UG" ], "dir": [ - "left-to-right" + "left-to-right", + "right-to-left" ] } }, "syl": { - "ca": "sileti", - "cs": "Silotčtina", "de": "Sylheti", "en": "Sylheti", "es": "Idioma sylheti", @@ -10880,16 +10768,12 @@ "fr": "sylheti", "gl": "Lingua sylheti", "he": "סילהטית", - "hu": "sziloti", - "id": "Sylhet", - "it": "silotese", + "it": "lingua silotica", "ja": "シレット語", "nb_NO": "Sylhetti", "nl": "Sylheti", "pl": "język syloti", - "pt": "Siroto", "ru": "силхетский язык", - "sl": "silhetščina", "sv": "syloti", "zh_Hans": "锡尔赫特语", "zh_Hant": "錫爾赫特語", @@ -10913,7 +10797,7 @@ "gl": "Lingua silesiana", "he": "שלזית", "hu": "sziléziai", - "id": "Silesia", + "id": "bahasa Silesia", "it": "slesiano", "ja": "シレジア語", "nb_NO": "schlesisk", @@ -10923,8 +10807,6 @@ "ru": "силезский язык", "sl": "šlezijščina", "sv": "schlesiska", - "zh_Hans": "西里西亚语", - "zh_Hant": "西里西亞語", "_meta": { "dir": [ "left-to-right" @@ -10935,7 +10817,6 @@ "ca": "sakizaya", "cs": "sakizayština", "en": "Sakizaya", - "fi": "sakizaya", "fr": "sakizaya", "gl": "Lingua sakizaya", "id": "Bahasa Sakizaya", @@ -10965,7 +10846,7 @@ "gl": "Lingua támil", "he": "טמילית", "hu": "tamil", - "id": "Tamil", + "id": "Bahasa Tamil", "it": "tamil", "ja": "タミル語", "nb_NO": "tamilsk", @@ -10999,13 +10880,12 @@ "fr": "atayal", "gl": "Lingua atayal", "hu": "atajal", - "id": "Atayal", + "id": "Bahasa Atayal", "it": "lingua atayal", "ja": "タイヤル語", "nl": "Atayal", "pt": "Língua atayal", "ru": "атаяльский язык", - "sl": "atajalščina", "sv": "atayal", "zh_Hans": "泰雅语", "zh_Hant": "泰雅語", @@ -11023,7 +10903,7 @@ "eo": "tulua lingvo", "es": "tulu", "eu": "Tulu", - "fi": "tulu", + "fi": "Tulun kieli", "fr": "toulou", "gl": "Lingua tulu", "he": "טולו", @@ -11084,12 +10964,12 @@ "eo": "tetuna lingvo", "es": "Idioma tetun", "eu": "Tetum", - "fi": "tetum", + "fi": "Tetumin kieli", "fr": "tétoum", "gl": "Tetún", "he": "טטום", "hu": "tetum", - "id": "Tetun", + "id": "Tetum", "it": "tetum", "ja": "テトゥン語", "nb_NO": "tetum", @@ -11097,7 +10977,6 @@ "pl": "język tetum", "pt": "língua tétum", "ru": "тетум", - "sl": "tetumščina", "sv": "tetum", "_meta": { "dir": [ @@ -11119,7 +10998,7 @@ "gl": "Lingua taxica", "he": "טג'יקית", "hu": "tádzsik", - "id": "bahasa Tajik", + "id": "Tajik", "it": "tagico", "ja": "タジク語", "nb_NO": "tadsjikisk", @@ -11130,8 +11009,6 @@ "ru": "таджикский язык", "sl": "tadžiščina", "sv": "tadzjikiska", - "zh_Hans": "塔吉克语", - "zh_Hant": "塔吉克語", "_meta": { "countries": [ "TJ" @@ -11151,7 +11028,7 @@ "eo": "taja lingvo", "es": "tailandés", "eu": "Thailandiera", - "fi": "thai", + "fi": "thain kieli", "fr": "thaï", "gl": "lingua tailandesa", "he": "תאית", @@ -11167,7 +11044,6 @@ "ru": "тайский язык", "sl": "tajščina", "sv": "thai", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵜⴰⵢⵍⴰⵏⴷⵉⵜ", "zh_Hans": "泰语", "zh_Hant": "泰語", "_meta": { @@ -11193,7 +11069,7 @@ "gl": "Lingua tigriña", "he": "תיגרינית", "hu": "tigrinya", - "id": "Tigrinya", + "id": "Bahasa Tigrinya", "it": "tigrino", "ja": "ティグリニャ語", "nb_NO": "tigrinja", @@ -11201,9 +11077,8 @@ "pl": "Język tigrinia", "pt": "Língua tigrínia", "ru": "тигринья", - "sl": "tigrinjščina", + "sl": "Tigrajščina", "sv": "tigrinska", - "zh_Hans": "提格雷尼亚语", "zh_Hant": "提格利尼亞語", "_meta": { "countries": [ @@ -11228,7 +11103,7 @@ "gl": "Lingua turcomá", "he": "טורקמנית", "hu": "türkmén", - "id": "Turkmen", + "id": "bahasa Turkmen", "it": "Turkmeno", "ja": "トルクメン語", "nb_NO": "turkmensk", @@ -11237,7 +11112,7 @@ "pt": "Língua turcomena", "pt_BR": "Língua turcomena", "ru": "туркменский язык", - "sl": "turkmenščina", + "sl": "Turkmenščina", "sv": "turkmeniska", "_meta": { "countries": [ @@ -11288,21 +11163,19 @@ "en": "Tlingit", "eo": "Tlingita", "es": "tlingit", - "fi": "tlingit", + "fi": "Tlingit", "fr": "tlingit", "hu": "tlingit", "id": "Bahasa Tlingit", "it": "lingua tlingit", "ja": "トリンギット語", - "nb_NO": "tlingit", + "nb_NO": "Tlingit", "nl": "Tlingit", "pl": "Język tlingit", "pt": "Língua tlingit", "pt_BR": "Língua tlingit", - "ru": "тлингитский язык", - "sl": "tlingitščina", + "ru": "Тлингитский язык", "sv": "tlingit", - "zh_Hant": "特林吉特語", "_meta": { "dir": [ "left-to-right" @@ -11311,13 +11184,12 @@ }, "tly": { "ca": "talixi", - "cs": "talyština", "de": "Talisch", "en": "Talysh", "eo": "taliŝa lingvo", "es": "talishi", "eu": "Talyshera", - "fi": "tališi", + "fi": "Tališin kieli", "fr": "talysh", "gl": "Lingua talysh", "he": "טליש", @@ -11329,7 +11201,6 @@ "pl": "język tałyski", "pt": "Língua talish", "ru": "талышский язык", - "sl": "tališčina", "sv": "talysj", "_meta": { "dir": [ @@ -11347,7 +11218,7 @@ "eo": "cvana lingvo", "es": "setsuana", "eu": "tswanera", - "fi": "tswana", + "fi": "tswanan kieli", "fr": "tswana", "gl": "Lingua tswana", "he": "סצוואנה", @@ -11363,7 +11234,6 @@ "ru": "тсвана", "sl": "cvanščina", "sv": "setswana", - "zh_Hans": "茨瓦纳语", "zh_Hant": "札那語", "_meta": { "countries": [ @@ -11375,6 +11245,39 @@ ] } }, + "to": { + "ca": "tongalès", + "cs": "tongánština", + "da": "tongansk", + "de": "Tongaisch", + "en": "Tongan", + "eo": "Tonga lingvo", + "es": "tongano", + "eu": "Tongera", + "fi": "Tongan kieli", + "fr": "tongien", + "gl": "Lingua tongana", + "he": "טונגאית", + "hu": "tongai", + "id": "Bahasa Tonga", + "it": "tongano", + "ja": "トンガ語", + "nb_NO": "Tongansk", + "nl": "Tongaans", + "pl": "Język tonga", + "pt": "Língua tonganesa", + "ru": "тонганский язык", + "sl": "tongovščina", + "sv": "tonganska", + "_meta": { + "countries": [ + "TO" + ], + "dir": [ + "left-to-right" + ] + } + }, "tpi": { "ca": "tok pisin", "cs": "Tok Pisin", @@ -11416,9 +11319,7 @@ "pl": "Turoyo", "pt": "Língua turoyo", "ru": "Туройо", - "sl": "turojoščina", "sv": "turoyo", - "zh_Hant": "圖羅尤語", "_meta": { "dir": [ "left-to-right", @@ -11428,10 +11329,10 @@ }, "trv": { "ca": "seediq", - "cs": "seedičtina", + "cs": "Seediq", "en": "Seediq", "eo": "sedeka lingvo", - "fi": "taroko", + "fi": "Taroko", "fr": "seediq", "gl": "Lingua seediq", "id": "Bahasa Seediq", @@ -11457,7 +11358,7 @@ "eo": "conga lingvo", "es": "tsonga", "eu": "tsongera", - "fi": "tsonga", + "fi": "tsongan kieli", "fr": "tsonga", "gl": "Lingua tsonga", "he": "צונגה", @@ -11471,7 +11372,6 @@ "pt": "língua tsonga", "pt_BR": "língua tsonga", "ru": "тсонга", - "sl": "tsonga", "sv": "tsonga", "zh_Hans": "聪加语", "zh_Hant": "聰加語", @@ -11508,7 +11408,7 @@ "pt": "Língua tártara", "pt_BR": "Língua tártara", "ru": "татарский язык", - "sl": "tatarščina", + "sl": "Tatarščina", "sv": "tatariska", "zh_Hans": "鞑靼语", "zh_Hant": "韃靼語", @@ -11518,44 +11418,13 @@ ] } }, - "tu": { - "ca": "àrab tunisià", - "cs": "tuniština", - "da": "Tunesisk arabisk", - "de": "Tunesisch-Arabisch", - "en": "Tunisian Arabic", - "eo": "tunizia araba lingvo", - "es": "árabe tunecino", - "fi": "tunisianarabia", - "fr": "arabe tunisien", - "he": "ערבית תוניסאית", - "id": "Bahasa Arab Tunisia", - "it": "arabo tunisino", - "ja": "アラビア語チュニジア方言", - "nb_NO": "tunisisk arabisk", - "nl": "Tunesisch-Arabisch", - "pl": "tunezyjski", - "pt": "árabe tunisino", - "pt_BR": "Árabe tunisino", - "ru": "Тунисский диалект арабского языка", - "sl": "tunizijska arabščina", - "sv": "tunisisk arabiska", - "zh_Hans": "突尼斯阿拉伯语", - "zh_Hant": "突尼西亞阿拉伯語", - "_meta": { - "dir": [ - "left-to-right", - "right-to-left" - ] - } - }, "tum": { "ca": "tumbuka", "de": "Tumbuka", "en": "Tumbuka", "eo": "tumbuka lingvo", "es": "Idioma tumbuka", - "fi": "tumbuka", + "fi": "Tumbuka", "fr": "tumbuka", "gl": "Lingua tumbuka", "he": "שפת טומבוקה", @@ -11566,7 +11435,6 @@ "pl": "Język tumbuka", "pt": "Língua tumbuka", "ru": "Тумбука", - "sl": "tumbuščina", "sv": "tumbuka", "_meta": { "dir": [ @@ -11587,7 +11455,7 @@ "gl": "Lingua tuvalesa", "he": "טובאלית", "hu": "tuvalui", - "id": "Tuvalu", + "id": "Bahasa Tuvalu", "it": "lingua tuvaluana", "ja": "ツバル語", "nb_NO": "tuvalsk", @@ -11596,7 +11464,6 @@ "pt": "Língua tuvaluana", "pt_BR": "Língua tuvaluana", "ru": "тувалу", - "sl": "tuvalujščina", "sv": "tuvaluanska", "_meta": { "dir": [ @@ -11626,9 +11493,7 @@ "pt": "Língua twi", "pt_BR": "Língua twi", "ru": "чви", - "sl": "tvijščina", "sv": "twi", - "zh_Hant": "契維語", "_meta": { "dir": [ "left-to-right" @@ -11675,7 +11540,7 @@ "eo": "tuva lingvo", "es": "idioma tuvano", "eu": "Tuvera", - "fi": "tuva", + "fi": "tuvan kieli", "fr": "touvain", "gl": "Lingua tuvaniana", "he": "טובאנית", @@ -11689,9 +11554,7 @@ "pt": "Língua tuviniana", "pt_BR": "Língua tuviniana", "ru": "тувинский язык", - "sl": "tuvanščina", "sv": "tuvinska", - "zh_Hans": "图瓦语", "_meta": { "dir": [ "left-to-right" @@ -11712,15 +11575,15 @@ "nl": "Centraal Atlas-Tamazight", "pl": "Język tamazight", "ru": "Тамазигхтские языки", - "sl": "centralnoatlaški tamazigt", "sv": "tamazight", - "zgh": "ⵜⴰⵎⴰⵣⵉⵖⵜ ⵏ ⵡⴰⵟⵍⴰⵚ ⴰⵏⴰⵎⵎⴰⵙ", "zh_Hans": "中阿特拉斯柏柏尔语", "zh_Hant": "中阿特拉斯柏柏語", "_meta": { "dir": [ "right-to-left", - "left-to-right" + "left-to-right", + "top-to-bottom", + "bottom-to-top" ] } }, @@ -11733,12 +11596,12 @@ "eo": "udmurta lingvo", "es": "udmurto", "eu": "Udmurtera", - "fi": "udmurtti", + "fi": "udmurtin kieli", "fr": "oudmourte", "gl": "Lingua udmurta", "he": "אודמורטית", "hu": "udmurt", - "id": "Udmurt", + "id": "Bahasa Udmurt", "it": "udmurto", "ja": "ウドムルト語", "nb_NO": "udmurtisk", @@ -11747,7 +11610,6 @@ "pt": "Língua udmurte", "pt_BR": "Língua udmurte", "ru": "удмуртский язык", - "sl": "udmurtščina", "sv": "udmurtiska", "_meta": { "dir": [ @@ -11769,7 +11631,7 @@ "gl": "Lingua uigur", "he": "אויגורית", "hu": "ujgur", - "id": "Uighur", + "id": "bahasa Uyghur", "it": "uiguro", "ja": "ウイグル語", "nb_NO": "uigurisk", @@ -11839,7 +11701,7 @@ "gl": "Lingua usbeka", "he": "אוזבקית", "hu": "üzbég", - "id": "Uzbek", + "id": "bahasa Uzbek", "it": "uzbeco", "ja": "ウズベク語", "nb_NO": "usbekisk", @@ -11868,7 +11730,6 @@ "en": "Southern Uzbek", "eo": "sud-uzbeka lingvo", "fr": "ouzbek du Sud", - "id": "Uzbek Selatan", "ru": "Южноузбекский язык", "sv": "syduzbekiska", "zh_Hans": "南乌兹别克语", @@ -11886,7 +11747,7 @@ "eo": "venda lingvo", "es": "venda", "eu": "vendera", - "fi": "venda", + "fi": "vendan kieli", "fr": "venda", "gl": "Lingua venda", "he": "ונדה", @@ -11900,7 +11761,6 @@ "pt": "língua venda", "pt_BR": "língua venda", "ru": "венда", - "sl": "vendščina", "sv": "venda", "zh_Hans": "文达语", "zh_Hant": "文達語", @@ -11960,16 +11820,15 @@ "gl": "Lingua vepsa", "he": "ופס", "hu": "vepsze", - "id": "Veps", + "id": "Bahasa Veps", "it": "vepso", "ja": "ヴェプス語", "nb_NO": "vepsisk", "nl": "Wepsisch", "pl": "język wepski", - "pt": "língua vepes", + "pt": "Língua vepes", "pt_BR": "Língua vepes", "ru": "вепсский язык", - "sl": "vepščina", "sv": "vepsiska", "zh_Hans": "维普斯语", "zh_Hant": "維普斯語", @@ -11993,7 +11852,7 @@ "gl": "Lingua vietnamita", "he": "וייטנאמית", "hu": "vietnámi", - "id": "bahasa Vietnam", + "id": "Vietnam", "it": "vietnamita", "ja": "ベトナム語", "nb_NO": "vietnamesisk", @@ -12025,7 +11884,6 @@ "fi": "länsiflaami", "fr": "flamand occidental", "gl": "Flamengo occidental", - "he": "פלמית מערבית", "id": "Flam Barat", "it": "dialetto fiammingo occidentale", "ja": "西フラマン語", @@ -12052,7 +11910,6 @@ "ja": "マインフランク語", "nl": "Mainfrankisch", "ru": "Майнфранкские диалекты", - "sl": "majnskofrankovska namščina", "sv": "Main-frankiska", "_meta": { "dir": [ @@ -12080,7 +11937,6 @@ "pl": "Język wotycki", "pt": "vótico", "ru": "водский язык", - "sl": "votščina", "sv": "votiska", "zh_Hans": "瓦佳语", "zh_Hant": "瓦佳語", @@ -12101,9 +11957,8 @@ "fi": "võro", "fr": "võro", "gl": "Lingua võro", - "he": "וירו", "hu": "võro", - "id": "Võro", + "id": "Bahasa Võro", "it": "võro", "ja": "ヴォロ語", "nb_NO": "sørestisk", @@ -12111,7 +11966,6 @@ "pl": "język võro", "pt": "Língua võro", "ru": "выруский диалект", - "sl": "võro", "sv": "võro", "zh_Hans": "沃罗语", "_meta": { @@ -12129,12 +11983,12 @@ "eo": "valona lingvo", "es": "valón", "eu": "Valoniera", - "fi": "valloni", + "fi": "Valloni", "fr": "wallon", "gl": "Lingua valoa", "he": "ולונית", "hu": "vallon nyelv", - "id": "bahasa Walonia", + "id": "Bahasa Walloon", "it": "vallone", "ja": "ワロン語", "nb_NO": "vallonsk", @@ -12151,16 +12005,14 @@ } }, "wal": { - "ca": "wolayta", "de": "Wolaytta", - "en": "Wolayttattuwa", + "en": "Wolaytta", "es": "Idioma wolayta", "fi": "Wolaitta", "fr": "wolaita", "he": "וולאיטה", "it": "lingua wolaytta", "ja": "ウォライタ語", - "nb_NO": "Wolayttattuwa", "nl": "Wolayta", "pt": "Língua wolaytta", "ru": "Воламо", @@ -12181,11 +12033,11 @@ "es": "samareño", "eu": "samarera", "fi": "waray-waray", - "fr": "waray-waray", + "fr": "ouarayen", "gl": "Lingua waray-waray", "he": "ואריי-ואריי", "hu": "waray", - "id": "Waray", + "id": "Bahasa Waray-waray", "it": "waray-waray", "ja": "ワライ語", "nb_NO": "waray-waray", @@ -12194,9 +12046,7 @@ "pt": "língua waray-waray", "pt_BR": "Língua waray-waray", "ru": "варайский язык", - "sl": "varajščina", "sv": "waray-waray", - "zh_Hant": "瓦瑞語", "_meta": { "dir": [ "left-to-right" @@ -12221,7 +12071,6 @@ "pt": "Língua wakhi", "pt_BR": "Língua wakhi", "ru": "Ваханский язык", - "sl": "vahijščina", "sv": "wakhí", "_meta": { "dir": [ @@ -12239,12 +12088,12 @@ "eo": "soraba lingvo", "es": "sorbio", "eu": "Sorabiera", - "fi": "sorbi", + "fi": "Sorbi", "fr": "sorabe", "gl": "Lingua sorabia", "he": "שפות סורביות", "hu": "szorb", - "id": "Sorbia", + "id": "Bahasa Sorbia", "it": "sorabo", "ja": "ソルブ語", "nb_NO": "sorbisk", @@ -12275,7 +12124,6 @@ "pl": "Język uvea wschodni", "pt": "Língua wallisiana", "ru": "Уоллисский язык", - "sl": "vališčina", "sv": "walliska", "_meta": { "dir": [ @@ -12292,7 +12140,7 @@ "eo": "volofa lingvo", "es": "wólof", "eu": "Wolofera", - "fi": "wolof", + "fi": "wolofin kieli", "fr": "wolof", "gl": "lingua wolof", "he": "וולופית", @@ -12303,11 +12151,10 @@ "nb_NO": "wolof", "nl": "Wolof", "pl": "język wolof", - "pt": "Língua uolofe", + "pt": "Língua wolof", "ru": "волоф", "sl": "volofščina", "sv": "wolof", - "zh_Hant": "沃洛夫語", "_meta": { "countries": [ "SN" @@ -12326,7 +12173,7 @@ "eo": "vua lingvo", "es": "Chino wu", "eu": "Wu txinera", - "fi": "wu-kiina", + "fi": "Wu-kiina", "fr": "wu", "gl": "Lingua wu", "he": "סינית וו", @@ -12343,7 +12190,7 @@ "zh_Hant": "吳語", "_meta": { "dir": [ - "vertical right-to-left" + "top-to-bottom" ] } }, @@ -12352,7 +12199,7 @@ "cs": "vilamovština", "da": "vimisørisk", "de": "Wilmesaurisch", - "en": "Wymysorys", + "en": "Vilamovian", "eo": "vilamovica lingvo", "es": "vilamoviciano", "eu": "Wymysorys", @@ -12370,7 +12217,6 @@ "pt_BR": "Wymysorys", "ru": "вилямовский язык", "sv": "wymysöriska", - "zh_Hant": "維拉莫維安語", "_meta": { "dir": [ "left-to-right" @@ -12379,19 +12225,19 @@ }, "xh": { "ca": "xosa", - "cs": "xhoština", + "cs": "Xhoština", "da": "isiXhosa", "de": "IsiXhosa", "en": "Xhosa", "eo": "kosa lingvo", "es": "xhosa", "eu": "xhosera", - "fi": "xhosa", + "fi": "xhosan kieli", "fr": "xhosa", "gl": "Lingua xhosa", "he": "קוסה", "hu": "xhosza", - "id": "Xhosa", + "id": "Bahasa Xhosa", "it": "xhosa", "ja": "コサ語", "nb_NO": "xhosa", @@ -12435,7 +12281,6 @@ "pt": "Língua mingreliana", "pt_BR": "Língua mingreliana", "ru": "мегрельский язык", - "sl": "mingrelščina", "sv": "megreliska", "_meta": { "dir": [ @@ -12443,24 +12288,6 @@ ] } }, - "xsy": { - "ca": "saisiyat", - "en": "Saisiyat", - "fr": "saisiyat", - "id": "Saisiyat", - "it": "lingua saisiyat", - "ja": "サイシャット語", - "nl": "Saisiyat", - "pt": "Língua saisiyat", - "sv": "saisiyat", - "zh_Hans": "赛夏语", - "zh_Hant": "賽夏語", - "_meta": { - "dir": [ - "left-to-right" - ] - } - }, "yai": { "cs": "jaghnóbština", "de": "Jaghnobi", @@ -12479,7 +12306,6 @@ "pt": "Língua yaghnobi", "ru": "ягнобский язык", "sv": "yaghnobi", - "zh_Hant": "亞爾諾比語", "_meta": { "dir": [ "left-to-right" @@ -12533,7 +12359,6 @@ "nl": "Jenisch", "pt": "Língua yeniche", "ru": "Енишский язык", - "sl": "jeniščina", "sv": "jeniska", "_meta": { "dir": [ @@ -12581,7 +12406,7 @@ "eo": "joruba lingvo", "es": "yoruba", "eu": "jorubera", - "fi": "joruba", + "fi": "joruban kieli", "fr": "yoruba", "gl": "Lingua yoruba", "he": "יורובה", @@ -12596,7 +12421,6 @@ "ru": "йоруба", "sl": "jorubščina", "sv": "yoruba", - "zh_Hans": "约鲁巴语", "zh_Hant": "約魯巴語", "_meta": { "dir": [ @@ -12610,13 +12434,11 @@ "es": "yonaguni", "eu": "yonaguniera", "fr": "yonaguni", - "gl": "Lingua yonaguni", "id": "Bahasa Yonaguni", "it": "yonaguni", - "ja": "与那国語", + "ja": "与那国方言", "pt": "Língua Yonaguni", "ru": "Йонагунский язык", - "sl": "jonagunščina", "sv": "yonaguni", "zh_Hant": "與那國語", "_meta": { @@ -12645,7 +12467,6 @@ "nl": "Nenets", "pl": "język nieniecki", "ru": "ненецкий язык", - "sl": "nenščina", "sv": "nentsiska", "zh_Hans": "涅涅茨语", "zh_Hant": "涅涅茨語", @@ -12686,7 +12507,7 @@ "eo": "ĝuanga lingvo", "es": "chuang", "eu": "zhuangera", - "fi": "zhuang", + "fi": "Zhuangin kieli", "fr": "zhuang", "gl": "Linguas zhuang", "he": "ג'ואנג", @@ -12699,7 +12520,6 @@ "pl": "język zhuang", "pt": "Língua zhuang", "ru": "чжуанский язык", - "sl": "džuanski jeziki", "sv": "zhuang", "zh_Hans": "壮语", "zh_Hant": "壯語", @@ -12715,7 +12535,6 @@ "en": "Zeelandic", "eo": "zelanda lingvo", "es": "zelandés", - "fi": "seelanti", "fr": "zélandais", "gl": "Lingua zelandesa", "he": "זילנדית", @@ -12726,7 +12545,6 @@ "pl": "dialekt zelandzki", "pt": "zeêuws", "ru": "зеландский диалект", - "sl": "zelandščina", "sv": "zeeländska", "zh_Hans": "西兰语", "zh_Hant": "西蘭語", @@ -12738,19 +12556,18 @@ }, "zgh": { "ca": "amazic estàndard marroquí", - "de": "marokkanisches Amazigh", - "en": "Standard Moroccan Amazigh", + "de": "marokkanisches Tamazight", + "en": "Standard Moroccan Berber", "eo": "norma maroka tamaziĥta lingvo", "es": "Amazig estándar marroquí", - "fi": "vakioitu tamazight", + "fi": "Vakioitu tamazight", "fr": "amazighe standard marocain", "gl": "Amazigh estándar marroquí", "ja": "標準モロッコ・タマジクト語", - "nl": "Standaard Amazigh", + "nl": "Standaardtamazight", "ru": "Стандартный марокканский берберский язык", "sl": "knjižna maroška berberščina", "sv": "marockansk standardberbiska", - "zgh": "ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ ⵜⴰⵎⵖⵔⵉⴱⵉⵜ", "zh_Hans": "标准摩洛哥柏柏尔语", "zh_Hant": "標準摩洛哥柏柏語", "_meta": { @@ -12784,7 +12601,6 @@ "ru": "китайский язык", "sl": "kitajščina", "sv": "kinesiska", - "zgh": "ⵜⵓⵜⵍⴰⵢⵜ ⵜⴰⵛⵉⵏⵡⵉⵜ", "zh_Hans": "中文", "zh_Hant": "漢語", "_meta": { @@ -12792,8 +12608,8 @@ "CN" ], "dir": [ - "vertical right-to-left", - "left-to-right" + "left-to-right", + "top-to-bottom" ] } }, @@ -12806,7 +12622,7 @@ "eo": "minnana lingvo", "es": "chino min nan", "eu": "hegoaldeko min", - "fi": "minnan", + "fi": "Minnan", "fr": "minnan", "gl": "lingua min nam", "he": "מין דרומי", @@ -12826,7 +12642,7 @@ "zh_Hant": "閩南語", "_meta": { "dir": [ - "vertical right-to-left" + "top-to-bottom" ] } }, @@ -12843,7 +12659,7 @@ "gl": "chinés simplificado", "he": "סינית מפושטת", "hu": "egyszerűsített kínai", - "id": "Tionghoa Sederhana", + "id": "aksara Han sederhana", "it": "cinese semplificato", "ja": "簡体字中国語", "nb_NO": "forenklet kinesisk", @@ -12869,12 +12685,11 @@ "en": "Traditional Chinese", "eo": "ĉina lingvo de tradicia ortografio", "es": "chino tradicional", - "eu": "txinera tradizional", + "eu": "Txinera tradizional", "fi": "perinteinen kiina", "fr": "chinois traditionnel", "gl": "chinés tradicional", "he": "סינית מסורתית", - "id": "Tionghoa Tradisional", "it": "cinese tradizionale", "ja": "繁体字中国語", "nb_NO": "tradisjonell kinesisk", @@ -12906,7 +12721,7 @@ "gl": "Lingua zulú", "he": "זולו", "hu": "zulu", - "id": "Zulu", + "id": "Bahasa Zulu", "it": "zulu", "ja": "ズールー語", "nb_NO": "zulu", diff --git a/src/assets/schemas/layerconfigmeta.json b/src/assets/schemas/layerconfigmeta.json index c4094d5b5..9acf3d918 100644 --- a/src/assets/schemas/layerconfigmeta.json +++ b/src/assets/schemas/layerconfigmeta.json @@ -548,6 +548,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -1028,6 +1035,16 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "title", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "popupInFloatover" @@ -1582,6 +1599,16 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "titleIcons", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering" @@ -2481,6 +2508,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -2981,6 +3015,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "iconSize", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -3183,6 +3228,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -3683,6 +3735,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "anchor", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -3863,6 +3926,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -4363,6 +4433,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "rotation", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -4545,6 +4626,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -5045,6 +5133,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "label", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -5228,6 +5327,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -5728,6 +5834,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "labelCss", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -5916,6 +6033,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -6416,6 +6540,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "labelCssClasses", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -6599,6 +6734,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -7099,6 +7241,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "css", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -7282,6 +7435,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -7782,6 +7942,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "cssClasses", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -7972,6 +8143,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -8476,6 +8654,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "pitchAlignment", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "pointRendering", @@ -8667,6 +8856,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -9171,6 +9367,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "pointRendering", + "rotationAlignment", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "lineRendering" @@ -10946,6 +11153,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -11607,7 +11821,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -12276,6 +12490,16 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "tagRenderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "tagRenderings", @@ -12903,7 +13127,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -13597,6 +13821,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "tagRenderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "tagRenderings" @@ -14245,7 +14480,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -14939,6 +15174,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "tagRenderings", + "renderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "tagRenderings", @@ -15591,7 +15837,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -16310,6 +16556,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "tagRenderings", + "renderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "tagRenderings", @@ -16937,7 +17195,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -17631,6 +17889,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "tagRenderings", + "renderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "tagRenderings", @@ -18283,7 +18552,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -19002,6 +19271,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "tagRenderings", + "renderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "filter" diff --git a/src/assets/schemas/layoutconfigmeta.json b/src/assets/schemas/layoutconfigmeta.json index 3d159c8b8..00436acf4 100644 --- a/src/assets/schemas/layoutconfigmeta.json +++ b/src/assets/schemas/layoutconfigmeta.json @@ -1249,6 +1249,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -1624,6 +1631,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -2499,6 +2513,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -2999,6 +3020,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "title", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -3576,6 +3608,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "titleIcons", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -4497,6 +4540,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -5017,6 +5067,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "iconSize", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -5220,6 +5282,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -5740,6 +5809,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "anchor", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -5921,6 +6002,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -6441,6 +6529,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "rotation", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -6624,6 +6724,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -7144,6 +7251,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "label", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -7328,6 +7447,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -7848,6 +7974,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "labelCss", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -8037,6 +8175,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -8557,6 +8702,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "labelCssClasses", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -8741,6 +8898,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -9261,6 +9425,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "css", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -9445,6 +9621,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -9965,6 +10148,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "cssClasses", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -10156,6 +10351,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -10680,6 +10882,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "pitchAlignment", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -10872,6 +11086,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -11396,6 +11617,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "pointRendering", + "rotationAlignment", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -13212,6 +13445,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -13898,7 +14138,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -14592,6 +14832,17 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "tagRenderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -15244,7 +15495,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -15963,6 +16214,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "tagRenderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -16638,7 +16901,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -17357,6 +17620,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -18034,7 +18309,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -18778,6 +19053,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -19430,7 +19718,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -20149,6 +20437,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -20826,7 +21126,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -21570,6 +21870,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "tagRenderings", + "renderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -23034,6 +23347,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -23554,6 +23874,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "title", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -24154,6 +24486,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "titleIcons", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -25097,6 +25441,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -25637,6 +25988,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "iconSize", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -25841,6 +26205,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -26381,6 +26752,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "anchor", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -26563,6 +26947,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -27103,6 +27494,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "rotation", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -27287,6 +27691,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -27827,6 +28238,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "label", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -28012,6 +28436,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -28552,6 +28983,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "labelCss", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -28742,6 +29186,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -29282,6 +29733,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "labelCssClasses", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -29467,6 +29931,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -30007,6 +30478,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "css", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -30192,6 +30676,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -30732,6 +31223,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "cssClasses", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -30924,6 +31428,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -31468,6 +31979,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "pitchAlignment", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -31661,6 +32185,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false @@ -32205,6 +32736,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "pointRendering", + "rotationAlignment", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -34062,6 +34606,13 @@ "classes": { "description": "question: What css-classes should be applied to showing this attribute?\n\nA list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\n\nValues are split on ` ` (space)", "type": "string" + }, + "filter": { + "description": "This tagRendering can introduce this builtin filter", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ @@ -34773,7 +35324,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -35492,6 +36043,18 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "tagRenderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -36169,7 +36732,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -36913,6 +37476,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "tagRenderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -37615,7 +38191,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -38359,6 +38935,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "tagRenderings", + "renderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -39061,7 +39650,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -39830,6 +40419,20 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "tagRenderings", + "renderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -40507,7 +41110,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -41251,6 +41854,19 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "tagRenderings", + "renderings", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", @@ -41953,7 +42569,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -42722,6 +43338,20 @@ "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" }, + { + "path": [ + "layers", + "override", + "tagRenderings", + "renderings", + "override", + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" + }, { "path": [ "layers", diff --git a/src/assets/schemas/questionabletagrenderingconfigmeta.json b/src/assets/schemas/questionabletagrenderingconfigmeta.json index e01f1cf87..f5d15c1cd 100644 --- a/src/assets/schemas/questionabletagrenderingconfigmeta.json +++ b/src/assets/schemas/questionabletagrenderingconfigmeta.json @@ -583,7 +583,7 @@ "suggestions": [ { "if": "value=string", - "then": "string A simple piece of text" + "then": "string A simple piece of text which is at most 255 characters long" }, { "if": "value=text", @@ -1226,5 +1226,14 @@ }, "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" + }, + { + "path": [ + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" } ] \ No newline at end of file diff --git a/src/assets/schemas/tagrenderingconfigmeta.json b/src/assets/schemas/tagrenderingconfigmeta.json index 0b7ca62a4..2b3e2a767 100644 --- a/src/assets/schemas/tagrenderingconfigmeta.json +++ b/src/assets/schemas/tagrenderingconfigmeta.json @@ -455,5 +455,14 @@ }, "type": "string", "description": "A list of css-classes to apply to the entire tagRendering.\nThese classes are applied in 'answer'-mode, not in question mode\nThis is only for advanced users.\nValues are split on ` ` (space)" + }, + { + "path": [ + "filter" + ], + "required": false, + "hints": {}, + "type": "array", + "description": "This tagRendering can introduce this builtin filter" } ] \ No newline at end of file diff --git a/src/assets/translators.json b/src/assets/translators.json index 042abe2f4..9d17fdf87 100644 --- a/src/assets/translators.json +++ b/src/assets/translators.json @@ -1,7 +1,7 @@ { "contributors": [ { - "commits": 382, + "commits": 387, "contributor": "Pieter Vander Vennet" }, { @@ -21,11 +21,11 @@ "contributor": "Robin van der Linde" }, { - "commits": 70, + "commits": 72, "contributor": "mcliquid" }, { - "commits": 61, + "commits": 63, "contributor": "danieldegroot2" }, { @@ -69,9 +69,13 @@ "contributor": "Marco" }, { - "commits": 18, + "commits": 20, "contributor": "gallegonovato" }, + { + "commits": 18, + "contributor": "Patchanka64" + }, { "commits": 18, "contributor": "Max Spicer" @@ -84,10 +88,6 @@ "commits": 18, "contributor": "el_libre como el chaval" }, - { - "commits": 15, - "contributor": "Patchanka64" - }, { "commits": 15, "contributor": "macpac" @@ -116,6 +116,10 @@ "commits": 13, "contributor": "Joost" }, + { + "commits": 12, + "contributor": "hugoalh" + }, { "commits": 12, "contributor": "Ettore Atalan" @@ -124,6 +128,10 @@ "commits": 12, "contributor": "Piotr Strebski" }, + { + "commits": 11, + "contributor": "Manuel Tassi" + }, { "commits": 11, "contributor": "Jaime Marquínez Ferrándiz" @@ -132,10 +140,6 @@ "commits": 11, "contributor": "Túllio Franca" }, - { - "commits": 10, - "contributor": "Manuel Tassi" - }, { "commits": 10, "contributor": "brunnerpaul" @@ -162,7 +166,7 @@ }, { "commits": 9, - "contributor": "hugoalh" + "contributor": "Jeff Huang" }, { "commits": 9, @@ -188,10 +192,6 @@ "commits": 9, "contributor": "Jacque Fresco" }, - { - "commits": 8, - "contributor": "Jeff Huang" - }, { "commits": 8, "contributor": "Krzysztof Chorzempa" @@ -200,6 +200,10 @@ "commits": 8, "contributor": "Vinicius" }, + { + "commits": 7, + "contributor": "Franco" + }, { "commits": 7, "contributor": "NetworkedPoncho" @@ -256,10 +260,6 @@ "commits": 6, "contributor": "lvgx" }, - { - "commits": 5, - "contributor": "Franco" - }, { "commits": 5, "contributor": "Christian Schmidt" @@ -400,6 +400,10 @@ "commits": 3, "contributor": "SiegbjornSitumeang" }, + { + "commits": 2, + "contributor": "Beardhatcode" + }, { "commits": 2, "contributor": "yhr" @@ -516,6 +520,10 @@ "commits": 2, "contributor": "Leo Alcaraz" }, + { + "commits": 1, + "contributor": "Onnar Rick" + }, { "commits": 1, "contributor": "Обо всем" @@ -636,10 +644,6 @@ "commits": 1, "contributor": "Iváns" }, - { - "commits": 1, - "contributor": "Beardhatcode" - }, { "commits": 1, "contributor": "riiga" diff --git a/src/service-worker.ts b/src/service-worker.ts index 45425bf60..0d12d2475 100644 --- a/src/service-worker.ts +++ b/src/service-worker.ts @@ -23,7 +23,7 @@ async function activate() { .catch(console.error) } -function fetchAndCache(event){ +function fetchAndCache(event) { return fetch(event.request).then((networkResponse) => { return caches.open(version).then((cache) => { cache.put(event.request, networkResponse.clone()) @@ -38,7 +38,7 @@ const cacheFirst = async (event, attemptUpdate: boolean = false) => { caches.match(event.request, { ignoreSearch: true }).then((cacheResponse) => { if (cacheResponse !== undefined) { console.debug("Loaded from cache: ", event.request) - if(attemptUpdate){ + if (attemptUpdate) { fetchAndCache(event) } return cacheResponse