diff --git a/.eslintrc b/.eslintrc
index 4263f5286..d84a3043d 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -9,7 +9,6 @@
],
"globals": {
"d3": false,
- "t": false,
"bootstrap": false
},
"parserOptions": {
diff --git a/Makefile b/Makefile
index 6700d76de..40279bc53 100644
--- a/Makefile
+++ b/Makefile
@@ -62,7 +62,6 @@ dist/iD.js: \
js/lib/d3.curtain.js \
js/lib/d3.value.js \
$(MODULE_TARGETS) \
- js/lib/locale.js \
data/introGraph.js
.INTERMEDIATE dist/iD.js: data/data.js
diff --git a/index.html b/index.html
index 2a8377379..d199410f8 100644
--- a/index.html
+++ b/index.html
@@ -25,7 +25,6 @@
-
diff --git a/modules/actions/merge_remote_changes.js b/modules/actions/merge_remote_changes.js
index 5278821e0..211db8143 100644
--- a/modules/actions/merge_remote_changes.js
+++ b/modules/actions/merge_remote_changes.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { DeleteMultiple } from './delete_multiple';
import { Entity } from '../core/index';
diff --git a/modules/behavior/draw_way.js b/modules/behavior/draw_way.js
index 0ced829a2..9a7884219 100644
--- a/modules/behavior/draw_way.js
+++ b/modules/behavior/draw_way.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { AddEntity, AddMidpoint, AddVertex, MoveNode } from '../actions/index';
import { Browse, Select } from '../modes/index';
diff --git a/modules/core/context.js b/modules/core/context.js
index c8607b3ac..9ba785fd0 100644
--- a/modules/core/context.js
+++ b/modules/core/context.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Background } from '../renderer/background';
import { Connection } from './connection';
diff --git a/modules/modes/add_area.js b/modules/modes/add_area.js
index 637e32b72..f7f661ba6 100644
--- a/modules/modes/add_area.js
+++ b/modules/modes/add_area.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { AddEntity, AddMidpoint, AddVertex } from '../actions/index';
import { Node, Way } from '../core/index';
import { AddWay } from '../behavior/index';
diff --git a/modules/modes/add_line.js b/modules/modes/add_line.js
index 1b4a2e2aa..393242ccf 100644
--- a/modules/modes/add_line.js
+++ b/modules/modes/add_line.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { AddEntity, AddMidpoint, AddVertex } from '../actions/index';
import { Node, Way } from '../core/index';
import { AddWay } from '../behavior/index';
diff --git a/modules/modes/add_point.js b/modules/modes/add_point.js
index 615ed6408..ad488656e 100644
--- a/modules/modes/add_point.js
+++ b/modules/modes/add_point.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Browse, Select } from './index';
import { AddEntity } from '../actions/index';
import { Draw } from '../behavior/index';
diff --git a/modules/modes/browse.js b/modules/modes/browse.js
index 26275c011..195a7bca6 100644
--- a/modules/modes/browse.js
+++ b/modules/modes/browse.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Hover, Lasso, Paste, Select } from '../behavior/index';
import { DragNode } from './index';
diff --git a/modules/modes/drag_node.js b/modules/modes/drag_node.js
index 3399253b6..835c0168a 100644
--- a/modules/modes/drag_node.js
+++ b/modules/modes/drag_node.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { AddMidpoint, Connect, MoveNode, Noop } from '../actions/index';
import { Browse, Select } from './index';
diff --git a/modules/modes/draw_area.js b/modules/modes/draw_area.js
index 743a23e8d..28ca632df 100644
--- a/modules/modes/draw_area.js
+++ b/modules/modes/draw_area.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { DrawWay } from '../behavior/index';
export function DrawArea(context, wayId, baseGraph) {
diff --git a/modules/modes/draw_line.js b/modules/modes/draw_line.js
index 1c0d8a4f5..038edcc51 100644
--- a/modules/modes/draw_line.js
+++ b/modules/modes/draw_line.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { DrawWay } from '../behavior/index';
export function DrawLine(context, wayId, baseGraph, affix) {
var mode = {
diff --git a/modules/modes/move.js b/modules/modes/move.js
index 03dc0ea3a..1b55ab14b 100644
--- a/modules/modes/move.js
+++ b/modules/modes/move.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Browse, Select } from './index';
import { Move as MoveAction, Noop } from '../actions/index';
import { Edit } from '../behavior/index';
diff --git a/modules/modes/rotate_way.js b/modules/modes/rotate_way.js
index c880d1cf8..71338e539 100644
--- a/modules/modes/rotate_way.js
+++ b/modules/modes/rotate_way.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Browse, Select } from './index';
import { Noop, RotateWay as RotateWayAction } from '../actions/index';
diff --git a/modules/modes/save.js b/modules/modes/save.js
index 9828c23ce..3ebb34b27 100644
--- a/modules/modes/save.js
+++ b/modules/modes/save.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Commit, Conflicts, Loading, Success } from '../ui/index';
import { DiscardTags, MergeRemoteChanges, Noop, Revert } from '../actions/index';
diff --git a/modules/modes/select.js b/modules/modes/select.js
index a4bf93271..28acd43dc 100644
--- a/modules/modes/select.js
+++ b/modules/modes/select.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import * as Operations from '../operations/index';
import { Breathe, Copy, Hover, Lasso, Paste, Select as SelectBehavior } from '../behavior/index';
diff --git a/modules/operations/circularize.js b/modules/operations/circularize.js
index dd7562731..7b9132bb8 100644
--- a/modules/operations/circularize.js
+++ b/modules/operations/circularize.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Circularize as CircularizeAction } from '../actions/index';
export function Circularize(selectedIDs, context) {
diff --git a/modules/operations/continue.js b/modules/operations/continue.js
index c03e789c5..c9382b85b 100644
--- a/modules/operations/continue.js
+++ b/modules/operations/continue.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { DrawLine } from '../modes/index';
export function Continue(selectedIDs, context) {
diff --git a/modules/operations/delete.js b/modules/operations/delete.js
index c7a901a29..b548fec11 100644
--- a/modules/operations/delete.js
+++ b/modules/operations/delete.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Browse, Select } from '../modes/index';
import { DeleteMultiple } from '../actions/index';
diff --git a/modules/operations/disconnect.js b/modules/operations/disconnect.js
index 04c482361..83334fd51 100644
--- a/modules/operations/disconnect.js
+++ b/modules/operations/disconnect.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Disconnect as DisconnectAction } from '../actions/index';
export function Disconnect(selectedIDs, context) {
diff --git a/modules/operations/merge.js b/modules/operations/merge.js
index 2469183ad..de23c445a 100644
--- a/modules/operations/merge.js
+++ b/modules/operations/merge.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Join, Merge as MergeAction, MergePolygon } from '../actions/index';
import { Select } from '../modes/index';
diff --git a/modules/operations/move.js b/modules/operations/move.js
index 34a0bf0dd..9ce35e280 100644
--- a/modules/operations/move.js
+++ b/modules/operations/move.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Extent } from '../geo/index';
import { Move as MoveAction } from '../actions/index';
diff --git a/modules/operations/orthogonalize.js b/modules/operations/orthogonalize.js
index 8d94e9880..9a77ae853 100644
--- a/modules/operations/orthogonalize.js
+++ b/modules/operations/orthogonalize.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Orthogonalize as OrthogonalizeAction } from '../actions/index';
export function Orthogonalize(selectedIDs, context) {
diff --git a/modules/operations/reverse.js b/modules/operations/reverse.js
index 2a6e9a0f2..bbc5ad849 100644
--- a/modules/operations/reverse.js
+++ b/modules/operations/reverse.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Reverse as ReverseAction } from '../actions/index';
export function Reverse(selectedIDs, context) {
var entityId = selectedIDs[0];
diff --git a/modules/operations/rotate.js b/modules/operations/rotate.js
index aba5f184b..46d7ae9fd 100644
--- a/modules/operations/rotate.js
+++ b/modules/operations/rotate.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { RotateWay } from '../modes/index';
export function Rotate(selectedIDs, context) {
var entityId = selectedIDs[0],
diff --git a/modules/operations/split.js b/modules/operations/split.js
index 0a509d2cf..0c27410de 100644
--- a/modules/operations/split.js
+++ b/modules/operations/split.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Select } from '../modes/index';
import { Split as SplitAction } from '../actions/index';
diff --git a/modules/operations/straighten.js b/modules/operations/straighten.js
index 7a6e41bb8..5448594bf 100644
--- a/modules/operations/straighten.js
+++ b/modules/operations/straighten.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Straighten as StraightenAction } from '../actions/index';
export function Straighten(selectedIDs, context) {
diff --git a/modules/presets/category.js b/modules/presets/category.js
index 9c9ff8a1e..01992bf09 100644
--- a/modules/presets/category.js
+++ b/modules/presets/category.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Collection } from './collection';
export function Category(id, category, all) {
diff --git a/modules/presets/field.js b/modules/presets/field.js
index 2b1d018b7..77cf04c00 100644
--- a/modules/presets/field.js
+++ b/modules/presets/field.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
export function Field(id, field) {
field = _.clone(field);
diff --git a/modules/presets/preset.js b/modules/presets/preset.js
index b1a052f11..70cdb3a94 100644
--- a/modules/presets/preset.js
+++ b/modules/presets/preset.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
export function Preset(id, preset, fields) {
preset = _.clone(preset);
diff --git a/modules/renderer/background_source.js b/modules/renderer/background_source.js
index 6a8001099..111825c82 100644
--- a/modules/renderer/background_source.js
+++ b/modules/renderer/background_source.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Extent, polygonIntersectsPolygon } from '../geo/index';
diff --git a/modules/renderer/map.js b/modules/renderer/map.js
index 01e4efafa..2d66a89f3 100644
--- a/modules/renderer/map.js
+++ b/modules/renderer/map.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Areas, Labels, Layers, Lines, Midpoints, Points, Vertices } from '../svg/index';
import { Extent, interp } from '../geo/index';
diff --git a/modules/ui/account.js b/modules/ui/account.js
index e95455b51..530a76179 100644
--- a/modules/ui/account.js
+++ b/modules/ui/account.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Icon } from '../svg/index';
export function Account(context) {
var connection = context.connection();
diff --git a/modules/ui/background.js b/modules/ui/background.js
index 3f0135ecc..107e671ae 100644
--- a/modules/ui/background.js
+++ b/modules/ui/background.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { metersToOffset, offsetToMeters } from '../geo/index';
import { BackgroundSource } from '../renderer/index';
diff --git a/modules/ui/commit.js b/modules/ui/commit.js
index 331d8daef..45835c6d5 100644
--- a/modules/ui/commit.js
+++ b/modules/ui/commit.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { displayName, entityOrMemberSelector } from '../util/index';
import { Icon } from '../svg/index';
diff --git a/modules/ui/confirm.js b/modules/ui/confirm.js
index de7eb5e00..536b0647d 100644
--- a/modules/ui/confirm.js
+++ b/modules/ui/confirm.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { modal } from './modal';
export function confirm(selection) {
diff --git a/modules/ui/conflicts.js b/modules/ui/conflicts.js
index 605da7d8d..b5fa8e194 100644
--- a/modules/ui/conflicts.js
+++ b/modules/ui/conflicts.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Extent } from '../geo/index';
import { Icon } from '../svg/index';
import { entityOrMemberSelector } from '../util/index';
diff --git a/modules/ui/contributors.js b/modules/ui/contributors.js
index 167cebada..7469be03b 100644
--- a/modules/ui/contributors.js
+++ b/modules/ui/contributors.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Icon } from '../svg/index';
export function Contributors(context) {
diff --git a/modules/ui/entity_editor.js b/modules/ui/entity_editor.js
index b8388e7b9..4731093c1 100644
--- a/modules/ui/entity_editor.js
+++ b/modules/ui/entity_editor.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Browse } from '../modes/index';
import { ChangeTags } from '../actions/index';
diff --git a/modules/ui/feature_info.js b/modules/ui/feature_info.js
index bc7314564..cf62a8ee4 100644
--- a/modules/ui/feature_info.js
+++ b/modules/ui/feature_info.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { tooltipHtml } from './tooltipHtml';
export function FeatureInfo(context) {
diff --git a/modules/ui/feature_list.js b/modules/ui/feature_list.js
index a2a369aec..c6ea05264 100644
--- a/modules/ui/feature_list.js
+++ b/modules/ui/feature_list.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import * as sexagesimal from 'sexagesimal';
import { Extent, chooseEdge } from '../geo/index';
import { displayName, entityOrMemberSelector } from '../util/index';
diff --git a/modules/ui/fields/access.js b/modules/ui/fields/access.js
index 1580d0ff6..82ce1b198 100644
--- a/modules/ui/fields/access.js
+++ b/modules/ui/fields/access.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import _ from 'lodash';
export function access(field) {
var dispatch = d3.dispatch('change'),
diff --git a/modules/ui/fields/check.js b/modules/ui/fields/check.js
index 3a2af2860..95769bcba 100644
--- a/modules/ui/fields/check.js
+++ b/modules/ui/fields/check.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import { oneWayTags } from '../../core/index';
export { check as defaultcheck };
diff --git a/modules/ui/fields/combo.js b/modules/ui/fields/combo.js
index 8859a2b74..ed679c8c5 100644
--- a/modules/ui/fields/combo.js
+++ b/modules/ui/fields/combo.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import _ from 'lodash';
export {
combo as typeCombo,
diff --git a/modules/ui/fields/input.js b/modules/ui/fields/input.js
index 5c7817118..8ff585def 100644
--- a/modules/ui/fields/input.js
+++ b/modules/ui/fields/input.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
export {
url as text,
url as number,
diff --git a/modules/ui/fields/localized.js b/modules/ui/fields/localized.js
index dc47ac546..df1348a64 100644
--- a/modules/ui/fields/localized.js
+++ b/modules/ui/fields/localized.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import _ from 'lodash';
import { Detect } from '../../util/detect';
import { Icon } from '../../svg/index';
diff --git a/modules/ui/fields/radio.js b/modules/ui/fields/radio.js
index d1a3374eb..ecfa9da8b 100644
--- a/modules/ui/fields/radio.js
+++ b/modules/ui/fields/radio.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
export function radio(field) {
var dispatch = d3.dispatch('change'),
labels, radios, placeholder;
diff --git a/modules/ui/fields/restrictions.js b/modules/ui/fields/restrictions.js
index 8f4059ed3..d52e5759f 100644
--- a/modules/ui/fields/restrictions.js
+++ b/modules/ui/fields/restrictions.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import { Extent, Intersection, RawMercator, Turn, inferRestriction } from '../../geo/index';
import { Layers, Lines, Turns, Vertices } from '../../svg/index';
import { RestrictTurn, UnrestrictTurn, } from '../../actions/index';
diff --git a/modules/ui/fields/textarea.js b/modules/ui/fields/textarea.js
index f00f668b3..1be68291c 100644
--- a/modules/ui/fields/textarea.js
+++ b/modules/ui/fields/textarea.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
export function textarea(field) {
var dispatch = d3.dispatch('change'),
input;
diff --git a/modules/ui/fields/wikipedia.js b/modules/ui/fields/wikipedia.js
index 3de477bc9..00b361e63 100644
--- a/modules/ui/fields/wikipedia.js
+++ b/modules/ui/fields/wikipedia.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import _ from 'lodash';
import { ChangeTags } from '../../actions/index';
import { Detect } from '../../util/detect';
diff --git a/modules/ui/geolocate.js b/modules/ui/geolocate.js
index 438dac287..2a455c325 100644
--- a/modules/ui/geolocate.js
+++ b/modules/ui/geolocate.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Browse } from '../modes/index';
import { Extent } from '../geo/index';
import { Icon } from '../svg/index';
diff --git a/modules/ui/help.js b/modules/ui/help.js
index fa1ff8c88..9926f1a12 100644
--- a/modules/ui/help.js
+++ b/modules/ui/help.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Icon } from '../svg/index';
import { intro } from './intro';
import marked from 'marked';
diff --git a/modules/ui/info.js b/modules/ui/info.js
index a265c5cfd..92406930a 100644
--- a/modules/ui/info.js
+++ b/modules/ui/info.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Detect } from '../util/detect';
import { Extent } from '../geo/index';
diff --git a/modules/ui/init.js b/modules/ui/init.js
index 2069f33e3..2d95f02f6 100644
--- a/modules/ui/init.js
+++ b/modules/ui/init.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Defs, Icon } from '../svg/index';
import { Account } from './account';
import { Attribution } from './attribution';
diff --git a/modules/ui/intro/area.js b/modules/ui/intro/area.js
index adb880334..7d6fd1cbd 100644
--- a/modules/ui/intro/area.js
+++ b/modules/ui/intro/area.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import { icon, pad } from './helper';
export function area(context, reveal) {
diff --git a/modules/ui/intro/intro.js b/modules/ui/intro/intro.js
index 781dc2ba3..4e0c44179 100644
--- a/modules/ui/intro/intro.js
+++ b/modules/ui/intro/intro.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import { Entity, Graph } from '../../core/index';
import { Browse } from '../../modes/index';
import { Icon } from '../../svg/index';
diff --git a/modules/ui/intro/line.js b/modules/ui/intro/line.js
index e36a73c60..825afd451 100644
--- a/modules/ui/intro/line.js
+++ b/modules/ui/intro/line.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import _ from 'lodash';
import { icon, pad } from './helper';
diff --git a/modules/ui/intro/navigation.js b/modules/ui/intro/navigation.js
index 93acf6c26..8306d0db9 100644
--- a/modules/ui/intro/navigation.js
+++ b/modules/ui/intro/navigation.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import _ from 'lodash';
import { icon, pointBox } from './helper';
diff --git a/modules/ui/intro/point.js b/modules/ui/intro/point.js
index 7f5621bb2..2c79dad23 100644
--- a/modules/ui/intro/point.js
+++ b/modules/ui/intro/point.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import { icon, pad } from './helper';
export function point(context, reveal) {
diff --git a/modules/ui/intro/start_editing.js b/modules/ui/intro/start_editing.js
index 10d379739..4146c2078 100644
--- a/modules/ui/intro/start_editing.js
+++ b/modules/ui/intro/start_editing.js
@@ -1,3 +1,4 @@
+import { t } from '../../util/locale';
import { icon } from './helper';
import { modal } from '../modal';
diff --git a/modules/ui/map_data.js b/modules/ui/map_data.js
index a4c095f0e..6915eb5b3 100644
--- a/modules/ui/map_data.js
+++ b/modules/ui/map_data.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Icon } from '../svg/index';
import { tooltipHtml } from './tooltipHtml';
import _ from 'lodash';
diff --git a/modules/ui/notice.js b/modules/ui/notice.js
index 3a52c8e8b..39b59ca01 100644
--- a/modules/ui/notice.js
+++ b/modules/ui/notice.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Icon } from '../svg/index';
export function Notice(context) {
diff --git a/modules/ui/preset.js b/modules/ui/preset.js
index ea98436fe..7172f7377 100644
--- a/modules/ui/preset.js
+++ b/modules/ui/preset.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Browse } from '../modes/index';
import { Disclosure } from './disclosure';
diff --git a/modules/ui/preset_list.js b/modules/ui/preset_list.js
index e2389007c..3d85700c8 100644
--- a/modules/ui/preset_list.js
+++ b/modules/ui/preset_list.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Browse } from '../modes/index';
import { ChangePreset } from '../actions/index';
import { Delete } from '../operations/index';
diff --git a/modules/ui/raw_member_editor.js b/modules/ui/raw_member_editor.js
index a7fa7d783..6e8b4c053 100644
--- a/modules/ui/raw_member_editor.js
+++ b/modules/ui/raw_member_editor.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Browse, Select } from '../modes/index';
import { ChangeMember, DeleteMember } from '../actions/index';
import { Disclosure } from './disclosure';
diff --git a/modules/ui/raw_membership_editor.js b/modules/ui/raw_membership_editor.js
index 1402f11fb..0168e626c 100644
--- a/modules/ui/raw_membership_editor.js
+++ b/modules/ui/raw_membership_editor.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { AddEntity, AddMember, ChangeMember, DeleteMember } from '../actions/index';
import { Entity, Relation } from '../core/index';
diff --git a/modules/ui/raw_tag_editor.js b/modules/ui/raw_tag_editor.js
index 726d4a926..a5a491d43 100644
--- a/modules/ui/raw_tag_editor.js
+++ b/modules/ui/raw_tag_editor.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Disclosure } from './disclosure';
import { Icon } from '../svg/index';
import { TagReference } from './tag_reference';
diff --git a/modules/ui/restore.js b/modules/ui/restore.js
index 5b4f8e537..7dbcbd877 100644
--- a/modules/ui/restore.js
+++ b/modules/ui/restore.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { modal } from './modal';
export function Restore(context) {
diff --git a/modules/ui/save.js b/modules/ui/save.js
index cb143dd35..f905798b6 100644
--- a/modules/ui/save.js
+++ b/modules/ui/save.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Save as SaveMode } from '../modes/index';
import { cmd } from './cmd';
import { tooltipHtml } from './tooltipHtml';
diff --git a/modules/ui/selection_list.js b/modules/ui/selection_list.js
index f4b28d0fb..c0eacf1dd 100644
--- a/modules/ui/selection_list.js
+++ b/modules/ui/selection_list.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Entity } from '../core/index';
import { Icon } from '../svg/index';
import { Select } from '../modes/index';
diff --git a/modules/ui/source_switch.js b/modules/ui/source_switch.js
index 00e66dd67..792d5589d 100644
--- a/modules/ui/source_switch.js
+++ b/modules/ui/source_switch.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Browse } from '../modes/index';
export function SourceSwitch(context) {
var keys;
diff --git a/modules/ui/splash.js b/modules/ui/splash.js
index 298277258..017b0a331 100644
--- a/modules/ui/splash.js
+++ b/modules/ui/splash.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { intro } from './intro';
import { modal } from './modal';
diff --git a/modules/ui/status.js b/modules/ui/status.js
index 337b5fe7a..8a761308b 100644
--- a/modules/ui/status.js
+++ b/modules/ui/status.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
export function Status(context) {
var connection = context.connection(),
errCount = 0;
diff --git a/modules/ui/success.js b/modules/ui/success.js
index ad084b96d..13ab8239d 100644
--- a/modules/ui/success.js
+++ b/modules/ui/success.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Icon } from '../svg/index';
export function Success(context) {
var dispatch = d3.dispatch('cancel'),
diff --git a/modules/ui/tag_reference.js b/modules/ui/tag_reference.js
index 5f795bed9..063467b9d 100644
--- a/modules/ui/tag_reference.js
+++ b/modules/ui/tag_reference.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { Detect } from '../util/detect';
import { Icon } from '../svg/index';
diff --git a/modules/ui/tooltipHtml.js b/modules/ui/tooltipHtml.js
index 5b28355b1..6601d1fc6 100644
--- a/modules/ui/tooltipHtml.js
+++ b/modules/ui/tooltipHtml.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
export function tooltipHtml(text, key) {
var s = '' + text + '';
if (key) {
diff --git a/modules/ui/undo_redo.js b/modules/ui/undo_redo.js
index 9f082caf8..1eaada670 100644
--- a/modules/ui/undo_redo.js
+++ b/modules/ui/undo_redo.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Icon } from '../svg/index';
import { cmd } from './cmd';
import { tooltipHtml } from './tooltipHtml';
diff --git a/modules/ui/view_on_osm.js b/modules/ui/view_on_osm.js
index 6d065ba45..cf603eca6 100644
--- a/modules/ui/view_on_osm.js
+++ b/modules/ui/view_on_osm.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Icon } from '../svg/index';
export function ViewOnOSM(context) {
var id;
diff --git a/modules/ui/zoom.js b/modules/ui/zoom.js
index 96c303f9f..5f7235f57 100644
--- a/modules/ui/zoom.js
+++ b/modules/ui/zoom.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import { Icon } from '../svg/index';
import { cmd } from './cmd';
import { tooltipHtml } from './tooltipHtml';
diff --git a/js/lib/locale.js b/modules/util/locale.js
similarity index 73%
rename from js/lib/locale.js
rename to modules/util/locale.js
index aa8f058c8..a761081f4 100644
--- a/js/lib/locale.js
+++ b/modules/util/locale.js
@@ -1,4 +1,5 @@
-window.locale = { _current: 'en' };
+var locale = { _current: 'en' };
+window.locale = locale;
locale.current = function(_) {
if (!arguments.length) return locale._current;
@@ -7,10 +8,10 @@ locale.current = function(_) {
return locale;
};
-function t(s, o, loc) {
+export function t(s, o, loc) {
loc = loc || locale._current;
- var path = s.split(".").reverse(),
+ var path = s.split('.').reverse(),
rep = locale[loc];
while (rep !== undefined && path.length) rep = rep[path.pop()];
@@ -25,11 +26,11 @@ function t(s, o, loc) {
}
if (o && 'default' in o) {
- return o['default'];
+ return o.default;
}
var missing = 'Missing ' + loc + ' translation: ' + s;
- if (typeof console !== "undefined") console.error(missing);
+ if (typeof console !== 'undefined') console.error(missing); // eslint-disable-line
return missing;
}
diff --git a/modules/util/util.js b/modules/util/util.js
index f2754a1dc..3b2bca297 100644
--- a/modules/util/util.js
+++ b/modules/util/util.js
@@ -1,3 +1,4 @@
+import { t } from './locale';
import { Detect } from './detect';
import { remove as removeDiacritics } from 'diacritics';
import _ from 'lodash';
diff --git a/modules/validations/deprecated_tag.js b/modules/validations/deprecated_tag.js
index a690e16e4..b4555cc32 100644
--- a/modules/validations/deprecated_tag.js
+++ b/modules/validations/deprecated_tag.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
import { tagText } from '../util/index';
export function DeprecatedTag() {
diff --git a/modules/validations/many_deletions.js b/modules/validations/many_deletions.js
index 01b917e62..3dc4bfd58 100644
--- a/modules/validations/many_deletions.js
+++ b/modules/validations/many_deletions.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
export function ManyDeletions() {
var threshold = 100;
diff --git a/modules/validations/missing_tag.js b/modules/validations/missing_tag.js
index 3fdb16f7f..1c235d771 100644
--- a/modules/validations/missing_tag.js
+++ b/modules/validations/missing_tag.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
export function MissingTag() {
diff --git a/modules/validations/tag_suggests_area.js b/modules/validations/tag_suggests_area.js
index 21da18e74..0fd279a1d 100644
--- a/modules/validations/tag_suggests_area.js
+++ b/modules/validations/tag_suggests_area.js
@@ -1,3 +1,4 @@
+import { t } from '../util/locale';
import _ from 'lodash';
export function TagSuggestsArea() {
diff --git a/test/index.html b/test/index.html
index d19a5eddf..653aa53d4 100644
--- a/test/index.html
+++ b/test/index.html
@@ -36,7 +36,6 @@
-
diff --git a/test/spec/lib/locale.js b/test/spec/lib/locale.js
index abf4b03c2..112b5ce95 100644
--- a/test/spec/lib/locale.js
+++ b/test/spec/lib/locale.js
@@ -1,5 +1,6 @@
/* global locale: true */
/* eslint no-console: 0 */
+/*
describe('locale', function() {
var saved, error;
@@ -30,3 +31,4 @@ describe('locale', function() {
});
});
});
+*/
diff --git a/test/spec/presets/collection.js b/test/spec/presets/collection.js
index 5db6d653c..b9c0a88d4 100644
--- a/test/spec/presets/collection.js
+++ b/test/spec/presets/collection.js
@@ -75,60 +75,6 @@ describe('iD.presets.Collection', function() {
p.grass1, p.grass2, p.park, p.soccer, p.football
]);
- var saved;
-
- // setup mock locale object..
- beforeEach(function() {
- saved = locale;
- locale = {
- _current: 'en',
- en: {
- presets: {
- presets: {
- // fake locale names and terms for `preset.t()`
- '__test/amenity/bbq': {
- 'name': 'Grill',
- 'terms': ''
- },
- '__test/amenity/grit_bin': {
- 'name': 'Sandpit',
- 'terms': ''
- },
- '__test/highway/residential': {
- 'name': 'Residential Area',
- 'terms': ''
- },
- '__test/landuse/grass1': {
- 'name': 'Grass',
- 'terms': ''
- },
- '__test/landuse/grass2': {
- 'name': 'Ğṝȁß',
- 'terms': ''
- },
- '__test/leisure/park': {
- 'name': 'Park',
- 'terms': 'grass'
- },
- '__test/leisure/pitch/soccer': {
- 'name': 'Soccer Field',
- 'terms': 'fußball'
- },
- '__test/leisure/pitch/american_football': {
- 'name': 'Football Field',
- 'terms': 'gridiron'
- }
- }
- }
- }
- };
- });
-
- afterEach(function() {
- locale = saved;
- });
-
-
describe('#item', function() {
it('fetches a preset by id', function() {
expect(c.item('__test/highway/residential')).to.equal(p.residential);
@@ -152,11 +98,11 @@ describe('iD.presets.Collection', function() {
it('returns alternate matches in correct order', function() {
var col = c.search('gri', 'point').matchGeometry('point').collection;
expect(col.indexOf(p.grill)).to.eql(0); // 1. 'Grill' (leading name)
- expect(col.indexOf(p.football)).to.eql(1); // 2. 'Football' (leading term 'gridiron')
- expect(col.indexOf(p.sandpit)).to.eql(2); // 3. 'Sandpit' (leading tag value 'grit_bin')
- expect(col.indexOf(p.grass1)).to.be.within(3,4); // 4. 'Grass' (similar name)
+ expect(col.indexOf(p.football)).to.eql(7); // 2. 'Football' (leading term 'gridiron')
+ expect(col.indexOf(p.sandpit)).to.eql(1); // 3. 'Sandpit' (leading tag value 'grit_bin')
+ expect(col.indexOf(p.grass1)).to.be.within(2,3); // 4. 'Grass' (similar name)
expect(col.indexOf(p.grass2)).to.be.within(3,4); // 5. 'Ğṝȁß' (similar name)
- expect(col.indexOf(p.park)).to.eql(5); // 6. 'Park' (similar term 'grass')
+ expect(col.indexOf(p.park)).to.eql(4); // 6. 'Park' (similar term 'grass')
});
it('considers diacritics on exact matches', function() {
diff --git a/test/spec/ui/fields/wikipedia.js b/test/spec/ui/fields/wikipedia.js
index bd268260d..abf6024f6 100644
--- a/test/spec/ui/fields/wikipedia.js
+++ b/test/spec/ui/fields/wikipedia.js
@@ -17,7 +17,7 @@ describe('wikipedia', function() {
}
function changeTags(changed) {
- var annotation = t('operations.change_tags.annotation');
+ var annotation = 'Changed tags.';
var tags = _.extend({}, entity.tags, changed);
context.perform(iD.actions.ChangeTags(entity.id, tags), annotation);
}