From d05b0b9562275544c463167f11e5f7a0f5930e90 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 9 Aug 2023 14:05:37 +0200 Subject: [PATCH 01/27] Added translation using Weblate (Hebrew) --- langs/layers/he.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 langs/layers/he.json diff --git a/langs/layers/he.json b/langs/layers/he.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/langs/layers/he.json @@ -0,0 +1 @@ +{} From e7709237dba71b0ed65cedab7c8326a19dd3392b Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 9 Aug 2023 14:06:20 +0200 Subject: [PATCH 02/27] Added translation using Weblate (Hebrew (Israel)) --- langs/layers/he_IL.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 langs/layers/he_IL.json diff --git a/langs/layers/he_IL.json b/langs/layers/he_IL.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/langs/layers/he_IL.json @@ -0,0 +1 @@ +{} From ecfa262518e94989d2b0c4242815e1ab0a20cb7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=9E=D7=95=D7=99=D7=9E=D7=95=D7=99=20=D7=98=D7=A8=D7=99?= =?UTF-8?q?=D7=99=D7=A6=D7=A7=D7=99?= Date: Thu, 10 Aug 2023 08:45:18 +0000 Subject: [PATCH 03/27] Translated using Weblate (Hebrew) Currently translated at 4.5% (139 of 3054 strings) Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/he/ --- langs/layers/he.json | 497 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 496 insertions(+), 1 deletion(-) diff --git a/langs/layers/he.json b/langs/layers/he.json index 0967ef424..8e13e09e0 100644 --- a/langs/layers/he.json +++ b/langs/layers/he.json @@ -1 +1,496 @@ -{} +{ + "address": { + "description": "כתובות", + "tagRenderings": { + "fixme": { + "question": "מה צריך לתקן כאן? אנא הסבר" + }, + "housenumber": { + "mappings": { + "0": { + "then": "למבנה זה אין מספר בית" + } + }, + "question": "מה המספר של הבית הזה?", + "render": "מספר הבית הוא {addr:housenumber}" + }, + "street": { + "question": "באיזה רחוב נמצאת הכתובת הזו?", + "render": "כתובת זו נמצאת ברחוב {addr:street}" + } + }, + "title": { + "render": "כתובת ידועה" + } + }, + "advertising": { + "name": "פרסומת", + "presets": { + "0": { + "description": "מבנה פרסום חוצות גדול, שנמצא בדרך כלל באזורים עתירי תנועה כמו לצד כבישים סואנים", + "title": "שלט חוצות" + }, + "3": { + "title": "" + } + }, + "tagRenderings": { + "luminous_or_lit_advertising": { + "override": { + "+mappings": { + "0": { + "then": "זהו תאורת ניאון" + } + } + } + }, + "message_type": { + "mappings": { + "0": { + "then": "מסר מסחרי" + }, + "1": { + "then": "מידע מקומי" + }, + "2": { + "then": "מידע אבטחה" + }, + "3": { + "then": "פרסום בחירות" + }, + "4": { + "then": "מידע הקשור לתיאטרון, קונצרטים,…" + }, + "7": { + "then": "מסר דתי" + } + }, + "question": "איזה סוג הודעה מוצגת?" + }, + "operator": { + "question": "מי מפעיל את התכונה הזו?", + "render": "מופעל על ידי {operator}" + }, + "type": { + "mappings": { + "0": { + "then": "זה שלט חוצות" + }, + "3": { + "then": "זה דגל" + } + }, + "render": "זהו {advertising}" + } + }, + "title": { + "mappings": { + "0": { + "then": "שלט חוצות" + } + } + } + }, + "ambulancestation": { + "description": "תחנת אמבולנס היא אזור לאחסון רכבי אמבולנס, ציוד רפואי, ציוד מגן אישי וציוד רפואי אחר.", + "name": "מפת תחנות אמבולנסים", + "presets": { + "0": { + "description": "הוספת תחנת אמבולנס למפה", + "title": "" + } + }, + "tagRenderings": { + "ambulance-agency": { + "question": "איזו סוכנות מפעילה את התחנה הזו?", + "render": "תחנה זו מופעלת על ידי {operator}." + }, + "ambulance-name": { + "question": "איך קוראים לתחנת האמבולנס הזו?", + "render": "תחנה זו נקראת {name}." + }, + "ambulance-operator-type": { + "mappings": { + "0": { + "then": "התחנה מופעלת על ידי הממשלה." + }, + "1": { + "then": "התחנה מופעלת על ידי ארגון קהילתי, או לא רשמי." + }, + "2": { + "then": "התחנה מופעלת על ידי קבוצה רשמית של מתנדבים." + }, + "3": { + "then": "‍התחנה מופעלת באופן פרטי." + } + }, + "question": "כיצד מסווג מפעיל התחנה?" + }, + "ambulance-place": { + "question": "היכן ממוקמת התחנה? (למשל שם השכונה, הכפר או העיירה)", + "render": "תחנה זו נמצאת בתוך {addr:place}." + }, + "ambulance-street": { + "question": "מה שם הרחוב שבו נמצאת התחנה?", + "render": "תחנה זו נמצאת לאורך כביש מהיר בשם {addr:street}." + } + }, + "title": { + "render": "תחנת אמבולנס" + } + }, + "artwork": { + "name": "יצירות אמנות", + "tagRenderings": { + "artwork-artist-wikidata": { + "question": "מי יצר את היצירה הזו?" + }, + "artwork-artist_name": { + "question": "איזה אמן יצר את זה?", + "render": "נוצר על ידי {artist_name}" + }, + "artwork-artwork_type": { + "mappings": { + "0": { + "then": "אדריכלות" + }, + "1": { + "then": "ציור קיר" + }, + "11": { + "then": "יצירת פסיפס" + }, + "12": { + "then": "גילוף בעץ" + }, + "2": { + "then": "ציור" + }, + "3": { + "then": "פיסול" + }, + "4": { + "then": "פסל" + }, + "6": { + "then": "אבן" + } + }, + "question": "מהו סוג היצירה הזו?", + "render": "זהו {artwork_type}" + }, + "artwork-website": { + "question": "האם יש אתר אינטרנט עם מידע נוסף על היצירה הזו?" + }, + "artwork_subject": { + "question": "מה מתארת היצירה הזו?" + }, + "doubles_as_bench": { + "mappings": { + "0": { + "then": "יצירה זו משמשת גם כספסל" + }, + "1": { + "then": "יצירה זו אינה משמשת כספסל" + }, + "2": { + "then": "יצירה זו אינה משמשת כספסל" + } + }, + "question": "האם היצירה הזו משמשת כספסל?" + } + }, + "title": { + "mappings": { + "0": { + "then": "יצירת אומנות {name}" + } + }, + "render": "יצירת אומנות" + } + }, + "atm": { + "description": "כספומטים למשיכת כסף", + "filter": { + "1": { + "options": { + "0": { + "question": "עם פלט דיבור" + } + } + } + }, + "name": "כספומטים", + "tagRenderings": { + "brand": { + "freeform": { + "placeholder": "שם מותג" + }, + "question": "איזה מותג הכספומט הזה?", + "render": "המותג של כספומט זה הוא {brand}" + }, + "cash_in": { + "mappings": { + "0": { + "then": "כנראה שלא תוכל להפקיד מזומן בכספומט הזה" + }, + "1": { + "then": "אתה יכול להפקיד מזומן לכספומט זה" + }, + "2": { + "then": "לא ניתן להפקיד מזומן לכספומט זה" + } + }, + "question": "האם אתה יכול להפקיד מזומן בכספומט הזה?" + }, + "cash_out": { + "mappings": { + "0": { + "then": "אתה יכול למשוך מזומן מהכספומט הזה" + }, + "1": { + "then": "אתה יכול למשוך מזומן מהכספומט הזה" + }, + "2": { + "then": "לא ניתן למשוך מזומן מכספומט זה" + } + }, + "question": "האם אתה יכול למשוך מזומן מהכספומט הזה?" + }, + "cash_out-denominations-notes": { + "question": "אילו הערות תוכל למשוך כאן?" + }, + "name": { + "render": "שמו של כספומט זה הוא {name}" + }, + "operator": { + "freeform": { + "placeholder": "מפעיל" + }, + "question": "איזו חברה מפעילה את הכספומט הזה?", + "render": "הכספומט מופעל על ידי {operator}" + }, + "speech_output": { + "mappings": { + "0": { + "then": "לכספומט זה יש פלט דיבור, זמין בדרך כלל דרך שקע אוזניות" + }, + "1": { + "then": "לכספומט זה אין פלט דיבור" + } + }, + "question": "האם לכספומט הזה יש פלט דיבור למשתמשים לקויי ראייה?" + }, + "speech_output_language": { + "render": { + "special": { + "question": "באילו שפות יש לכספומט הזה פלט דיבור?", + "render_list_item": "לכספומט הזה יש פלט דיבור ב {language():font-bold}", + "render_single_language": "לכספומט הזה יש פלט דיבור ב {language():font-bold}" + } + } + } + }, + "title": { + "mappings": { + "0": { + "then": "כספומט {brand}" + } + }, + "render": "כספומט" + } + }, + "bank": { + "description": "מוסד פיננסי להפקדת כסף", + "filter": { + "1": { + "options": { + "0": { + "question": "עם כספומט" + } + } + } + }, + "name": "בנקים", + "tagRenderings": { + "has_atm": { + "mappings": { + "0": { + "then": "לבנק הזה יש כספומט" + } + }, + "question": "האם לבנק הזה יש כספומט?" + } + } + }, + "barrier": { + "name": "מחסומים", + "title": { + "render": "מחסום" + } + }, + "bench": { + "description": "ספסל הוא משטח עץ, מתכת, אבן, ... בו אדם יכול לשבת. השכבות הללו מדמות אותן ושואלות עליהן מספר שאלות.", + "filter": { + "0": { + "options": { + "0": { + "question": "הוא אנדרטה" + } + } + }, + "1": { + "options": { + "0": { + "question": "עם ובלי משענת גב" + }, + "1": { + "question": "בעל משענת גב" + }, + "2": { + "question": "אין משענת גב" + } + } + } + }, + "name": "ספסלים", + "presets": { + "0": { + "title": "" + } + }, + "tagRenderings": { + "bench-artwork": { + "mappings": { + "0": { + "then": "לספסל זה יצירת אמנות משולבת" + }, + "1": { + "then": "לספסל זה אין יצירת אמנות משולבת" + } + }, + "question": "האם לספסל הזה יש אלמנט אומנותי?" + }, + "bench-backrest": { + "mappings": { + "0": { + "then": "ספסל זה דו צדדי וחולק את משענת הגב" + }, + "1": { + "then": "יש משענת גב" + } + }, + "question": "האם לספסל הזה יש משענת?" + }, + "bench-colour": { + "mappings": { + "0": { + "then": "צבע: חום" + }, + "1": { + "then": "צבע: ירוק" + }, + "2": { + "then": "צבע: אפור" + }, + "3": { + "then": "צבע: לבן" + }, + "4": { + "then": "צבע: אדום" + }, + "5": { + "then": "צבע: שחור" + }, + "6": { + "then": "צבע: כחול" + }, + "7": { + "then": "צבע: צהוב" + } + }, + "question": "איזה צבע יש לספסל הזה?", + "render": "צבע: {colour}" + }, + "bench-material": { + "mappings": { + "0": { + "then": "מקום הישיבה עשוי מעץ" + }, + "1": { + "then": "מקום הישיבה עשוי מתכת" + }, + "2": { + "then": "מקום הישיבה עשוי אבן" + }, + "3": { + "then": "מקום הישיבה עשוי בטון" + }, + "4": { + "then": "מקום הישיבה עשוי פלסטיק" + }, + "5": { + "then": "מקום הישיבה עשוי פלדה" + } + }, + "question": "ממה עשוי הספסל (המושב)?", + "render": "חומר: {material}" + }, + "bench-seats": { + "question": "כמה מושבים יש לספסל הזה?", + "render": "{seats} מושבים" + }, + "bench-survey:date": { + "mappings": { + "0": { + "then": "נבדק היום!" + } + }, + "question": "מתי הספסל הזה נבדק לאחרונה?", + "render": "ספסל זה נבדק לאחרונה ב {survey:date}" + } + }, + "title": { + "render": "ספסל" + } + }, + "bench_at_pt": { + "title": { + "mappings": { + "0": { + "then": "ספסל בתחנת תחבורה ציבורית" + }, + "1": { + "then": "ספסל בסככה" + } + }, + "render": "ספסל" + } + }, + "defibrillator": { + "description": "שכבה המציגה דפיברילטורים שניתן להשתמש בהם במקרה חירום. זה מכיל דפיברילטורים ציבוריים, אך גם דפיברילטורים שעשויים להזדקק לצוות כדי להביא את המכשיר בפועל" + }, + "doctors": { + "description": "שכבה זו מציגה מרפאות רופאים", + "name": "רופאים", + "tagRenderings": { + "name": { + "question": "מה השם של מקום הרופאים הזה?" + }, + "specialty": { + "render": "רופא זה מתמחה ב {healthcare:speciality}" + } + } + }, + "entrance": { + "tagRenderings": { + "Entrance type": { + "mappings": { + "7": { + "then": "זו יציאת חירום" + } + } + } + } + } +} From 6bcad5e3442dad7adbdffe82d0f2c4df7c150ffa Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 11 Aug 2023 13:49:10 +0200 Subject: [PATCH 04/27] Update translation files Updated by "Remove blank strings" hook in Weblate. Translation: MapComplete/Layer translations Translate-URL: https://hosted.weblate.org/projects/mapcomplete/layers/ --- langs/layers/he.json | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/langs/layers/he.json b/langs/layers/he.json index 8e13e09e0..901b6edba 100644 --- a/langs/layers/he.json +++ b/langs/layers/he.json @@ -29,9 +29,6 @@ "0": { "description": "מבנה פרסום חוצות גדול, שנמצא בדרך כלל באזורים עתירי תנועה כמו לצד כבישים סואנים", "title": "שלט חוצות" - }, - "3": { - "title": "" } }, "tagRenderings": { @@ -96,8 +93,7 @@ "name": "מפת תחנות אמבולנסים", "presets": { "0": { - "description": "הוספת תחנת אמבולנס למפה", - "title": "" + "description": "הוספת תחנת אמבולנס למפה" } }, "tagRenderings": { @@ -354,11 +350,6 @@ } }, "name": "ספסלים", - "presets": { - "0": { - "title": "" - } - }, "tagRenderings": { "bench-artwork": { "mappings": { From dffe108ae466e25aa2d200f956e4b977e8671607 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 9 Aug 2023 14:05:25 +0200 Subject: [PATCH 05/27] Added translation using Weblate (Hebrew) --- langs/he.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 langs/he.json diff --git a/langs/he.json b/langs/he.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/langs/he.json @@ -0,0 +1 @@ +{} From 3d8781eebebcca407e5aea3b045362341a7b76e0 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 9 Aug 2023 14:06:20 +0200 Subject: [PATCH 06/27] Added translation using Weblate (Hebrew (Israel)) --- langs/he_IL.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 langs/he_IL.json diff --git a/langs/he_IL.json b/langs/he_IL.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/langs/he_IL.json @@ -0,0 +1 @@ +{} From 0754e910464f9d98012f31f1d1f9f223e1a191ca Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 9 Aug 2023 14:06:26 +0200 Subject: [PATCH 07/27] Added translation using Weblate (Hebrew) --- langs/themes/he.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 langs/themes/he.json diff --git a/langs/themes/he.json b/langs/themes/he.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/langs/themes/he.json @@ -0,0 +1 @@ +{} From d7065667f098f6646444eca3351d742f495acf6c Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 9 Aug 2023 14:07:04 +0200 Subject: [PATCH 08/27] Added translation using Weblate (Hebrew (Israel)) --- langs/themes/he_IL.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 langs/themes/he_IL.json diff --git a/langs/themes/he_IL.json b/langs/themes/he_IL.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/langs/themes/he_IL.json @@ -0,0 +1 @@ +{} From 37692984420b73e0f0e9c8351eb19e4543243cc3 Mon Sep 17 00:00:00 2001 From: Lucas Date: Fri, 11 Aug 2023 13:16:00 +0000 Subject: [PATCH 09/27] Translated using Weblate (French) Currently translated at 71.7% (360 of 502 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/fr/ --- langs/fr.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/langs/fr.json b/langs/fr.json index 7527e367f..5dd525d02 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -3,6 +3,7 @@ "title": "Fonctionnalités avancées" }, "centerMessage": { + "allFilteredAway": "Aucun objet dans la vue actuelle ne répond aux filtres", "loadingData": "Chargement des données…", "ready": "Fini !", "retrying": "Le chargement a échoué. Nouvel essai dans {count} secondes…", @@ -11,6 +12,7 @@ "communityIndex": { "available": "Cette communauté parle {native}", "intro": "Prenez contact avec d'autres personnes pour les connaître, apprendre d'elles, …", + "notAvailable": "Cette communauté ne parle pas {native}", "title": "Index communautaire" }, "delete": { @@ -48,25 +50,33 @@ "reload": "Recharger les données" }, "flyer": { + "cyclofix": "Les pompes à vélo, les stations de réparation, les points d'eau potable et les vélocistes sont sur CycloFix", "description": "Un flyer format A4 paysage pour promouvoir MapComplete", "editing": { "intro": "L'utilisateur est accueilli par une carte avec des objets. Lorsqu'il en sélectionne un, les informations relatives à cet objet s'affichent." }, "fakeui": { + "add_images": "Ajoutez des images en quelques clics", "edit": "Une info fausse ou pas à jour ? Le bouton de modification est juste ici" }, "mapcomplete": { - "li2": "Ajouter facilement des informations de contact et des heures d'ouverture" + "intro": "MapComplete est un site qui a {mapCount} carte intéractives. Chaque carte permet d'ajouter et mettre à jour des informations. IL y a de nombreuses fonctionnalités :", + "li1": "Ajouter de nouveaux points et mettre à jour les infos de ceux existant", + "li2": "Ajouter facilement des informations de contact et des heures d'ouverture", + "title": "Qu'est-ce que MapComplete ?" }, - "title": "MapComplete.osm.be" + "title": "MapComplete.osm.be", + "whatIsOsm": "Qu'est-ce qu'OpenStreetMap ?" }, "general": { + "404": "Cette page n'existe pas", "about": "Éditer facilement et ajouter OpenStreetMap pour un certain thème", "add": { "addNew": "Ajouter {category}", "backToSelect": "Sélectionner une catégorie différente", "confirmButton": "Ajouter un/une {category} ici.
Votre ajout sera visible par tout le monde
", "confirmLocation": "Confirmer cet emplacement", + "confirmTitle": "Ajouter un {title} ?", "disableFilters": "Désactiver tous les filtres", "disableFiltersExplanation": "Certains élément peuvent être filtrés", "hasBeenImported": "Cet élément a déjà été importé", From ea00eeeffec1c8fa608fd93a85b3407e085dbcfe Mon Sep 17 00:00:00 2001 From: Lucas Date: Fri, 11 Aug 2023 11:38:22 +0000 Subject: [PATCH 10/27] Translated using Weblate (French) Currently translated at 90.0% (407 of 452 strings) Translation: MapComplete/themes Translate-URL: https://hosted.weblate.org/projects/mapcomplete/themes/fr/ --- langs/themes/fr.json | 246 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 197 insertions(+), 49 deletions(-) diff --git a/langs/themes/fr.json b/langs/themes/fr.json index 1d6dbd17f..1cf8ff3bf 100644 --- a/langs/themes/fr.json +++ b/langs/themes/fr.json @@ -2,18 +2,40 @@ "advertising": { "description": "Vous êtes-vous déjà demandé combien de publicité il y a dans nos rue ou sur nos routes ? Avec cette carte vous pouvez trouver et ajouter des informations sur tous les dispositifs publicitaires que vous pouvez trouver dans la rue", "shortDescription": "Où puis-je trouver des dispositifs publicitaires ?", - "title": "Open Advertising Map" + "title": "Publicité" }, "aed": { "description": "Sur cette carte, vous pouvez trouver et améliorer les informations sur les défibrillateurs", - "title": "Carte des défibrillateurs (DAE)" + "title": "Défibrillateurs" }, "artwork": { "description": "Une carte ouverte de statues, bustes, graffitis et autres œuvres d'art de par le monde", - "title": "Carte ouverte des œuvres d'art" + "title": "Œuvres d'art" }, "atm": { "description": "Cette carte montre les DABs pour retirer ou déposer de l'argent", + "layers": { + "3": { + "override": { + "=tagRenderings": { + "0": { + "render": { + "special": { + "text": "Importer ce distributeur de billets" + } + } + }, + "2": { + "render": { + "special": { + "message": "Ajouter tous les attributs suggérés au distributeur de billets le plus proche" + } + } + } + } + } + } + }, "title": "Distributeurs DAB" }, "bag": { @@ -67,7 +89,7 @@ "title": "Facilitateur d'import BAG" }, "benches": { - "description": "Cette carte affiche les bancs cartographiés dans OpenStreetMap, entre autres : bancs des transports en commun, bancs publics, etc. À l'aide de votre compte OpenStreetMap, vous pourrez ajouter de nouveaux bancs ou modifier les bancs existants.", + "description": "Cette carte affiche les bancs cartographiés dans OpenStreetMap, entre autres : bancs des transports en commun, bancs publics, etc.", "shortDescription": "Carte des bancs", "title": "Bancs" }, @@ -90,15 +112,15 @@ "title": "OSM pour les malvoyants" }, "bookcases": { - "description": "Une microbibliothèques, également appelée boite à livre, est un élément de mobilier urbain (étagère, armoire, etc) dans lequel sont stockés des livres et autres objets en accès libre. Découvrez les boites à livres prêt de chez vous, ou ajouter en une nouvelle à l'aide de votre compte OpenStreetMap.", - "title": "Carte des microbibliothèques" + "description": "Une microbibliothèque, également appelée boîte à livre, est un élément de mobilier urbain (étagère, armoire, etc.) dans lequel sont stockés des livres et autres objets en accès libre.", + "title": "Microbibliothèques" }, "cafes_and_pubs": { "description": "Bars et pubs", "title": "Cafés et pubs" }, "campersite": { - "description": "Ce site collecte les zones de camping officielles ainsi que les aires de vidange. Il est possible d’ajouter des détails à propos des services proposés ainsi que leurs coûts. Ajoutez vos images et avis. C’est un site et une application. Les données sont stockées sur OpenStreetMap, elles seront toujours gratuites et peuvent être réutilisées par n’importe quelle application.", + "description": "Ce site collecte les zones de camping officielles ainsi que les aires de vidange. Il est possible d’ajouter des détails à propos des services proposés ainsi que leurs coûts. Ajoutez vos images et avis.", "layers": { "0": { "description": "campings", @@ -383,9 +405,48 @@ } } } + }, + "1": { + "override": { + "+tagRenderings": { + "0": { + "mappings": { + "0": { + "then": "Ce commerce répare les chaussures d'escalade" + }, + "1": { + "then": "Ce commerce ne répare pas les chaussures d'escalade" + } + }, + "question": "Est-ce que cette cordonnerie répare les chaussons d'escalade ?" + } + } + } + }, + "2": { + "override": { + "+tagRenderings": { + "0": { + "mappings": { + "0": { + "then": "Ce commerce répare les chaussons d'escalade" + }, + "1": { + "then": "Ce commerce ne répare pas les chaussons d'escalade" + } + }, + "question": "Est-ce que cette cordonnerie répare les chaussons d'escalade ?" + } + }, + "=presets": { + "0": { + "title": "une cordonnerie" + } + } + } } }, - "title": "Open Climbing Map" + "title": "Escalade : gymnases, clubs et spots" }, "clock": { "description": "Carte affichant toutes les horloges publiques", @@ -533,7 +594,7 @@ }, "cyclofix": { "description": "Le but de cette carte est de présenter aux cyclistes une solution facile à utiliser pour trouver l'infrastructure appropriée à leurs besoins.

