Skip to content

Commit f865f55

Browse files
committed
map user interface translations
1 parent 4d22d4b commit f865f55

40 files changed

Lines changed: 2067 additions & 314 deletions

app/javascript/controllers/feature/edit_controller.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default class extends Controller {
3434
if (dom.isInputElement(e.target)) return // Don't trigger if typing in input
3535

3636
const feature = this.getEditFeature()
37-
if (confirm(`Really delete this ${getFeatureTypeName(feature)}?`)) {
37+
if (confirm(window.__('Really delete this %{type}?').replace('%{type}', getFeatureTypeName(feature)))) {
3838
handleDelete({ features: [feature] })
3939
}
4040
}
@@ -48,7 +48,7 @@ export default class extends Controller {
4848
sendMessage('update_feature', feature)
4949
} catch (error) {
5050
console.error('Error updating feature:', error.message)
51-
status('Error updating feature', 'error')
51+
status(window.__('Error updating feature'), 'error')
5252
document.querySelector('#feature-edit-raw .error').innerHTML = error.message
5353
}
5454
}
@@ -63,7 +63,7 @@ export default class extends Controller {
6363
sendMessage('update_feature', feature)
6464
} catch (error) {
6565
console.error('Error updating feature geometry:', error.message)
66-
status('Error updating feature geometry', 'error')
66+
status(window.__('Error updating feature geometry'), 'error')
6767
document.querySelector('#feature-edit-raw-geometry .error').innerHTML = error.message
6868
}
6969
}
@@ -308,7 +308,7 @@ export default class extends Controller {
308308

309309
addUndo() {
310310
const feature = this.getEditFeature()
311-
addUndoState(window.__('Feature property update'), feature)
311+
addUndoState('Feature property update', feature)
312312
}
313313

314314
getEditFeature () {

app/javascript/controllers/feature/modal_controller.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export default class extends Controller {
303303
document.querySelector('#feature-desc-input').value = this.getSelectedFeature().properties.desc || ''
304304
easyMDE = new window.EasyMDE({
305305
element: document.getElementById('feature-desc-input'),
306-
placeholder: 'Add a description text',
306+
placeholder: window.__('Add a description text'),
307307
toolbar: ["bold", "italic", "heading", "code", "table", "|", "unordered-list", "horizontal-rule", "|", "link", "image", "preview"],
308308
minHeight: '4em',
309309
spellChecker: false,
@@ -324,13 +324,13 @@ export default class extends Controller {
324324
}
325325
} catch (error) {
326326
console.error('Error updating feature:', error.message)
327-
status('Error updating feature', 'error')
327+
status(window.__('Error updating feature'), 'error')
328328
}
329329
}
330330

331331
saveFeature () {
332332
const feature = this.getSelectedFeature()
333-
status('Saving feature ' + feature.id)
333+
status(window.__('Saving feature %{id}').replace('%{id}', feature.id))
334334
// send shallow copy of feature to avoid changes during send
335335
sendMessage('update_feature', { ...feature })
336336
}
@@ -394,14 +394,14 @@ export default class extends Controller {
394394
event.preventDefault()
395395
event.stopPropagation()
396396
console.log("Copied feature to clipboard ", feature)
397-
status('Feature copied to clipboard')
397+
status(window.__('Feature copied to clipboard'))
398398
}
399399
}
400400

401401
copyCoordinates(event) {
402402
event.preventDefault()
403403
const coords = event.currentTarget.dataset.coords
404-
copyToClipboard(coords, "Coordinates copied to clipboard", event.currentTarget)
404+
copyToClipboard(coords, window.__('Coordinates copied to clipboard'), event.currentTarget)
405405
}
406406

407407
toggleCoordFormat(event) {

app/javascript/controllers/map/context_menu_controller.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ export default class extends Controller {
1717
const feature = getFeature(target.dataset.featureId, 'geojson')
1818

1919
const vertexIndex = target.dataset.index
20-
addUndoState(window.__('Feature update'), feature)
20+
addUndoState('Feature update', feature)
2121
if (feature.geometry.type === 'LineString') { feature.geometry.coordinates.splice(vertexIndex, 1) }
2222
if (feature.geometry.type === 'Polygon') { feature.geometry.coordinates[0].splice(vertexIndex, 1) }
2323
applyFeatureUpdate(feature, { resetDraw: true, refreshRouteExtras: true, refreshKmMarkers: true })
2424
sendMessage('update_feature', { ...feature })
25-
status('Point deleted')
25+
status(window.__('Point deleted'))
2626
hideContextMenu()
2727
}
2828

@@ -36,7 +36,7 @@ export default class extends Controller {
3636
const secondCoords = coords.slice(vertexIndex)
3737

3838
// Keep original feature, shorten it to the first segment
39-
addUndoState(window.__('Feature update'), feature)
39+
addUndoState('Feature update', feature)
4040
feature.geometry.coordinates = firstCoords
4141
if (feature.properties.name) { feature.properties.name = `${feature.properties.name}_1` }
4242
renderLayers('geojson', true)
@@ -48,11 +48,11 @@ export default class extends Controller {
4848
geometry: { type: 'LineString', coordinates: secondCoords },
4949
properties: JSON.parse(JSON.stringify(feature.properties || {}))
5050
}
51-
addUndoState(window.__('Feature added'), secondFeature)
51+
addUndoState('Feature added', secondFeature)
5252
addFeature(secondFeature)
5353
sendMessage('new_feature', secondFeature)
5454

55-
status('Line cut into 2 segments')
55+
status(window.__('Line cut into 2 segments'))
5656
hideContextMenu()
5757
}
5858

@@ -63,7 +63,7 @@ export default class extends Controller {
6363
const feature = getFeature(target.dataset.featureId, 'geojson')
6464

6565
if (feature.geometry.type !== 'LineString') { return }
66-
addUndoState(window.__('Feature update'), feature)
66+
addUndoState('Feature update', feature)
6767

6868
// Reverse coordinates
6969
feature.geometry.coordinates.reverse()
@@ -92,7 +92,7 @@ export default class extends Controller {
9292

9393
applyFeatureUpdate(feature, { resetDraw: true, refreshRouteExtras: true, refreshKmMarkers: true })
9494
sendMessage('update_feature', { ...feature })
95-
status('Track reversed')
95+
status(window.__('Track reversed'))
9696
hideContextMenu()
9797
}
9898

@@ -106,7 +106,7 @@ export default class extends Controller {
106106
return
107107
}
108108
addFeature(feature)
109-
addUndoState(window.__('Feature added'), feature)
109+
addUndoState('Feature added', feature)
110110
// Geometries might arrive without elevation; fetch it before save
111111
if (feature.geometry.type === 'LineString' ) {
112112
updateElevation(feature).finally(() => {
@@ -121,14 +121,14 @@ export default class extends Controller {
121121
copyFeature(event) {
122122
const feature = getFeature(event.currentTarget.dataset.featureId, 'geojson')
123123
if (feature) {
124-
copyToClipboard(JSON.stringify(feature), 'Feature copied to clipboard')
124+
copyToClipboard(JSON.stringify(feature), window.__('Feature copied to clipboard'))
125125
}
126126
hideContextMenu()
127127
}
128128

129129
deleteFeature(event) {
130130
const feature = getFeature(event.currentTarget.dataset.featureId, 'geojson')
131-
if (feature && confirm(`Really delete this ${getFeatureTypeName(feature)}?`)) {
131+
if (feature && confirm(window.__('Really delete this %{type}?').replace('%{type}', getFeatureTypeName(feature)))) {
132132
handleDelete({ features: [feature] })
133133
}
134134
hideContextMenu()

app/javascript/controllers/map/layers_controller.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default class extends Controller {
2121
const fileSize = (file.size / 1024).toFixed(2) // in KB
2222

2323
if (fileSize > 2500 && !file.type.startsWith('image/')) {
24-
status('File exceeds 2.5MB. Please simplify it, for example with mapshaper.org', 'error', 'medium', 8000)
24+
status(window.__('File exceeds 2.5MB. Please simplify it, for example with mapshaper.org'), 'error', 'medium', 8000)
2525
return
2626
}
2727

@@ -71,7 +71,8 @@ export default class extends Controller {
7171
} else {
7272
sendMessage('new_feature', feature)
7373
}
74-
status('Added feature ' + i++ + '/' + geoJSON.features.length)
74+
status(window.__('Added feature %{index}/%{total}')
75+
.replace('%{index}', i++).replace('%{total}', geoJSON.features.length))
7576
})
7677

7778
// Fly to the center of the imported features.
@@ -99,7 +100,7 @@ export default class extends Controller {
99100
}
100101
}
101102

102-
status('File imported')
103+
status(window.__('File imported'))
103104
initLayersModal()
104105
}
105106

@@ -134,7 +135,7 @@ export default class extends Controller {
134135
// redraw first geojson layer
135136
renderLayer(layers.find(l => l.type === 'geojson').id)
136137
sendMessage('new_feature', { ...feature })
137-
status('Added image')
138+
status(window.__('Added image'))
138139
flyToFeature(feature)
139140
})
140141
}
@@ -181,7 +182,7 @@ export default class extends Controller {
181182
const layerElement = event.target.closest('.layer-item')
182183
const layerId = layerElement.getAttribute('data-layer-id')
183184
const layer = layers.find(f => f.id === layerId)
184-
addUndoState(window.__('Layer updated'), { ...layer.toJSON(), geojson: layer.geojson })
185+
addUndoState('Layer updated', { ...layer.toJSON(), geojson: layer.geojson })
185186

186187
layer.query = layerElement.querySelector('.overpass-query').value
187188
layer.name = layerElement.querySelector('.overpass-name').value
@@ -202,7 +203,7 @@ export default class extends Controller {
202203
const layerElement = event.target.closest('.layer-item')
203204
const layerId = layerElement.getAttribute('data-layer-id')
204205
const layer = layers.find(f => f.id === layerId)
205-
addUndoState(window.__('Layer updated'), { ...layer.toJSON(), geojson: layer.geojson })
206+
addUndoState('Layer updated', { ...layer.toJSON(), geojson: layer.geojson })
206207

207208
layer.query = layerElement.querySelector('.raster-url').value
208209
layer.name = layerElement.querySelector('.raster-name').value
@@ -257,7 +258,7 @@ export default class extends Controller {
257258
const layerId = layerElement.getAttribute('data-layer-id')
258259
const layer = layers.find(l => l.id === layerId)
259260
const wasVisible = layer.show !== false
260-
if (window.gon.map_mode === "rw") { addUndoState(window.__('Layer updated'), { ...layer.toJSON(), geojson: layer.geojson }) }
261+
if (window.gon.map_mode === "rw") { addUndoState('Layer updated', { ...layer.toJSON(), geojson: layer.geojson }) }
261262

262263
layer.show = !wasVisible
263264
setLayerVisibility(layer.sourceId, layer.show)
@@ -380,7 +381,7 @@ export default class extends Controller {
380381
let layer = createLayerInstance(layerData)
381382
layers.push(layer)
382383

383-
addUndoState(window.__('Layer added'), layerData)
384+
addUndoState('Layer added', layerData)
384385
initLayersModal()
385386
initializeLayerSources(layerId)
386387
initializeLayerStyles(layerId)
@@ -390,12 +391,12 @@ export default class extends Controller {
390391

391392
deleteLayer (event) {
392393
event.preventDefault()
393-
if (!confirm('Really delete this layer?')) { return }
394+
if (!confirm(window.__('Really delete this layer?'))) { return }
394395
const layerElement = event.target.closest('.layer-item')
395396
const layerId = layerElement.getAttribute('data-layer-id')
396397
const layer = layers.find(f => f.id === layerId)
397398

398-
addUndoState(window.__('Layer deleted'), { ...layer.toJSON(), geojson: layer.geojson })
399+
addUndoState('Layer deleted', { ...layer.toJSON(), geojson: layer.geojson })
399400
layer.cleanup()
400401
layers.splice(layers.indexOf(layer), 1)
401402
removeGeoJSONSource(layer.sourceId)

app/javascript/controllers/map/settings_controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default class extends Controller {
5656
element.addEventListener('click', (event) => {
5757
const text = event.target.textContent
5858
if (text && text !== 'auto') {
59-
copyToClipboard(text, 'Coordinates copied to clipboard')
59+
copyToClipboard(text, window.__('Coordinates copied to clipboard'))
6060
}
6161
})
6262
}
@@ -212,7 +212,7 @@ export default class extends Controller {
212212
dom.loadStylesheet('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/v4-shims.min.css')
213213
descEasyMDE = new window.EasyMDE({
214214
element: document.getElementById('map-description-input'),
215-
placeholder: 'Add a description text',
215+
placeholder: window.__('Add a description text'),
216216
toolbar: ["bold", "italic", "heading", "code", "table", "|", "unordered-list", "horizontal-rule", "|", "link", "image", "preview"],
217217
minHeight: '4em',
218218
spellChecker: false,

app/javascript/controllers/map/share_controller.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,19 @@ export default class extends Controller {
4747
copyOwnershipLink (e) {
4848
e.preventDefault()
4949
const ownershipLink = window.location.origin + document.querySelector('#share-ownership-link a').getAttribute('href')
50-
copyToClipboard(ownershipLink, "Ownership link copied", e.currentTarget)
50+
copyToClipboard(ownershipLink, window.__('Ownership link copied'), e.currentTarget)
5151
}
5252

5353
copyEditLink (e) {
5454
e.preventDefault()
5555
const editLink = window.location.origin + document.querySelector('#share-edit-link a').getAttribute('href')
56-
copyToClipboard(editLink, "Edit link copied", e.currentTarget)
56+
copyToClipboard(editLink, window.__('Edit link copied'), e.currentTarget)
5757
}
5858

5959
copyViewLink (e) {
6060
e.preventDefault()
6161
const viewLink = window.location.origin + document.querySelector('#share-view-link a').getAttribute('href')
62-
copyToClipboard(viewLink, "View link copied", e.currentTarget)
62+
copyToClipboard(viewLink, window.__('View link copied'), e.currentTarget)
6363
}
6464

6565
nativeShareOwnershipLink (e) {
@@ -98,6 +98,6 @@ export default class extends Controller {
9898
copyEmbedCode (e) {
9999
e.preventDefault()
100100
const embedCode = document.querySelector('#embed-code').value
101-
copyToClipboard(embedCode, "Embed code copied", e.currentTarget)
101+
copyToClipboard(embedCode, window.__('Embed code copied'), e.currentTarget)
102102
}
103103
}

app/javascript/controllers/map_controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export default class extends Controller {
6666
if (window.gon.map_mode !== 'rw') { return }
6767

6868
if (!navigator.clipboard || !navigator.clipboard.readText) {
69-
status('Clipboard paste requires HTTPS or localhost', 'warning')
69+
status(window.__('Clipboard paste requires HTTPS or localhost'), 'warning')
7070
return
7171
}
7272

@@ -76,7 +76,7 @@ export default class extends Controller {
7676
if (feature.type === "Feature") {
7777
feature.id = functions.featureId()
7878
addFeature(feature)
79-
addUndoState(window.__('Feature added'), feature)
79+
addUndoState('Feature added', feature)
8080
sendMessage('new_feature', feature)
8181
}
8282
} catch (err) {

app/javascript/controllers/maps_controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default class extends Controller {
4646
}
4747

4848
async loadMaps() {
49-
document.getElementById('map-list-count').innerText = 'Loading...'
49+
document.getElementById('map-list-count').innerText = window.__('Loading...')
5050
const url = `${location.pathname}?search=${this.searchValue}&sort=${this.sortValue}&direction=${this.directionValue}`
5151
const response = await fetch(url, {
5252
headers: { "Accept": "text/vnd.turbo-stream.html" }

app/javascript/helpers/clipboard.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export function fallbackCopyToClipboard (text, successMessage, iconElement = nul
4646
showCopySuccess(iconElement)
4747
}
4848
} catch (err) {
49-
status('Failed to copy')
49+
status(window.__('Failed to copy'))
5050
console.error('Fallback copy failed:', err)
5151
}
5252

app/javascript/maplibre/animations.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export class AnimatePolygonAnimation extends AnimationManager {
146146
}
147147

148148
export function animateViewFromProperties () {
149-
map.once('moveend', function () { status('Map view updated') })
149+
map.once('moveend', function () { status(window.__('Map view updated')) })
150150
map.flyTo({
151151
center: mapProperties.center || mapProperties.default_center,
152152
zoom: mapProperties.zoom || mapProperties.default_zoom,

0 commit comments

Comments
 (0)