From 44e97c23d49e3e76c00056538e6973e9f9a2aaf4 Mon Sep 17 00:00:00 2001
From: Nikolay Korotkiy
Date: Tue, 16 Nov 2021 14:49:45 +0000
Subject: [PATCH 01/23] Translated using Weblate (Russian)
Currently translated at 55.6% (134 of 241 strings)
Translation: MapComplete/Core
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/ru/
---
langs/ru.json | 339 ++++++++++++++++++++++++++------------------------
1 file changed, 173 insertions(+), 166 deletions(-)
diff --git a/langs/ru.json b/langs/ru.json
index 33513f764..9ff8be9c2 100644
--- a/langs/ru.json
+++ b/langs/ru.json
@@ -1,175 +1,182 @@
{
- "general": {
- "questions": {
- "emailIs": "Адрес электронной почты у {category}: {email}",
- "phoneNumberIs": "Телефонный номер {category}: {phone}",
- "emailOf": "Какой адрес электронной почты у {category}?",
- "websiteIs": "Сайт: {website}",
- "websiteOf": "Какой сайт у {category}?",
- "phoneNumberOf": "Какой номер телефона у {category}?"
+ "general": {
+ "questions": {
+ "emailIs": "Адрес электронной почты у {category}: {email}",
+ "phoneNumberIs": "Телефонный номер {category}: {phone}",
+ "emailOf": "Какой адрес электронной почты у {category}?",
+ "websiteIs": "Сайт: {website}",
+ "websiteOf": "Какой сайт у {category}?",
+ "phoneNumberOf": "Какой номер телефона у {category}?"
+ },
+ "nameInlineQuestion": "Название {category} — $$$",
+ "noNameCategory": "{category} без имени",
+ "about": "С лёгкостью редактируйте и дополняйте OpenStreetMap на определённую тему",
+ "pickLanguage": "Выберите язык: ",
+ "add": {
+ "layerNotEnabled": "Слой {layer} не включён. Включите этот слой чтобы добавить точку",
+ "openLayerControl": "Открыть панель управления слоями",
+ "confirmButton": "Добавить {category} сюда.
Ваш вклад будет виден каждому
",
+ "confirmIntro": "Добавить {title} сюда?
Точка будет видна всем. Пожалуйста, добавляйте только то, что действительно существует. Много приложений используют эти данные.",
+ "stillLoading": "Данные ещё загружаются. Пожалуйста, немного подождите прежде чем добавлять новую точку.",
+ "zoomInFurther": "Приблизьте ещё чтобы добавить точку.",
+ "pleaseLogin": "Пожалуйста, войдите чтобы добавить новую точку",
+ "intro": "Вы нажали туда, где ещё нет данных.
",
+ "title": "Добавить новую точку?",
+ "addNew": "Добавить новую {category} здесь"
+ },
+ "osmLinkTooltip": "Посмотрите этот объект на OpenStreetMap чтобы увидеть его историю или отредактировать",
+ "number": "номер",
+ "skippedQuestions": "Несколько вопросов пропущены",
+ "oneSkippedQuestion": "Вопрос пропущен",
+ "skip": "Пропустить вопрос",
+ "cancel": "Отмена",
+ "save": "Сохранить",
+ "returnToTheMap": "Вернуться на карту",
+ "search": {
+ "error": "Что-то пошло не так…",
+ "nothing": "Ничего не найдено…",
+ "searching": "Поиск…",
+ "search": "Найти место"
+ },
+ "loginToStart": "Войдите, чтобы ответить на этот вопрос",
+ "welcomeBack": "Вы вошли, с возвращением!",
+ "loginWithOpenStreetMap": "Войти с помощью OpenStreetMap",
+ "opening_hours": {
+ "ph_not_known": " ",
+ "ph_open": "открыта",
+ "ph_closed": "закрыта",
+ "open_during_ph": "В праздничные дни эта точка",
+ "open_24_7": "Открыто круглосуточно",
+ "closed_permanently": "Закрыто на неизвестный срок",
+ "closed_until": "Закрыто до {date}",
+ "not_all_rules_parsed": "Часы работы этого магазина сложны. В элементе ввода игнорируются следующие правила:",
+ "openTill": "до",
+ "opensAt": "с",
+ "error_loading": "Ошибка: не удалось визуализировать эти часы работы."
+ },
+ "weekdays": {
+ "sunday": "Воскресенье",
+ "saturday": "Суббота",
+ "friday": "Пятница",
+ "thursday": "Четверг",
+ "wednesday": "Среда",
+ "tuesday": "Вторник",
+ "monday": "Понедельник",
+ "abbreviations": {
+ "sunday": "Вс",
+ "saturday": "Сб",
+ "friday": "Пт",
+ "thursday": "Чт",
+ "wednesday": "Ср",
+ "tuesday": "Вт",
+ "monday": "Пн"
+ }
+ },
+ "layerSelection": {
+ "title": "Выберите слои",
+ "zoomInToSeeThisLayer": "Увеличьте масштаб, чтобы увидеть этот слой"
+ },
+ "backgroundMap": "Фоновая карта",
+ "aboutMapcomplete": "О MapComplete
С помощью MapComplete вы можете обогатить OpenStreetMap информацией по одной теме. Ответьте на несколько вопросов, и через несколько минут ваши материалы будут доступны по всему миру! Сопровождающий темы определяет элементы, вопросы и языки для темы.
Узнайте больше
MapComplete всегда предлагает следующий шаг, чтобы узнать больше об OpenStreetMap.
- При встраивании в веб-сайт iframe ссылается на полноэкранную версию MapComplete
- Полноэкранная версия предлагает информацию об OpenStreetMap
- Просмотр работает без входа, но для редактирования требуется вход в OSM.
- Если вы не вошли в систему, вас попросят войти
- Ответив на один вопрос, вы можете добавлять новые точки на карту
- Через некоторое время отображаются актуальные OSM-метки с последующей ссылкой на вики
Вы заметили проблему? У вас есть запрос на функциональность? Хотите помочь с переводом? Зайдите на репозиторий с исходным кодом или трекер проблем.
Хотите увидеть свой прогресс? Следите за количеством правок на OsmCha.
",
+ "customThemeIntro": "Пользовательские темы
Это ранее просмотренные темы, созданные пользователями.",
+ "noTagsSelected": "Теги не выбраны",
+ "getStartedNewAccount": " или создать новую учетную запись",
+ "getStartedLogin": "Войти с помощью OpenStreetMap, чтобы начать работу",
+ "goToInbox": "Открыть входящие сообщения",
+ "fewChangesBefore": "Пожалуйста, ответьте на несколько вопросов о существующих точках, прежде чем добавить новую точку.",
+ "readYourMessages": "Пожалуйста, прочитайте все ваши сообщения на сайте OpenStreetMap перед тем как добавлять новую точку.",
+ "morescreen": {
+ "createYourOwnTheme": "Создать собственную тему MapComplete с чистого листа",
+ "streetcomplete": "Другое, похожее приложение — StreetComplete.",
+ "requestATheme": "Если вам нужен особенный квест, запросите его в issue-трекере",
+ "intro": "Больше тематических карт?
Нравится собирать геоданные?
Можете посмотреть другие темы."
+ },
+ "sharescreen": {
+ "fsIncludeCurrentLocation": "Включить текущее местоположение карты",
+ "fsIncludeCurrentLayers": "Включить текущие выбранные слои",
+ "fsIncludeCurrentBackgroundMap": "Включить текущий фоновый слой {name}",
+ "fsGeolocation": "Включить кнопку \"найди меня\" (только в мобильной версии)",
+ "fsSearch": "Включить строку поиска",
+ "fsUserbadge": "Включить кнопку входа в систему",
+ "fsWelcomeMessage": "Показать всплывающее окно с приветствием и соответствующие вкладки",
+ "fsLayers": "Включить выбор слоя карты",
+ "fsAddNew": "Включить кнопку \"добавить новую точку интереса\"",
+ "fsLayerControlToggle": "Открыть панель выбора слоя",
+ "editThemeDescription": "Добавить или изменить вопросы к этой теме карты",
+ "editThisTheme": "Редактировать эту тему",
+ "thanksForSharing": "Спасибо, что поделились!",
+ "copiedToClipboard": "Ссылка скопирована в буфер обмена",
+ "embedIntro": "Встроить на свой сайт
Пожалуйста, вставьте эту карту на свой сайт.
Мы призываем вас сделать это - вам даже не нужно спрашивать разрешения.
Карта бесплатна и всегда будет бесплатной. Чем больше людей пользуются ею, тем более ценной она становится.",
+ "addToHomeScreen": "Добавить на домашний экран
Вы можете легко добавить этот сайт на домашний экран вашего смартфона. Для этого нажмите кнопку \"Добавить на главный экран\" в строке URL.",
+ "intro": "Поделиться этой картой
Поделитесь этой картой, скопировав ссылку ниже и отправив её друзьям и близким:"
+ },
+ "attribution": {
+ "codeContributionsBy": "MapComplete был создан {contributors} и ещё {hiddenCount} соавторами ",
+ "mapContributionsByAndHidden": "Текущие видимые данные имеют правки, сделанные {contributors} и ещё {hiddenCount} пользователями",
+ "mapContributionsBy": "Текущие видимые данные имеют правки, сделанные {contributors}",
+ "iconAttribution": {
+ "title": "Используемые значки"
+ },
+ "themeBy": "Тема поддерживается {author}",
+ "attributionContent": "Все данные предоставлены OpenStreetMap, свободное повторное использование согласно Open DataBase License.
",
+ "attributionTitle": "Уведомление об авторстве"
+ },
+ "openStreetMapIntro": "Свободная карта
Было бы здорово если бы была одна карта, которую каждый может свободно использовать и редактировать? Использовать как общее хранилище для всей гео-информации? Тогда, все сайты с разной, неполной и несовместимой информацией (которая обычно устарела) будут больше не нужны.
OpenStreetMap такая карта. Данные карты могу быть свободно использованы (с аннотацией и публикацией изменений к данным). Более того, каждый может свободно добавлять информацию и исправлять ошибки. Этот сайт также использует OpenStreetMap. Все данные берутся оттуда, а ваши ответы и исправления отправляются обратно туда.
Огромное количество людей уже использует OpenStreetMap: Organic Maps, OsmAnd, а также карты в Facebook, Instagram, Apple-карты и Bing-карты (частично) используют OpenStreetMap. Если вы что-то измените здесь, это также будет отражено в этих приложениях - после их следующего обновления!
"
},
- "nameInlineQuestion": "Название {category} — $$$",
- "noNameCategory": "{category} без имени",
- "about": "С лёгкостью редактируйте и дополняйте OpenStreetMap на определённую тему",
- "pickLanguage": "Выберите язык: ",
- "add": {
- "layerNotEnabled": "Слой {layer} не включён. Включите этот слой чтобы добавить точку",
- "openLayerControl": "Открыть панель управления слоями",
- "confirmButton": "Добавить {category} сюда.
Ваш вклад будет виден каждому
",
- "confirmIntro": "Добавить {title} сюда?
Точка будет видна всем. Пожалуйста, добавляйте только то, что действительно существует. Много приложений используют эти данные.",
- "stillLoading": "Данные ещё загружаются. Пожалуйста, немного подождите прежде чем добавлять новую точку.",
- "zoomInFurther": "Приблизьте ещё чтобы добавить точку.",
- "pleaseLogin": "Пожалуйста, войдите чтобы добавить новую точку",
- "intro": "Вы нажали туда, где ещё нет данных.
",
- "title": "Добавить новую точку?",
- "addNew": "Добавить новую {category} здесь"
+ "index": {
+ "pickTheme": "Выберите тему ниже, чтобы начать.",
+ "#": "Эти надписи отображаются над кнопками тем, когда тема не загружена",
+ "intro": "MapComplete - это редактор OpenStreetMap, который показывает информацию с разделением по темам.",
+ "title": "Добро пожаловать в MapComplete"
},
- "osmLinkTooltip": "Посмотрите этот объект на OpenStreetMap чтобы увидеть его историю или отредактировать",
- "number": "номер",
- "skippedQuestions": "Несколько вопросов пропущены",
- "oneSkippedQuestion": "Вопрос пропущен",
- "skip": "Пропустить вопрос",
- "cancel": "Отмена",
- "save": "Сохранить",
- "returnToTheMap": "Вернуться на карту",
- "search": {
- "error": "Что-то пошло не так…",
- "nothing": "Ничего не найдено…",
- "searching": "Поиск…",
- "search": "Найти место"
+ "centerMessage": {
+ "retrying": "Не удалось загрузить данные. Попробуем ещё раз через {count} секунд…",
+ "ready": "Готово!",
+ "zoomIn": "Приблизьте чтобы посмотреть или изменить данные",
+ "loadingData": "Загружаются данные…"
},
- "loginToStart": "Войдите, чтобы ответить на этот вопрос",
- "welcomeBack": "Вы вошли, с возвращением!",
- "loginWithOpenStreetMap": "Войти с помощью OpenStreetMap",
- "opening_hours": {
- "ph_not_known": " ",
- "ph_open": "открыта",
- "ph_closed": "закрыта",
- "open_during_ph": "В праздничные дни эта точка",
- "open_24_7": "Открыто круглосуточно",
- "closed_permanently": "Закрыто на неизвестный срок",
- "closed_until": "Закрыто до {date}",
- "not_all_rules_parsed": "Часы работы этого магазина сложны. В элементе ввода игнорируются следующие правила:",
- "openTill": "до",
- "opensAt": "с",
- "error_loading": "Ошибка: не удалось визуализировать эти часы работы."
+ "image": {
+ "isDeleted": "Удалено",
+ "doDelete": "Удалить изображение",
+ "dontDelete": "Отмена",
+ "uploadDone": "Ваше изображение добавлено. Спасибо за помощь!",
+ "respectPrivacy": "Не фотографируйте людей и номерные знаки. Не загружайте снимки Google Maps, Google Street View и иные источники с закрытой лицензией.",
+ "uploadFailed": "Не удалось загрузить изображение. Проверьте, есть ли у вас доступ в Интернет и разрешены ли сторонние API? Браузеры Brave и UMatrix могут блокировать их.",
+ "ccb": "под лицензией CC-BY",
+ "ccbs": "под лицензией CC-BY-SA",
+ "cco": "в открытом доступе",
+ "willBePublished": "Ваше изображение будет опубликовано: ",
+ "pleaseLogin": "Пожалуйста, войдите в систему, чтобы добавить изображение",
+ "uploadingMultiple": "Загружаем {count} изображений…",
+ "uploadingPicture": "Загружаем изображение…",
+ "addPicture": "Добавить изображение"
},
- "weekdays": {
- "sunday": "Воскресенье",
- "saturday": "Суббота",
- "friday": "Пятница",
- "thursday": "Четверг",
- "wednesday": "Среда",
- "tuesday": "Вторник",
- "monday": "Понедельник",
- "abbreviations": {
- "sunday": "Вс",
- "saturday": "Сб",
- "friday": "Пт",
- "thursday": "Чт",
- "wednesday": "Ср",
- "tuesday": "Вт",
- "monday": "Пн"
- }
+ "reviews": {
+ "plz_login": "Войдите, чтобы оставить отзыв",
+ "attribution": "Отзывы созданы на основе Mangrove Reviews и доступны под лицензией CC-BY 4.0.",
+ "tos": "Создавая отзыв, вы соглашаетесь с TOS и политикой конфиденциальности Mangrove.reviews ",
+ "saved": " Отзыв сохранен. Спасибо, что поделились! ",
+ "saving_review": "Сохранение…",
+ "affiliated_reviewer_warning": "(Отзыв лица, связанного с заведением)",
+ "i_am_affiliated": "Я связан с этим объектом
Отметьте если вы создатель, владелец, работник, …",
+ "posting_as": "Публикация от имени",
+ "no_rating": "Нет рейтинга",
+ "write_a_comment": "Оставить отзыв…",
+ "no_reviews_yet": "Пока нет отзывов. Оставьте первый отзыв и помогите открытым данным и бизнесу!",
+ "name_required": "Необходимо название, чтобы просматривать и создавать отзывы",
+ "title_singular": "Один отзыв",
+ "title": "{count} отзыв(-ов)"
},
- "layerSelection": {
- "title": "Выберите слои",
- "zoomInToSeeThisLayer": "Увеличьте масштаб, чтобы увидеть этот слой"
+ "favourite": {
+ "reload": "Обновить данные",
+ "loginNeeded": "Вход
Личная раскладка доступна только пользователям OpenStreetMap",
+ "panelIntro": "Ваша личная тема
Активируйте свои любимые слои из официальных тем"
},
- "backgroundMap": "Фоновая карта",
- "aboutMapcomplete": "О MapComplete
С помощью MapComplete вы можете обогатить OpenStreetMap информацией по одной теме. Ответьте на несколько вопросов, и через несколько минут ваши материалы будут доступны по всему миру! Сопровождающий темы определяет элементы, вопросы и языки для темы.
Узнайте больше
MapComplete всегда предлагает следующий шаг, чтобы узнать больше об OpenStreetMap.
- При встраивании в веб-сайт iframe ссылается на полноэкранную версию MapComplete
- Полноэкранная версия предлагает информацию об OpenStreetMap
- Просмотр работает без входа, но для редактирования требуется вход в OSM.
- Если вы не вошли в систему, вас попросят войти
- Ответив на один вопрос, вы можете добавлять новые точки на карту
- Через некоторое время отображаются актуальные OSM-метки с последующей ссылкой на вики
Вы заметили проблему? У вас есть запрос на функциональность? Хотите помочь с переводом? Зайдите на репозиторий с исходным кодом или трекер проблем.
Хотите увидеть свой прогресс? Следите за количеством правок на OsmCha.
",
- "customThemeIntro": "Пользовательские темы
Это ранее просмотренные темы, созданные пользователями.",
- "noTagsSelected": "Теги не выбраны",
- "getStartedNewAccount": " или создать новую учетную запись",
- "getStartedLogin": "Войти с помощью OpenStreetMap, чтобы начать работу",
- "goToInbox": "Открыть входящие сообщения",
- "fewChangesBefore": "Пожалуйста, ответьте на несколько вопросов о существующих точках, прежде чем добавить новую точку.",
- "readYourMessages": "Пожалуйста, прочитайте все ваши сообщения на сайте OpenStreetMap перед тем как добавлять новую точку.",
- "morescreen": {
- "createYourOwnTheme": "Создать собственную тему MapComplete с чистого листа",
- "streetcomplete": "Другое, похожее приложение — StreetComplete.",
- "requestATheme": "Если вам нужен особенный квест, запросите его в issue-трекере",
- "intro": "Больше тематических карт?
Нравится собирать геоданные?
Можете посмотреть другие темы."
+ "delete": {
+ "delete": "Удалить",
+ "cancel": "Отмена"
},
- "sharescreen": {
- "fsIncludeCurrentLocation": "Включить текущее местоположение карты",
- "fsIncludeCurrentLayers": "Включить текущие выбранные слои",
- "fsIncludeCurrentBackgroundMap": "Включить текущий фоновый слой {name}",
- "fsGeolocation": "Включить кнопку \"найди меня\" (только в мобильной версии)",
- "fsSearch": "Включить строку поиска",
- "fsUserbadge": "Включить кнопку входа в систему",
- "fsWelcomeMessage": "Показать всплывающее окно с приветствием и соответствующие вкладки",
- "fsLayers": "Включить выбор слоя карты",
- "fsAddNew": "Включить кнопку \"добавить новую точку интереса\"",
- "fsLayerControlToggle": "Открыть панель выбора слоя",
- "editThemeDescription": "Добавить или изменить вопросы к этой теме карты",
- "editThisTheme": "Редактировать эту тему",
- "thanksForSharing": "Спасибо, что поделились!",
- "copiedToClipboard": "Ссылка скопирована в буфер обмена",
- "embedIntro": "Встроить на свой сайт
Пожалуйста, вставьте эту карту на свой сайт.
Мы призываем вас сделать это - вам даже не нужно спрашивать разрешения.
Карта бесплатна и всегда будет бесплатной. Чем больше людей пользуются ею, тем более ценной она становится.",
- "addToHomeScreen": "Добавить на домашний экран
Вы можете легко добавить этот сайт на домашний экран вашего смартфона. Для этого нажмите кнопку \"Добавить на главный экран\" в строке URL.",
- "intro": "Поделиться этой картой
Поделитесь этой картой, скопировав ссылку ниже и отправив её друзьям и близким:"
- },
- "attribution": {
- "codeContributionsBy": "MapComplete был создан {contributors} и ещё {hiddenCount} соавторами ",
- "mapContributionsByAndHidden": "Текущие видимые данные имеют правки, сделанные {contributors} и ещё {hiddenCount} пользователями",
- "mapContributionsBy": "Текущие видимые данные имеют правки, сделанные {contributors}",
- "iconAttribution": {
- "title": "Используемые значки"
- },
- "themeBy": "Тема поддерживается {author}",
- "attributionContent": "Все данные предоставлены OpenStreetMap, свободное повторное использование согласно Open DataBase License.
",
- "attributionTitle": "Уведомление об авторстве"
- },
- "openStreetMapIntro": "Свободная карта
Было бы здорово если бы была одна карта, которую каждый может свободно использовать и редактировать? Использовать как общее хранилище для всей гео-информации? Тогда, все сайты с разной, неполной и несовместимой информацией (которая обычно устарела) будут больше не нужны.
OpenStreetMap такая карта. Данные карты могу быть свободно использованы (с аннотацией и публикацией изменений к данным). Более того, каждый может свободно добавлять информацию и исправлять ошибки. Этот сайт также использует OpenStreetMap. Все данные берутся оттуда, а ваши ответы и исправления отправляются обратно туда.
Огромное количество людей уже использует OpenStreetMap: Organic Maps, OsmAnd, а также карты в Facebook, Instagram, Apple-карты и Bing-карты (частично) используют OpenStreetMap. Если вы что-то измените здесь, это также будет отражено в этих приложениях - после их следующего обновления!
"
- },
- "index": {
- "pickTheme": "Выберите тему ниже, чтобы начать.",
- "#": "Эти надписи отображаются над кнопками тем, когда тема не загружена",
- "intro": "MapComplete - это редактор OpenStreetMap, который показывает информацию с разделением по темам.",
- "title": "Добро пожаловать в MapComplete"
- },
- "centerMessage": {
- "retrying": "Не удалось загрузить данные. Попробуем ещё раз через {count} секунд…",
- "ready": "Готово!",
- "zoomIn": "Приблизьте чтобы посмотреть или изменить данные",
- "loadingData": "Загружаются данные…"
- },
- "image": {
- "isDeleted": "Удалено",
- "doDelete": "Удалить изображение",
- "dontDelete": "Отмена",
- "uploadDone": "Ваше изображение добавлено. Спасибо за помощь!",
- "respectPrivacy": "Не фотографируйте людей и номерные знаки. Не загружайте снимки Google Maps, Google Street View и иные источники с закрытой лицензией.",
- "uploadFailed": "Не удалось загрузить изображение. Проверьте, есть ли у вас доступ в Интернет и разрешены ли сторонние API? Браузеры Brave и UMatrix могут блокировать их.",
- "ccb": "под лицензией CC-BY",
- "ccbs": "под лицензией CC-BY-SA",
- "cco": "в открытом доступе",
- "willBePublished": "Ваше изображение будет опубликовано: ",
- "pleaseLogin": "Пожалуйста, войдите в систему, чтобы добавить изображение",
- "uploadingMultiple": "Загружаем {count} изображений…",
- "uploadingPicture": "Загружаем изображение…",
- "addPicture": "Добавить изображение"
- },
- "reviews": {
- "plz_login": "Войдите, чтобы оставить отзыв",
- "attribution": "Отзывы созданы на основе Mangrove Reviews и доступны под лицензией CC-BY 4.0.",
- "tos": "Создавая отзыв, вы соглашаетесь с TOS и политикой конфиденциальности Mangrove.reviews ",
- "saved": " Отзыв сохранен. Спасибо, что поделились! ",
- "saving_review": "Сохранение…",
- "affiliated_reviewer_warning": "(Отзыв лица, связанного с заведением)",
- "i_am_affiliated": "Я связан с этим объектом
Отметьте если вы создатель, владелец, работник, …",
- "posting_as": "Публикация от имени",
- "no_rating": "Нет рейтинга",
- "write_a_comment": "Оставить отзыв…",
- "no_reviews_yet": "Пока нет отзывов. Оставьте первый отзыв и помогите открытым данным и бизнесу!",
- "name_required": "Необходимо название, чтобы просматривать и создавать отзывы",
- "title_singular": "Один отзыв",
- "title": "{count} отзыв(-ов)"
- },
- "favourite": {
- "reload": "Обновить данные",
- "loginNeeded": "Вход
Личная раскладка доступна только пользователям OpenStreetMap",
- "panelIntro": "Ваша личная тема
Активируйте свои любимые слои из официальных тем"
- }
+ "split": {
+ "cancel": "Отмена"
+ }
}
From 7b21b54747c48a3afc7a116321739176e9eeb30e Mon Sep 17 00:00:00 2001
From: kjon
Date: Tue, 16 Nov 2021 19:46:23 +0000
Subject: [PATCH 02/23] Translated using Weblate (German)
Currently translated at 100.0% (241 of 241 strings)
Translation: MapComplete/Core
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/de/
---
langs/de.json | 554 +++++++++++++++++++++++++-------------------------
1 file changed, 277 insertions(+), 277 deletions(-)
diff --git a/langs/de.json b/langs/de.json
index 6d0addc48..6f094830a 100644
--- a/langs/de.json
+++ b/langs/de.json
@@ -1,288 +1,288 @@
{
- "image": {
- "addPicture": "Bild hinzufügen",
- "uploadingPicture": "Bild wird hochgeladen…",
- "uploadingMultiple": "{count} Bilder hochladen…",
- "pleaseLogin": "Bitte einloggen, um ein Bild hinzuzufügen",
- "willBePublished": "Ihr Bild wird veröffentlicht: ",
- "cco": "als 'Public Domain'",
- "ccbs": "unter der 'CC-BY-SA-Lizenz'",
- "ccb": "unter der 'CC-BY-Lizenz'",
- "uploadFailed": "Wir konnten Ihr Bild nicht hochladen. Haben Sie eine aktive Internetverbindung und sind APIs von Dritten erlaubt? Der Brave Browser oder UMatrix blockieren diese eventuell.",
- "respectPrivacy": "Bitte respektieren Sie die Privatsphäre. Fotografieren Sie weder Personen noch Nummernschilder. Benutzen Sie keine urheberrechtlich geschützten Quellen wie z.B. Google Maps oder Google Streetview.",
- "uploadDone": "Ihr Bild wurde hinzugefügt. Vielen Dank für Ihre Hilfe!",
- "dontDelete": "Abbrechen",
- "doDelete": "Bild entfernen",
- "isDeleted": "Gelöscht",
- "uploadMultipleDone": "{count} Bilder wurden hinzugefügt. Vielen Dank für die Hilfe!",
- "toBig": "Ihr Bild ist zu groß, da es {actual_size} ist. Bitte verwenden Sie Bilder von höchstens {max_size}"
- },
- "centerMessage": {
- "loadingData": "Daten werden geladen…",
- "zoomIn": "Ausschnitt vergrößern, um Daten anzuzeigen oder zu bearbeiten",
- "ready": "Erledigt!",
- "retrying": "Laden von Daten fehlgeschlagen. Erneuter Versuch in {count} Sekunden …"
- },
- "index": {
- "#": "Dieser Text wird über die Thema-Auswahlschaltfläche gezeigt, wenn kein Thema geladen ist",
- "title": "Willkommen bei MapComplete",
- "intro": "MapComplete ist eine OpenStreetMap-Anwendung, mit der Informationen zu Objekten eines bestimmten Themas angezeigt und angepasst werden können.",
- "pickTheme": "Wähle unten ein Thema, um zu starten.",
- "featuredThemeTitle": "Diese Woche im Blickpunkt"
- },
- "general": {
- "loginWithOpenStreetMap": "Bei OpenStreetMap anmelden",
- "welcomeBack": "Sie sind eingeloggt, willkommen zurück!",
- "loginToStart": "Anmelden, um diese Frage zu beantworten",
- "search": {
- "search": "Einen Ort suchen",
- "searching": "Suchen …",
- "nothing": "Nichts gefunden…",
- "error": "Etwas ging schief…"
+ "image": {
+ "addPicture": "Bild hinzufügen",
+ "uploadingPicture": "Bild wird hochgeladen…",
+ "uploadingMultiple": "{count} Bilder hochladen…",
+ "pleaseLogin": "Bitte einloggen, um ein Bild hinzuzufügen",
+ "willBePublished": "Ihr Bild wird veröffentlicht: ",
+ "cco": "als 'Public Domain'",
+ "ccbs": "unter der 'CC-BY-SA-Lizenz'",
+ "ccb": "unter der 'CC-BY-Lizenz'",
+ "uploadFailed": "Wir konnten Ihr Bild nicht hochladen. Haben Sie eine aktive Internetverbindung und sind APIs von Dritten erlaubt? Der Brave Browser oder UMatrix blockieren diese eventuell.",
+ "respectPrivacy": "Bitte respektieren Sie die Privatsphäre. Fotografieren Sie weder Personen noch Nummernschilder. Benutzen Sie keine urheberrechtlich geschützten Quellen wie z.B. Google Maps oder Google Streetview.",
+ "uploadDone": "Ihr Bild wurde hinzugefügt. Vielen Dank für Ihre Hilfe!",
+ "dontDelete": "Abbrechen",
+ "doDelete": "Bild entfernen",
+ "isDeleted": "Gelöscht",
+ "uploadMultipleDone": "{count} Bilder wurden hinzugefügt. Vielen Dank für die Hilfe!",
+ "toBig": "Ihr Bild ist zu groß, da es {actual_size} ist. Bitte verwenden Sie Bilder von höchstens {max_size}"
},
- "returnToTheMap": "Zurück zur Karte",
- "save": "Speichern",
- "cancel": "Abbrechen",
- "skip": "Frage überspringen",
- "oneSkippedQuestion": "Eine Frage wurde übersprungen",
- "skippedQuestions": "Einige Fragen wurden übersprungen",
- "number": "Zahl",
- "osmLinkTooltip": "Dieses Element auf OpenStreetMap durchsuchen für den Verlauf und weitere Bearbeitungsmöglichkeiten",
- "add": {
- "addNew": "Hier eine neue {category} hinzufügen",
- "title": "Punkt hinzufügen?",
- "intro": "Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.
",
- "pleaseLogin": "Bitte loggen Sie sich ein, um einen neuen Punkt hinzuzufügen",
- "zoomInFurther": "Weiter einzoomen, um einen Punkt hinzuzufügen.",
- "stillLoading": "Die Daten werden noch geladen. Bitte warten Sie etwas, bevor Sie einen neuen Punkt hinzufügen.",
- "confirmIntro": "Hier einen {title} hinzufügen?
Der Punkt, den Sie hier anlegen, wird für alle sichtbar sein. Bitte fügen Sie der Karte nur dann Dinge hinzu, wenn sie wirklich existieren. Viele Anwendungen verwenden diese Daten.",
- "confirmButton": "Fügen Sie hier eine {category} hinzu.
Ihre Ergänzung ist für alle sichtbar
",
- "openLayerControl": "Das Ebenen-Kontrollkästchen öffnen",
- "layerNotEnabled": "Die Ebene {layer} ist nicht aktiviert. Aktivieren Sie diese Ebene, um einen Punkt hinzuzufügen",
- "addNewMapLabel": "Neues Element hinzufügen",
- "presetInfo": "Der neue POI hat {tags}",
- "disableFiltersExplanation": "Einige Elemente können durch einen Filter ausgeblendet sein",
- "disableFilters": "Alle Filter deaktivieren",
- "hasBeenImported": "Dieser Punkt wurde bereits importiert",
- "zoomInMore": "Vergrößern Sie die Ansicht, um dieses Element zu importieren",
- "warnVisibleForEveryone": "Ihre Ergänzung wird für alle sichtbar sein"
+ "centerMessage": {
+ "loadingData": "Daten werden geladen…",
+ "zoomIn": "Ausschnitt vergrößern, um Daten anzuzeigen oder zu bearbeiten",
+ "ready": "Erledigt!",
+ "retrying": "Laden von Daten fehlgeschlagen. Erneuter Versuch in {count} Sekunden …"
},
- "pickLanguage": "Sprache wählen: ",
- "about": "OpenStreetMap für ein bestimmtes Thema einfach bearbeiten und hinzufügen",
- "nameInlineQuestion": "Der Name dieser {category} ist $$$",
- "noNameCategory": "{category} ohne Namen",
- "questions": {
- "phoneNumberOf": "Wie lautet die Telefonnummer der {category}?",
- "phoneNumberIs": "Die Telefonnummer der {category} lautet {phone}",
- "websiteOf": "Was ist die Website der {category}?",
- "websiteIs": "Webseite: {website}",
- "emailOf": "Wie lautet die E-Mail-Adresse der {category}?",
- "emailIs": "Die E-Mail-Adresse dieser {category} lautet {email}"
+ "index": {
+ "#": "Dieser Text wird über die Thema-Auswahlschaltfläche gezeigt, wenn kein Thema geladen ist",
+ "title": "Willkommen bei MapComplete",
+ "intro": "MapComplete ist eine OpenStreetMap-Anwendung, mit der Informationen zu Objekten eines bestimmten Themas angezeigt und angepasst werden können.",
+ "pickTheme": "Wähle unten ein Thema, um zu starten.",
+ "featuredThemeTitle": "Diese Woche im Blickpunkt"
},
- "openStreetMapIntro": "Eine offene Karte
Eine Karte, die jeder frei nutzen und bearbeiten kann. Ein einziger Ort, um alle Geoinformationen zu speichern. Unterschiedliche, kleine, inkompatible und veraltete Karten werden nirgendwo gebraucht.
OpenStreetMap ist nicht die feindliche Karte. Die Kartendaten können frei verwendet werden (mit Benennung und Veröffentlichung von Änderungen an diesen Daten). Jeder kann neue Daten hinzufügen und Fehler korrigieren. Diese Webseite nutzt OpenStreetMap. Alle Daten stammen von dort, und Ihre Antworten und Korrekturen werden überall verwendet.
Viele Menschen und Anwendungen nutzen bereits OpenStreetMap: Organic Maps, OsmAnd, aber auch die Karten bei Facebook, Instagram, Apple-maps und Bing-maps werden (teilweise) von OpenStreetMap bereichert.
",
- "sharescreen": {
- "intro": "Diese Karte teilen
Sie können diese Karte teilen, indem Sie den untenstehenden Link kopieren und an Freunde und Familie schicken:",
- "addToHomeScreen": "Zum Startbildschirm hinzufügen
Sie können diese Webseite zum Startbildschirm Ihres Smartphones hinzufügen, um ein natives Gefühl zu erhalten. Klicken Sie dazu in der Adressleiste auf die Schaltfläche 'Zum Startbildschirm hinzufügen'.",
- "embedIntro": "Auf Ihrer Website einbetten
Bitte betten Sie diese Karte in Ihre Webseite ein.
Wir ermutigen Sie, es zu tun - Sie müssen nicht einmal um Erlaubnis fragen.
Es ist kostenlos und wird es immer sein. Je mehr Leute sie benutzen, desto wertvoller wird sie.",
- "copiedToClipboard": "Link in die Zwischenablage kopiert",
- "thanksForSharing": "Danke für das Teilen!",
- "editThisTheme": "Dieses Thema bearbeiten",
- "editThemeDescription": "Fragen zu diesem Kartenthema hinzufügen oder ändern",
- "fsUserbadge": "Anmelde-Knopf aktivieren",
- "fsSearch": "Suchleiste aktivieren",
- "fsWelcomeMessage": "Popup der Begrüßungsnachricht und zugehörige Registerkarten anzeigen",
- "fsLayers": "Aktivieren der Layersteuerung",
- "fsLayerControlToggle": "Mit der erweiterten Ebenenkontrolle beginnen",
- "fsAddNew": "Schaltfläche 'neuen POI hinzufügen' aktivieren",
- "fsGeolocation": "Die Schaltfläche 'Mich geolokalisieren' aktivieren (nur für Mobil)",
- "fsIncludeCurrentBackgroundMap": "Die aktuelle Hintergrundwahl einschließen {name}",
- "fsIncludeCurrentLayers": "Die aktuelle Ebenenauswahl einbeziehen",
- "fsIncludeCurrentLocation": "Aktuelle Position einbeziehen"
+ "general": {
+ "loginWithOpenStreetMap": "Bei OpenStreetMap anmelden",
+ "welcomeBack": "Sie sind eingeloggt, willkommen zurück!",
+ "loginToStart": "Anmelden, um diese Frage zu beantworten",
+ "search": {
+ "search": "Einen Ort suchen",
+ "searching": "Suchen …",
+ "nothing": "Nichts gefunden…",
+ "error": "Etwas ging schief…"
+ },
+ "returnToTheMap": "Zurück zur Karte",
+ "save": "Speichern",
+ "cancel": "Abbrechen",
+ "skip": "Frage überspringen",
+ "oneSkippedQuestion": "Eine Frage wurde übersprungen",
+ "skippedQuestions": "Einige Fragen wurden übersprungen",
+ "number": "Zahl",
+ "osmLinkTooltip": "Dieses Element auf OpenStreetMap durchsuchen für den Verlauf und weitere Bearbeitungsmöglichkeiten",
+ "add": {
+ "addNew": "Hier eine neue {category} hinzufügen",
+ "title": "Punkt hinzufügen?",
+ "intro": "Sie haben irgendwo geklickt, wo noch keine Daten bekannt sind.
",
+ "pleaseLogin": "Bitte loggen Sie sich ein, um einen neuen Punkt hinzuzufügen",
+ "zoomInFurther": "Weiter einzoomen, um einen Punkt hinzuzufügen.",
+ "stillLoading": "Die Daten werden noch geladen. Bitte warten Sie etwas, bevor Sie einen neuen Punkt hinzufügen.",
+ "confirmIntro": "Hier einen {title} hinzufügen?
Der Punkt, den Sie hier anlegen, wird für alle sichtbar sein. Bitte fügen Sie der Karte nur dann Dinge hinzu, wenn sie wirklich existieren. Viele Anwendungen verwenden diese Daten.",
+ "confirmButton": "Fügen Sie hier eine {category} hinzu.
Ihre Ergänzung ist für alle sichtbar
",
+ "openLayerControl": "Das Ebenen-Kontrollkästchen öffnen",
+ "layerNotEnabled": "Die Ebene {layer} ist nicht aktiviert. Aktivieren Sie diese Ebene, um einen Punkt hinzuzufügen",
+ "addNewMapLabel": "Neues Element hinzufügen",
+ "presetInfo": "Der neue POI hat {tags}",
+ "disableFiltersExplanation": "Einige Elemente können durch einen Filter ausgeblendet sein",
+ "disableFilters": "Alle Filter deaktivieren",
+ "hasBeenImported": "Dieser Punkt wurde bereits importiert",
+ "zoomInMore": "Vergrößern Sie die Ansicht, um dieses Element zu importieren",
+ "warnVisibleForEveryone": "Ihre Ergänzung wird für alle sichtbar sein"
+ },
+ "pickLanguage": "Sprache wählen: ",
+ "about": "OpenStreetMap für ein bestimmtes Thema einfach bearbeiten und hinzufügen",
+ "nameInlineQuestion": "Der Name dieser {category} ist $$$",
+ "noNameCategory": "{category} ohne Namen",
+ "questions": {
+ "phoneNumberOf": "Wie lautet die Telefonnummer der {category}?",
+ "phoneNumberIs": "Die Telefonnummer der {category} lautet {phone}",
+ "websiteOf": "Was ist die Website der {category}?",
+ "websiteIs": "Webseite: {website}",
+ "emailOf": "Wie lautet die E-Mail-Adresse der {category}?",
+ "emailIs": "Die E-Mail-Adresse dieser {category} lautet {email}"
+ },
+ "openStreetMapIntro": "Eine offene Karte
Eine Karte, die jeder frei nutzen und bearbeiten kann. Ein einziger Ort, um alle Geoinformationen zu speichern. Unterschiedliche, kleine, inkompatible und veraltete Karten werden nirgendwo gebraucht.
OpenStreetMap ist nicht die feindliche Karte. Die Kartendaten können frei verwendet werden (mit Benennung und Veröffentlichung von Änderungen an diesen Daten). Jeder kann neue Daten hinzufügen und Fehler korrigieren. Diese Webseite nutzt OpenStreetMap. Alle Daten stammen von dort, und Ihre Antworten und Korrekturen werden überall verwendet.
Viele Menschen und Anwendungen nutzen bereits OpenStreetMap: Organic Maps, OsmAnd, aber auch die Karten bei Facebook, Instagram, Apple-maps und Bing-maps werden (teilweise) von OpenStreetMap bereichert.
",
+ "sharescreen": {
+ "intro": "Diese Karte teilen
Sie können diese Karte teilen, indem Sie den untenstehenden Link kopieren und an Freunde und Familie schicken:",
+ "addToHomeScreen": "Zum Startbildschirm hinzufügen
Sie können diese Webseite zum Startbildschirm Ihres Smartphones hinzufügen, um ein natives Gefühl zu erhalten. Klicken Sie dazu in der Adressleiste auf die Schaltfläche 'Zum Startbildschirm hinzufügen'.",
+ "embedIntro": "Auf Ihrer Website einbetten
Bitte betten Sie diese Karte in Ihre Webseite ein.
Wir ermutigen Sie, es zu tun - Sie müssen nicht einmal um Erlaubnis fragen.
Es ist kostenlos und wird es immer sein. Je mehr Leute sie benutzen, desto wertvoller wird sie.",
+ "copiedToClipboard": "Link in die Zwischenablage kopiert",
+ "thanksForSharing": "Danke für das Teilen!",
+ "editThisTheme": "Dieses Thema bearbeiten",
+ "editThemeDescription": "Fragen zu diesem Kartenthema hinzufügen oder ändern",
+ "fsUserbadge": "Anmelde-Knopf aktivieren",
+ "fsSearch": "Suchleiste aktivieren",
+ "fsWelcomeMessage": "Popup der Begrüßungsnachricht und zugehörige Registerkarten anzeigen",
+ "fsLayers": "Aktivieren der Layersteuerung",
+ "fsLayerControlToggle": "Mit der erweiterten Ebenenkontrolle beginnen",
+ "fsAddNew": "Schaltfläche 'neuen POI hinzufügen' aktivieren",
+ "fsGeolocation": "Die Schaltfläche 'Mich geolokalisieren' aktivieren (nur für Mobil)",
+ "fsIncludeCurrentBackgroundMap": "Die aktuelle Hintergrundwahl einschließen {name}",
+ "fsIncludeCurrentLayers": "Die aktuelle Ebenenauswahl einbeziehen",
+ "fsIncludeCurrentLocation": "Aktuelle Position einbeziehen"
+ },
+ "morescreen": {
+ "intro": "Mehr thematische Karten?
Sammeln Sie gerne Geodaten?
Es sind weitere Themen verfügbar.",
+ "requestATheme": "Wenn Sie ein benutzerdefiniertes Thema wünschen, fordern Sie es im Issue Tracker an",
+ "streetcomplete": "Eine ähnliche App ist StreetComplete.",
+ "createYourOwnTheme": "Erstellen Sie Ihr eigenes MapComplete-Thema von Grund auf neu",
+ "previouslyHiddenTitle": "Zuvor besuchte versteckte Themen",
+ "hiddenExplanation": "Diese Themen sind nur für Personen zugänglich, die einen Link erhalten haben. Sie haben {hidden_discovered} von {total_hidden} versteckten Themen entdeckt."
+ },
+ "readYourMessages": "Bitte lesen Sie alle Ihre OpenStreetMap-Nachrichten, bevor Sie einen neuen Punkt hinzufügen.",
+ "fewChangesBefore": "Bitte beantworten Sie ein paar Fragen zu bestehenden Punkten, bevor Sie einen neuen Punkt hinzufügen.",
+ "goToInbox": "Posteingang öffnen",
+ "getStartedLogin": "Bei OpenStreetMap anmelden, um loszulegen",
+ "getStartedNewAccount": " oder ein neues Konto anlegen",
+ "noTagsSelected": "Keine Tags ausgewählt",
+ "customThemeIntro": "Benutzerdefinierte Themes
Dies sind zuvor besuchte benutzergenerierte Themen.",
+ "aboutMapcomplete": "Über MapComplete
Nutzen Sie es, um OpenStreetMap-Informationen zu einem einzigen Thema hinzuzufügen. Beantworten Sie Fragen, und innerhalb weniger Minuten sind Ihre Beiträge überall verfügbar. Der Theme-Maintainer definiert Elemente, Fragen und Sprachen dafür.
Mehr erfahren
MapComplete bietet immer den nächsten Schritt, um mehr über OpenStreetMap zu erfahren.
- Wenn es in eine Website eingebettet wird, verlinkt der iframe zu einer Vollbildversion von MapComplete
- Die Vollbildversion bietet Infos über OpenStreetMap
- Das Betrachten funktioniert ohne Anmeldung, aber das Bearbeiten erfordert ein OSM-Konto.
- Wenn Sie nicht angemeldet sind, werden Sie dazu aufgefordert
- Sobald Sie eine Frage beantwortet haben, können Sie der Karte neue Punkte hinzufügen
- Nach einer Weile werden aktuelle OSM-Tags angezeigt, die später mit dem Wiki verlinkt werden
Haben Sie ein Problem bemerkt? Haben Sie einen Funktionswunsch? Möchten Sie bei der Übersetzung helfen? Besuchen Sie den Quellcode oder den Issue Tracker
Möchten Sie Ihren Fortschritt sehen? Verfolgen Sie die Anzahl der Änderungen auf OsmCha.
",
+ "backgroundMap": "Hintergrundkarte",
+ "layerSelection": {
+ "zoomInToSeeThisLayer": "Ausschnitt vergrößern, um diese Ebene anzuzeigen",
+ "title": "Ebenen auswählen"
+ },
+ "weekdays": {
+ "abbreviations": {
+ "monday": "Mo",
+ "tuesday": "Di",
+ "wednesday": "Mi",
+ "thursday": "Do",
+ "friday": "Fr",
+ "saturday": "Sa",
+ "sunday": "So"
+ },
+ "monday": "Montag",
+ "tuesday": "Dienstag",
+ "wednesday": "Mittwoch",
+ "thursday": "Donnerstag",
+ "friday": "Freitag",
+ "saturday": "Samstag",
+ "sunday": "Sonntag"
+ },
+ "opening_hours": {
+ "error_loading": "Fehler: Diese Öffnungszeiten können nicht angezeigt werden.",
+ "open_during_ph": "An Feiertagen ist hier",
+ "opensAt": "von",
+ "openTill": "bis",
+ "not_all_rules_parsed": "Die Öffnungszeiten sind kompliziert. Die folgenden Regeln werden im Eingabeelement ignoriert:",
+ "closed_until": "Geschlossen bis {date}",
+ "closed_permanently": "Geschlossen auf unbestimmte Zeit",
+ "open_24_7": "Durchgehend geöffnet",
+ "ph_not_known": " ",
+ "ph_closed": "geschlossen",
+ "ph_open": "geöffnet",
+ "loadingCountry": "Land ermitteln…",
+ "ph_open_as_usual": "geöffnet wie üblich"
+ },
+ "attribution": {
+ "mapContributionsByAndHidden": "Die aktuell sichtbaren Daten wurden editiert durch {contributors} und {hiddenCount} weitere Beitragende",
+ "mapContributionsBy": "Die aktuell sichtbaren Daten wurden editiert durch {contributors}",
+ "iconAttribution": {
+ "title": "Verwendete Icons"
+ },
+ "attributionTitle": "Danksagung",
+ "codeContributionsBy": "MapComplete wurde von {contributors} und {hiddenCount} weiteren Beitragenden erstellt",
+ "themeBy": "Thema betreut von {author}",
+ "attributionContent": "Alle Daten wurden bereitgestellt von OpenStreetMap, frei verwendbar unter der Open Database License.
"
+ },
+ "download": {
+ "downloadCSVHelper": "Kompatibel mit LibreOffice Calc, Excel, …",
+ "downloadCSV": "Sichtbare Daten als CSV herunterladen",
+ "downloadAsPdfHelper": "Ideal zum Drucken der aktuellen Karte",
+ "downloadGeoJsonHelper": "Kompatibel mit QGIS, ArcGIS, ESRI, …",
+ "downloadAsPdf": "PDF der aktuellen Karte herunterladen",
+ "downloadGeojson": "Sichtbare Daten als GeoJSON herunterladen",
+ "includeMetaData": "Metadaten übernehmen (letzter Bearbeiter, berechnete Werte, ...)",
+ "noDataLoaded": "Noch keine Daten geladen. Download ist in Kürze verfügbar",
+ "licenseInfo": "Copyright-Hinweis
Die bereitgestellten Daten sind unter ODbL verfügbar. Die Wiederverwendung ist für jeden Zweck frei, aber - die Namensnennung © OpenStreetMap contributors ist erforderlich
- Jede Änderung unter der gleichen Lizenz veröffentlicht werden
Bitte lesen Sie den vollständigen Copyright-Hinweis für weitere Details.",
+ "title": "Sichtbare Daten herunterladen",
+ "exporting": "Exportieren…"
+ },
+ "pdf": {
+ "versionInfo": "v{version} - erstellt am {date}",
+ "attr": "Kartendaten © OpenStreetMap Contributors, wiederverwendbar unter ODbL",
+ "generatedWith": "Erstellt mit MapComplete.osm.be",
+ "attrBackground": "Hintergrund-Ebene: {background}"
+ },
+ "loginOnlyNeededToEdit": "zum Bearbeiten der Karte",
+ "wikipedia": {
+ "wikipediaboxTitle": "Wikipedia",
+ "searchWikidata": "Suche auf Wikidata",
+ "loading": "Wikipedia laden...",
+ "noResults": "Nichts gefunden für {search}",
+ "doSearch": "Suche oben, um Ergebnisse zu sehen",
+ "noWikipediaPage": "Dieses Wikidata-Element hat noch keine entsprechende Wikipedia-Seite.",
+ "createNewWikidata": "Einen neuen Wikidata-Eintrag erstellen",
+ "failed": "Laden des Wikipedia-Eintrags fehlgeschlagen"
+ },
+ "testing": "Testen - Änderungen werden nicht gespeichert",
+ "openTheMap": "Karte öffnen",
+ "loading": "Laden...",
+ "histogram": {
+ "error_loading": "Das Histogramm konnte nicht geladen werden"
+ }
},
- "morescreen": {
- "intro": "Mehr thematische Karten?
Sammeln Sie gerne Geodaten?
Es sind weitere Themen verfügbar.",
- "requestATheme": "Wenn Sie ein benutzerdefiniertes Thema wünschen, fordern Sie es im Issue Tracker an",
- "streetcomplete": "Eine andere, ähnliche Anwendung ist StreetComplete.",
- "createYourOwnTheme": "Erstellen Sie Ihr eigenes MapComplete-Thema von Grund auf neu",
- "previouslyHiddenTitle": "Zuvor besuchte versteckte Themen",
- "hiddenExplanation": "Diese Themen sind nur für Personen zugänglich, die einen Link erhalten haben. Sie haben {hidden_discovered} von {total_hidden} versteckten Themen entdeckt."
+ "favourite": {
+ "panelIntro": "Ihr persönliches Thema
Aktivieren Sie Ihre Lieblingsebenen aus allen offiziellen Themen",
+ "loginNeeded": "Anmelden
Ein persönliches Layout ist nur für OpenStreetMap-Benutzer verfügbar",
+ "reload": "Daten neu laden"
},
- "readYourMessages": "Bitte lesen Sie alle Ihre OpenStreetMap-Nachrichten, bevor Sie einen neuen Punkt hinzufügen.",
- "fewChangesBefore": "Bitte beantworten Sie ein paar Fragen zu bestehenden Punkten, bevor Sie einen neuen Punkt hinzufügen.",
- "goToInbox": "Posteingang öffnen",
- "getStartedLogin": "Bei OpenStreetMap anmelden, um loszulegen",
- "getStartedNewAccount": " oder ein neues Konto anlegen",
- "noTagsSelected": "Keine Tags ausgewählt",
- "customThemeIntro": "Benutzerdefinierte Themes
Dies sind zuvor besuchte benutzergenerierte Themen.",
- "aboutMapcomplete": "Über MapComplete
Nutzen Sie es, um OpenStreetMap-Informationen zu einem einzigen Thema hinzuzufügen. Beantworten Sie Fragen, und innerhalb weniger Minuten sind Ihre Beiträge überall verfügbar. Der Theme-Maintainer definiert Elemente, Fragen und Sprachen dafür.
Mehr erfahren
MapComplete bietet immer den nächsten Schritt, um mehr über OpenStreetMap zu erfahren.
- Wenn es in eine Website eingebettet wird, verlinkt der iframe zu einer Vollbildversion von MapComplete
- Die Vollbildversion bietet Infos über OpenStreetMap
- Das Betrachten funktioniert ohne Anmeldung, aber das Bearbeiten erfordert ein OSM-Konto.
- Wenn Sie nicht angemeldet sind, werden Sie dazu aufgefordert
- Sobald Sie eine Frage beantwortet haben, können Sie der Karte neue Punkte hinzufügen
- Nach einer Weile werden aktuelle OSM-Tags angezeigt, die später mit dem Wiki verlinkt werden
Haben Sie ein Problem bemerkt? Haben Sie einen Funktionswunsch? Möchten Sie bei der Übersetzung helfen? Besuchen Sie den Quellcode oder den Issue Tracker
Möchten Sie Ihren Fortschritt sehen? Verfolgen Sie die Anzahl der Änderungen auf OsmCha.
",
- "backgroundMap": "Hintergrundkarte",
- "layerSelection": {
- "zoomInToSeeThisLayer": "Ausschnitt vergrößern, um diese Ebene anzuzeigen",
- "title": "Ebenen auswählen"
+ "reviews": {
+ "title": "{count} Rezensionen",
+ "title_singular": "Eine Rezension",
+ "name_required": "Der Name des Objekts ist notwendig, um eine Bewertung erstellen zu können",
+ "no_reviews_yet": "Es gibt noch keine Bewertungen. Hilf mit der ersten Bewertung dem Geschäft und der Open Data Bewegung!",
+ "write_a_comment": "Schreibe einen Kommentar…",
+ "no_rating": "Keine Bewertung vorhanden",
+ "posting_as": "Angemeldet als",
+ "i_am_affiliated": "Ich bin angehörig
Überprüfe, ob du Eigentümer, Ersteller, Angestellter etc. bist",
+ "saving_review": "Speichern…",
+ "saved": "Bewertung gespeichert. Danke fürs Teilen!",
+ "tos": "Mit deiner Bewertung stimmst du den AGB und den Datenschutzrichtlinien von Mangrove.reviews zu",
+ "plz_login": "Anmelden, um eine Bewertung abzugeben",
+ "affiliated_reviewer_warning": "(Partner-Rezension)",
+ "attribution": "Rezensionen werden bereitgestellt von Mangrove Reviews und sind unter CC-BY 4.0 verfügbar."
},
- "weekdays": {
- "abbreviations": {
- "monday": "Mo",
- "tuesday": "Di",
- "wednesday": "Mi",
- "thursday": "Do",
- "friday": "Fr",
- "saturday": "Sa",
- "sunday": "So"
- },
- "monday": "Montag",
- "tuesday": "Dienstag",
- "wednesday": "Mittwoch",
- "thursday": "Donnerstag",
- "friday": "Freitag",
- "saturday": "Samstag",
- "sunday": "Sonntag"
+ "delete": {
+ "explanations": {
+ "selectReason": "Bitte wähle aus, warum dieses Element gelöscht werden soll",
+ "hardDelete": "Dieser Punkt wird in OpenStreetMap gelöscht. Er kann von einem erfahrenen Mitwirkenden wiederhergestellt werden",
+ "softDelete": "Dieses Element wird aktualisiert und in dieser Anwendung ausgeblendet. {reason}"
+ },
+ "reasons": {
+ "test": "Dies war ein Testpunkt - das Element war nie wirklich vorhanden",
+ "notFound": "Dieses Element konnte nicht gefunden werden",
+ "disused": "Dieses Element wird nicht mehr verwendet oder entfernt",
+ "duplicate": "Dieser Punkt ist ein Duplikat eines anderen Elements"
+ },
+ "readMessages": "Du hast ungelesene Nachrichten. Bitte beachte diese, bevor Du einen Punkt löschst - vielleicht hat jemand eine Rückmeldung",
+ "loginToDelete": "Sie müssen angemeldet sein, um einen Punkt zu löschen",
+ "useSomethingElse": "Verwenden Sie zum Löschen stattdessen einen anderen OpenStreetMap-Editor",
+ "partOfOthers": "Dieser Punkt ist Teil eines Weges oder einer Relation und kann nicht direkt gelöscht werden.",
+ "loading": "Untersuchung der Eigenschaften, um zu prüfen, ob dieses Element gelöscht werden kann.",
+ "onlyEditedByLoggedInUser": "Dieser Punkt wurde nur von Ihnen selbst bearbeitet, Sie können ihn sicher löschen.",
+ "isntAPoint": "Es können nur Punkte gelöscht werden, das ausgewählte Element ist ein Weg, eine Fläche oder eine Relation.",
+ "cannotBeDeleted": "Dieses Element kann nicht gelöscht werden",
+ "delete": "Löschen",
+ "isDeleted": "Dieses Element wurde gelöscht",
+ "whyDelete": "Warum sollte dieser Punkt gelöscht werden?",
+ "cancel": "Abbrechen",
+ "safeDelete": "Dieser Punkt kann sicher gelöscht werden.",
+ "notEnoughExperience": "Dieser Punkt wurde von jemand anderem erstellt."
},
- "opening_hours": {
- "error_loading": "Fehler: Diese Öffnungszeiten können nicht angezeigt werden.",
- "open_during_ph": "An Feiertagen ist diese Einrichtung",
- "opensAt": "von",
- "openTill": "bis",
- "not_all_rules_parsed": "Die Öffnungszeiten dieses Geschäfts sind abweichend. Die folgenden Regeln werden im Eingabeelement ignoriert:",
- "closed_until": "Geschlossen bis {date}",
- "closed_permanently": "Geschlossen auf unbestimmte Zeit",
- "open_24_7": "Durchgehend geöffnet",
- "ph_not_known": " ",
- "ph_closed": "geschlossen",
- "ph_open": "geöffnet",
- "loadingCountry": "Land ermitteln…",
- "ph_open_as_usual": "geöffnet wie üblich"
+ "move": {
+ "inviteToMove": {
+ "reasonRelocation": "Dieses Element an einen anderen Ort verschieben, weil es sich verlagert hat",
+ "generic": "Verschiebe diesen Punkt",
+ "reasonInaccurate": "Genauigkeit dieses Punktes verbessern"
+ },
+ "partOfAWay": "Dieses Element ist Teil eines anderen Weges. Verwenden Sie einen anderen Editor, um es zu verschieben.",
+ "cannotBeMoved": "Dieses Element kann nicht verschoben werden.",
+ "cancel": "Verschieben abbrechen",
+ "whyMove": "Warum wollen Sie diesen Punkt verschieben?",
+ "pointIsMoved": "Der Punkt wurde verschoben",
+ "reasons": {
+ "reasonRelocation": "Das Element wurde an einen völlig anderen Ort verlegt",
+ "reasonInaccurate": "Der Standort dieses Elements ist ungenau und sollte um einige Meter verschoben werden"
+ },
+ "loginToMove": "Sie müssen eingeloggt sein, um einen Punkt zu verschieben",
+ "zoomInFurther": "Weiter vergrößern, um die Verschiebung zu bestätigen",
+ "selectReason": "Warum verschieben Sie dieses Element?",
+ "inviteToMoveAgain": "Diesen Punkt erneut verschieben",
+ "moveTitle": "Diesen Punkt verschieben",
+ "confirmMove": "Hierhin verschieben",
+ "partOfRelation": "Dieses Element ist Teil einer Relation. Verwenden Sie einen anderen Editor, um es zu verschieben.",
+ "isWay": "Dieses Element ist ein Weg. Verwenden Sie einen anderen OpenStreetMap-Editor, um ihn zu verschieben.",
+ "isRelation": "Dieses Element ist eine Relation und kann nicht verschoben werden"
},
- "attribution": {
- "mapContributionsByAndHidden": "Die aktuell sichtbaren Daten wurden editiert durch {contributors} und {hiddenCount} weitere Beitragende",
- "mapContributionsBy": "Die aktuell sichtbaren Daten wurden editiert durch {contributors}",
- "iconAttribution": {
- "title": "Verwendete Icons"
- },
- "attributionTitle": "Danksagung",
- "codeContributionsBy": "MapComplete wurde von {contributors} und {hiddenCount} weiteren Beitragenden erstellt",
- "themeBy": "Thema betreut von {author}",
- "attributionContent": "Alle Daten wurden bereitgestellt von OpenStreetMap, frei verwendbar unter der Open Database License.
"
+ "split": {
+ "split": "Teilen",
+ "cancel": "Abbrechen",
+ "loginToSplit": "Sie müssen angemeldet sein, um eine Straße aufzuteilen",
+ "splitTitle": "Wählen Sie auf der Karte aus, wo die Straße geteilt werden soll",
+ "hasBeenSplit": "Dieser Weg wurde geteilt",
+ "inviteToSplit": "Teilen Sie diese Straße in kleinere Segmente auf. Dies ermöglicht es, Straßenabschnitten unterschiedliche Eigenschaften zu geben."
},
- "download": {
- "downloadCSVHelper": "Kompatibel mit LibreOffice Calc, Excel, …",
- "downloadCSV": "Sichtbare Daten als CSV herunterladen",
- "downloadAsPdfHelper": "Ideal zum Drucken der aktuellen Karte",
- "downloadGeoJsonHelper": "Kompatibel mit QGIS, ArcGIS, ESRI, …",
- "downloadAsPdf": "PDF der aktuellen Karte herunterladen",
- "downloadGeojson": "Sichtbare Daten als GeoJSON herunterladen",
- "includeMetaData": "Metadaten übernehmen (letzter Bearbeiter, berechnete Werte, ...)",
- "noDataLoaded": "Noch keine Daten geladen. Download ist in Kürze verfügbar",
- "licenseInfo": "Copyright-Hinweis
Die bereitgestellten Daten sind unter ODbL verfügbar. Die Wiederverwendung ist für jeden Zweck frei, aber - die Namensnennung © OpenStreetMap contributors ist erforderlich
- Jede Änderung unter der gleichen Lizenz veröffentlicht werden
Bitte lesen Sie den vollständigen Copyright-Hinweis für weitere Details.",
- "title": "Sichtbare Daten herunterladen",
- "exporting": "Exportieren…"
- },
- "pdf": {
- "versionInfo": "v{version} - erstellt am {date}",
- "attr": "Kartendaten © OpenStreetMap Contributors, wiederverwendbar unter ODbL",
- "generatedWith": "Erstellt mit MapComplete.osm.be",
- "attrBackground": "Hintergrund-Ebene: {background}"
- },
- "loginOnlyNeededToEdit": "zum Bearbeiten der Karte",
- "wikipedia": {
- "wikipediaboxTitle": "Wikipedia",
- "searchWikidata": "Suche auf Wikidata",
- "loading": "Wikipedia laden...",
- "noResults": "Nichts gefunden für {search}",
- "doSearch": "Suche oben, um Ergebnisse zu sehen",
- "noWikipediaPage": "Dieses Wikidata-Element hat noch keine entsprechende Wikipedia-Seite.",
- "createNewWikidata": "Einen neuen Wikidata-Eintrag erstellen",
- "failed": "Laden des Wikipedia-Eintrags fehlgeschlagen"
- },
- "testing": "Testen - Änderungen werden nicht gespeichert",
- "openTheMap": "Karte öffnen",
- "loading": "Laden...",
- "histogram": {
- "error_loading": "Das Histogramm konnte nicht geladen werden"
+ "multi_apply": {
+ "autoApply": "Wenn Sie die Attribute {attr_names} ändern, werden diese Attribute automatisch auch auf {count} anderen Objekten geändert"
}
- },
- "favourite": {
- "panelIntro": "Ihr persönliches Thema
Aktivieren Sie Ihre Lieblingsebenen aus allen offiziellen Themen",
- "loginNeeded": "Anmelden
Ein persönliches Layout ist nur für OpenStreetMap-Benutzer verfügbar",
- "reload": "Daten neu laden"
- },
- "reviews": {
- "title": "{count} Rezensionen",
- "title_singular": "Eine Rezension",
- "name_required": "Der Name des Objekts ist notwendig, um eine Bewertung erstellen zu können",
- "no_reviews_yet": "Es gibt noch keine Bewertungen. Hilf mit der ersten Bewertung dem Geschäft und der Open Data Bewegung!",
- "write_a_comment": "Schreibe einen Kommentar…",
- "no_rating": "Keine Bewertung vorhanden",
- "posting_as": "Angemeldet als",
- "i_am_affiliated": "Ich bin angehörig
Überprüfe, ob du Eigentümer, Ersteller, Angestellter etc. bist",
- "saving_review": "Speichern…",
- "saved": "Bewertung gespeichert. Danke fürs Teilen!",
- "tos": "Mit deiner Rezension stimmst du den AGB und den Datenschutzrichtlinien von Mangrove.reviews zu",
- "plz_login": "Anmelden, um eine Bewertung abzugeben",
- "affiliated_reviewer_warning": "(Partner-Rezension)",
- "attribution": "Rezensionen werden bereitgestellt von Mangrove Reviews und sind unter CC-BY 4.0 verfügbar."
- },
- "delete": {
- "explanations": {
- "selectReason": "Bitte wähle aus, warum dieses Element gelöscht werden soll",
- "hardDelete": "Dieser Punkt wird in OpenStreetMap gelöscht. Er kann von einem erfahrenen Mitwirkenden wiederhergestellt werden",
- "softDelete": "Dieses Element wird aktualisiert und in dieser Anwendung ausgeblendet. {reason}"
- },
- "reasons": {
- "test": "Dies war ein Testpunkt - das Element war nie wirklich vorhanden",
- "notFound": "Dieses Element konnte nicht gefunden werden",
- "disused": "Dieses Element wird nicht mehr verwendet oder entfernt",
- "duplicate": "Dieser Punkt ist ein Duplikat eines anderen Elements"
- },
- "readMessages": "Du hast ungelesene Nachrichten. Bitte beachte diese, bevor Du einen Punkt löschst - vielleicht hat jemand eine Rückmeldung",
- "loginToDelete": "Sie müssen angemeldet sein, um einen Punkt zu löschen",
- "useSomethingElse": "Verwenden Sie zum Löschen stattdessen einen anderen OpenStreetMap-Editor",
- "partOfOthers": "Dieser Punkt ist Teil eines Weges oder einer Relation und kann nicht direkt gelöscht werden.",
- "loading": "Untersuchung der Eigenschaften, um zu prüfen, ob dieses Element gelöscht werden kann.",
- "onlyEditedByLoggedInUser": "Dieser Punkt wurde nur von Ihnen selbst bearbeitet, Sie können ihn sicher löschen.",
- "isntAPoint": "Es können nur Punkte gelöscht werden, das ausgewählte Element ist ein Weg, eine Fläche oder eine Relation.",
- "cannotBeDeleted": "Dieses Element kann nicht gelöscht werden",
- "delete": "Löschen",
- "isDeleted": "Dieses Element wurde gelöscht",
- "whyDelete": "Warum sollte dieser Punkt gelöscht werden?",
- "cancel": "Abbrechen",
- "safeDelete": "Dieser Punkt kann sicher gelöscht werden.",
- "notEnoughExperience": "Dieser Punkt wurde von jemand anderem erstellt."
- },
- "move": {
- "inviteToMove": {
- "reasonRelocation": "Dieses Element an einen anderen Ort verschieben, weil es sich verlagert hat",
- "generic": "Verschiebe diesen Punkt",
- "reasonInaccurate": "Genauigkeit dieses Punktes verbessern"
- },
- "partOfAWay": "Dieses Element ist Teil eines anderen Weges. Verwenden Sie einen anderen Editor, um es zu verschieben.",
- "cannotBeMoved": "Dieses Element kann nicht verschoben werden.",
- "cancel": "Verschieben abbrechen",
- "whyMove": "Warum wollen Sie diesen Punkt verschieben?",
- "pointIsMoved": "Der Punkt wurde verschoben",
- "reasons": {
- "reasonRelocation": "Das Element wurde an einen völlig anderen Ort verlegt",
- "reasonInaccurate": "Der Standort dieses Elements ist ungenau und sollte um einige Meter verschoben werden"
- },
- "loginToMove": "Sie müssen eingeloggt sein, um einen Punkt zu verschieben",
- "zoomInFurther": "Weiter vergrößern, um die Verschiebung zu bestätigen",
- "selectReason": "Warum verschieben Sie dieses Element?",
- "inviteToMoveAgain": "Diesen Punkt erneut verschieben",
- "moveTitle": "Diesen Punkt verschieben",
- "confirmMove": "Hierhin verschieben",
- "partOfRelation": "Dieses Element ist Teil einer Relation. Verwenden Sie einen anderen Editor, um es zu verschieben.",
- "isWay": "Dieses Element ist ein Weg. Verwenden Sie einen anderen OpenStreetMap-Editor, um ihn zu verschieben.",
- "isRelation": "Dieses Element ist eine Relation und kann nicht verschoben werden"
- },
- "split": {
- "split": "Teilen",
- "cancel": "Abbrechen",
- "loginToSplit": "Sie müssen angemeldet sein, um eine Straße aufzuteilen",
- "splitTitle": "Wählen Sie auf der Karte aus, wo die Straße geteilt werden soll",
- "hasBeenSplit": "Dieser Weg wurde geteilt",
- "inviteToSplit": "Teilen Sie diese Straße in kleinere Segmente auf. Dies ermöglicht es, Straßenabschnitten unterschiedliche Eigenschaften zu geben."
- },
- "multi_apply": {
- "autoApply": "Wenn Sie die Attribute {attr_names} ändern, werden diese Attribute automatisch auch auf {count} anderen Objekten geändert"
- }
-}
\ No newline at end of file
+}
From 6d37fa6dc0cef44095c8d422e1aa37a0ac068d32 Mon Sep 17 00:00:00 2001
From: Artem
Date: Tue, 16 Nov 2021 18:08:38 +0000
Subject: [PATCH 03/23] Translated using Weblate (Russian)
Currently translated at 40.5% (190 of 469 strings)
Translation: MapComplete/themes
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/ru/
---
langs/themes/ru.json | 164 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 162 insertions(+), 2 deletions(-)
diff --git a/langs/themes/ru.json b/langs/themes/ru.json
index 692300526..b907d2977 100644
--- a/langs/themes/ru.json
+++ b/langs/themes/ru.json
@@ -217,7 +217,8 @@
"title": "Кемпинги"
},
"charging_stations": {
- "description": "На этой карте вы можно найти и отметить информацию о зарядных станциях"
+ "description": "На этой карте вы можно найти и отметить информацию о зарядных станциях",
+ "title": "Зарядные станции"
},
"climbing": {
"description": "На этой карте вы найдете различные возможности для скалолазания, такие как скалодромы, залы для боулдеринга и скалы на природе.",
@@ -291,6 +292,15 @@
}
}
}
+ },
+ "units+": {
+ "0": {
+ "applicableUnits": {
+ "0": {
+ "human": " метр"
+ }
+ }
+ }
}
},
"title": "Открытая карта скалолазания"
@@ -302,6 +312,9 @@
"title": {
"render": "Улица"
}
+ },
+ "0": {
+ "name": "Cyclestreets"
}
}
},
@@ -507,5 +520,152 @@
"description": "Нанесите все деревья на карту!",
"shortDescription": "Карта деревьев",
"title": "Деревья"
+ },
+ "hackerspaces": {
+ "layers": {
+ "0": {
+ "name": "Хакерспейс",
+ "tagRenderings": {
+ "hackerspaces-opening_hours": {
+ "mappings": {
+ "0": {
+ "then": "Открыто 24/7"
+ }
+ },
+ "render": "{opening_hours_table()}"
+ }
+ },
+ "presets": {
+ "0": {
+ "title": "Хакерспейс"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": " {name}"
+ }
+ },
+ "render": "Хакерспейс"
+ },
+ "description": "Хакерспейс"
+ }
+ },
+ "title": "Хакерспейсы"
+ },
+ "openwindpowermap": {
+ "layers": {
+ "0": {
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "{name}"
+ }
+ }
+ },
+ "units": {
+ "0": {
+ "applicableUnits": {
+ "0": {
+ "human": " мегаватт"
+ },
+ "1": {
+ "human": " киловатт"
+ },
+ "2": {
+ "human": " ватт"
+ },
+ "3": {
+ "human": " гигаватт"
+ }
+ }
+ },
+ "1": {
+ "applicableUnits": {
+ "0": {
+ "human": " метр"
+ }
+ }
+ }
+ }
+ }
+ },
+ "title": "OpenWindPowerMap"
+ },
+ "postboxes": {
+ "layers": {
+ "1": {
+ "name": "Почтовые отделения",
+ "tagRenderings": {
+ "OH": {
+ "render": "Часы работы: {opening_hours_table()}"
+ }
+ },
+ "title": {
+ "render": "Почтовое отделение"
+ },
+ "presets": {
+ "0": {
+ "title": "Почтовое отделение"
+ }
+ }
+ },
+ "0": {
+ "presets": {
+ "0": {
+ "title": "почтовый ящик"
+ }
+ },
+ "name": "Почтовые ящики",
+ "title": {
+ "render": "Почтовый ящик"
+ }
+ }
+ }
+ },
+ "cafes_and_pubs": {
+ "title": "Кафе и пабы"
+ },
+ "cycle_infra": {
+ "title": "Велосипедная дорожка"
+ },
+ "parkings": {
+ "title": "Парковка"
+ },
+ "sidewalks": {
+ "layers": {
+ "0": {
+ "title": {
+ "render": "{name}"
+ },
+ "name": "Тротуары"
+ }
+ },
+ "title": "Тротуары",
+ "description": "Экспериментальная тема"
+ },
+ "street_lighting": {
+ "layers": {
+ "2": {
+ "name": "Все улицы",
+ "title": {
+ "render": "Улица"
+ }
+ }
+ },
+ "title": "Уличное освещение"
+ },
+ "uk_addresses": {
+ "layers": {
+ "2": {
+ "description": "Адреса"
+ }
+ }
+ },
+ "etymology": {
+ "title": "Открытая этимологическая карта"
+ },
+ "observation_towers": {
+ "title": "Смотровые башни"
}
-}
\ No newline at end of file
+}
From f9ecd3242cb2ef1e232c0cb6597a43555ee38cde Mon Sep 17 00:00:00 2001
From: kjon
Date: Tue, 16 Nov 2021 19:50:28 +0000
Subject: [PATCH 04/23] Translated using Weblate (German)
Currently translated at 97.0% (33 of 34 strings)
Translation: MapComplete/shared-questions
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/shared-questions/de/
---
langs/shared-questions/de.json | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/langs/shared-questions/de.json b/langs/shared-questions/de.json
index 24b5582b6..bf7387197 100644
--- a/langs/shared-questions/de.json
+++ b/langs/shared-questions/de.json
@@ -94,6 +94,22 @@
}
},
"question": "Was ist der entsprechende Artikel auf Wikipedia?"
+ },
+ "service:electricity": {
+ "mappings": {
+ "0": {
+ "then": "Für Kunden stehen im Innenraum viele Steckdosen zur Verfügung, an denen sie ihre Geräte laden können"
+ },
+ "1": {
+ "then": "Für Kunden stehen im Innenraum wenig Steckdosen zur Verfügung, an denen sie ihre Geräte laden können"
+ },
+ "2": {
+ "then": "Für Kunden stehen im Innenraum keine Steckdosen zur Verfügung, aber Laden von Geräte könnte möglich sein, wenn das Personal gefragt wird"
+ },
+ "3": {
+ "then": "Für Kunden stehen im Innenraum keine Steckdosen zur Verfügung"
+ }
+ }
}
}
-}
\ No newline at end of file
+}
From 97923252795478fb23d082caa32d3139e75ee9bf Mon Sep 17 00:00:00 2001
From: Artem
Date: Tue, 16 Nov 2021 20:10:44 +0000
Subject: [PATCH 05/23] Translated using Weblate (Russian)
Currently translated at 56.0% (135 of 241 strings)
Translation: MapComplete/Core
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/ru/
---
langs/ru.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/langs/ru.json b/langs/ru.json
index 9ff8be9c2..f93dbfee4 100644
--- a/langs/ru.json
+++ b/langs/ru.json
@@ -139,7 +139,7 @@
"isDeleted": "Удалено",
"doDelete": "Удалить изображение",
"dontDelete": "Отмена",
- "uploadDone": "Ваше изображение добавлено. Спасибо за помощь!",
+ "uploadDone": "Ваше изображение добавлено. Спасибо за помощь!",
"respectPrivacy": "Не фотографируйте людей и номерные знаки. Не загружайте снимки Google Maps, Google Street View и иные источники с закрытой лицензией.",
"uploadFailed": "Не удалось загрузить изображение. Проверьте, есть ли у вас доступ в Интернет и разрешены ли сторонние API? Браузеры Brave и UMatrix могут блокировать их.",
"ccb": "под лицензией CC-BY",
From 9199262f5c855b06c25f372d7dfbdda931d154a8 Mon Sep 17 00:00:00 2001
From: Artem
Date: Tue, 16 Nov 2021 20:02:51 +0000
Subject: [PATCH 06/23] Translated using Weblate (Russian)
Currently translated at 41.3% (194 of 469 strings)
Translation: MapComplete/themes
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/ru/
---
langs/themes/ru.json | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/langs/themes/ru.json b/langs/themes/ru.json
index b907d2977..c50d57664 100644
--- a/langs/themes/ru.json
+++ b/langs/themes/ru.json
@@ -4,7 +4,7 @@
"title": "Открытая карта АВД (Автоматизированных внешних дефибрилляторов)"
},
"artwork": {
- "description": "Добро пожаловать на Open Artwork Map, карту статуй, бюстов, граффити и других произведений искусства по всему миру",
+ "description": "Добро пожаловать на открытую карта произведений искусства - карту статуй, бюстов, граффити и других произведений искусства по всему миру",
"title": "Открытая карта произведений искусства"
},
"benches": {
@@ -218,7 +218,8 @@
},
"charging_stations": {
"description": "На этой карте вы можно найти и отметить информацию о зарядных станциях",
- "title": "Зарядные станции"
+ "title": "Зарядные станции",
+ "shortDescription": "Карта зарядных станций по всему миру"
},
"climbing": {
"description": "На этой карте вы найдете различные возможности для скалолазания, такие как скалодромы, залы для боулдеринга и скалы на природе.",
@@ -388,10 +389,10 @@
"hydrant-state": {
"mappings": {
"0": {
- "then": "Гидрант (полностью или частично) в рабочем состоянии."
+ "then": "Гидрант (полностью или частично) в рабочем состоянии"
},
"2": {
- "then": "Гидрант демонтирован."
+ "then": "Гидрант демонтирован"
}
}
},
@@ -498,7 +499,7 @@
"title": "Карта карт"
},
"personal": {
- "description": "Создать персональную тему на основе доступных слоёв тем"
+ "description": "Создать персональную тему на основе доступных слоёв тем. Чтобы отобразить некоторые данные, откройте выбор слоя"
},
"playgrounds": {
"description": "На этой карте можно найти игровые площадки и добавить дополнительную информацию",
@@ -590,7 +591,7 @@
}
}
},
- "title": "OpenWindPowerMap"
+ "title": "Открытая карта ветроэнергетики"
},
"postboxes": {
"layers": {
From c5b02629211dbfe173ebdc2f69531536ac2417c6 Mon Sep 17 00:00:00 2001
From: kjon
Date: Tue, 16 Nov 2021 19:53:22 +0000
Subject: [PATCH 07/23] Translated using Weblate (German)
Currently translated at 100.0% (34 of 34 strings)
Translation: MapComplete/shared-questions
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/shared-questions/de/
---
langs/shared-questions/de.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/langs/shared-questions/de.json b/langs/shared-questions/de.json
index bf7387197..27cb65e94 100644
--- a/langs/shared-questions/de.json
+++ b/langs/shared-questions/de.json
@@ -109,7 +109,8 @@
"3": {
"then": "Für Kunden stehen im Innenraum keine Steckdosen zur Verfügung"
}
- }
+ },
+ "question": "Gibt es an dieser Einrichtung Steckdosen, an denen Kunden ihre Geräte laden können?"
}
}
}
From ee126e0f9cdfb6794e87485d1a9f708eba075ecd Mon Sep 17 00:00:00 2001
From: Artem
Date: Tue, 16 Nov 2021 20:04:10 +0000
Subject: [PATCH 08/23] Translated using Weblate (Russian)
Currently translated at 35.2% (12 of 34 strings)
Translation: MapComplete/shared-questions
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/shared-questions/ru/
---
langs/shared-questions/ru.json | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/langs/shared-questions/ru.json b/langs/shared-questions/ru.json
index ace53f5cd..cbafd61c4 100644
--- a/langs/shared-questions/ru.json
+++ b/langs/shared-questions/ru.json
@@ -33,6 +33,13 @@
},
"website": {
"question": "Какой сайт у {name}?"
+ },
+ "dog-access": {
+ "mappings": {
+ "0": {
+ "then": "Собаки разрешены"
+ }
+ }
}
}
-}
\ No newline at end of file
+}
From 7a45477ae24d51124cf5cd5be3a906e9ecb27912 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Mon, 22 Nov 2021 00:02:40 +0100
Subject: [PATCH 09/23] Don't swith the background layer if we don't need to
---
UI/BigComponents/BackgroundMapSwitch.ts | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/UI/BigComponents/BackgroundMapSwitch.ts b/UI/BigComponents/BackgroundMapSwitch.ts
index 5af1c305c..16fd17bb3 100644
--- a/UI/BigComponents/BackgroundMapSwitch.ts
+++ b/UI/BigComponents/BackgroundMapSwitch.ts
@@ -84,9 +84,16 @@ class SingleLayerSelectionButton extends Toggle {
previousLayer.setData(previousLayer.data ?? available.data)
options.currentBackground.setData(previousLayer.data)
})
+
+ options.currentBackground.addCallbackAndRunD(background => {
+ if (background.category === options.preferredType) {
+ previousLayer.setData(background)
+ }
+ })
- available.addCallbackAndRunD(availableLayer => {
+ available.addCallbackD(availableLayer => {
+ // Called whenever a better layer is available
if (previousLayer.data === undefined) {
// PreviousLayer is unset -> we definitively weren't using this category -> no need to switch
@@ -96,6 +103,11 @@ class SingleLayerSelectionButton extends Toggle {
// The previously used layer doesn't match the current layer -> no need to switch
return;
}
+
+ // Is the previous layer still valid? If so, we don't bother to switch
+ if(previousLayer.data.feature === null || GeoOperations.inside(locationControl.data, previousLayer.data.feature)){
+ return
+ }
if (availableLayer.category === options.preferredType) {
// Allright, we can set this different layer
@@ -112,12 +124,6 @@ class SingleLayerSelectionButton extends Toggle {
}
})
- options.currentBackground.addCallbackAndRunD(background => {
- if (background.category === options.preferredType) {
- previousLayer.setData(background)
- }
- })
-
this.activate = () => {
checkPreviousLayer()
if (available.data.category !== options.preferredType) {
From 4366366586dde7843cb8789c3b3ed47e38a61b57 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Mon, 22 Nov 2021 00:50:29 +0100
Subject: [PATCH 10/23] Center label if no icon is present, add login button to
index page
---
Logic/FeatureSource/FeaturePipeline.ts | 6 +-
Models/ThemeConfig/PointRenderingConfig.ts | 23 +-
UI/AllThemesGui.ts | 12 +-
UI/BigComponents/FeaturedMessage.ts | 5 -
assets/layers/type_node/type_node.json | 3 +-
assets/themes/grb_import/grb.json | 556 +++++++--------------
langs/en.json | 3 +-
langs/themes/de.json | 19 +
langs/themes/en.json | 41 +-
langs/themes/nl.json | 2 +-
10 files changed, 283 insertions(+), 387 deletions(-)
diff --git a/Logic/FeatureSource/FeaturePipeline.ts b/Logic/FeatureSource/FeaturePipeline.ts
index 2effce698..d3ae11ac8 100644
--- a/Logic/FeatureSource/FeaturePipeline.ts
+++ b/Logic/FeatureSource/FeaturePipeline.ts
@@ -210,7 +210,11 @@ export default class FeaturePipeline {
handleTile: tile => {
new RegisteringAllFromFeatureSourceActor(tile)
if (tile.layer.layerDef.maxAgeOfCache > 0) {
- self.localStorageSavers.get(tile.layer.layerDef.id).addTile(tile)
+ const saver = self.localStorageSavers.get(tile.layer.layerDef.id)
+ if(saver === undefined){
+ console.error("No localStorageSaver found for layer ",tile.layer.layerDef.id)
+ }
+ saver?.addTile(tile)
}
perLayerHierarchy.get(tile.layer.layerDef.id).registerTile(tile)
tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile))
diff --git a/Models/ThemeConfig/PointRenderingConfig.ts b/Models/ThemeConfig/PointRenderingConfig.ts
index 8e047c24b..44d9f2c99 100644
--- a/Models/ThemeConfig/PointRenderingConfig.ts
+++ b/Models/ThemeConfig/PointRenderingConfig.ts
@@ -47,7 +47,7 @@ export default class PointRenderingConfig extends WithContextLoader {
if (this.location.size == 0) {
throw "A pointRendering should have at least one 'location' to defined where it should be rendered. (At " + context + ".location)"
}
- this.icon = this.tr("icon", "");
+ this.icon = this.tr("icon", undefined);
this.iconBadges = (json.iconBadges ?? []).map((overlay, i) => {
let tr: TagRenderingConfig;
if (typeof overlay.then === "string" &&
@@ -65,8 +65,8 @@ export default class PointRenderingConfig extends WithContextLoader {
};
});
- const iconPath = this.icon.GetRenderValue({id: "node/-1"}).txt;
- if (iconPath.startsWith(Utils.assets_path)) {
+ const iconPath = this.icon?.GetRenderValue({id: "node/-1"})?.txt;
+ if (iconPath !== undefined && iconPath.startsWith(Utils.assets_path)) {
const iconKey = iconPath.substr(Utils.assets_path.length);
if (Svg.All[iconKey] === undefined) {
throw "Builtin SVG asset not found: " + iconPath;
@@ -200,7 +200,8 @@ export default class PointRenderingConfig extends WithContextLoader {
}
- const iconAndBadges = new Combine([this.GetSimpleIcon(tags), this.GetBadges(tags)])
+ const icon = this.GetSimpleIcon(tags)
+ const iconAndBadges = new Combine([, this.GetBadges(tags)])
.SetClass("block relative")
if (!options?.noSize) {
@@ -208,9 +209,21 @@ export default class PointRenderingConfig extends WithContextLoader {
} else {
iconAndBadges.SetClass("w-full h-full")
}
+
+ let label = this.GetLabel(tags)
+ let htmlEl : BaseUIElement;
+ if(icon === undefined && label === undefined){
+ htmlEl = undefined
+ }else if(icon === undefined){
+ htmlEl = label
+ }else if(label === undefined){
+ htmlEl = iconAndBadges
+ }else {
+ htmlEl = new Combine([iconAndBadges, label]).SetStyle("flex flex-col")
+ }
return {
- html: new Combine([iconAndBadges, this.GetLabel(tags)]).SetStyle("flex flex-col"),
+ html: htmlEl,
iconSize: [iconW, iconH],
iconAnchor: [anchorW, anchorH],
popupAnchor: [0, 3 - anchorH],
diff --git a/UI/AllThemesGui.ts b/UI/AllThemesGui.ts
index 0113ddbc1..3c83e2a49 100644
--- a/UI/AllThemesGui.ts
+++ b/UI/AllThemesGui.ts
@@ -8,6 +8,8 @@ import {Utils} from "../Utils";
import LanguagePicker from "./LanguagePicker";
import IndexText from "./BigComponents/IndexText";
import FeaturedMessage from "./BigComponents/FeaturedMessage";
+import Toggle from "./Input/Toggle";
+import {SubtleButton} from "./Base/SubtleButton";
export default class AllThemesGui {
constructor() {
@@ -15,16 +17,22 @@ export default class AllThemesGui {
try {
new FixedUiElement("").AttachTo("centermessage")
- const state = new UserRelatedState(undefined, undefined);
+ const state = new UserRelatedState(undefined);
const intro = new Combine([
+
LanguagePicker.CreateLanguagePicker(Translations.t.index.title.SupportedLanguages())
- .SetClass("absolute top-2 right-3"),
+
+ .SetClass("flex absolute top-2 right-3"),
new IndexText()
]);
new Combine([
intro,
new FeaturedMessage(),
new MoreScreen(state, true),
+ new Toggle(
+ undefined,
+ new SubtleButton(undefined, Translations.t.index.logIn).SetStyle("height:min-content").onClick(() => state.osmConnection.AttemptLogin()),
+ state.osmConnection.isLoggedIn),
Translations.t.general.aboutMapcomplete
.Subs({"osmcha_link": Utils.OsmChaLinkFor(7)})
.SetClass("link-underline"),
diff --git a/UI/BigComponents/FeaturedMessage.ts b/UI/BigComponents/FeaturedMessage.ts
index aede8e416..508f1be0c 100644
--- a/UI/BigComponents/FeaturedMessage.ts
+++ b/UI/BigComponents/FeaturedMessage.ts
@@ -33,16 +33,11 @@ export default class FeaturedMessage extends Combine {
public static WelcomeMessages(): { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] {
const all_messages: { start_date: Date, end_date: Date, message: string, featured_theme?: string }[] = []
- console.log("Constructing the list...", welcome_messages)
for (const i in welcome_messages) {
- console.log(i)
if (isNaN(Number(i))) {
continue
}
- console.log("> ", i)
const wm = welcome_messages[i]
- console.log(wm)
-
if (wm === null) {
continue
}
diff --git a/assets/layers/type_node/type_node.json b/assets/layers/type_node/type_node.json
index 4609041ed..7f9228a51 100644
--- a/assets/layers/type_node/type_node.json
+++ b/assets/layers/type_node/type_node.json
@@ -3,7 +3,8 @@
"description": "This is a priviliged meta_layer which exports _every_ point in OSM. This only works if zoomed below the point that the full tile is loaded (and not loaded via Overpass). Note that this point will also contain a property `parent_ways` which contains all the ways this node is part of as a list. This is mainly used for extremely specialized themes, which do advanced conflations. Expert use only.",
"minzoom": 18,
"source": {
- "osmTags": "id~node/.*"
+ "osmTags": "id~node/.*",
+ "maxCacheAge": 0
},
"mapRendering": null,
"name": "All OSM Nodes",
diff --git a/assets/themes/grb_import/grb.json b/assets/themes/grb_import/grb.json
index 0d6bd41bf..444d0b195 100644
--- a/assets/themes/grb_import/grb.json
+++ b/assets/themes/grb_import/grb.json
@@ -28,9 +28,194 @@
"overrideAll": {
"minzoom": 18
},
- "trackAllNodes": true,
"enableGeolocation": false,
"layers": [
+ {
+ "id": "osm-fixmes",
+ "name": {
+ "nl": "Fixmes op gebouwen"
+ },
+ "passAllFeatures": true,
+ "source": {
+ "maxCacheAge": 0,
+ "osmTags": {
+ "and": [
+ "fixme~*",
+ "building~*"
+ ]
+ }
+ },
+ "calculatedTags": [
+ "_grbNumber=(feat.properties.fixme?.match(/GRB thinks that this has number ([^;]+)/ ) ?? ['','none']) [1]"
+ ],
+ "title": {
+ "render": {
+ "nl": "{addr:street} {addr:housenumber}"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "fixme~*"
+ ]
+ },
+ "then": {
+ "nl": "{fixme}"
+ }
+ }
+ ]
+ },
+ "description": {
+ "nl": "Dit gebouw heeft een foutmelding"
+ },
+ "tagRenderings": [
+ {
+ "id": "grb-housenumber",
+ "render": {
+ "nl": "Het huisnummer is {addr:housenumber}"
+ },
+ "question": {
+ "nl": "Wat is het huisnummer?"
+ },
+ "freeform": {
+ "key": "addr:housenumber"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "not:addr:housenumber=yes",
+ "addr:housenumber="
+ ]
+ },
+ "then": {
+ "nl": "Geen huisnummer"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "addr:housenumber:={_grbNumber}",
+ "fixme="
+ ]
+ },
+ "then": "Het huisnummer is {_grbNumber}, wat overeenkomt met het GRB",
+ "hideInAnswer": {
+ "or": [
+ "_grbNumber=",
+ "_grbNumber=none",
+ "_grbNumber=no number"
+ ]
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "addr:housenumber=",
+ "not:addr:housenumber=yes",
+ "fixme="
+ ]
+ },
+ "then": "Dit gebouw heeft geen nummer, net zoals in het GRB",
+ "hideInAnswer": "_grbNumber!=no number"
+ }
+ ]
+ },
+ {
+ "id": "grb-unit",
+ "question": "Wat is de wooneenheid-aanduiding?",
+ "render": {
+ "nl": "De wooneenheid-aanduiding is {addr:unit} "
+ },
+ "freeform": {
+ "key": "addr:unit"
+ },
+ "mappings": [
+ {
+ "if": "addr:unit=",
+ "then": "Geen wooneenheid-nummer"
+ }
+ ]
+ },
+ {
+ "id": "grb-street",
+ "render": {
+ "nl": "De straat is {addr:street}"
+ },
+ "freeform": {
+ "key": "addr:street"
+ },
+ "question": {
+ "nl": "Wat is de straat?"
+ }
+ },
+ {
+ "id": "grb-fixme",
+ "render": {
+ "nl": "De fixme is {fixme}"
+ },
+ "question": {
+ "nl": "Wat zegt de fixme?"
+ },
+ "freeform": {
+ "key": "fixme"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "fixme="
+ ]
+ },
+ "then": {
+ "nl": "Geen fixme"
+ }
+ }
+ ]
+ },
+ {
+ "id": "grb-min-level",
+ "render": {
+ "nl": "Dit gebouw begint maar op de {building:min_level} verdieping"
+ },
+ "question": {
+ "nl": "Hoeveel verdiepingen ontbreken?"
+ },
+ "freeform": {
+ "key": "building:min_level",
+ "type": "pnat"
+ }
+ }
+ ],
+ "mapRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "label": {
+ "mappings": [
+ {
+ "if": "addr:housenumber~*",
+ "then": "{addr:housenumber}
"
+ }
+ ]
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ }
+ },
+ {
+ "dashArray": "2 2",
+ "color": {
+ "render": "#00f"
+ },
+ "width": {
+ "render": "2"
+ }
+ }
+ ]
+ },
{
"builtin": "type_node",
"isShown": {
@@ -197,191 +382,6 @@
"all_tags"
]
},
- {
- "id": "osm-fixmes",
- "name": {
- "nl": "Fixmes op gebouwen"
- },
- "source": {
- "maxCacheAge": 0,
- "osmTags": {
- "and": [
- "fixme~*",
- "building~*"
- ]
- }
- },
- "calculatedTags": [
- "_grbNumber=(feat.properties.fixme?.match(/GRB thinks that this has number ([^;]+)/ ) ?? ['','none']) [1]"
- ],
- "title": {
- "render": {
- "nl": "{addr:street} {addr:housenumber}"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "fixme~*"
- ]
- },
- "then": {
- "nl": "{fixme}"
- }
- }
- ]
- },
- "description": {
- "nl": "Dit gebouw heeft een foutmelding"
- },
- "tagRenderings": [
- {
- "id": "grb-housenumber",
- "render": {
- "nl": "Het huisnummer is {addr:housenumber}"
- },
- "question": {
- "nl": "Wat is het huisnummer?"
- },
- "freeform": {
- "key": "addr:housenumber"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "not:addr:housenumber=yes",
- "addr:housenumber="
- ]
- },
- "then": {
- "nl": "Geen huisnummer"
- }
- },
- {
- "if": {
- "and": [
- "addr:housenumber:={_grbNumber}",
- "fixme="
- ]
- },
- "then": "Het huisnummer is {_grbNumber}, wat overeenkomt met het GRB",
- "hideInAnswer": {
- "or": [
- "_grbNumber=",
- "_grbNumber=none",
- "_grbNumber=no number"
- ]
- }
- },
- {
- "if": {
- "and": [
- "addr:housenumber=",
- "not:addr:housenumber=yes",
- "fixme="
- ]
- },
- "then": "Dit gebouw heeft geen nummer, net zoals in het GRB",
- "hideInAnswer": "_grbNumber!=no number"
- }
- ]
- },
- {
- "id": "grb-unit",
- "question": "Wat is de wooneenheid-aanduiding?",
- "render": {
- "nl": "De wooneenheid-aanduiding is {addr:unit} "
- },
- "freeform": {
- "key": "addr:unit"
- },
- "mappings": [
- {
- "if": "addr:unit=",
- "then": "Geen wooneenheid-nummer"
- }
- ]
- },
- {
- "id": "grb-street",
- "render": {
- "nl": "De straat is {addr:street}"
- },
- "freeform": {
- "key": "addr:street"
- },
- "question": {
- "nl": "Wat is de straat?"
- }
- },
- {
- "id": "grb-fixme",
- "render": {
- "nl": "De fixme is {fixme}"
- },
- "question": {
- "nl": "Wat zegt de fixme?"
- },
- "freeform": {
- "key": "fixme"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "fixme="
- ]
- },
- "then": {
- "nl": "Geen fixme"
- }
- }
- ]
- },
- {
- "id": "grb-min-level",
- "render": {
- "nl": "Dit gebouw begint maar op de {building:min_level} verdieping"
- },
- "question": {
- "nl": "Hoeveel verdiepingen ontbreken?"
- },
- "freeform": {
- "key": "building:min_level",
- "type": "pnat"
- }
- }
- ],
- "mapRendering": [
- {
- "location": [
- "point",
- "centroid"
- ],
- "label": {
- "mappings": [
- {
- "if": "addr:housenumber~*",
- "then": "{addr:housenumber}
"
- }
- ]
- },
- "iconSize": {
- "render": "40,40,center"
- }
- },
- {
- "dashes": "2 2",
- "color": {
- "render": "#00f"
- },
- "width": {
- "render": "2"
- }
- }
- ]
- },
{
"id": "crab-addresses 2021-10-26",
"source": {
@@ -450,190 +450,6 @@
}
]
},
- {
- "id": "grb-fixmes",
- "name": {
- "nl": "Fixmes op gebouwen"
- },
- "source": {
- "maxCacheAge": 0,
- "osmTags": {
- "and": [
- "fixme~*",
- "building~*"
- ]
- }
- },
- "calculatedTags": [
- "_grbNumber=(feat.properties.fixme?.match(/GRB thinks that this has number ([^;]+)/ ) ?? ['','none']) [1]"
- ],
- "title": {
- "render": {
- "nl": "{addr:street} {addr:housenumber}"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "fixme~*"
- ]
- },
- "then": {
- "nl": "{fixme}"
- }
- }
- ]
- },
- "description": {
- "nl": "Dit gebouw heeft een foutmelding"
- },
- "tagRenderings": [
- {
- "id": "grb-housenumber",
- "render": {
- "nl": "Het huisnummer is {addr:housenumber}"
- },
- "question": {
- "nl": "Wat is het huisnummer?"
- },
- "freeform": {
- "key": "addr:housenumber"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "not:addr:housenumber=yes",
- "addr:housenumber="
- ]
- },
- "then": {
- "nl": "Geen huisnummer"
- }
- },
- {
- "if": {
- "and": [
- "addr:housenumber:={_grbNumber}",
- "fixme="
- ]
- },
- "then": "Het huisnummer is {_grbNumber}, wat overeenkomt met het GRB",
- "hideInAnswer": {
- "or": [
- "_grbNumber=",
- "_grbNumber=none",
- "_grbNumber=no number"
- ]
- }
- },
- {
- "if": {
- "and": [
- "addr:housenumber=",
- "not:addr:housenumber=yes",
- "fixme="
- ]
- },
- "then": "Dit gebouw heeft geen nummer, net zoals in het GRB",
- "hideInAnswer": "_grbNumber!=no number"
- }
- ]
- },
- {
- "id": "grb-unit",
- "question": "Wat is de wooneenheid-aanduiding?",
- "render": {
- "nl": "De wooneenheid-aanduiding is {addr:unit} "
- },
- "freeform": {
- "key": "addr:unit"
- },
- "mappings": [
- {
- "if": "addr:unit=",
- "then": "Geen wooneenheid-nummer"
- }
- ]
- },
- {
- "id": "grb-street",
- "render": {
- "nl": "De straat is {addr:street}"
- },
- "freeform": {
- "key": "addr:street"
- },
- "question": {
- "nl": "Wat is de straat?"
- }
- },
- {
- "id": "grb-fixme",
- "render": {
- "nl": "De fixme is {fixme}"
- },
- "question": {
- "nl": "Wat zegt de fixme?"
- },
- "freeform": {
- "key": "fixme"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "fixme="
- ]
- },
- "then": {
- "nl": "Geen fixme"
- }
- }
- ]
- },
- {
- "id": "grb-min-level",
- "render": {
- "nl": "Dit gebouw begint maar op de {building:min_level} verdieping"
- },
- "question": {
- "nl": "Hoeveel verdiepingen ontbreken?"
- },
- "freeform": {
- "key": "building:min_level",
- "type": "pnat"
- }
- }
- ],
- "mapRendering": [
- {
- "location": [
- "point",
- "centroid"
- ],
- "iconSize": {
- "render": "40,40,center"
- },
- "label": {
- "mappings": [
- {
- "if": "addr:housenumber~*",
- "then": "{addr:housenumber}
"
- }
- ]
- }
- },
- {
- "width": {
- "render": "2"
- },
- "color": {
- "render": "#00f"
- }
- }
- ]
- },
{
"id": "GRB",
"source": {
diff --git a/langs/en.json b/langs/en.json
index b6088e213..59be9ebaa 100644
--- a/langs/en.json
+++ b/langs/en.json
@@ -28,7 +28,8 @@
"title": "Welcome to MapComplete",
"featuredThemeTitle": "Featured this week",
"intro": "MapComplete is an OpenStreetMap-viewer and editor, which shows you information about features of a specific theme and allows to update it.",
- "pickTheme": "Pick a theme below to get started."
+ "pickTheme": "Pick a theme below to get started.",
+ "logIn": "Log in to see other themes you previously visited"
},
"split": {
"split": "Split",
diff --git a/langs/themes/de.json b/langs/themes/de.json
index ff1dd3d63..07f704334 100644
--- a/langs/themes/de.json
+++ b/langs/themes/de.json
@@ -581,6 +581,25 @@
"shortDescription": "Eine Karte zum Ansehen und Bearbeiten verschiedener Elementen der Fahrradinfrastruktur.",
"title": "Fahrradinfrastruktur"
},
+ "cyclenodes": {
+ "description": "Diese Karte zeigt Knotenpunktnetzwerke für Radfahrer und erlaubt auch neue Knoten zu mappen",
+ "layers": {
+ "1": {
+ "presets": {
+ "0": {
+ "title": "Knotenpunkt"
+ },
+ "1": {
+ "title": "Knotenpunkt im Netzwerk Spree-Neiße"
+ }
+ },
+ "title": {
+ "render": "Knotenpunkt"
+ }
+ }
+ },
+ "title": "Fahrrad-Knotenpunktnetzwerke"
+ },
"cyclestreets": {
"description": "Eine Fahrradstraße ist eine Straße, auf der motorisierter Verkehr Radfahrer nicht überholen darf. Sie sind durch ein spezielles Verkehrsschild gekennzeichnet. Fahrradstraßen gibt es in den Niederlanden und Belgien, aber auch in Deutschland und Frankreich. ",
"layers": {
diff --git a/langs/themes/en.json b/langs/themes/en.json
index 84ceba6a3..60d838d9c 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -609,6 +609,45 @@
"shortDescription": "A map where you can view and edit things related to the bicycle infrastructure.",
"title": "Bicycle infrastructure"
},
+ "cyclenodes": {
+ "description": "This map shows cycle node networks and allows you to add new nodes easily",
+ "layers": {
+ "0": {
+ "name": "node to node links",
+ "tagRenderings": {
+ "node2node-survey:date": {
+ "question": "When was this node to node link last surveyed?",
+ "render": "This node to node link was last surveyed on {survey:date}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "node to node link {ref}"
+ }
+ },
+ "render": "node to node link"
+ }
+ },
+ "1": {
+ "name": "nodes",
+ "tagRenderings": {
+ "node-expected_rcn_route_relations": {
+ "question": "How many other cycle nodes does this node link to?",
+ "render": "This node links to {expected_rcn_route_relations} other cycle nodes."
+ },
+ "node-survey:date": {
+ "question": "When was this cycle node last surveyed?",
+ "render": "This cycle node was last surveyed on {survey:date}"
+ }
+ },
+ "title": {
+ "render": "cycle node {rcn_ref}"
+ }
+ }
+ },
+ "title": "Cycle Node Networks"
+ },
"cyclestreets": {
"description": "A cyclestreet is is a street where motorized traffic is not allowed to overtake cyclists. They are signposted by a special traffic sign. Cyclestreets can be found in the Netherlands and Belgium, but also in Germany and France. ",
"layers": {
@@ -795,7 +834,7 @@
"grb": {
"description": "This theme is an attempt to help automating the GRB import.
Note that this is very hacky and 'steals' the GRB data from an external site; in order to do this, you need to install and activate this firefox extension for it to work.",
"layers": {
- "1": {
+ "2": {
"tagRenderings": {
"building type": {
"question": "What kind of building is this?"
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 583b80ef4..63cc77941 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -753,7 +753,7 @@
"grb": {
"description": "GRB Fixup",
"layers": {
- "3": {
+ "0": {
"description": "Dit gebouw heeft een foutmelding",
"name": "Fixmes op gebouwen",
"tagRenderings": {
From 3712000d1855a2bc5161ce34c0f6e9867fdf628f Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Mon, 22 Nov 2021 00:56:32 +0100
Subject: [PATCH 11/23] Translation reset
---
langs/themes/nl.json | 43 -------------------------------------------
1 file changed, 43 deletions(-)
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 63cc77941..31bbe76f0 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -795,49 +795,6 @@
},
"render": "{addr:street} {addr:housenumber}"
}
- },
- "5": {
- "description": "Dit gebouw heeft een foutmelding",
- "name": "Fixmes op gebouwen",
- "tagRenderings": {
- "grb-fixme": {
- "mappings": {
- "0": {
- "then": "Geen fixme"
- }
- },
- "question": "Wat zegt de fixme?",
- "render": "De fixme is {fixme}"
- },
- "grb-housenumber": {
- "mappings": {
- "0": {
- "then": "Geen huisnummer"
- }
- },
- "question": "Wat is het huisnummer?",
- "render": "Het huisnummer is {addr:housenumber}"
- },
- "grb-min-level": {
- "question": "Hoeveel verdiepingen ontbreken?",
- "render": "Dit gebouw begint maar op de {building:min_level} verdieping"
- },
- "grb-street": {
- "question": "Wat is de straat?",
- "render": "De straat is {addr:street}"
- },
- "grb-unit": {
- "render": "De wooneenheid-aanduiding is {addr:unit} "
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "{fixme}"
- }
- },
- "render": "{addr:street} {addr:housenumber}"
- }
}
},
"shortDescription": "Grb Fixup",
From 290cb6ce567a4f662b6fc1a6c3ba94972a547db6 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Mon, 22 Nov 2021 01:02:56 +0100
Subject: [PATCH 12/23] Fix icons
---
Models/ThemeConfig/PointRenderingConfig.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Models/ThemeConfig/PointRenderingConfig.ts b/Models/ThemeConfig/PointRenderingConfig.ts
index 44d9f2c99..38ece18fc 100644
--- a/Models/ThemeConfig/PointRenderingConfig.ts
+++ b/Models/ThemeConfig/PointRenderingConfig.ts
@@ -201,7 +201,7 @@ export default class PointRenderingConfig extends WithContextLoader {
const icon = this.GetSimpleIcon(tags)
- const iconAndBadges = new Combine([, this.GetBadges(tags)])
+ const iconAndBadges = new Combine([icon, this.GetBadges(tags)])
.SetClass("block relative")
if (!options?.noSize) {
From d6b61f6df6f842faa2492c6475431b5b0852a237 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Mon, 22 Nov 2021 03:49:17 +0100
Subject: [PATCH 13/23] More GRB improvements
---
Logic/FeatureSource/FeaturePipeline.ts | 11 +-
UI/BigComponents/ImportButton.ts | 18 +-
assets/themes/grb_import/grb.json | 330 ++++++++++++-------------
langs/en.json | 1 +
langs/themes/en.json | 2 +-
langs/themes/nl.json | 12 +-
6 files changed, 170 insertions(+), 204 deletions(-)
diff --git a/Logic/FeatureSource/FeaturePipeline.ts b/Logic/FeatureSource/FeaturePipeline.ts
index d3ae11ac8..1f49228c3 100644
--- a/Logic/FeatureSource/FeaturePipeline.ts
+++ b/Logic/FeatureSource/FeaturePipeline.ts
@@ -75,7 +75,7 @@ export default class FeaturePipeline {
.map(ch => ch.changes)
.filter(coor => coor["lat"] !== undefined && coor["lon"] !== undefined)
.forEach(coor => {
- state.layoutToUse.layers.forEach(l => self.localStorageSavers.get(l.id).poison(coor["lon"], coor["lat"]))
+ state.layoutToUse.layers.forEach(l => self.localStorageSavers.get(l.id)?.poison(coor["lon"], coor["lat"]))
})
})
@@ -227,10 +227,9 @@ export default class FeaturePipeline {
if (layer.maxAgeOfCache > 0) {
const saver = self.localStorageSavers.get(layer.id)
if(saver === undefined){
- console.warn("No local storage saver found for ", layer.id)
+ console.error("No local storage saver found for ", layer.id)
}else{
-
- saver.MarkVisited(tileId, new Date())
+ saver.MarkVisited(tileId, new Date())
}
}
self.freshnesses.get(layer.id).addTileLoad(tileId, new Date())
@@ -264,7 +263,7 @@ export default class FeaturePipeline {
maxZoomLevel: state.layoutToUse.clustering.maxZoom,
registerTile: (tile) => {
// We save the tile data for the given layer to local storage - data sourced from overpass
- self.localStorageSavers.get(tile.layer.layerDef.id).addTile(tile)
+ self.localStorageSavers.get(tile.layer.layerDef.id)?.addTile(tile)
perLayerHierarchy.get(source.layer.layerDef.id).registerTile(new RememberingSource(tile))
tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile))
@@ -426,7 +425,7 @@ export default class FeaturePipeline {
const tileIndex = Tiles.tile_index(paddedToZoomLevel, x, y)
downloadedLayers.forEach(layer => {
self.freshnesses.get(layer.id).addTileLoad(tileIndex, date)
- self.localStorageSavers.get(layer.id).MarkVisited(tileIndex, date)
+ self.localStorageSavers.get(layer.id)?.MarkVisited(tileIndex, date)
})
})
diff --git a/UI/BigComponents/ImportButton.ts b/UI/BigComponents/ImportButton.ts
index d03bfc45d..f42d0f88b 100644
--- a/UI/BigComponents/ImportButton.ts
+++ b/UI/BigComponents/ImportButton.ts
@@ -302,11 +302,10 @@ export default class ImportButton extends Toggle {
let action: OsmChangeAction & { getPreview(): Promise }
- const theme = o.state.layoutToUse.id
const changes = o.state.changes
let confirm: () => Promise
if (o.conflationSettings !== undefined) {
-
+ // Conflate the way
action = new ReplaceGeometryAction(
o.state,
o.feature,
@@ -323,6 +322,7 @@ export default class ImportButton extends Toggle {
}
} else {
+ // Upload the way to OSM
const geom = o.feature.geometry
let coordinates: [number, number][]
if (geom.type === "LineString") {
@@ -331,7 +331,6 @@ export default class ImportButton extends Toggle {
coordinates = geom.coordinates[0]
}
-
action = new CreateWayWithPointReuseAction(
o.newTags.data,
coordinates,
@@ -341,7 +340,6 @@ export default class ImportButton extends Toggle {
withinRangeOfM: 1,
ifMatches: new Tag("_is_part_of_building", "true"),
mode: "move_osm_point"
-
}]
)
@@ -364,7 +362,13 @@ export default class ImportButton extends Toggle {
})
})
- const confirmButton = new SubtleButton(o.image(), o.message)
+ const tagsExplanation = new VariableUiElement(o.newTags.map(tagsToApply => {
+ const tagsStr = tagsToApply.map(t => t.asHumanString(false, true)).join("&");
+ return Translations.t.general.add.importTags.Subs({tags: tagsStr});
+ }
+ )).SetClass("subtle")
+
+ const confirmButton = new SubtleButton(o.image(), new Combine([o.message, tagsExplanation]).SetClass("flex flex-col"))
confirmButton.onClick(async () => {
{
if (isImported.data) {
@@ -380,9 +384,7 @@ export default class ImportButton extends Toggle {
}
})
- const cancel = new SubtleButton(Svg.close_ui(), Translations.t.general.cancel).onClick(() => {
- importClicked.setData(false)
- })
+ const cancel = new SubtleButton(Svg.close_ui(), Translations.t.general.cancel).onClick(() => importClicked.setData(false))
return new Combine([confirmationMap, confirmButton, cancel]).SetClass("flex flex-col")
diff --git a/assets/themes/grb_import/grb.json b/assets/themes/grb_import/grb.json
index 444d0b195..cccd57716 100644
--- a/assets/themes/grb_import/grb.json
+++ b/assets/themes/grb_import/grb.json
@@ -31,44 +31,150 @@
"enableGeolocation": false,
"layers": [
{
- "id": "osm-fixmes",
- "name": {
- "nl": "Fixmes op gebouwen"
+ "builtin": "type_node",
+ "isShown": {
+ "render": "no"
},
- "passAllFeatures": true,
+ "override": {
+ "calculatedTags": [
+ "_is_part_of_building=feat.get('parent_ways')?.some(p => p.building !== undefined && p.building !== '') ?? false",
+ "_is_part_of_building_passage=feat.get('parent_ways')?.some(p => p.tunnel === 'building_passage') ?? false",
+ "_is_part_of_highway=!feat.get('is_part_of_building_passage') && (feat.get('parent_ways')?.some(p => p.highway !== undefined && p.highway !== '') ?? false)",
+ "_is_part_of_landuse=feat.get('parent_ways')?.some(p => (p.landuse !== undefined && p.landuse !== '') || (p.natural !== undefined && p.natural !== '')) ?? false"
+ ],
+ "mapRendering": [
+ {
+ "icon": "square:#00f",
+ "iconSize": "5,5,center",
+ "location": "point"
+ }
+ ]
+ }
+ },
+ {
+ "id": "OSM-buildings",
+ "name": "All OSM-buildings",
"source": {
- "maxCacheAge": 0,
- "osmTags": {
- "and": [
- "fixme~*",
- "building~*"
- ]
- }
+ "osmTags": "building~*",
+ "maxCacheAge": 0
},
"calculatedTags": [
"_grbNumber=(feat.properties.fixme?.match(/GRB thinks that this has number ([^;]+)/ ) ?? ['','none']) [1]"
],
- "title": {
- "render": {
- "nl": "{addr:street} {addr:housenumber}"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "fixme~*"
- ]
- },
- "then": {
- "nl": "{fixme}"
- }
+ "mapRendering": [
+ {
+ "width": {
+ "render": "2",
+ "mappings": [
+ {
+ "if": "fixme~*",
+ "then": "5"
+ }
+ ]
+ },
+ "color": {
+ "render": "#00c",
+ "mappings": [
+ {
+ "if": "fixme~*",
+ "then": "#ff00ff"
+ },
+ {
+ "if": "building=house",
+ "then": "#a00"
+ },
+ {
+ "if": "building=shed",
+ "then": "#563e02"
+ },
+ {
+ "if": {
+ "or": [
+ "building=garage",
+ "building=garages"
+ ]
+ },
+ "then": "#f9bfbb"
+ },
+ {
+ "if": "building=yes",
+ "then": "#0774f2"
+ }
+ ]
}
- ]
- },
- "description": {
- "nl": "Dit gebouw heeft een foutmelding"
- },
+ },
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "label": {
+ "mappings": [
+ {
+ "if": "addr:housenumber~*",
+ "then": "{addr:housenumber}
"
+ }
+ ]
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ }
+ }
+ ],
+ "title": "OSM-gebouw",
"tagRenderings": [
+ {
+ "id": "building type",
+ "freeform": {
+ "key": "building"
+ },
+ "render": "The building type is {building}",
+ "question": {
+ "en": "What kind of building is this?"
+ },
+ "mappings": [
+ {
+ "if": "building=house",
+ "then": "A normal house"
+ },
+ {
+ "if": "building=detached",
+ "then": "A house detached from other building"
+ },
+ {
+ "if": "building=semidetached_house",
+ "then": "A house sharing only one wall with another house"
+ },
+ {
+ "if": "building=apartments",
+ "then": "An apartment building - highrise for living"
+ },
+ {
+ "if": "building=office",
+ "then": "An office building - highrise for work"
+ },
+ {
+ "if": "building=apartments",
+ "then": "An apartment building"
+ },
+ {
+ "if": "building=shed",
+ "then": "A small shed, e.g. in a garden"
+ },
+ {
+ "if": "building=garage",
+ "then": "A single garage to park a car"
+ },
+ {
+ "if": "building=garages",
+ "then": "A building containing only garages; typically they are all identical"
+ },
+ {
+ "if": "building=yes",
+ "then": "A building - no specification"
+ }
+ ]
+ },
{
"id": "grb-housenumber",
"render": {
@@ -185,153 +291,19 @@
"key": "building:min_level",
"type": "pnat"
}
- }
- ],
- "mapRendering": [
- {
- "location": [
- "point",
- "centroid"
- ],
- "label": {
- "mappings": [
- {
- "if": "addr:housenumber~*",
- "then": "{addr:housenumber}
"
- }
- ]
- },
- "iconSize": {
- "render": "40,40,center"
- }
- },
- {
- "dashArray": "2 2",
- "color": {
- "render": "#00f"
- },
- "width": {
- "render": "2"
- }
- }
- ]
- },
- {
- "builtin": "type_node",
- "isShown": {
- "render": "no"
- },
- "override": {
- "calculatedTags": [
- "_is_part_of_building=feat.get('parent_ways')?.some(p => p.building !== undefined && p.building !== '') ?? false",
- "_is_part_of_building_passage=feat.get('parent_ways')?.some(p => p.tunnel === 'building_passage') ?? false",
- "_is_part_of_highway=!feat.get('is_part_of_building_passage') && (feat.get('parent_ways')?.some(p => p.highway !== undefined && p.highway !== '') ?? false)",
- "_is_part_of_landuse=feat.get('parent_ways')?.some(p => (p.landuse !== undefined && p.landuse !== '') || (p.natural !== undefined && p.natural !== '')) ?? false"
- ],
- "mapRendering": [
- {
- "icon": "square:#00f",
- "iconSize": "5,5,center",
- "location": "point"
- }
- ]
- }
- },
- {
- "id": "OSM-buildings",
- "name": "All OSM-buildings",
- "source": {
- "osmTags": "building~*",
- "maxCacheAge": 0
- },
- "mapRendering": [
- {
- "width": {
- "render": "2"
- },
- "color": {
- "render": "#00c",
- "mappings": [
- {
- "if": "building=house",
- "then": "#a00"
- },
- {
- "if": "building=shed",
- "then": "#563e02"
- },
- {
- "if": {
- "or": [
- "building=garage",
- "building=garages"
- ]
- },
- "then": "#f9bfbb"
- },
- {
- "if": "building=yes",
- "then": "#0774f2"
- }
- ]
- }
- }
- ],
- "title": "OSM-gebouw",
- "tagRenderings": [
- {
- "id": "building type",
- "freeform": {
- "key": "building"
- },
- "render": "The building type is {building}",
- "question": {
- "en": "What kind of building is this?"
- },
- "mappings": [
- {
- "if": "building=house",
- "then": "A normal house"
- },
- {
- "if": "building=detached",
- "then": "A house detached from other building"
- },
- {
- "if": "building=semidetached_house",
- "then": "A house sharing only one wall with another house"
- },
- {
- "if": "building=apartments",
- "then": "An apartment building - highrise for living"
- },
- {
- "if": "building=office",
- "then": "An office building - highrise for work"
- },
- {
- "if": "building=apartments",
- "then": "An apartment building"
- },
- {
- "if": "building=shed",
- "then": "A small shed, e.g. in a garden"
- },
- {
- "if": "building=garage",
- "then": "A single garage to park a car"
- },
- {
- "if": "building=garages",
- "then": "A building containing only garages; typically they are all identical"
- },
- {
- "if": "building=yes",
- "then": "A building - no specification"
- }
- ]
},
"all_tags"
+ ],
+ "filter": [
+ {
+ "id": "has-fixme",
+ "options": [
+ {
+ "osmTags": "fixme~*",
+ "question": "Heeft een FIXME"
+ }
+ ]
+ }
]
},
{
@@ -399,8 +371,10 @@
"point",
"centroid"
],
- "icon": "circle:#bb3322",
- "iconSize": "15,15,center"
+ "iconSize": "15,15,center",
+ "label": {
+ "render": "{HNRLABEL}
"
+ }
}
],
"calculatedTags": [
@@ -507,7 +481,7 @@
},
{
"id": "Import-button",
- "render": "{import_button(OSM-buildings,building=$building; source:geometry:date=$_grb_date; source:geometry:ref=$_grb_ref, Upload this building to OpenStreetMap)}",
+ "render": "{import_button(OSM-buildings,building=$building; source:geometry:date=$_grb_date; source:geometry:ref=$_grb_ref; addr:street=$addr:street; addr:housenumber=$addr:housenumber, Upload this building to OpenStreetMap)}",
"mappings": [
{
"if": "_overlaps_with!=null",
diff --git a/langs/en.json b/langs/en.json
index 59be9ebaa..c26f2cc07 100644
--- a/langs/en.json
+++ b/langs/en.json
@@ -109,6 +109,7 @@
"openLayerControl": "Open the layer control box",
"layerNotEnabled": "The layer {layer} is not enabled. Enable this layer to add a point",
"hasBeenImported": "This point has already been imported",
+ "importTags": "The element will receive {tags}",
"zoomInMore": "Zoom in more to import this feature",
"wrongType": "This element is not a point or a way and can not be imported"
},
diff --git a/langs/themes/en.json b/langs/themes/en.json
index 60d838d9c..66355eefc 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -834,7 +834,7 @@
"grb": {
"description": "This theme is an attempt to help automating the GRB import.
Note that this is very hacky and 'steals' the GRB data from an external site; in order to do this, you need to install and activate this firefox extension for it to work.",
"layers": {
- "2": {
+ "1": {
"tagRenderings": {
"building type": {
"question": "What kind of building is this?"
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 31bbe76f0..d69c60b79 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -753,9 +753,7 @@
"grb": {
"description": "GRB Fixup",
"layers": {
- "0": {
- "description": "Dit gebouw heeft een foutmelding",
- "name": "Fixmes op gebouwen",
+ "1": {
"tagRenderings": {
"grb-fixme": {
"mappings": {
@@ -786,14 +784,6 @@
"grb-unit": {
"render": "De wooneenheid-aanduiding is {addr:unit} "
}
- },
- "title": {
- "mappings": {
- "0": {
- "then": "{fixme}"
- }
- },
- "render": "{addr:street} {addr:housenumber}"
}
}
},
From d7a4037c8c18c8c04c1fabaaa4d05d3bffc83c57 Mon Sep 17 00:00:00 2001
From: Artem
Date: Tue, 16 Nov 2021 20:13:22 +0000
Subject: [PATCH 14/23] Translated using Weblate (Russian)
Currently translated at 30.9% (406 of 1311 strings)
Translation: MapComplete/Layer translations
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layer-translations/ru/
---
langs/layers/ru.json | 39 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/langs/layers/ru.json b/langs/layers/ru.json
index 2373e2b2c..31eed5a9a 100644
--- a/langs/layers/ru.json
+++ b/langs/layers/ru.json
@@ -1410,5 +1410,42 @@
},
"watermill": {
"name": "Водяная мельница"
+ },
+ "charging_station": {
+ "units": {
+ "0": {
+ "applicableUnits": {
+ "0": {
+ "humanSingular": " минута",
+ "human": " минут"
+ },
+ "1": {
+ "human": " часов",
+ "humanSingular": " час"
+ },
+ "2": {
+ "human": " дней",
+ "humanSingular": " день"
+ }
+ }
+ },
+ "1": {
+ "applicableUnits": {
+ "0": {
+ "human": "Вольт"
+ }
+ }
+ },
+ "3": {
+ "applicableUnits": {
+ "0": {
+ "human": "киловатт"
+ },
+ "1": {
+ "human": "мегаватт"
+ }
+ }
+ }
+ }
}
-}
\ No newline at end of file
+}
From 3b321ed827cb35a7df65e2dde77cf9c4d3731271 Mon Sep 17 00:00:00 2001
From: SC
Date: Tue, 16 Nov 2021 23:49:51 +0000
Subject: [PATCH 15/23] Translated using Weblate (Portuguese)
Currently translated at 13.5% (177 of 1311 strings)
Translation: MapComplete/Layer translations
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layer-translations/pt/
---
langs/layers/pt.json | 60 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 59 insertions(+), 1 deletion(-)
diff --git a/langs/layers/pt.json b/langs/layers/pt.json
index 022b6cf8c..57cf3c6ee 100644
--- a/langs/layers/pt.json
+++ b/langs/layers/pt.json
@@ -12,6 +12,64 @@
}
},
"render": "Obra de arte"
+ },
+ "description": "Diversas obras de arte",
+ "name": "Obras de arte",
+ "tagRenderings": {
+ "artwork-artist_name": {
+ "question": "Que artista criou isto?",
+ "render": "Criado por {artist_name}"
+ },
+ "artwork-artwork_type": {
+ "mappings": {
+ "0": {
+ "then": "Arquitetura"
+ },
+ "1": {
+ "then": "Mural"
+ },
+ "2": {
+ "then": "Pintura"
+ },
+ "3": {
+ "then": "Escultura"
+ },
+ "4": {
+ "then": "Estátua"
+ },
+ "5": {
+ "then": "Busto"
+ },
+ "6": {
+ "then": "Pedra"
+ },
+ "7": {
+ "then": "Instalação"
+ },
+ "8": {
+ "then": "Graffiti"
+ },
+ "9": {
+ "then": "Relevo"
+ },
+ "10": {
+ "then": "Azulejo (azulejo decorativo espanhol e português)"
+ },
+ "11": {
+ "then": "Ladrilhos"
+ }
+ },
+ "question": "Qual é o tipo desta obra de arte?",
+ "render": "Isto é um(a) {artwork_type}"
+ },
+ "artwork-website": {
+ "question": "Existe um site com mais informações sobre esta obra de arte?",
+ "render": "Mais informações neste site"
+ },
+ "artwork-wikidata": {
+ "question": "Que entrada no Wikidata corresponde a esta obra de arte?",
+ "render": "Corresponde a {wikidata}"
+ }
}
},
"bench": {
@@ -544,4 +602,4 @@
}
}
}
-}
\ No newline at end of file
+}
From 65843fd482019bae1ff5049f9afa866d3e3ef775 Mon Sep 17 00:00:00 2001
From: kjon
Date: Sun, 21 Nov 2021 16:12:53 +0000
Subject: [PATCH 16/23] Translated using Weblate (German)
Currently translated at 68.7% (901 of 1311 strings)
Translation: MapComplete/Layer translations
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layer-translations/de/
---
langs/layers/de.json | 75 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 73 insertions(+), 2 deletions(-)
diff --git a/langs/layers/de.json b/langs/layers/de.json
index 7563b8c09..d875e1ca6 100644
--- a/langs/layers/de.json
+++ b/langs/layers/de.json
@@ -260,8 +260,15 @@
"mappings": {
"1": {
"then": "Stehbank"
+ },
+ "0": {
+ "then": "Hier gibt es eine normale Sitzbank"
+ },
+ "2": {
+ "then": "Hier gibt es keine Bank"
}
- }
+ },
+ "question": "Was ist das für eine Bank?"
},
"bench_at_pt-name": {
"render": "{name}"
@@ -433,6 +440,38 @@
}
},
"render": "Fahrrad-Reinigungsdienst"
+ },
+ "tagRenderings": {
+ "bike_cleaning-charge": {
+ "mappings": {
+ "0": {
+ "then": "Kostenloser Reinigungsservice"
+ },
+ "2": {
+ "then": "Der Reinigungsservice ist kostenpflichtig"
+ },
+ "1": {
+ "then": "Kostenlose Nutzung"
+ }
+ },
+ "question": "Wie viel kostet die Nutzung des Reinigungsdienstes?",
+ "render": "Die Nutzung des Reinigungsdienstes kostet {charge}"
+ },
+ "bike_cleaning-service:bicycle:cleaning:charge": {
+ "mappings": {
+ "1": {
+ "then": "Kostenlose Nutzung"
+ },
+ "0": {
+ "then": "Der Reinigungsservice ist kostenlos"
+ },
+ "2": {
+ "then": "Der Reinigungsdienst ist kostenpflichtig, aber der Betrag ist nicht bekannt"
+ }
+ },
+ "question": "Wie viel kostet die Nutzung des Reinigungsdienstes?",
+ "render": "Nutzung des Reinigungsservice kostet {service:bicycle:cleaning:charge}"
+ }
}
},
"bike_parking": {
@@ -2872,5 +2911,37 @@
},
"watermill": {
"name": "Wassermühle"
+ },
+ "charging_station": {
+ "filter": {
+ "0": {
+ "options": {
+ "2": {
+ "question": "Ladestation für Autos"
+ },
+ "0": {
+ "question": "Alle Fahrzeugtypen"
+ },
+ "1": {
+ "question": "Ladestation für Fahrräder"
+ }
+ }
+ },
+ "1": {
+ "options": {
+ "0": {
+ "question": "Nur funktionierende Ladestationen"
+ }
+ }
+ },
+ "2": {
+ "options": {
+ "0": {
+ "question": "Alle Anschlüsse"
+ }
+ }
+ }
+ },
+ "description": "Eine Ladestation"
}
-}
\ No newline at end of file
+}
From b636241ca30b737f69b6ac30c976d5832bdbbfa5 Mon Sep 17 00:00:00 2001
From: el_libre como el chaval
Date: Sun, 21 Nov 2021 14:53:35 +0000
Subject: [PATCH 17/23] Translated using Weblate (Catalan)
Currently translated at 100.0% (241 of 241 strings)
Translation: MapComplete/Core
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/ca/
---
langs/ca.json | 428 ++++++++++++++++++++++++++++++++------------------
1 file changed, 277 insertions(+), 151 deletions(-)
diff --git a/langs/ca.json b/langs/ca.json
index fdd9e1a45..73202a6f7 100644
--- a/langs/ca.json
+++ b/langs/ca.json
@@ -1,162 +1,288 @@
{
- "image": {
- "addPicture": "Afegir foto",
- "uploadingPicture": "Pujant la teva imatge…",
- "uploadingMultiple": "Pujant {count} imatges…",
- "pleaseLogin": "Entra per pujar una foto",
- "willBePublished": "La teva foto serà publicada: ",
- "cco": "en domini públic",
- "ccbs": "sota llicència CC-BY-SA",
- "ccb": "sota la llicència CC-BY",
- "uploadFailed": "No s'ha pogut pujar la imatge. Tens Internet i es permeten API de tercers? El navegador Brave o UMatrix podria bloquejar-les.",
- "respectPrivacy": "Respecta la privacitat. No fotografiïs gent o matrícules. No facis servir imatges de Google Maps, Google Streetview o altres fonts amb copyright.",
- "uploadDone": "La teva imatge ha estat afegida. Gràcies per ajudar.",
- "dontDelete": "Cancel·lar",
- "doDelete": "Esborrar imatge",
- "isDeleted": "Esborrada"
- },
- "centerMessage": {
- "loadingData": "Carregant dades...",
- "zoomIn": "Amplia per veure o editar les dades",
- "ready": "Fet.",
- "retrying": "La càrrega de dades ha fallat. Tornant-ho a intentar... ({count})"
- },
- "index": {
- "#": "These texts are shown above the theme buttons when no theme is loaded",
- "intro": "MapComplete és un visor i editor d'OpenStreetMap, que et mostra informació sobre un tema específic",
- "title": "Benvingut/da a MapComplete"
- },
- "general": {
- "loginWithOpenStreetMap": "Entra a OpenStreetMap",
- "welcomeBack": "Has entrat, benvingut.",
- "loginToStart": "Entra per contestar aquesta pregunta",
- "search": {
- "search": "Cerca una ubicació",
- "searching": "Cercant...",
- "nothing": "Res trobat.",
- "error": "Alguna cosa no ha sortit bé..."
+ "image": {
+ "addPicture": "Afegir foto",
+ "uploadingPicture": "Pujant la teva imatge…",
+ "uploadingMultiple": "Pujant {count} imatges…",
+ "pleaseLogin": "Entrar per pujar una foto",
+ "willBePublished": "La teva foto serà publicada: ",
+ "cco": "en domini públic",
+ "ccbs": "sota llicència CC-BY-SA",
+ "ccb": "sota la llicència CC-BY",
+ "uploadFailed": "No s'ha pogut pujar la imatge. Tens Internet i es permeten API de tercers? El navegador Brave o UMatrix podria bloquejar-les.",
+ "respectPrivacy": "Respecta la privacitat. No fotografiïs gent o matrícules. No facis servir imatges de Google Maps, Google Streetview o altres fonts amb copyright.",
+ "uploadDone": "La teva imatge ha estat afegida. Gràcies per ajudar.",
+ "dontDelete": "Cancel·lar",
+ "doDelete": "Esborrar imatge",
+ "isDeleted": "Esborrada",
+ "uploadMultipleDone": "{count} imatges afegides. Gràcies per ajudar.",
+ "toBig": "La teva imatge és massa gran ara que medeix {actual_size}. Usa imatges de com a molt {max_size}"
},
- "returnToTheMap": "Tornar al mapa",
- "save": "Desar",
- "cancel": "Cancel·lar",
- "skip": "Saltar aquesta pregunta",
- "oneSkippedQuestion": "Has ignorat una pregunta",
- "skippedQuestions": "Has ignorat algunes preguntes",
- "number": "nombre",
- "osmLinkTooltip": "Mira aquest objecte a OpenStreetMap per veure historial i altres opcions d'edició",
- "add": {
- "addNew": "Afegir {category} aquí",
- "title": "Vols afegir un punt?",
- "intro": "Has marcat un lloc on no coneixem les dades.
",
- "pleaseLogin": "Entra per afegir un nou punt",
- "zoomInFurther": "Apropa per afegir un punt.",
- "stillLoading": "Les dades es segueixen carregant. Espera una mica abans d'afegir cap punt.",
- "confirmIntro": "Afegir {title} aquí?
El punt que estàs creant el veurà tothom. Només afegeix coses que realment existeixin. Moltes aplicacions fan servir aquestes dades.",
- "confirmButton": "Afegir {category} aquí",
- "openLayerControl": "Obrir el control de capes",
- "layerNotEnabled": "La capa {layer} no està habilitada. Fes-ho per poder afegir un punt a aquesta capa"
+ "centerMessage": {
+ "loadingData": "Carregant dades…",
+ "zoomIn": "Amplia per veure o editar les dades",
+ "ready": "Fet.",
+ "retrying": "La càrrega de dades ha fallat. Tornant-ho a intentar en ({count}) segons…"
},
- "pickLanguage": "Tria idioma: ",
- "about": "Edita facilment i afegeix punts a OpenStreetMap d'una temàtica determinada",
- "nameInlineQuestion": "{category}: El seu nom és $$$",
- "noNameCategory": "{category} sense nom",
- "questions": {
- "phoneNumberOf": "Quin és el telèfon de {category}?",
- "phoneNumberIs": "El número de telèfon de {category} és {phone}",
- "websiteOf": "Quina és la pàgina web de {category}?",
- "websiteIs": "Pàgina web: {website}",
- "emailOf": "Quina és l'adreça de correu-e de {category}?",
- "emailIs": "L'adreça de correu de {category} és {email}"
+ "index": {
+ "#": "Aquests textos es mostren sobre els botons de les peticions quan no hi ha petició carregada",
+ "intro": "MapComplete és un visor i editor d'OpenStreetMap, que et mostra informació sobre elements d'una petició específica i et permet actualitzar-los.",
+ "title": "Benvingut/da a MapComplete",
+ "featuredThemeTitle": "Destacades aquesta setmana",
+ "pickTheme": "Tria una petició de sota per començar."
},
- "openStreetMapIntro": "Un mapa obert
No seria genial si hagués un únic mapa, que tothom pogués utilitzar i editar lliurement?Un sol lloc on emmagatzemar tota la informació geogràfica? Llavors tots aquests llocs web amb mapes diferents petits i incompatibles (que sempre estaran desactulitzats) ja no serien necessaris.
OpenStreetMap és aquest mapa. Les dades del mapa es poden utilitzar de franc (amb atribució i publicació de canvis en aquestes dades). A més a més, tothom pot agregar lliurement noves dades i corregir errors. De fet, aquest lloc web també fa servir OpenStreetMap. Totes les dades provenen d'allà i les teves respostes i correccions també s'afegiran allà.
Moltes persones i aplicacions ja utilitzen OpenStreetMap: Maps.me, OsmAnd, però també els mapes de Facebook, Instagram, Apple i Bing són (en part) impulsats per OpenStreetMap. Si canvies alguna cosa aquí també es reflectirà en aquestes aplicacions en la seva propera actualització.
",
- "sharescreen": {
- "intro": "Comparteix aquest mapa
Comparteix aquest mapa copiant l'enllaç de sota i enviant-lo a amics i família:",
- "addToHomeScreen": "Afegir-lo a la pantalla d'inici
Pots afegir aquesta web a la pantalla d'inici del teu smartphone per a que es vegi més nadiu. Apreta al botó 'afegir a l'inici' a la barra d'adreces URL per fer-ho.",
- "embedIntro": "Inclou-ho a la teva pàgina web
Inclou aquest mapa dins de la teva pàgina web.
T'animem a que ho facis, no cal que demanis permís.
És de franc, i sempre ho serà. A més gent que ho faci servir més valuós serà.",
- "copiedToClipboard": "Enllaç copiat al portapapers",
- "thanksForSharing": "Gràcies per compartir",
- "editThisTheme": "Editar aquest repte",
- "editThemeDescription": "Afegir o canviar preguntes d'aquest repte",
- "fsUserbadge": "Activar el botó d'entrada",
- "fsSearch": "Activar la barra de cerca",
- "fsWelcomeMessage": "Mostra el missatge emergent de benvinguda i pestanyes associades",
- "fsLayers": "Activar el control de capes",
- "fsLayerControlToggle": "Iniciar el control de capes avançat",
- "fsAddNew": "Activar el botó d'afegir nou PDI'",
- "fsGeolocation": "Activar el botó de 'geolocalitza'm' (només mòbil)",
- "fsIncludeCurrentBackgroundMap": "Incloure l'opció de fons actual {name}",
- "fsIncludeCurrentLayers": "Incloure les opcions de capa actual",
- "fsIncludeCurrentLocation": "Incloure localització actual"
+ "general": {
+ "loginWithOpenStreetMap": "Entrar a OpenStreetMap",
+ "welcomeBack": "Has entrat, benvingut/da.",
+ "loginToStart": "Entra per contestar aquesta pregunta",
+ "search": {
+ "search": "Cerca una ubicació",
+ "searching": "Cercant…",
+ "nothing": "Res trobat…",
+ "error": "Alguna cosa no ha sortit bé…"
+ },
+ "returnToTheMap": "Tornar al mapa",
+ "save": "Desar",
+ "cancel": "Cancel·lar",
+ "skip": "Saltar aquesta pregunta",
+ "oneSkippedQuestion": "Has ignorat una pregunta",
+ "skippedQuestions": "Has ignorat algunes preguntes",
+ "number": "nombre",
+ "osmLinkTooltip": "Navega a OpenStreetMap sobre aquest objecte per veure historial i altres opcions d'edició",
+ "add": {
+ "addNew": "Afegir {category} aquí",
+ "title": "Vols afegir un punt?",
+ "intro": "Has marcat un lloc on no coneixem les dades.
",
+ "pleaseLogin": "Entra per afegir un nou punt",
+ "zoomInFurther": "Apropa per afegir un punt.",
+ "stillLoading": "Les dades es segueixen carregant. Espera una mica abans d'afegir cap punt.",
+ "confirmIntro": "Afegir {title} aquí?
El punt que estàs creant el veurà tothom. Només afegeix coses que realment existeixin. Moltes aplicacions fan servir aquestes dades.",
+ "confirmButton": "Afegir {category} aquí",
+ "openLayerControl": "Obrir el control de capes",
+ "layerNotEnabled": "La capa {layer} no està habilitada. Fes-ho per poder afegir un punt a aquesta capa",
+ "warnVisibleForEveryone": "La teva contribució serà vista per tothom",
+ "disableFilters": "Deshabilitar tots els filtres",
+ "disableFiltersExplanation": "Alguns elements s'amagaran en passar un filtre",
+ "addNewMapLabel": "Afegir nou element",
+ "presetInfo": "El nou PDI tindrà les etiquetes {tags}",
+ "zoomInMore": "Ampliar per importar aquest element",
+ "hasBeenImported": "Aquest punt ja ha estat importat"
+ },
+ "pickLanguage": "Tria idioma: ",
+ "about": "Edita facilment i afegeix punts a OpenStreetMap d'una petició determinada",
+ "nameInlineQuestion": "{category}: El seu nom és $$$",
+ "noNameCategory": "{category} sense nom",
+ "questions": {
+ "phoneNumberOf": "Quin és el telèfon de {category}?",
+ "phoneNumberIs": "El número de telèfon de {category} és {phone}",
+ "websiteOf": "Quina és la pàgina web de {category}?",
+ "websiteIs": "Pàgina web: {website}",
+ "emailOf": "Quina és l'adreça de correu-e de {category}?",
+ "emailIs": "L'adreça de correu d'aquesta {category} és {email}"
+ },
+ "openStreetMapIntro": "Un mapa obert
Un que tothom pogués utilitzar i editar lliurement. Un sol lloc on emmagatzemar tota la informació geogràfica. Llavors tots aquests llocs web amb mapes diferents petits i incompatibles (que sempre estaran desactualitzats) ja no serien necessaris.OpenStreetMap no és el mapa de l'enemic. Les dades del mapa es poden utilitzar de franc (amb atribució i publicació de canvis en aquestes dades). A més a més, tothom pot agregar lliurement noves dades i corregir errors. Aquest lloc web també fa servir OpenStreetMap. Totes les dades provenen d'allà i les teves respostes i correccions també s'afegiran allà.
Moltes persones i aplicacions ja utilitzen OpenStreetMap: Organic Maps, OsmAnd, però també els mapes de Facebook, Instagram, Apple i Bing són (en part) impulsats per OpenStreetMap. .
",
+ "sharescreen": {
+ "intro": "Comparteix aquest mapa
Comparteix aquest mapa copiant l'enllaç de sota i enviant-lo a amics i família:",
+ "addToHomeScreen": "Afegir-lo a la pantalla d'inici
Pots afegir aquesta web a la pantalla d'inici del teu smartphone per a que es vegi més nadiu. Apreta al botó 'Afegir a l'inici' a la barra d'adreces URL per fer-ho.",
+ "embedIntro": "Inclou-ho a la teva pàgina web
Inclou aquest mapa dins de la teva pàgina web.
T'animem a que ho facis, no cal que demanis permís.
És de franc, i sempre ho serà. A més gent que ho faci servir més valuós serà.",
+ "copiedToClipboard": "Enllaç copiat al portapapers",
+ "thanksForSharing": "Gràcies per compartir.",
+ "editThisTheme": "Editar aquest repte",
+ "editThemeDescription": "Afegir o canviar preguntes d'aquesta petició",
+ "fsUserbadge": "Activar el botó d'entrada",
+ "fsSearch": "Activar la barra de cerca",
+ "fsWelcomeMessage": "Mostra el missatge emergent de benvinguda i pestanyes associades",
+ "fsLayers": "Activar el control de capes",
+ "fsLayerControlToggle": "Iniciar el control de capes avançat",
+ "fsAddNew": "Activar el botó d'afegir nou PDI'",
+ "fsGeolocation": "Activar el botó de 'geolocalitza'm' (només mòbil)",
+ "fsIncludeCurrentBackgroundMap": "Incloure l'opció de fons actual {name}",
+ "fsIncludeCurrentLayers": "Incloure les opcions de capa actual",
+ "fsIncludeCurrentLocation": "Incloure localització actual"
+ },
+ "morescreen": {
+ "intro": "Més peticions
T'agrada captar dades?
Hi ha més capes disponibles.",
+ "requestATheme": "Si vols que et fem una petició pròpia , demana-la al registre d'incidències",
+ "streetcomplete": "Una altra aplicació similar és StreetComplete.",
+ "createYourOwnTheme": "Crea la teva pròpia petició completa de MapComplete des de zero",
+ "previouslyHiddenTitle": "Peticions visitades i amagades",
+ "hiddenExplanation": "Aquestes peticions només funcionen amb l'enllaç. Has descobert {hidden_discovered} de {total_hidden} peticions amagades."
+ },
+ "readYourMessages": "Llegeix tots els teus missatges d'OpenStreetMap abans d'afegir nous punts.",
+ "fewChangesBefore": "Contesta unes quantes preguntes sobre punts existents abans d'afegir-ne un de nou.",
+ "goToInbox": "Obrir missatges",
+ "getStartedLogin": "Entra a OpenStreetMap per començar",
+ "getStartedNewAccount": " o crea un nou compte",
+ "noTagsSelected": "No s'han seleccionat etiquetes",
+ "backgroundMap": "Mapa de fons",
+ "layerSelection": {
+ "zoomInToSeeThisLayer": "Amplia per veure aquesta capa",
+ "title": "Seleccionar capes"
+ },
+ "weekdays": {
+ "abbreviations": {
+ "monday": "Dil",
+ "tuesday": "Dim",
+ "wednesday": "Dic",
+ "thursday": "Dij",
+ "friday": "Div",
+ "saturday": "Dis",
+ "sunday": "Diu"
+ },
+ "monday": "Dilluns",
+ "tuesday": "Dimarts",
+ "wednesday": "Dimecres",
+ "thursday": "Dijous",
+ "friday": "Divendres",
+ "saturday": "Dissabte",
+ "sunday": "Diumenge"
+ },
+ "opening_hours": {
+ "open_during_ph": "Durant festes està",
+ "opensAt": "des de",
+ "openTill": "fins",
+ "not_all_rules_parsed": "L'horari és complex. Les normes següents seran ignorades en l'entrada:",
+ "closed_until": "Tancat fins {date}",
+ "closed_permanently": "Tancat - sense dia d'obertura conegut",
+ "ph_not_known": " ",
+ "ph_closed": "tancat",
+ "ph_open": "tancat",
+ "error_loading": "Error: no s'han pogut veure aquests horaris.",
+ "open_24_7": "Obert sobre les",
+ "ph_open_as_usual": "obert com sempre",
+ "loadingCountry": "Determinant país…"
+ },
+ "attribution": {
+ "attributionContent": "Totes les dades provenen d'OpenStreetMap, i es poden reutilitzar lliurement sota la Llicència Oberta de Base de Dades (ODbL).
",
+ "attributionTitle": "Avís d’atribució",
+ "mapContributionsByAndHidden": "Les dades mostrades tenen edicions fetes per {contributors} i {hiddenCount} col·laboradors més",
+ "mapContributionsBy": "Les dades mostrades tenen edicions fetes per {contributors}",
+ "iconAttribution": {
+ "title": "Icones utilitzades"
+ },
+ "themeBy": "Tema mantingut per {author}",
+ "codeContributionsBy": "MapComplete ha estat fet per {contributors} i {hiddenCount} més contribuïdors"
+ },
+ "pdf": {
+ "attr": "Dades del mapa © Contribuïdors d'OpenStreetMap, reutilitzable sota ODbL",
+ "attrBackground": "Capa de fons: {background}",
+ "generatedWith": "Generat amb MapComplete.osm.be",
+ "versionInfo": "v{version} - generat el {date}"
+ },
+ "loading": "Carregant...",
+ "download": {
+ "downloadAsPdf": "Baixar un PDF del mapa actual",
+ "downloadCSVHelper": "Compatible amb LibreOffice Calc, Excel, …",
+ "licenseInfo": "Avís de drets de còpia
Les dades proveïdes estan sota ODbL. Es poden reutilitzar de forma gratuïta, però - l'atribució a © Contribuïdors d'OpenStreetMap és obligatòria
- Qualsevol canvi ha de seguir la llicència
Llegeix sencer l'avís de drets de còpia per més detalls.",
+ "title": "Baixar dades visibles",
+ "downloadGeojson": "Baixar dades visibles com a GeoJSON",
+ "downloadGeoJsonHelper": "Compatible amb QGIS, ArcGIS, ESRI, …",
+ "downloadCSV": "Baixar dades visibles com a CSV",
+ "noDataLoaded": "No s'han carregat dades. La baixada estarà disponible aviat",
+ "includeMetaData": "Incloure metadades (darrer editor, valors calculats, ...)",
+ "downloadAsPdfHelper": "Ideal per imprimir el mapa actual",
+ "exporting": "Exportant…"
+ },
+ "loginOnlyNeededToEdit": "Si vols ajudar a editar el mapa",
+ "testing": "Proves - Els canvis no es desaran",
+ "customThemeIntro": "Peticions personalitzades
Aquestes són les peticions generades pels usuaris que ens han visitat abans.",
+ "wikipedia": {
+ "createNewWikidata": "Crear un ítem de Wikidata",
+ "noWikipediaPage": "Aquest ítem de Wikidata no té cap pàgina de Viquipèdia corresponent.",
+ "wikipediaboxTitle": "Viquipèdia",
+ "loading": "Carregant Viquipèdia...",
+ "doSearch": "Cerca adalt per veure els resultats",
+ "noResults": "Res trobat per {search}",
+ "searchWikidata": "Cercar a Wikidata",
+ "failed": "Ha fallat la càrrega d'entrada de la Viquipèdia"
+ },
+ "histogram": {
+ "error_loading": "No s'ha pogut carregar l'histograma"
+ },
+ "openTheMap": "Obrir el mapa",
+ "aboutMapcomplete": "Sobre MapComplete
Usa-ho per afegir informació a OpenStreetMap amb una petició. Respon preguntes i en minuts les teves contribucions estaran disponibles arreu. La persona gestionadora defineix elements, preguntes i idiomes per a fer-ho possible.
Troba més info
MapComplete sempre ofereix el següent pas per aprendre'n més sobre OpenStreetMap.
- Inclòs en una pàgina web et porta a MapComplete a pantalla completa
- Aquesta versió ofereix informació sobre OpenStreetMap
- Veure funciona sense entrar però editar o contribuir requereix un compte d'OSM.
- Si no has entrat et demanarà que ho facis.
- Responent una simple pregunta, pots afegir nous punts al mapa
- Després d'una estona es mostraran les etiquetes actuals , i després els enllaços a la wiki.
Has trobat alguna incidència? Tens alguna petició ? Vols ajudar a traduir? Vés a per accedir al codi font o al registre d'incidències.
Vols veure els teus progressos ? Segueix el recompte d'edicions a OsmCha.
"
},
- "morescreen": {
- "intro": "Més peticions
T'agrada captar dades?
Hi ha més capes disponibles.",
- "requestATheme": "Si vols que et fem una petició pròpia , demana-la aquí.",
- "streetcomplete": "Una altra aplicació similar és StreetComplete.",
- "createYourOwnTheme": "Crea la teva pròpia petició completa de MapComplete des de zero."
+ "favourite": {
+ "panelIntro": "La teva interfície personal
Activa les teves capes favorites de totes les interfícies oficials",
+ "loginNeeded": "Entrar
El disseny personalizat només està disponible pels usuaris d' OpenstreetMap",
+ "reload": "Recarregar dades"
},
- "readYourMessages": "Llegeix tots els teus missatges d'OpenStreetMap abans d'afegir nous punts.",
- "fewChangesBefore": "Contesta unes quantes preguntes sobre punts existents abans d'afegir-ne un de nou.",
- "goToInbox": "Obrir missatges",
- "getStartedLogin": "Entra a OpenStreetMap per començar",
- "getStartedNewAccount": " o crea un nou compte",
- "noTagsSelected": "No s'han seleccionat etiquetes",
- "backgroundMap": "Mapa de fons",
- "layerSelection": {
- "zoomInToSeeThisLayer": "Amplia per veure aquesta capa"
+ "reviews": {
+ "plz_login": "Entra per deixar una revisió",
+ "write_a_comment": "Deixa una revisió…",
+ "no_reviews_yet": "No hi ha revisions encara. Sigues el primer a escriure'n una i ajuda al negoci i a les dades lliures!",
+ "name_required": "És requerit un nom per mostrar i crear revisions",
+ "title_singular": "Una revisió",
+ "title": "{count} revisions",
+ "saved": "Revisió compartida. Gràcies per compartir!",
+ "saving_review": "Desant…",
+ "no_rating": "Sense qualificació",
+ "tos": "Si crees una ressenya estàs d'acord amb els Termes de Servei i política de privacitat de Mangrove.reviews",
+ "posting_as": "Enviat com",
+ "attribution": "Les ressenyes funcionen gràcies a Mangrove Reviews i estan disponibles sota CC-BY 4.0.",
+ "i_am_affiliated": "Tinc alguna filiació amb aquest objecte
MArca-ho si n'ets cap, creador, treballador, …",
+ "affiliated_reviewer_warning": "(Ressenya afiliada)"
},
- "weekdays": {
- "abbreviations": {
- "monday": "Dil",
- "tuesday": "Dim",
- "wednesday": "Dic",
- "thursday": "Dij",
- "friday": "Div",
- "saturday": "Dis",
- "sunday": "Diu"
- },
- "monday": "Dilluns",
- "tuesday": "Dimarts",
- "wednesday": "Dimecres",
- "thursday": "Dijous",
- "friday": "Divendres",
- "saturday": "Dissabte",
- "sunday": "Diumenge"
+ "split": {
+ "split": "Tallar",
+ "loginToSplit": "Has d'entrar per poder tallar una carretera",
+ "splitTitle": "Tria al mapa on tallar aquesta carretera",
+ "hasBeenSplit": "Has tallat aquesta via",
+ "cancel": "Cancel·lar",
+ "inviteToSplit": "Talla aquesta carretera en trossos més petits. Això et permetrà afegir informacions diferents a les parts."
},
- "opening_hours": {
- "open_during_ph": "Durant festes aquest servei és",
- "opensAt": "des de",
- "openTill": "fins",
- "not_all_rules_parsed": "L'horari d'aquesta botiga és complicat. Les normes següents seran ignorades en l'entrada:",
- "closed_until": "Tancat fins {date}",
- "closed_permanently": "Tancat - sense dia d'obertura conegut",
- "ph_not_known": " ",
- "ph_closed": "tancat",
- "ph_open": "tancat"
+ "delete": {
+ "isDeleted": "Aquest element s'esborrarà",
+ "explanations": {
+ "selectReason": "Selecciona per què s'hauria d'esborrar aquest element",
+ "hardDelete": "Aquest punt s'esborrarà a OpenStreetMap. Es podria recuperar per part d'un contribuïdor experimentat",
+ "softDelete": "Aquest element s'actualitzarà i s'amagarà d'aquesta aplicació. {reason}"
+ },
+ "reasons": {
+ "test": "És una prova - l'element realment no existeix.",
+ "duplicate": "Aquest punt és un element duplicat",
+ "disused": "Aquest element ja no funciona o s'ha eliminat",
+ "notFound": "No es pot trobar l'element"
+ },
+ "readMessages": "Tens missatges sense llegir. Llegeix això abans d'esborrar un punt - algú potser t'ha escrit",
+ "safeDelete": "Aquest punt es pot esborrar amb seguretat.",
+ "cancel": "Cancel·lar",
+ "delete": "Esborrar",
+ "partOfOthers": "Aquest punt és part d'una via o relació i no es pot esborrar directament.",
+ "isntAPoint": "Només es poden esborrar punts, l'element seleccionat és una via, àrea o relació.",
+ "onlyEditedByLoggedInUser": "Aquest punt només pot ser editat per tu, el pots esborrar amb seguretat.",
+ "whyDelete": "Per què s'hauria d'esborrar aquest punt?",
+ "cannotBeDeleted": "Aquest element no pot ser esborrat",
+ "loginToDelete": "Has d'entrar per esborrar un punt",
+ "notEnoughExperience": "Aquest punt l'ha fet una altra persona.",
+ "useSomethingElse": "Utilitza un altre editor d'OpenStreetMap per esborrar-lo",
+ "loading": "Inspeccionant propietats per si aquest element pot ser esborrat."
},
- "attribution": {
- "attributionContent": "Totes les dades provenen d'OpenStreetMap, i es poden reutilitzar lliurement sota la Llicència Oberta de Base de Dades (ODbL).
",
- "attributionTitle": "Avís d’atribució",
- "mapContributionsByAndHidden": "Les dades mostrades tenen edicions fetes per {contributors} i {hiddenCount} col·laboradors més",
- "mapContributionsBy": "Les dades mostrades tenen edicions fetes per {contributors}",
- "iconAttribution": {
- "title": "Icones utilitzades"
- },
- "themeBy": "Tema mantingut per {author}"
+ "move": {
+ "inviteToMoveAgain": "Moure aquest punt un altre cop",
+ "whyMove": "Per què vols moure aquest punt?",
+ "reasons": {
+ "reasonRelocation": "L'objecte ha estat recol·locat a una localització totalment diferent",
+ "reasonInaccurate": "La localització d'aquest objecte no és ajustada i s'hauria de moure uns metres"
+ },
+ "confirmMove": "Moure aquí",
+ "isRelation": "Aquest element és una relació i no es pot moure",
+ "inviteToMove": {
+ "reasonRelocation": "Mou aquest objecte a un altre lloc perquè l'han recolocat",
+ "generic": "Moure aquest punt",
+ "reasonInaccurate": "Ajusta la situació del punt"
+ },
+ "cancel": "Cancel·lar moviment",
+ "partOfAWay": "Aquest element és part d'una altra via. Fes servir un altre editor per moure'l.",
+ "pointIsMoved": "Has mogut el punt",
+ "loginToMove": "Has d'entrar per moure aquest punt",
+ "moveTitle": "Moure aquest punt",
+ "partOfRelation": "Aquest element és part d'una relació. Fes servir un altre editor per moure'l.",
+ "isWay": "Aquest element és una via. Fes servir un altre editor d'OpenStreetMap per moure'l.",
+ "zoomInFurther": "Amplia per confirmar aquest moviment",
+ "cannotBeMoved": "Aquest element no es pot moure.",
+ "selectReason": "Per què mous aquest objecte?"
+ },
+ "multi_apply": {
+ "autoApply": "Quan canvies els atributs {attr_names}, aquests també es canviaran a d'altres {count} objectes"
}
- },
- "favourite": {
- "panelIntro": "La teva interfície personal
Activa les teves capes favorites de totes les interfícies oficials",
- "loginNeeded": "Entrar
El disseny personalizat només està disponible pels usuaris d' OpenstreetMap",
- "reload": "Recarregar dades"
- },
- "reviews": {
- "plz_login": "Entra per deixar una revisió",
- "write_a_comment": "Deixa una revisió…",
- "no_reviews_yet": "No hi ha revisions encara. Sigues el primer a escriure'n una i ajuda al negoci i a les dades lliures!",
- "name_required": "És requerit un nom per mostrar i crear revisions",
- "title_singular": "Una revisió",
- "title": "{count} revisions",
- "saved": "Revisió compartida. Gràcies per compartir!",
- "saving_review": "Desant…"
- }
}
From f4a95b7f01d0d5d31de2700ab4bd9266b5d57121 Mon Sep 17 00:00:00 2001
From: Jose Luis Infante
Date: Mon, 22 Nov 2021 13:38:33 +0000
Subject: [PATCH 18/23] Translated using Weblate (Catalan)
Currently translated at 100.0% (241 of 241 strings)
Translation: MapComplete/Core
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/ca/
---
langs/ca.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/langs/ca.json b/langs/ca.json
index 73202a6f7..1648e4a92 100644
--- a/langs/ca.json
+++ b/langs/ca.json
@@ -203,7 +203,7 @@
},
"favourite": {
"panelIntro": "La teva interfície personal
Activa les teves capes favorites de totes les interfícies oficials",
- "loginNeeded": "Entrar
El disseny personalizat només està disponible pels usuaris d' OpenstreetMap",
+ "loginNeeded": "Entrar
El disseny personalitzat només està disponible pels usuaris d'OpenstreetMap",
"reload": "Recarregar dades"
},
"reviews": {
From 35caed2e3e9c808e7add1b564d56fd18f9932a48 Mon Sep 17 00:00:00 2001
From: el_libre como el chaval
Date: Sun, 21 Nov 2021 18:36:39 +0000
Subject: [PATCH 19/23] Translated using Weblate (Catalan)
Currently translated at 100.0% (34 of 34 strings)
Translation: MapComplete/shared-questions
Translate-URL: https://hosted.weblate.org/projects/mapcomplete/shared-questions/ca/
---
langs/shared-questions/ca.json | 117 ++++++++++++++++++++++++++++++++-
1 file changed, 116 insertions(+), 1 deletion(-)
diff --git a/langs/shared-questions/ca.json b/langs/shared-questions/ca.json
index 0967ef424..0d2249f07 100644
--- a/langs/shared-questions/ca.json
+++ b/langs/shared-questions/ca.json
@@ -1 +1,116 @@
-{}
+{
+ "undefined": {
+ "level": {
+ "question": "A quina planta està situat aquest element?",
+ "mappings": {
+ "3": {
+ "then": "Situat a primera planta"
+ },
+ "2": {
+ "then": "Situat a planta zero"
+ },
+ "1": {
+ "then": "Situat a planta zero"
+ },
+ "0": {
+ "then": "Situat a planta subterrani"
+ }
+ },
+ "render": "Situat a la planta {level}"
+ },
+ "email": {
+ "question": "Quina és l'adreça de correu electrònic de {name}?"
+ },
+ "dog-access": {
+ "question": "S'accepten gossos en aquest negoci?",
+ "mappings": {
+ "3": {
+ "then": "S'accepten gossos lliures"
+ },
+ "2": {
+ "then": "S'accepten gossos però lligats"
+ },
+ "1": {
+ "then": "No s'accepten gossos"
+ },
+ "0": {
+ "then": "S'accepten gossos"
+ }
+ }
+ },
+ "description": {
+ "question": "Hi ha quelcom rellevant que no t'hem preguntat? Afegeix-ho aquí.
No repeteixis informació que ja hi és"
+ },
+ "phone": {
+ "question": "Quin és el telèfon de {name}?"
+ },
+ "payment-options": {
+ "question": "Quins mètodes de pagament s'accepten aquí?",
+ "mappings": {
+ "1": {
+ "then": "S'accepten targetes de crèdit"
+ },
+ "0": {
+ "then": "S'accepten diners"
+ }
+ }
+ },
+ "opening_hours": {
+ "render": "Horari d'obertura
{opening_hours_table(opening_hours)}",
+ "question": "Quin és l'horari d'obertura de {name}?"
+ },
+ "service:electricity": {
+ "mappings": {
+ "2": {
+ "then": "No hi ha endolls disponibles per als clients però es pot carregar si es demana als responsables"
+ },
+ "1": {
+ "then": "Hi ha aslguns endolls disponibles per als clients de dins, on es poden carregar els aparells electrònics"
+ },
+ "0": {
+ "then": "Està ple d'endolls pels clients de dins, on es poden carregar els aparells electrònics"
+ },
+ "3": {
+ "then": "No hi ha endolls disponibles per als clients"
+ }
+ },
+ "question": "Aquest servei té endolls elèctrics, disponibles pels clients quan hi són dins?"
+ },
+ "wheelchair-access": {
+ "mappings": {
+ "1": {
+ "then": "És facilment arribable amb cadira de rodes"
+ },
+ "0": {
+ "then": "Aquest lloc està especialment adaptat per a les cadires de rodes"
+ },
+ "3": {
+ "then": "Aquest lloc no és accessible amb cadira de rodes"
+ },
+ "2": {
+ "then": "És possible fer servir cadira de rodes a aquest lloc però no és fàcil"
+ }
+ },
+ "question": "Aquest lloc és accessible amb cadira de rodes?"
+ },
+ "website": {
+ "question": "Quina és la web de {name}?"
+ },
+ "wikipedialink": {
+ "mappings": {
+ "0": {
+ "then": "No enllaçat amb Viquipèdia"
+ }
+ },
+ "question": "Quin és l'ítem a Viquipèdia?"
+ },
+ "wikipedia": {
+ "question": "Quina és la correspondent entitat a Wikidata?",
+ "mappings": {
+ "0": {
+ "then": "No hi ha cap enllaça a Viquipèdia encara"
+ }
+ }
+ }
+ }
+}
From d68ef6b739d27a98d5d6aceaff2cfe5bf41070fc Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Tue, 23 Nov 2021 00:15:10 +0100
Subject: [PATCH 20/23] New graphs, add linecharts, add running weekly average
number of changesets chart
---
... per contributor for theme cycle_infra.png | Bin 139089 -> 0 bytes
Docs/Tools/GenPlot.py | 12 +
Docs/Tools/GenerateSeries.ts | 100 +-
Docs/Tools/centerpoints.geojson | 4194 ++-
.../Changesets per day (line) in 2020.png | Bin 0 -> 300333 bytes
.../Changesets per day (line) in 2021.png | Bin 0 -> 665571 bytes
.../graphs/Changesets per day (line).png | Bin 0 -> 337212 bytes
.../graphs/Changesets per host in 2021.png | Bin 279143 -> 275069 bytes
Docs/Tools/graphs/Changesets per host.png | Bin 236379 -> 233826 bytes
.../Changesets per theme (bar) in 2021.png | Bin 530883 -> 575540 bytes
.../graphs/Changesets per theme (bar).png | Bin 558617 -> 599590 bytes
.../Changesets per theme (pie) in 2021.png | Bin 723588 -> 787501 bytes
.../graphs/Changesets per theme (pie).png | Bin 748911 -> 806228 bytes
.../graphs/Changesets per theme in 2021.png | Bin 455409 -> 496585 bytes
Docs/Tools/graphs/Changesets per theme.png | Bin 478961 -> 513984 bytes
.../Changesets per version number in 2021.png | Bin 492627 -> 537803 bytes
.../graphs/Changesets per version number.png | Bin 545340 -> 584427 bytes
...ntributors per changeset count in 2021.png | Bin 143874 -> 146926 bytes
.../Contributors per changeset count.png | Bin 150400 -> 135249 bytes
.../graphs/Contributors per day in 2021.png | Bin 152004 -> 152802 bytes
Docs/Tools/graphs/Contributors per day.png | Bin 125803 -> 127025 bytes
.../Deletion-changesets per theme in 2021.png | Bin 112811 -> 119083 bytes
.../graphs/Deletion-changesets per theme.png | Bin 112811 -> 119083 bytes
.../Tools/graphs/Empty changesets by date.png | Bin 101467 -> 101844 bytes
Docs/Tools/stats/stats.2021-11.json | 27972 +++++++++++++++-
25 files changed, 32238 insertions(+), 40 deletions(-)
delete mode 100644 Docs/Tools/Cumulative changesets per contributor for theme cycle_infra.png
create mode 100644 Docs/Tools/graphs/Changesets per day (line) in 2020.png
create mode 100644 Docs/Tools/graphs/Changesets per day (line) in 2021.png
create mode 100644 Docs/Tools/graphs/Changesets per day (line).png
diff --git a/Docs/Tools/Cumulative changesets per contributor for theme cycle_infra.png b/Docs/Tools/Cumulative changesets per contributor for theme cycle_infra.png
deleted file mode 100644
index bd34be595a452d7de1a932fb1be6847570c19e16..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 139089
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