Vous pouvez suivre votre localisation précise (mobile uniquement) et sélectionner les couches qui vous concernent dans le coin inférieur gauche. Vous pouvez également utiliser cet outil pour ajouter ou modifier des épingles (points d'intérêt) sur la carte et fournir plus de données en répondant aux questions.

Toutes les modifications que vous apportez seront automatiquement enregistrées dans la base de données mondiale d'OpenStreetMap et peuvent être librement réutilisées par d'autres.

Pour plus d'informations sur le projet cyclofix, rendez-vous sur cyclofix.osm.be.", - "title": "Cyclofix - Une carte ouverte pour les cyclistes" + "title": "Cyclofix - une carte pour les cyclistes" }, "drinking_water": { "description": "Cette carte affiche les points d'accès public à de l'eau potable et permet d'en ajouter facilement", @@ -543,6 +604,19 @@ "description": "Sur cette carte, vous trouverez des informations concernant tous les types d'écoles et d'enseignement. Vous pouvez facilement ajouter plus d'informations", "title": "Enseignement" }, + "elongated_coin": { + "layers": { + "0": { + "tagRenderings": { + "charge": { + "freeform": { + "placeholder": "Coût (par ex. 0.50 EUR)" + } + } + } + } + } + }, "etymology": { "description": "Retrouvez sur cette carte l’origine du nom d’un élément. Les rues, bâtiments, etc. proviennent d’OpenStreetMap et sont liés aux données venant de Wikidata. La fenêtre pop-up affiche l’article Wikipedia (s’il existe) ou l’infobox Wikidata de l’objet dont provient le nom. Si l’objet a sa propre page Wikipedia, elle sera aussi affichée.

Vous pouvez contribuer aussi ! Zoomez suffisamment et toutes les rues seront affichées. Cliquez sur l'une d'elles et une boîte de recherche Wikidata apparaîtra. En quelques clics, vous pouvez ajouter un lien étymologique. Vous devez disposer d’un compte OpenStreetMap gratuit.", "layers": { @@ -583,7 +657,7 @@ } }, "shortDescription": "Quelle est l'origine de ce toponyme ?", - "title": "Open Etymology Map" + "title": "Étymologie - d'où les rues tirent leur nom ?" }, "facadegardens": { "description": "Les jardins muraux en ville n’apportent pas seulement paix et tranquillité mais contribuent à embellir la ville, favoriser la biodiversité, régule la température et assainit l’air.
Klimaan VZW et Mechelen Klimaatneutraal veulent cartographier les jardins muraux comme exemple pour les personnes souhaitant en construire ainsi que celles aimant la nature.
Plus d’infos sur klimaan.be.", @@ -734,7 +808,7 @@ "title": "Ateliers numériques ouvertS" }, "hailhydrant": { - "description": "Sur cette carte on trouve et met à jour les bornes incendies, extincteurs, casernes de pompiers et ambulanciers dans son quartier.\n\nLes options en haut à gauche permettent de localiser sa position (sur téléphone) et de filtrer les éléments. Il est possible d’utiliser cet outil pour ajouter et éditer les points d’intérêt de la carte et d’y ajouter des détails en répondant aux questions.\n\nToutes les modifications sont automatiquement enregistrées dans la base de données OpenStreetMap et peuvent êtres librement réutilisées par d’autres.", + "description": "Sur cette carte on trouve et met à jour les bornes incendies, extincteurs, casernes de pompiers et ambulanciers dans son quartier.", "shortDescription": "Carte indiquant les bornes incendies, extincteurs, casernes de pompiers et ambulanciers.", "title": "Bornes incendies, extincteurs, casernes de pompiers et ambulanciers" }, @@ -744,6 +818,12 @@ "5": { "override": { "=presets": { + "0": { + "title": "un commerce d'équipements médicaux" + }, + "1": { + "title": "un magasin d'appareils auditifs" + }, "2": { "title": "un opticien" } @@ -777,6 +857,65 @@ }, "title": "Ressauts et traversées" }, + "mapcomplete-changes": { + "description": "Cette carte montre tous les changements faits avec MapComplete", + "layers": { + "0": { + "filter": { + "5": { + "options": { + "0": { + "question": "Langage utilisateur (code-ISO) {search}" + } + } + }, + "7": { + "options": { + "0": { + "question": "Le groupe de modifications a ajouté au moins une image" + } + } + } + }, + "tagRenderings": { + "contributor": { + "question": "Quel contributeur a fait cette modification ?", + "render": "Modification faite par {user}" + }, + "host": { + "render": "Modification faite avec {host}" + }, + "locale": { + "question": "En quelle langue est-ce que ce changement a été fait ?" + }, + "show_changeset_id": { + "render": "Groupe de modifications {id}" + }, + "theme-id": { + "question": "Quel thème a été utilisé pour faire cette modification ?", + "render": "Modifié avec le thème {theme}" + }, + "version": { + "question": "Quelle version de MapComplete a été utilisée pour faire cette modification ?", + "render": "Fait avec {editor}" + } + }, + "title": { + "render": "Groupe de modifications pour {theme}" + } + }, + "1": { + "override": { + "tagRenderings+": { + "0": { + "render": "D'autres statistiques sont disponibles ici" + } + } + } + } + }, + "title": "Changements faits avec MapComplete" + }, "maproulette": { "description": "Thème MapRoulette permettant d’afficher, rechercher, filtrer et résoudre les tâches.", "title": "Tâches MapRoulette" @@ -792,7 +931,7 @@ "title": "Vitesse maximale" }, "nature": { - "description": "Retrouvez sur cette carte des informations pour les touristes et les amoureux de la nature, telles que ", + "description": "Retrouvez sur cette carte des informations pour les touristes et les amoureux de la nature.", "shortDescription": "Une carte pour les amoureux de la nature", "title": "Dans la nature" }, @@ -808,6 +947,33 @@ "onwheels": { "description": "Sur cette carte nous pouvons voir et ajouter les différents endroits publiques accessibles aux chaises roulantes", "layers": { + "19": { + "override": { + "=title": { + "render": "Statistiques" + } + } + }, + "20": { + "override": { + "+tagRenderings": { + "0": { + "render": { + "special": { + "text": "Importation" + } + } + }, + "1": { + "render": { + "special": { + "message": "Ajouter tous les attributs suggérés" + } + } + } + } + } + }, "4": { "override": { "filter": { @@ -850,40 +1016,13 @@ "override": { "name": "Places de stationnement pour personnes handicapées" } - }, - "19": { - "override": { - "=title": { - "render": "Statistiques" - } - } - }, - "20": { - "override": { - "+tagRenderings": { - "0": { - "render": { - "special": { - "text": "Importation" - } - } - }, - "1": { - "render": { - "special": { - "message": "Ajouter tous les attributs suggérés" - } - } - } - } - } } }, "title": "OnWheels" }, "openwindpowermap": { "description": "Une carte indiquant les éoliennes et permettant leur édition.", - "title": "OpenWindPowerMap" + "title": "Générateurs d'énergie éolienne" }, "osm_community_index": { "description": "Une liste de ressources pour les utilisateurs d'OpenStreetMap. Les \"ressources\" peuvent être des liens vers des forums, des rencontres, des groupes Slack, des canaux IRC, des listes de diffusion, etc. Tout ce que les cartographes, en particulier les débutants, peuvent trouver intéressant ou utile.", @@ -958,7 +1097,7 @@ "title": "Codes postaux" }, "postboxes": { - "description": "Trouvez et ajoutez des bureaux de poste et boîtes à lettres sur cette carte. Utilisez cette carte où vous pouvez envoyer vos cartes postales ! :)
Vous avez trouvez une erreur ou une boîte à lettres est manquante ? Vous pouvez modifier cette carte avec un compte OpenStreetMap gratuit. ", + "description": "Trouvez et ajoutez des bureaux de poste et boîtes à lettres sur cette carte. Utilisez cette carte où vous pouvez envoyer vos cartes postales ! :)
Vous avez trouvez une erreur ou une boîte à lettres est manquante ? Vous pouvez modifier cette carte avec un compte OpenStreetMap gratuit.", "shortDescription": "Une carte des bureaux de poste et des boîtes à lettres", "title": "Carte des Bureaux de Poste et Boîtes à Lettres" }, @@ -969,7 +1108,7 @@ "shops": { "description": "Sur cette carte, vous pouvez ajouter des informations sur les magasins, leurs horaires d'ouverture et leurs numéros de téléphone", "shortDescription": "Carte modifiable affichant les informations de base des magasins", - "title": "Carte des magasins" + "title": "Commerces" }, "sidewalks": { "description": "Thème expérimental", @@ -1018,12 +1157,14 @@ "title": "Terrains de sport" }, "sports": { + "description": "Tout sur les sports, trouver les terrains de sport, les salles de sport et plus encore.", "layers": { "4": { "override": { "presets": { "0": { - "description": "Ajouter un nouveau commerce vendant des équipements sportifs." + "description": "Ajouter un nouveau commerce vendant des équipements sportifs.", + "title": "une boutique de sport" } } } @@ -1035,10 +1176,6 @@ "stations": { "description": "Voir, modifier et ajouter des détails à une gare ferroviaire", "layers": { - "3": { - "description": "Couche montrant les gares", - "name": "Gares ferroviaires" - }, "16": { "description": "Panneau affichant les trains au départ depuis cette gare", "name": "Panneaux des départs", @@ -1059,6 +1196,9 @@ }, "2": { "then": "Tableau des départs papier" + }, + "3": { + "then": "Il y a un panneau indiquant la fréquence des trains" } }, "question": "De quel type de panneau de départs s'agit-il ?" @@ -1067,6 +1207,10 @@ "title": { "render": "Tableau des départs" } + }, + "3": { + "description": "Couche montrant les gares", + "name": "Gares ferroviaires" } }, "title": "Gares ferroviaires" @@ -1134,7 +1278,7 @@ }, "toilets": { "description": "Carte affichant les WC et toilettes publiques", - "title": "Carte des WC et toilettes publiques" + "title": "Toilettes publiques" }, "transit": { "description": "Planifier votre itinéraire avec le système de transports en commun.", @@ -1145,6 +1289,10 @@ "shortDescription": "Cartographions tous les arbres", "title": "Arbres" }, + "vending_machine": { + "description": "Trouver tous les distributeurs", + "title": "Distributeurs" + }, "walls_and_buildings": { "description": "Couche intégrée spéciale fournissant tous les murs et bâtiments. Cette couche est utile dans les préréglages pour les objets qui peuvent être placés contre les murs (par exemple, les DEA, les boîtes aux lettres, les entrées, les adresses, les caméras de surveillance, …). Ce calque est invisible par défaut et non inchangeable par l'utilisateur.", "title": "Murs et bâtiments" @@ -1158,4 +1306,4 @@ "shortDescription": "Une carte des poubelles", "title": "Poubelles" } -} \ No newline at end of file +} From dff2e5437f668e1621961a549f2999aa5ffb7d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D7=9E=D7=95=D7=99=D7=9E=D7=95=D7=99=20=D7=98=D7=A8=D7=99?= =?UTF-8?q?=D7=99=D7=A6=D7=A7=D7=99?= Date: Wed, 9 Aug 2023 16:08:33 +0000 Subject: [PATCH 11/27] Translated using Weblate (Hebrew) Currently translated at 2.7% (14 of 502 strings) Translation: MapComplete/Core Translate-URL: https://hosted.weblate.org/projects/mapcomplete/core/he/ --- langs/he.json | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/langs/he.json b/langs/he.json index 0967ef424..a1fd7477d 100644 --- a/langs/he.json +++ b/langs/he.json @@ -1 +1,28 @@ -{} +{ + "centerMessage": { + "loadingData": "טוען נתונים…" + }, + "delete": { + "cancel": "ביטול", + "cannotBeDeleted": "התכונה הזאת לא ניתנת למחיקה", + "delete": "מחיקה" + }, + "flyer": { + "mapcomplete": { + "title": "מה זה מאפ קומפלט?" + }, + "onwheels": "מפות פנימיות עבור משתמשים בכיסא גלגלים זמינות גם כן.", + "whatIsOsm": "מה זה אופן סטריט מאפ?" + }, + "general": { + "404": "הדף הזה לא קיים", + "add": { + "backToSelect": "בחר קטגוריה אחרת", + "confirmLocation": "אשר את המיקום הזה", + "disableFilters": "השבת את כל המסננים", + "disableFiltersExplanation": "תכונות מסוימות עשויות להיות מוסתרות על ידי המסנן", + "enableLayer": "הפעל שכבה {name}", + "hasBeenImported": "תכונה זו כבר יובאה" + } + } +} From 08bbbcabc402abcf328274bb2990d59b47580376 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 23 Aug 2023 12:50:20 +0200 Subject: [PATCH 12/27] Fix: add script integrity, add check to validate that script integrity is always in place --- 404.html | 2 +- index.html | 3 +- scripts/generateRedirectFiles.ts | 32 +++++++++++++++++ statistics.html | 2 +- test/CodeQuality.spec.ts | 59 ++++++++++++++++++++++++++------ theme.html | 2 +- 6 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 scripts/generateRedirectFiles.ts diff --git a/404.html b/404.html index 129c820db..8d425e109 100644 --- a/404.html +++ b/404.html @@ -50,7 +50,7 @@ - + diff --git a/index.html b/index.html index b58e3157d..4a29a7026 100644 --- a/index.html +++ b/index.html @@ -51,7 +51,8 @@
- + - + diff --git a/test/CodeQuality.spec.ts b/test/CodeQuality.spec.ts index d1f6eef14..dcf5d27eb 100644 --- a/test/CodeQuality.spec.ts +++ b/test/CodeQuality.spec.ts @@ -1,6 +1,10 @@ import { exec } from "child_process" import { describe, it } from "vitest" +import { parse as parse_html } from "node-html-parser" +import { readFileSync } from "fs" +import ScriptUtils from "../scripts/ScriptUtils" + /** * * @param forbidden: a GREP-regex. This means that '.' is a wildcard and should be escaped to match a literal dot @@ -64,6 +68,32 @@ function itAsync(name: string, promise: Promise) { it(name, wrap(promise)) } +function validateScriptIntegrityOf(path: string) { + const htmlContents = readFileSync(path, "utf8") + const doc = parse_html(htmlContents) + // @ts-ignore + const scripts = Array.from(doc.getElementsByTagName("script")) + for (const script of scripts) { + const src = script.getAttribute("src") + if (src === undefined) { + continue + } + if (src.startsWith("./")) { + // Local script - no check needed + continue + } + const integrity = script.getAttribute("integrity") + const ctx = "Script with source " + src + " in file " + path + if (integrity === undefined) { + throw new Error(ctx + " has no integrity value") + } + const crossorigin = script.getAttribute("crossorigin") + if (crossorigin !== "anonymous") { + throw new Error(ctx + " has crossorigin missing or not set to 'anonymous'") + } + } +} + describe("Code quality", () => { itAsync( "should not contain reverse", @@ -85,17 +115,24 @@ describe("Code quality", () => { "innerText is not allowed as it is not testable with fakeDom. Use 'textContent' instead." ) ) + + it("scripts with external sources should have an integrity hash", () => { + const htmlFiles = ScriptUtils.readDirRecSync(".", 1).filter((f) => f.endsWith(".html")) + for (const htmlFile of htmlFiles) { + validateScriptIntegrityOf(htmlFile) + } + }) /* - itAsync( - "should not contain 'import * as name from \"xyz.json\"'", - detectInCode( - 'import \\* as [a-zA-Z0-9_]\\+ from \\"[.-_/a-zA-Z0-9]\\+\\.json\\"', - "With vite, json files have a default export. Use import name from file.json instead" - ) - ) + itAsync( + "should not contain 'import * as name from \"xyz.json\"'", + detectInCode( + 'import \\* as [a-zA-Z0-9_]\\+ from \\"[.-_/a-zA-Z0-9]\\+\\.json\\"', + "With vite, json files have a default export. Use import name from file.json instead" + ) + ) /* - itAsync( - "should not contain '[\"default\"]'", - detectInCode('\\[\\"default\\"\\]', "Possible leftover of faulty default import") - )*/ + itAsync( + "should not contain '[\"default\"]'", + detectInCode('\\[\\"default\\"\\]', "Possible leftover of faulty default import") + )*/ }) diff --git a/theme.html b/theme.html index 10902c70f..43a5629dc 100644 --- a/theme.html +++ b/theme.html @@ -97,7 +97,7 @@ - +