diff --git a/data/presets/forms.json b/data/presets/forms.json
index 363ce05fa..47d4c233b 100644
--- a/data/presets/forms.json
+++ b/data/presets/forms.json
@@ -1 +1 @@
-{"access":{"key":"access","type":"combo"},"address":{"type":"address","title":"Address","keys":["addr:housename","addr:housenumber","addr:street","addr:city"]},"atm":{"key":"atm","type":"check"},"building":{"key":"building","type":"combo"},"building_area":{"key":"building","type":"check","default":{"area":"yes"}},"building_yes":{"key":"building","type":"combo","default":{"area":"yes"}},"capacity":{"key":"capacity","type":"text"},"cuisine":{"key":"cuisine","type":"combo","indexed":true},"denomination":{"key":"denomination","type":"combo"},"elevation":{"key":"ele","type":"number"},"emergency":{"key":"emergency","type":"check"},"fee":{"key":"fee","type":"check"},"internet_access":{"key":"internet_access","title":"Internet Access","type":"combo","options":["yes","no","wlan","wired","terminal"]},"layer":{"key":"layer","type":"combo"},"levels":{"key":"building:levels","type":"number","title":"Levels"},"maxspeed":{"key":"maxspeed","type":"combo"},"network":{"key":"network","type":"text"},"oneway":{"key":"oneway","type":"check"},"opening_hours":{"key":"opening_hours","type":"text"},"operator":{"key":"operator","type":"text"},"religion":{"key":"religion","type":"combo","options":["christian","muslim","buddhist","jewish","hindu","shinto","taoist"]},"roadtype":{"title":" ","type":"radio","options":["bridge","tunnel","embankment","cutting"]},"shelter":{"key":"shelter","type":"check"},"surface":{"key":"surface","type":"combo"}}
\ No newline at end of file
+{"access":{"key":"access","type":"combo"},"address":{"type":"address","keys":["addr:housename","addr:housenumber","addr:street","addr:city"]},"atm":{"key":"atm","type":"check"},"building":{"key":"building","type":"combo"},"building_area":{"key":"building","type":"check","default":{"area":"yes"}},"building_yes":{"key":"building","type":"combo","default":{"area":"yes"}},"capacity":{"key":"capacity","type":"text"},"cuisine":{"key":"cuisine","type":"combo","indexed":true},"denomination":{"key":"denomination","type":"combo"},"elevation":{"key":"ele","type":"number"},"emergency":{"key":"emergency","type":"check"},"fee":{"key":"fee","type":"check"},"internet_access":{"key":"internet_access","type":"combo","options":["yes","no","wlan","wired","terminal"]},"layer":{"key":"layer","type":"combo"},"levels":{"key":"building:levels","type":"number"},"maxspeed":{"key":"maxspeed","type":"combo"},"network":{"key":"network","type":"text"},"oneway":{"key":"oneway","type":"check"},"opening_hours":{"key":"opening_hours","type":"text"},"operator":{"key":"operator","type":"text"},"religion":{"key":"religion","type":"combo","options":["christian","muslim","buddhist","jewish","hindu","shinto","taoist"]},"roadtype":{"title":" ","type":"radio","options":["bridge","tunnel","embankment","cutting"]},"shelter":{"key":"shelter","type":"check"},"surface":{"key":"surface","type":"combo"}}
\ No newline at end of file
diff --git a/data/presets/forms/address.json b/data/presets/forms/address.json
index 34048ee5c..dd8a73898 100644
--- a/data/presets/forms/address.json
+++ b/data/presets/forms/address.json
@@ -1,6 +1,5 @@
{
"type": "address",
- "title": "Address",
"keys": [
"addr:housename",
"addr:housenumber",
diff --git a/data/presets/forms/internet_access.json b/data/presets/forms/internet_access.json
index 26f07d0e4..f8e7ae72e 100644
--- a/data/presets/forms/internet_access.json
+++ b/data/presets/forms/internet_access.json
@@ -1,6 +1,5 @@
{
"key": "internet_access",
- "title": "Internet Access",
"type": "combo",
"options": [
"yes",
diff --git a/data/presets/forms/levels.json b/data/presets/forms/levels.json
index c96a9e16a..75e50864f 100644
--- a/data/presets/forms/levels.json
+++ b/data/presets/forms/levels.json
@@ -1,5 +1,4 @@
{
"key": "building:levels",
- "type": "number",
- "title": "Levels"
+ "type": "number"
}
\ No newline at end of file
diff --git a/index.html b/index.html
index 2311d0afe..666ca1041 100644
--- a/index.html
+++ b/index.html
@@ -166,6 +166,7 @@
+
diff --git a/js/id/presets.js b/js/id/presets.js
index 946dcd16a..2747a80c0 100644
--- a/js/id/presets.js
+++ b/js/id/presets.js
@@ -20,7 +20,9 @@ iD.presets = function(context) {
all.load = function(d) {
if (d.forms) {
- forms = d.forms;
+ _.forEach(d.forms, function(d, id) {
+ forms[id] = iD.presets.Form(d, id);
+ });
}
if (d.presets) {
diff --git a/js/id/presets/form.js b/js/id/presets/form.js
new file mode 100644
index 000000000..e0e232d2a
--- /dev/null
+++ b/js/id/presets/form.js
@@ -0,0 +1,9 @@
+iD.presets.Form = function(form, id) {
+ form = _.clone(form);
+
+ form.label = function() {
+ return t('presets.forms.' + id + '.label', {default: form.key});
+ };
+
+ return form;
+};
diff --git a/js/id/presets/preset.js b/js/id/presets/preset.js
index 2953aacce..7e8dc2672 100644
--- a/js/id/presets/preset.js
+++ b/js/id/presets/preset.js
@@ -7,7 +7,7 @@ iD.presets.Preset = function(preset, forms) {
if (typeof f === 'string') {
return forms[f];
} else {
- return f;
+ return iD.presets.Form(f, f.key);
}
}) : [];
diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js
index 985a77353..8e022d144 100644
--- a/js/id/ui/preset.js
+++ b/js/id/ui/preset.js
@@ -41,7 +41,7 @@ iD.ui.preset = function(context) {
.attr('class', 'col3 preset-label')
.append('h4')
.attr('for', 'input-' + d.key)
- .text(d.title || d.key);
+ .text(function(d) { return d.label(); });
input.call(wrap.append('div')
.attr('class', 'col9 preset-input'), d);
diff --git a/js/lib/locale.js b/js/lib/locale.js
index 704a45d4c..91b3818a9 100644
--- a/js/lib/locale.js
+++ b/js/lib/locale.js
@@ -18,6 +18,8 @@ function t(s, o, loc) {
if (rep !== undefined) {
if (o) for (var k in o) rep = rep.replace('{' + k + '}', o[k]);
return rep;
+ } else if (o.default) {
+ return o.default;
} else {
var missing = 'Missing translation: ' + s;
if (console) console.error(missing);
diff --git a/locale/en.js b/locale/en.js
index ad3296a01..0ca323771 100644
--- a/locale/en.js
+++ b/locale/en.js
@@ -239,5 +239,105 @@ locale.en = {
zoom: {
'in': "Zoom In",
out: "Zoom Out"
+ },
+
+ // We expect these to be extracted at some point.
+ "presets": {
+ "forms": {
+ "access": {
+ "label": "Access"
+ },
+ "address": {
+ "label": "Address"
+ },
+ "atm": {
+ "label": "ATM"
+ },
+ "building": {
+ "label": "Building"
+ },
+ "building_area": {
+ "label": "Building"
+ },
+ "building_yes": {
+ "label": "Building"
+ },
+ "capacity": {
+ "label": "Capacity"
+ },
+ "cuisine": {
+ "label": "Cuisine"
+ },
+ "denomination": {
+ "label": "Denomination"
+ },
+ "elevation": {
+ "label": "Elevation"
+ },
+ "emergency": {
+ "label": "Emergency"
+ },
+ "fee": {
+ "label": "Fee"
+ },
+ "internet_access": {
+ "label": "Internet Access",
+ "options": {
+ "yes": "Yes",
+ "no": "No",
+ "wlan": "Wifi",
+ "wired": "Wired",
+ "terminal": "Terminal"
+ }
+ },
+ "layer": {
+ "label": "Layer"
+ },
+ "levels": {
+ "label": "Levels"
+ },
+ "maxspeed": {
+ "label": "Speed Limit"
+ },
+ "network": {
+ "label": "Network"
+ },
+ "oneway": {
+ "label": "One Way"
+ },
+ "opening_hours": {
+ "label": "Hours"
+ },
+ "operator": {
+ "label": "Operator"
+ },
+ "religion": {
+ "label": "Religion",
+ "options": {
+ "christian": "Christian",
+ "muslim": "Muslim",
+ "buddhist": "Buddhist",
+ "jewish": "Jewish",
+ "hindu": "Hindu",
+ "shinto": "Shinto",
+ "taoist": "Taoist"
+ }
+ },
+ "roadtype": {
+ "label": "Road Type",
+ "options": {
+ "bridge": "Bridge",
+ "tunnel": "Tunnel",
+ "embankment": "Embankment",
+ "cutting": "Cutting"
+ }
+ },
+ "shelter": {
+ "label": "Shelter"
+ },
+ "surface": {
+ "label": "Surface"
+ }
+ }
}
};