diff --git a/.vscode/settings.json b/.vscode/settings.json
index 25b1f4dbe9..65a4999d42 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -17,5 +17,8 @@
],
"editor.tabSize": 2,
"files.autoSave": "onFocusChange",
- "search.useIgnoreFiles": true
+ "search.useIgnoreFiles": true,
+ "files.associations": {
+ "*.protojson": "json"
+ }
}
\ No newline at end of file
diff --git a/assets/layers/traffic_sign/generateSigns.ts b/assets/layers/traffic_sign/generateSigns.ts
index 137847c10f..0d49151eb2 100644
--- a/assets/layers/traffic_sign/generateSigns.ts
+++ b/assets/layers/traffic_sign/generateSigns.ts
@@ -32,6 +32,14 @@ interface Implication {
value: string;
}
+interface Translations {
+ [key: string]: Translation;
+}
+
+interface Translation {
+ [key: string]: string;
+}
+
const worldWideMappings: MappingConfigJson[] = [
{
if: "traffic_sign=city_limit",
@@ -61,6 +69,7 @@ function main(){
// Create new list of mappings
const mappings: MappingConfigJson[] = [];
const iconMappings: MappingConfigJson[] = [];
+ const translationMemory: Translations = {};
// Add world wide mappings
for(const mapping of worldWideMappings){
@@ -79,9 +88,20 @@ function main(){
const signFile = readFileSync("signs/" + file, "utf8");
const signs = JSON.parse(signFile) as SignFile;
for(const sign of signs.traffic_signs){
+ // Find item in traffic_signs.json file and save the translations
const originalMapping = originalSignMappings.find(m => m.if === "traffic_sign=" + sign.id);
- const iconPath = "./assets/layers/traffic_sign/images/"+signs.country.toLowerCase()+"/"+sign.image.file
+ translationMemory[sign.name] = {
+ ...originalMapping?.then,
+ en: sign.name,
+ }
+
+ // Check if the sign starts with the country
+ if(!sign.id.toLowerCase().startsWith(signs.country.toLowerCase())){
+ throw new Error("Sign " + sign.id + " does not start with country " + signs.country + ", you should fix this!");
+ }
+
// Create new mapping, reusing original translations
+ const iconPath = "./assets/layers/traffic_sign/images/"+signs.country.toLowerCase()+"/"+sign.image.file
const mapping: MappingConfigJson = {
if: "traffic_sign=" + sign.id,
then: {
@@ -104,6 +124,17 @@ function main(){
}
}
+ // Re-run over all mappings, and add translations
+ for(const mapping of mappings){
+ const memoryTranslation = translationMemory[mapping.then.en];
+ if(memoryTranslation){
+ mapping.then = {
+ ...mapping.then,
+ ...memoryTranslation,
+ }
+ }
+ }
+
// Create new layer
const newLayer: LayerConfigJson = {
...originalLayer,
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A11.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A11.svg
new file mode 100644
index 0000000000..079eff173e
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A11.svg
@@ -0,0 +1,60 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A13.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A13.svg
new file mode 100644
index 0000000000..a26c4daf96
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A13.svg
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A14.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A14.svg
new file mode 100644
index 0000000000..876fa9506d
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A14.svg
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A15.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A15.svg
new file mode 100644
index 0000000000..75523c3a31
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A15.svg
@@ -0,0 +1,43 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A17.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A17.svg
new file mode 100644
index 0000000000..6eac3654e4
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A17.svg
@@ -0,0 +1,109 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A19.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A19.svg
new file mode 100644
index 0000000000..71a6ca9112
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A19.svg
@@ -0,0 +1,78 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1a.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1a.svg
new file mode 100644
index 0000000000..afc3074ece
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1a.svg
@@ -0,0 +1,22 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1b.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1b.svg
new file mode 100644
index 0000000000..aca9e89e23
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1b.svg
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1c.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1c.svg
new file mode 100644
index 0000000000..4dfcd0a8e2
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1c.svg
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1d.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1d.svg
new file mode 100644
index 0000000000..f06576e4dd
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1d.svg
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A21.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A21.svg
new file mode 100644
index 0000000000..21f94171dc
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A21.svg
@@ -0,0 +1,103 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A23.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A23.svg
new file mode 100644
index 0000000000..5f77b8ed92
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A23.svg
@@ -0,0 +1,130 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A25.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A25.svg
new file mode 100644
index 0000000000..3905598e89
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A25.svg
@@ -0,0 +1,102 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A27.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A27.svg
new file mode 100644
index 0000000000..c5ab031d28
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A27.svg
@@ -0,0 +1,79 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A29.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A29.svg
new file mode 100644
index 0000000000..4bc111ad72
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A29.svg
@@ -0,0 +1,64 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A31.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A31.svg
new file mode 100644
index 0000000000..3fc55e0df2
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A31.svg
@@ -0,0 +1,94 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A33.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A33.svg
new file mode 100644
index 0000000000..b250b42b11
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A33.svg
@@ -0,0 +1,27 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A35.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A35.svg
new file mode 100644
index 0000000000..3ad2cbb7f4
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A35.svg
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A37.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A37.svg
new file mode 100644
index 0000000000..62f7e2f75a
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A37.svg
@@ -0,0 +1,42 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A39.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A39.svg
new file mode 100644
index 0000000000..f3c8c441b6
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A39.svg
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A41.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A41.svg
new file mode 100644
index 0000000000..40e8bdd6a7
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A41.svg
@@ -0,0 +1,42 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A43.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A43.svg
new file mode 100644
index 0000000000..419d4db5f6
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A43.svg
@@ -0,0 +1,51 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A45.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A45.svg
new file mode 100644
index 0000000000..3ed6e4be33
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A45.svg
@@ -0,0 +1,70 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A47.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A47.svg
new file mode 100644
index 0000000000..fa3731e9c8
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A47.svg
@@ -0,0 +1,102 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A49.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A49.svg
new file mode 100644
index 0000000000..7a005654bd
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A49.svg
@@ -0,0 +1,90 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A50.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A50.svg
new file mode 100644
index 0000000000..4e1a322abd
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A50.svg
@@ -0,0 +1,50 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A51.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A51.svg
new file mode 100644
index 0000000000..1bfaeab866
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A51.svg
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7a.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7a.svg
new file mode 100644
index 0000000000..f7378851be
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7a.svg
@@ -0,0 +1,33 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7b_(2).svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7b_(2).svg
new file mode 100644
index 0000000000..6655592aa1
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7b_(2).svg
@@ -0,0 +1,32 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A9.svg b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A9.svg
new file mode 100644
index 0000000000..dd8278a42e
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A9.svg
@@ -0,0 +1,30 @@
+
+
+
+
diff --git a/assets/layers/traffic_sign/images/be/A/license_info.json b/assets/layers/traffic_sign/images/be/A/license_info.json
new file mode 100644
index 0000000000..c432401b81
--- /dev/null
+++ b/assets/layers/traffic_sign/images/be/A/license_info.json
@@ -0,0 +1,302 @@
+[
+ {
+ "path": "Belgian_road_sign_A11.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A11.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A13.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A13.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A14.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A14.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A15.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A15.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A17.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A17.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A19.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A19.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A1a.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A1a.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A1b.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A1b.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A1c.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A1c.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A1d.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A1d.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A21.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A21.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A23.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A23.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A25.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A25.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A27.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A27.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A29.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A29.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A31.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A31.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A33.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A33.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A35.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A35.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A37.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A37.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A39.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A39.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A41.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A41.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A43.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A43.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A45.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A45.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A47.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A47.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A49.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A49.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A50.svg",
+ "license": "Public domain",
+ "authors": [
+ "FOD Mobiliteit"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A50.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A51.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A51.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A7a.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A7a.svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A7b_(2).svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A7b_(2).svg"
+ ]
+ },
+ {
+ "path": "Belgian_road_sign_A9.svg",
+ "license": "Public domain",
+ "authors": [
+ "Vascer"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Belgian_road_sign_A9.svg"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/traffic_sign/signs/be.protojson b/assets/layers/traffic_sign/signs/be.protojson
new file mode 100644
index 0000000000..ca969e73b6
--- /dev/null
+++ b/assets/layers/traffic_sign/signs/be.protojson
@@ -0,0 +1,212 @@
+{
+ "$schema": "https://osm.rlin.eu/traffic_sign/schema/schema.json",
+ "name": "Traffic signs of Belgium",
+ "description": "Traffic signs of Belgium",
+ "version": "2023-01-03",
+ "country": "BE",
+ "traffic_signs": [
+ {
+ "id": "BE:A1a",
+ "name": "Corner to the left",
+ "image": {
+ "file": "A/Belgian_road_sign_A1a.svg"
+ }
+ },
+ {
+ "id": "BE:A1b",
+ "name": "Corner to the right",
+ "image": {
+ "file": "A/Belgian_road_sign_A1b.svg"
+ }
+ },
+ {
+ "id": "BE:A1c",
+ "name": "S-bend to the left",
+ "image": {
+ "file": "A/Belgian_road_sign_A1c.svg"
+ }
+ },
+ {
+ "id": "BE:A1d",
+ "name": "S-bend to the right",
+ "image": {
+ "file": "A/Belgian_road_sign_A1d.svg"
+ }
+ },
+ {
+ "id": "BE:A7a",
+ "name": "Road narrows",
+ "image": {
+ "file": "A/Belgian_road_sign_A7a.svg"
+ }
+ },
+ {
+ "id": "BE:A7b",
+ "name": "Road narrows on the left",
+ "image": {
+ "file": "A/Belgian_road_sign_A7b_(2).svg"
+ }
+ },
+ {
+ "id": "BE:A9",
+ "name": "Movable bridge",
+ "image": {
+ "file": "A/Belgian_road_sign_A9.svg"
+ }
+ },
+ {
+ "id": "BE:A11",
+ "name": "Quay or river bank",
+ "image": {
+ "file": "A/Belgian_road_sign_A11.svg"
+ }
+ },
+ {
+ "id": "BE:A13",
+ "name": "Bad road surface",
+ "image": {
+ "file": "A/Belgian_road_sign_A13.svg"
+ }
+ },
+ {
+ "id": "BE:A14",
+ "name": "Speed bump",
+ "image": {
+ "file": "A/Belgian_road_sign_A14.svg"
+ }
+ },
+ {
+ "id": "BE:A15",
+ "name": "Slippery road",
+ "image": {
+ "file": "A/Belgian_road_sign_A15.svg"
+ }
+ },
+ {
+ "id": "BE:A17",
+ "name": "Loose chippings",
+ "image": {
+ "file": "A/Belgian_road_sign_A17.svg"
+ }
+ },
+ {
+ "id": "BE:A19",
+ "name": "Falling rocks",
+ "image": {
+ "file": "A/Belgian_road_sign_A19.svg"
+ }
+ },
+ {
+ "id": "BE:A21",
+ "name": "Pedestrian crossing",
+ "image": {
+ "file": "A/Belgian_road_sign_A21.svg"
+ }
+ },
+ {
+ "id": "BE:A23",
+ "name": "Playing children",
+ "image": {
+ "file": "A/Belgian_road_sign_A23.svg"
+ }
+ },
+ {
+ "id": "BE:A25",
+ "name": "Cyclists",
+ "image": {
+ "file": "A/Belgian_road_sign_A25.svg"
+ }
+ },
+ {
+ "id": "BE:A27",
+ "name": "Dangerous animals",
+ "image": {
+ "file": "A/Belgian_road_sign_A27.svg"
+ }
+ },
+ {
+ "id": "BE:A29",
+ "name": "Cattle",
+ "image": {
+ "file": "A/Belgian_road_sign_A29.svg"
+ }
+ },
+ {
+ "id": "BE:A31",
+ "name": "Road works",
+ "image": {
+ "file": "A/Belgian_road_sign_A31.svg"
+ }
+ },
+ {
+ "id": "BE:A33",
+ "name": "Traffic lights",
+ "image": {
+ "file": "A/Belgian_road_sign_A33.svg"
+ }
+ },
+ {
+ "id": "BE:A35",
+ "name": "Low-flying aircraft",
+ "image": {
+ "file": "A/Belgian_road_sign_A35.svg"
+ }
+ },
+ {
+ "id": "BE:A37",
+ "name": "Side wind",
+ "image": {
+ "file": "A/Belgian_road_sign_A37.svg"
+ }
+ },
+ {
+ "id": "BE:A39",
+ "name": "Two-way traffic",
+ "image": {
+ "file": "A/Belgian_road_sign_A39.svg"
+ }
+ },
+ {
+ "id": "BE:A41",
+ "name": "Protected railway crossing",
+ "image": {
+ "file": "A/Belgian_road_sign_A41.svg"
+ }
+ },
+ {
+ "id": "BE:A43",
+ "name": "Unprotected railway crossing",
+ "image": {
+ "file": "A/Belgian_road_sign_A43.svg"
+ }
+ },
+ {
+ "id": "BE:A45",
+ "name": "Single-track railway crossing",
+ "image": {
+ "file": "A/Belgian_road_sign_A45.svg"
+ }
+ },
+ {
+ "id": "BE:A47",
+ "name": "Multiple-track railway crossing",
+ "image": {
+ "file": "A/Belgian_road_sign_A47.svg"
+ }
+ },
+ {
+ "id": "BE:A49",
+ "name": "Tramway crossing",
+ "image": {
+ "file": "A/Belgian_road_sign_A49.svg"
+ }
+ },
+ {
+ "id": "BE:A51",
+ "name": "Danger ahead",
+ "image": {
+ "file": "A/Belgian_road_sign_A51.svg"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/traffic_sign/traffic_sign.json b/assets/layers/traffic_sign/traffic_sign.json
index 7eb7332a6f..53765887c7 100644
--- a/assets/layers/traffic_sign/traffic_sign.json
+++ b/assets/layers/traffic_sign/traffic_sign.json
@@ -50,6 +50,347 @@
"en": "Maximum speed"
}
},
+ {
+ "if": "traffic_sign=BE:A1a",
+ "then": {
+ "en": "Corner to the left",
+ "nl": "Bocht naar links"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1a.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A1b",
+ "then": {
+ "en": "Corner to the right",
+ "nl": "Bocht naar rechts"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1b.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A1c",
+ "then": {
+ "en": "S-bend to the left",
+ "nl": "S-bocht naar links"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1c.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A1d",
+ "then": {
+ "en": "S-bend to the right",
+ "nl": "S-bocht naar rechts"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1d.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A7a",
+ "then": {
+ "en": "Road narrows",
+ "nl": "Wegversmalling"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7a.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A7b",
+ "then": {
+ "en": "Road narrows on the left",
+ "nl": "Wegversmalling aan de linkerkant"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7b_(2).svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A9",
+ "then": {
+ "en": "Movable bridge",
+ "nl": "Beweegbare brug"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A9.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A11",
+ "then": {
+ "en": "Quay or river bank",
+ "nl": "Kade of rivieroever"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A11.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A13",
+ "then": {
+ "en": "Bad road surface",
+ "nl": "Slecht wegdek"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A13.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A14",
+ "then": {
+ "en": "Speed bump",
+ "nl": "Drempel"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A14.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A15",
+ "then": {
+ "en": "Slippery road",
+ "nl": "Slipgevaar"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A15.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A17",
+ "then": {
+ "en": "Loose chippings",
+ "nl": "Opspattend grind"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A17.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A19",
+ "then": {
+ "en": "Falling rocks"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A19.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A21",
+ "then": {
+ "en": "Pedestrian crossing",
+ "nl": "Voetgangersoversteekplaats"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A21.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A23",
+ "then": {
+ "en": "Playing children",
+ "nl": "Spelende kinderen"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A23.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A25",
+ "then": {
+ "en": "Cyclists"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A25.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A27",
+ "then": {
+ "en": "Dangerous animals",
+ "nl": "Gevaarlijk wild"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A27.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A29",
+ "then": {
+ "en": "Cattle",
+ "nl": "Vee"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A29.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A31",
+ "then": {
+ "en": "Road works",
+ "nl": "Wegwerkzaamheden"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A31.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A33",
+ "then": {
+ "en": "Traffic lights"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A33.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A35",
+ "then": {
+ "en": "Low-flying aircraft",
+ "nl": "Laagvliegende vliegtuigen"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A35.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A37",
+ "then": {
+ "en": "Side wind",
+ "nl": "Zijwind"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A37.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A39",
+ "then": {
+ "en": "Two-way traffic"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A39.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A41",
+ "then": {
+ "en": "Protected railway crossing",
+ "nl": "Beveiligde spoorwegovergang"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A41.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A43",
+ "then": {
+ "en": "Unprotected railway crossing",
+ "nl": "Onbeveiligde spoorwegovergang"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A43.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A45",
+ "then": {
+ "en": "Single-track railway crossing"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A45.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A47",
+ "then": {
+ "en": "Multiple-track railway crossing"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A47.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A49",
+ "then": {
+ "en": "Tramway crossing"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A49.svg",
+ "class": "large"
+ }
+ },
+ {
+ "if": "traffic_sign=BE:A51",
+ "then": {
+ "en": "Danger ahead",
+ "nl": "Gevaar"
+ },
+ "hideInAnswer": "_country!=be",
+ "icon": {
+ "path": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A51.svg",
+ "class": "large"
+ }
+ },
{
"if": "traffic_sign=NL:A01-5",
"then": {
@@ -1881,6 +2222,122 @@
"icon": {
"render": "./assets/layers/traffic_sign/images/unknown.svg",
"mappings": [
+ {
+ "if": "traffic_sign~BE:A1a(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1a.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A1b(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1b.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A1c(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1c.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A1d(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A1d.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A7a(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7a.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A7b(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A7b_(2).svg"
+ },
+ {
+ "if": "traffic_sign~BE:A9(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A9.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A11(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A11.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A13(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A13.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A14(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A14.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A15(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A15.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A17(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A17.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A19(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A19.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A21(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A21.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A23(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A23.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A25(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A25.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A27(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A27.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A29(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A29.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A31(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A31.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A33(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A33.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A35(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A35.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A37(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A37.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A39(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A39.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A41(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A41.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A43(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A43.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A45(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A45.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A47(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A47.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A49(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A49.svg"
+ },
+ {
+ "if": "traffic_sign~BE:A51(;.*)*$",
+ "then": "./assets/layers/traffic_sign/images/be/A/Belgian_road_sign_A51.svg"
+ },
{
"if": "traffic_sign~NL:A01-5(;.*)*$",
"then": "./assets/layers/traffic_sign/images/nl/A/Nederlands_verkeersbord_A1-5.svg"
diff --git a/scripts/downloadCommons.ts b/scripts/downloadCommons.ts
new file mode 100644
index 0000000000..99072a58a9
--- /dev/null
+++ b/scripts/downloadCommons.ts
@@ -0,0 +1,157 @@
+/**
+ * Script to download images from Wikimedia Commons, and save them together with license information.
+ */
+
+import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs"
+import { unescape } from "querystring"
+import SmallLicense from "../Models/smallLicense"
+
+interface ExtMetadataProp {
+ value: string
+ source: string
+ hidden: string
+}
+
+interface ImageQueryAPIResponse {
+ continue: {
+ iistart: string
+ continue: string
+ }
+ query: {
+ normalized?: {
+ from: string
+ to: string
+ }[]
+ pages: {
+ [key: string]: {
+ pageid: number
+ ns: number
+ title: string
+ imagerepository: string
+ imageinfo: {
+ url: string
+ descriptionurl: string
+ descriptionshorturl: string
+ extmetadata: {
+ DateTime: ExtMetadataProp
+ ObjectName: ExtMetadataProp
+ CommonsMetadataExtension: ExtMetadataProp
+ Categories: ExtMetadataProp
+ Assessments: ExtMetadataProp
+ ImageDescription: ExtMetadataProp
+ DateTimeOriginal: ExtMetadataProp
+ Credit: ExtMetadataProp
+ Artist: ExtMetadataProp
+ LicenseShortName: ExtMetadataProp
+ UsageTerms: ExtMetadataProp
+ AttributionRequired: ExtMetadataProp
+ Copyrighted: ExtMetadataProp
+ Restrictions: ExtMetadataProp
+ License: ExtMetadataProp
+ }
+ }[]
+ }
+ }
+ }
+}
+
+interface CategoryMember {
+ pageid: number
+ ns: number
+ title: string
+}
+
+interface CategoryQueryAPIResponse {
+ batchcomplete: string
+ query: {
+ categorymembers: CategoryMember[]
+ }
+}
+
+// Map license names of Wikimedia Commons to different names
+const licenseMapping = {}
+
+async function main(args: string[]) {
+ if (args.length < 2) {
+ console.log("Usage: downloadCommons.ts