diff --git a/js/id/ui/preset/localized.js b/js/id/ui/preset/localized.js index c7d0e99b0..f8d55e9ff 100644 --- a/js/id/ui/preset/localized.js +++ b/js/id/ui/preset/localized.js @@ -209,11 +209,11 @@ iD.ui.preset.localized = function(field, context) { input.value(tags[field.key] || ''); - var postfixed = []; - for (var i in tags) { - var m = i.match(new RegExp(field.key + ':([a-zA-Z_-]+)$')); - if (m && m[1]) { - postfixed.push({ lang: m[1], value: tags[i]}); + var postfixed = [], k, m; + for (k in tags) { + m = k.match(/^(.*):([a-zA-Z_-]+)$/); + if (m && m[1] === field.key && m[2]) { + postfixed.push({ lang: m[2], value: tags[k] }); } } diff --git a/test/spec/ui/preset/localized.js b/test/spec/ui/preset/localized.js index d02a0dc1a..fb412548f 100644 --- a/test/spec/ui/preset/localized.js +++ b/test/spec/ui/preset/localized.js @@ -89,6 +89,15 @@ describe('iD.ui.preset.localized', function() { happen.once(selection.selectAll('.localized-lang').node(), {type: 'change'}); }); + it("ignores similar keys like `old_name`", function() { + var localized = iD.ui.preset.localized(field, {}); + selection.call(localized); + localized.tags({'old_name:de': 'Value'}); + + expect(selection.selectAll('.localized-lang').empty()).to.be.ok; + expect(selection.selectAll('.localized-value').empty()).to.be.ok; + }); + it("removes the tag when the language is emptied", function() { var localized = iD.ui.preset.localized(field, {}); selection.call(localized);