feat: add multilingual interface support
This commit is contained in:
+73
-19
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>XPro Map Visualizer</title>
|
||||
<title data-i18n="pageTitle">XPro Map Visualizer</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,400,0,0" />
|
||||
<link rel="stylesheet" href="./vendor/ol.css" />
|
||||
<link rel="stylesheet" href="./styles.css" />
|
||||
@@ -14,6 +14,7 @@
|
||||
id="message-region"
|
||||
class="message-region"
|
||||
aria-label="Application messages"
|
||||
data-i18n-aria-label="applicationMessages"
|
||||
aria-live="polite"
|
||||
aria-relevant="additions"
|
||||
></div>
|
||||
@@ -26,13 +27,18 @@
|
||||
aria-expanded="true"
|
||||
>
|
||||
<span aria-hidden="true">☰</span>
|
||||
<span class="visually-hidden">Open map controls</span>
|
||||
<span class="visually-hidden" data-i18n="openMapControls">Open map controls</span>
|
||||
</button>
|
||||
|
||||
<aside id="sidebar" class="sidebar" aria-label="Map controls">
|
||||
<aside
|
||||
id="sidebar"
|
||||
class="sidebar"
|
||||
aria-label="Map controls"
|
||||
data-i18n-aria-label="mapControls"
|
||||
>
|
||||
<button id="sidebar-close" class="sidebar-toggle sidebar-close" type="button">
|
||||
<span aria-hidden="true">×</span>
|
||||
<span class="visually-hidden">Close map controls</span>
|
||||
<span class="visually-hidden" data-i18n="closeMapControls">Close map controls</span>
|
||||
</button>
|
||||
<div class="sidebar-content">
|
||||
<div class="brand">
|
||||
@@ -40,12 +46,23 @@
|
||||
<img class="brand-logo" src="./assets/brand/xpro-logo-simple.svg" alt="XPro" />
|
||||
<span class="visually-hidden">XPro</span>
|
||||
</h1>
|
||||
<p class="brand-subtitle">Map Visualizer</p>
|
||||
<div class="brand-footer">
|
||||
<p class="brand-subtitle" data-i18n="mapVisualizer">Map Visualizer</p>
|
||||
<button
|
||||
id="settings-open"
|
||||
class="settings-open"
|
||||
type="button"
|
||||
aria-label="Open settings"
|
||||
data-i18n-aria-label="openSettings"
|
||||
>
|
||||
<span class="material-symbols-outlined" aria-hidden="true">settings</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="panel">
|
||||
<div class="panel-heading">
|
||||
<h2>Find</h2>
|
||||
<h2 data-i18n="find">Find</h2>
|
||||
</div>
|
||||
<form id="parcel-search-form" class="parcel-search-form">
|
||||
<input
|
||||
@@ -54,44 +71,51 @@
|
||||
type="search"
|
||||
inputmode="text"
|
||||
placeholder="e.g. 57 or 2669.1"
|
||||
data-i18n-placeholder="parcelExample"
|
||||
autocomplete="off"
|
||||
aria-label="Parcel number"
|
||||
data-i18n-aria-label="parcelNumber"
|
||||
required
|
||||
/>
|
||||
<button type="submit">Find on map</button>
|
||||
<button type="submit" data-i18n="findOnMap">Find on map</button>
|
||||
</form>
|
||||
<p id="parcel-search-status" class="status" aria-live="polite"></p>
|
||||
</section>
|
||||
|
||||
<section class="panel">
|
||||
<div class="panel-heading">
|
||||
<h2>Layers</h2>
|
||||
<h2 data-i18n="layers">Layers</h2>
|
||||
<span id="layer-count" class="badge">0</span>
|
||||
</div>
|
||||
<p id="status" class="status">Waiting for connection.</p>
|
||||
<div id="layer-list" class="layer-list empty">
|
||||
<p id="status" class="status" data-i18n="waitingForConnection">Waiting for connection.</p>
|
||||
<div id="layer-list" class="layer-list empty" data-i18n="loadingPublishedLayers">
|
||||
Loading published layers.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="panel">
|
||||
<div class="panel-heading">
|
||||
<h2>Background</h2>
|
||||
<h2 data-i18n="baseMap">Base map</h2>
|
||||
</div>
|
||||
<label class="background-selector" for="background-select">
|
||||
<span>Base map</span>
|
||||
<select id="background-select" name="background">
|
||||
<option value="soft">Soft minimal</option>
|
||||
<option value="openstreetmap">OpenStreetMap</option>
|
||||
<option value="satellite">Satellite imagery</option>
|
||||
<div class="background-selector">
|
||||
<select
|
||||
id="background-select"
|
||||
name="background"
|
||||
aria-label="Base map"
|
||||
data-i18n-aria-label="baseMap"
|
||||
>
|
||||
<option value="soft" data-i18n="softMinimal">Soft minimal</option>
|
||||
<option value="openstreetmap" data-i18n="openStreetMap">OpenStreetMap</option>
|
||||
<option value="satellite" data-i18n="satelliteImagery">Satellite imagery</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main class="map-wrap">
|
||||
<div id="map" aria-label="Map view"></div>
|
||||
<div id="map" aria-label="Map view" data-i18n-aria-label="mapView"></div>
|
||||
</main>
|
||||
|
||||
<div id="feature-modal" class="feature-modal" hidden>
|
||||
@@ -107,15 +131,45 @@
|
||||
class="feature-modal-close"
|
||||
type="button"
|
||||
aria-label="Close feature information"
|
||||
data-i18n-aria-label="closeFeatureInformation"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
<div id="feature-modal-content"></div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div id="settings-modal" class="settings-modal" hidden>
|
||||
<div class="settings-modal-backdrop" data-settings-modal-close></div>
|
||||
<section
|
||||
class="settings-modal-dialog"
|
||||
role="dialog"
|
||||
aria-modal="true"
|
||||
aria-labelledby="settings-modal-title"
|
||||
>
|
||||
<button
|
||||
id="settings-modal-close"
|
||||
class="settings-modal-close"
|
||||
type="button"
|
||||
aria-label="Close settings"
|
||||
data-i18n-aria-label="closeSettings"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
<h2 id="settings-modal-title" data-i18n="settings">Settings</h2>
|
||||
<form id="settings-form" class="settings-form">
|
||||
<label for="language-select">
|
||||
<span data-i18n="applicationLanguage">Application language</span>
|
||||
<select id="language-select" name="language"></select>
|
||||
</label>
|
||||
<button type="submit" data-i18n="applySettings">Apply</button>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="./vendor/ol.js"></script>
|
||||
<script src="./i18n.js"></script>
|
||||
<script src="./app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user