WME Speed Display

Displays road speed directly in the center of the segment (taking curves into account) in Waze Map Editor

目前為 2025-02-17 提交的版本,檢視 最新版本

// ==UserScript==
// @name        WME Speed Display
// @namespace   https://gf.qytechs.cn/scripts/526702-wme-speed-display/
// @version     1.2.10
// @description Displays road speed directly in the center of the segment (taking curves into account) in Waze Map Editor
// @author      Luan Tavares
// @icon        data:image/png;base64,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
// @license     GPLv3
// @include     https://www.waze.com/editor*
// @include     https://www.waze.com/*/editor*
// @include     https://beta.waze.com/*
// @exclude     https://www.waze.com/user/editor*
// @grant       none
// ==/UserScript==

/* 
 * @todo:
 * Add a speed filter, where the user says from which speed he wants to see
 * Add an opacity option for icons
 * Add some visual information when updateMap is rendering
 * Check a way to get all road types and groups automatically
 */

/* global W */
/* global I18n */
/* global OpenLayers */

class WmeSpeedDisplay {
    constructor() {
        this.version   = '1.2.10';
        this.layer     = null;
        this.debugMode = false;
        this.settings  = {};

        this.segmentsCategories = {
            highways: [
                {
                    id: 3,
                    name: 'freeway'
                },
                {
                    id: 4,
                    name: 'ramp'
                },
                {
                    id: 6,
                    name: 'major_highway'
                },
                {
                    id: 7,
                    name: 'minor_highway'
                }
            ],
            non_drivable: [
                {
                    id: 18,
                    name: 'railroad'
                },
                {
                    id: 19,
                    name: 'runway_taxiway'
                },
                {
                    id: 5,
                    name: 'walking_trail'
                },
                {
                    id: 10,
                    name: 'pedestrian_boardwalk'
                },
                {
                    id: 16,
                    name: 'stairway'
                }
            ],
            other_drivable: [
                {
                    id: 8,
                    name: 'off_road_not_maintained'
                },
                {
                    id: 20,
                    name: 'parking_lot_road'
                },
                {
                    id: 17,
                    name: 'private_road'
                },
                {
                    id: 15,
                    name: 'ferry'
                }
            ],
            streets: [
                {
                    id: 2,
                    name: 'primary_street'
                },
                {
                    id: 1,
                    name: 'street'
                },
                {
                    id: 22,
                    name: 'narrow_street'
                }
            ]
        };

        this.spdTranslations = I18n.translations[I18n.locale].wmeSpd;

        this.debounce = {
            updateMapDisplay: this.debounce(this.updateMapDisplay.bind(this), 1000),
            saveSettings: this.debounce(this.saveSettings.bind(this))
        };

        this.layerCheckbox = {
            roadGroup: null,
            speedDisplay: null
        };

        this.prepareAndInitialize();
    }

    /**
     * Checks if WME is ready to initializes the plugin.
     */
    prepareAndInitialize() {
        this.defineInitialSettings();
        this.defineTranslations();

        if (W?.userscripts?.state?.isReady) {
            this.logDebug(this.spdTranslations.log.wmeReadyStartScript);

            this.initializePlugin();
            
        } else {
            this.logDebug(this.spdTranslations.log.waitingWme);

            document.addEventListener('wme-ready', this.initializePlugin.bind(this), {once: true});
        }
    }

    /**
     * Initializes the plugin.
     */
    async initializePlugin() {
        this.logDebug(this.spdTranslations.log.wmeReadyStartingPlugin, true);

        this.checkVersionAndShowChangelog();

        this.layer = new OpenLayers.Layer.Vector('Speed Display Layer', {
            displayInLayerSwitcher: false
        });

        W.map.addLayer(this.layer);

        this.addLayerCheckbox();
        this.addSettingsTab();
        this.addShortcut();
        this.listen();

        this.logDebug(this.spdTranslations.log.shortSleep);

        await this.sleep(1000);

        this.updateMapDisplay();
    }

    /**
     * Method that listens to this script events.
     */
    listen() {
        document.getElementById('keyboard-dialog-link').addEventListener('click', this.addKeyboardShortCutOnDialog.bind(this));
        
        W.map.events.register('moveend', null, this.onTriggeringMapEvent.bind(this));
        W.map.events.register('zoomend', null, this.onTriggeringMapEvent.bind(this));

        W.model.segments.on('objectschanged', this.onTriggeringMapEvent.bind(this));
    }

    /**
     * When the map triggers an event, updates the map display.
     */
    onTriggeringMapEvent() {
        if (this.layerCheckbox.roadGroup.checked && this.settings.spdEnabled)
            this.debounce.updateMapDisplay();
    }

    /**
     * Saves and updates the map display when WME SPD checkbox change.
     * @param {Event} event
     */
    onSpeedDisplayCheckboxChange(event) {
        this.debounce.saveSettings();
        this.debounce.updateMapDisplay();

        this.toggleLayerVisibility(event.target.checked);
    }

    /**
     * Saves the settings and updates the map display.
     */
    onSettingsChange() {
        this.debounce.saveSettings();
        this.debounce.updateMapDisplay();
    }

    /**
     * Updates the max zoom value display and triggers map update if the zoom level reaches the max.
     * @param {Event} event
     */
    onSettingZoomChanged(event) {
        let zoomLevel = W.map.getZoom();

        document.getElementById('spd-max-zoom-value').innerText = event.target.value;

        this.debounce.saveSettings();

        if (zoomLevel >= this.settings.general.spdMaxZoom)
            this.debounce.updateMapDisplay();
    }
    
    /**
     * Updates the layer visibility based on the layer switcher road group state.
     */
    onLayerSwithcerGroupRoadChange() {
        let roadGroupActived = this.layerCheckbox.roadGroup.checked;

        this.toggleLayerVisibility(roadGroupActived);

        this.layerCheckbox.speedDisplay.disabled = !roadGroupActived;
    }

    /**
     * Attaches event listeners to the settings elements to track user interactions and changes.
     */
    attachSettingsListeners() {
        ['spd-show-no-speed', 'spd-show-roundabout', 'spd-show-unpaved'].forEach(id => {
            document.getElementById(id).addEventListener('change', this.onSettingsChange.bind(this));
        });

        document.getElementById('spd-max-zoom').addEventListener('input', this.onSettingZoomChanged.bind(this));

        document.querySelectorAll('[id^="spd-show-speed-in-"]').forEach(input => {
            input.addEventListener('change', this.onSettingsChange.bind(this));
        });

        if (this.debugMode) {
            document.getElementById('btn-spd-update-settings-tab').addEventListener('click', this.updateSettingsTab.bind(this));
            document.getElementById('btn-spd-show-modal').addEventListener('click', this.showSpeedDisplayDialog.bind(this));
        }

        document.getElementById('btn-spd-open-changelog-dialog').addEventListener('click', this.openChangelogDialog.bind(this));
    }

    /**
     * Detaches event listeners from the settings elements to stop tracking user interactions.
     */
    detachSettingsListeners() {
        ['spd-show-no-speed', 'spd-show-roundabout', 'spd-show-unpaved'].forEach(id => {
            document.getElementById(id).removeEventListener('change', this.onSettingsChange.bind(this));
        });

        document.getElementById('spd-max-zoom').removeEventListener('input', this.onSettingZoomChanged.bind(this));

        document.querySelectorAll('[id^="spd-show-speed-in-"]').forEach(input => {
            input.removeEventListener('change', this.onSettingsChange.bind(this));
        });

        if (this.debugMode) {
            document.getElementById('btn-spd-update-settings-tab').removeEventListener('click', this.updateSettingsTab.bind(this));
            document.getElementById('btn-spd-show-modal').removeEventListener('click', this.showSpeedDisplayDialog.bind(this));
        }

        document.getElementById('btn-spd-open-changelog-dialog').removeEventListener('click', this.openChangelogDialog.bind(this));
    }

    /**
     * Attaches listeners to close the dialog.
     */
    attachDialogListeners() {
        document.addEventListener('keydown', this.simulateBtnHideDialogClick.bind(this));
        document.querySelector('#spd-dialog-container .dark-overlay').addEventListener('click', this.simulateBtnHideDialogClick.bind(this), {once: true});
        document.getElementById('btn-spd-hide-dialog').addEventListener('click', this.hideSpeedDisplayDialog.bind(this), {once: true});
    }

    /**
     * Updates the map display by removing old features and adding new speed icons based on the settings.
     */
    updateMapDisplay() {
        this.logDebug(this.spdTranslations.log.updateMapDisplay);

        let zoomLevel = W.map.getZoom();

        this.layer.removeAllFeatures();

        if (zoomLevel < this.settings.general.spdMaxZoom) {
            this.logDebug(this.spdTranslations.log.maxZoomExceeded);

            return;
        }

        let segments    = W.model.segments.objects || {};
        let segmentKeys = Object.keys(segments);

        if (segmentKeys.length === 0) {
            this.logDebug(this.spdTranslations.log.noneSegment);

            return;
        }

        this.logDebug(`${this.spdTranslations.log.numSegmentsLoaded} ${segmentKeys.length}`);

        segmentKeys.forEach(segmentId => {
            let segment = segments[segmentId];

            if (!segment || !segment.attributes) {
                this.logDebug(`${this.spdTranslations.log.attributesNotFound} ${segmentId}.`);

                return;
            }

            let attributes    = segment.attributes;
            let roadSettingId = this.convertStringCaseStyle('snake', 'camel', `spd_show_speed_in_${this.getRoadSettingNameById(attributes.roadType)}`);

            let speedFwd = attributes.fwdMaxSpeed || 'N/A';
            let speedRev = attributes.revMaxSpeed || 'N/A';
            let isFwd    = attributes.fwdDirection;
            let isRev    = attributes.revDirection;

            let hideNoSpeed        = !this.settings.general.spdShowNoSpeed && ((speedFwd == 'N/A' && speedRev == 'N/A') || (isFwd && !isRev && speedFwd == 'N/A') || (!isFwd && isRev && speedRev == 'N/A'));
            let ignoreOnRoundabout = attributes.junctionID && !this.settings.general.spdShowRoundabout;
            let ignoreOnUnpaved    = attributes.flags == 16 && !this.settings.general.spdShowUnpaved;

            console.warn({showTheSegment: hideNoSpeed || !this.settings.roads[roadSettingId] || ignoreOnRoundabout || ignoreOnUnpaved, ignoreOnUnpaved, isUnpaved: attributes.flags == 16, showOnUnpaved: this.settings.general.spdShowUnpaved})

            if (hideNoSpeed || !this.settings.roads[roadSettingId] || ignoreOnRoundabout || ignoreOnUnpaved) {
                this.logDebug(this.spdTranslations.log.disallowedSegment);

                return;
            }

            let geometry = segment.getOLGeometry();

            if (!geometry || geometry.components.length < 2) {
                this.logDebug(`${this.spdTranslations.log.invalidGeometry} ${segmentId}.`);

                return;
            }

            let midpoint = this.calculateMidpoint(geometry);

            let feature = new OpenLayers.Feature.Vector(midpoint, {
                segmentId,
                speedFwd,
                speedRev
            });

            let graphicWidth;
            let graphicXOffset;

            if (isFwd && isRev && speedFwd != speedRev) {
                graphicWidth   = 70;
                graphicXOffset = -30;

            } else if (isFwd && speedFwd != 'N/A' || isRev && speedRev != 'N/A') {
                graphicWidth   = 30;
                graphicXOffset = -15;
            }

            feature.style = {
                graphic: true,
                externalGraphic: 'data:image/svg+xml;base64,' + btoa(this.getSpeedIcon(speedFwd, speedRev, isFwd, isRev)),
                graphicHeight: 30,
                graphicWidth: graphicWidth,
                graphicYOffset: -15,
                graphicXOffset: graphicXOffset
            };

            this.layer.addFeatures([feature]);
        });

        this.logDebug(this.spdTranslations.log.updateMapDisplayFinished);
    }

    /**
     * Toggle visibility of the display of the speed layer.
     * @param {Boolean} enabled
     */
    toggleLayerVisibility(enabled) {
        if (this.layer) {
            this.layer.setVisibility(enabled);
            
            this.logDebug(`${this.spdTranslations.log.speedLayer} ${enabled ? this.spdTranslations.enabled : this.spdTranslations.disabled}.`);
        }
    }

    /**
     * Saves the current settings to localStorage.
     */
    saveSettings() {
        this.settings.spdEnabled = this.layerCheckbox.speedDisplay.checked;
        
        Object.keys(this.settings.general).forEach(setting => {
            let element = document.getElementById(this.convertStringCaseStyle('camel', 'kebab', setting));
            
            this.settings.general[setting] = setting != 'spdMaxZoom' ? element.checked : element.value;
        });
        
        document.querySelectorAll('[id^="spd-show-speed-in-"]').forEach(input => {
            let settingId                  = this.convertStringCaseStyle('kebab', 'camel', input.id);
            this.settings.roads[settingId] = input.checked;
        });

        localStorage.setItem('wmeSpeedDisplaySettings', JSON.stringify(this.settings));
    }

    /**
     * Loads the settings from localStorage or uses the provided settings to initialize the configuration.
     * @param {Object} [savedSettings] - The saved settings object to load; if not provided, it will load from localStorage.
     */
    loadSettings(savedSettings) {
        savedSettings = savedSettings ?? JSON.parse(localStorage.getItem('wmeSpeedDisplaySettings'));

        if (!savedSettings)
            return;

        // To ensure that if it enters a new settings, it doesn't discard them when loading the old settings
        Object.entries(savedSettings).forEach(([setting, value]) => {
            if (typeof value == 'object' && value != null) {
                if (!this.settings[setting])
                    this.settings[setting] = {};
                
                Object.entries(value).forEach(([subSetting, subValue]) => {
                    this.settings[setting][subSetting] = subValue ?? true;
                });
            } else {
                this.settings[setting] = value ?? true;
            }
        });
    }

    /**
     * Adds a settings tab to the user interface with options to configure the speed display settings.
     */
    addSettingsTab() {
        let scriptTabContainer = document.querySelector('#user-info .nav-tabs');
        
        if (!scriptTabContainer) {
            this.logDebug(this.spdTranslations.log.scriptsTabNotFound);

            setTimeout(() => this.addSettingsTab(), 1000);
            
            return;
        }

        if (document.getElementById('wme-spd-tab'))
            return;

        let tabButton       = document.createElement('li');
        tabButton.innerHTML = `<a href="#spd-settings" data-toggle="tab">${this.spdTranslations.name}</a>`;

        scriptTabContainer.appendChild(tabButton);

        let tabContentContainer             = document.querySelector('.tab-content');
        let userScriptsApiDocsLinkContainer = tabContentContainer.querySelector('.userscripts-api-docs-link-container');
        let tabContent                      = document.createElement('div');
        tabContent.id                       = 'spd-settings';

        tabContent.classList.add('tab-pane');

        let tabContentHtml = `
            <div style="padding: 0 10px;">
                <h4>${this.spdTranslations.settingTabName}</h4>
                <hr>

                <wz-label html-for="">${this.spdTranslations.title.general}</wz-label>
                <wz-checkbox checked="${this.settings.general.spdShowNoSpeed}" indeterminate="false" disabled="false" id="spd-show-no-speed" value="true">${this.spdTranslations.label.showNoSpeed}<input type="checkbox" value="true" style="display: none; visibility: hidden;"></wz-checkbox>
                <wz-checkbox checked="${this.settings.general.spdShowRoundabout}" indeterminate="false" disabled="false" id="spd-show-roundabout" value="true">${this.spdTranslations.label.showOnRoundabout}<input type="checkbox" value="true" style="display: none; visibility: hidden;"></wz-checkbox>
                <wz-checkbox checked="${this.settings.general.spdShowUnpaved}" indeterminate="false" disabled="false" id="spd-show-unpaved" value="true">${this.spdTranslations.label.showOnUnpaved}<input type="checkbox" value="true" style="display: none; visibility: hidden;"></wz-checkbox>
                <br>
                <wz-label html-for="" style="margin-top:10px">${this.spdTranslations.label.maxZoom} <span id="spd-max-zoom-value">${this.settings.general.spdMaxZoom}</span></wz-label>
                <input type="range" id="spd-max-zoom" min="12" max="22" step="1" value="${this.settings.general.spdMaxZoom}">
                <div style="display: flex; justify-content: space-between; width: 100%; color: #777; font-size: 11px; line-height: 15px;"><span>${this.spdTranslations.zoomOut}</span><span>${this.spdTranslations.zoomIn}</span></div>
                <br>

                <wz-label html-for="" style="margin:0">${this.spdTranslations.title.showOnRoadType}</wz-label>`;

        Object.entries(this.segmentsCategories).forEach(segmentCategory => {
            tabContentHtml += `<wz-menu-title style="padding:0;">${I18n.translations[I18n.locale].segment.categories[segmentCategory[0]]}</wz-menu-title>`;

            Object.values(segmentCategory[1]).forEach(roadType => {
                let id        = this.convertStringCaseStyle('snake', 'kebab', `spd_show_speed_in_${roadType.name}`);
                let settingId = this.convertStringCaseStyle('kebab', 'camel', id);
                let checked   = this.settings.roads[settingId];

                tabContentHtml += `<wz-checkbox checked="${checked}" indeterminate="false" disabled="false" id="${id}" value="true">${I18n.translations[I18n.locale].segment.road_types[roadType.id]}<input type="checkbox" value="true" style="display: none; visibility: hidden;"></wz-checkbox>`;
            });
        });

        if (this.debugMode) {
            tabContentHtml += `<wz-button color="primary" id="btn-spd-update-settings-tab" style="margin-top: 10px; width: 100%;">${this.spdTranslations.btn.updateSettingsTab}</wz-button>`;
            tabContentHtml += `<wz-button color="secondary" id="btn-spd-show-modal" style="margin-top: 10px; width: 100%;">${this.spdTranslations.showDialog}</wz-button>`;
        }

        tabContentHtml += `<wz-button color="text" size="sm" style="margin-top: 10px" id="btn-spd-open-changelog-dialog"><b>${this.spdTranslations.name}</b> v${this.version}</wz-button>
            </div>`;

        tabContent.innerHTML = tabContentHtml;

        tabContentContainer.insertBefore(tabContent, userScriptsApiDocsLinkContainer);

        this.attachSettingsListeners();

        this.logDebug(this.spdTranslations.log.settingsTabAdded);
    }

    /**
     * Updates the settings tab by removing the old one and adding a new one with updated settings.
     */
    updateSettingsTab() {
        this.logDebug(this.spdTranslations.log.updatingSettingsTab);

        let linkTab    = document.querySelector('#user-info .nav-tabs li a[href="#spd-settings"]');
        let tabContent = document.getElementById('spd-settings');

        if (!linkTab || !tabContent)
            return;

        this.detachSettingsListeners();
        this.defineTranslations();

        tabContent.remove();
        linkTab.closest('li').remove();

        this.addSettingsTab();
        this.updateSettingsElementsStates();
    }

    /**
     * Updates the state of the settings elements (checkboxes, inputs) based on the current settings.
     */
    updateSettingsElementsStates() {
        Object.entries(this.settings.general).forEach(([setting, value]) => {
            let id      = this.convertStringCaseStyle('camel', 'kebab', setting);
            let element = document.getElementById(id);

            if (!element)
                return;

            if (setting != 'spdMaxZoom') {
                element.checked = value;
                
            } else {
                element.value                                           = value;
                document.getElementById('spd-max-zoom-value').innerText = value;
            }
        });

        document.querySelectorAll('[id^="spd-show-speed-in-"]').forEach(input => {
            let settingId = this.convertStringCaseStyle('kebab', 'camel', input.id);

            if (input.type == 'checkbox')
                input.checked = this.settings.roads[settingId];
        });
    }

    /**
     * Adds a global keyboard shortcut listener and add the script shortcut on shortcuts dialog.
     */
    addShortcut() {
        document.addEventListener('keydown', this.onDocumentKeydown.bind(this));
    }

    /**
     * Adds a custom shortcut section to the shortcuts dialog.
     */
    addKeyboardShortCutOnDialog() {
        let shortcutDialog = document.getElementById('shortcuts-dialog');

        if (!shortcutDialog) {
            this.logDebug(this.spdTranslations.log.shortCutDialogNotFound);

            setTimeout(() => this.addKeyboardShortCutOnDialog(), 1000);
            
            return;
        }

        let lastShortcutActionGroup = shortcutDialog.querySelector('.shortcut-action-group:last-of-type');
        let newActionGroup          = document.createElement('section');

        newActionGroup.classList.add('shortcut-action-group');
        newActionGroup.id = 'keyboard-shortcut-scripts-dialog';
        
        newActionGroup.innerHTML = `
            <h2>Scripts</h2>

            <p class="shortcut-action" id="keyboard-shortcut-speed-display">
                <span>
                    <span>
                        <kbd class="altKey">
                            <span>$altKey</span>
                        </kbd> +
                    </span>

                    <span>
                        <kbd class="shiftKey">
                            <span>$shiftKey</span>
                        </kbd> +
                    </span>

                    <kbd>S</kbd>
                </span>

                <span class="shortcut-action-name">${this.spdTranslations.label.toggleLayerShortcut}</span>
            </p>`;

        lastShortcutActionGroup.insertAdjacentElement('afterend', newActionGroup);
    }

    /**
     * Toggles the layer switcher speed display when shortcut is pressed.
     * @param {Event} event 
     */
    onDocumentKeydown(event) {
        if (event.altKey && event.shiftKey && event.key.toLowerCase() == 's')
            this.layerCheckbox.speedDisplay.click();
    }

    /**
     * Calculates the real midpoint of a segment, considering curves.
     * @param {OpenLayers.Geometry.LineString} geometry Segment geometry.
     * 
     * @returns {OpenLayers.Geometry.Point} Real midpoint.
     */
    calculateMidpoint(geometry) {
        let length           = geometry.getLength();
        let cumulativeLength = 0;

        for (let i = 0; i < geometry.components.length - 1; i++) {
            let start         = geometry.components[i];
            let end           = geometry.components[i + 1];
            let segmentLength = start.distanceTo(end);

            if (cumulativeLength + segmentLength >= length / 2) {
                let ratio = (length / 2 - cumulativeLength) / segmentLength;

                return new OpenLayers.Geometry.Point(
                    start.x + ratio * (end.x - start.x),
                    start.y + ratio * (end.y - start.y)
                );
            }

            cumulativeLength += segmentLength;
        }

        return geometry.getCentroid();
    }

    /**
     * Generates an SVG icon with the speeds.
     * @param {String} speedFwd Forward speed.
     * @param {String} speedRev Reverse speed.
     * @param {String} isFwd Direction of the road forward.
     * @param {String} isRev Reverse lane direction.
     *
     * @returns {String} SVG in string format.
     */
    getSpeedIcon(speedFwd, speedRev, isFwd, isRev) {
        if (isFwd && isRev && speedFwd != speedRev) {
            return `
                <svg xmlns="http://www.w3.org/2000/svg" width="120" height="50" viewBox="0 0 120 50">
                  <circle cx="25" cy="25" r="21" fill="white" stroke="red" stroke-width="5"/>
                  <text x="25" y="31" font-size="20" font-family="Arial" font-weight="bold" fill="black" text-anchor="middle">${speedFwd}</text>

                  <circle cx="80" cy="25" r="21" fill="white" stroke="red" stroke-width="5"/>
                  <text x="80" y="31" font-size="20" font-family="Arial" font-weight="bold" fill="black" text-anchor="middle">${speedRev}</text>
                </svg>`;

        } else {
            return `
                <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 50 50">
                    <circle cx="25" cy="25" r="21" fill="white" stroke="red" stroke-width="5"/>
                    <text x="25" y="31" font-size="20" font-family="Arial" font-weight="bold" fill="black" text-anchor="middle">${isFwd ? speedFwd : speedRev}</text>
                </svg>`;
        }
    }

    /**
     * Makes a "dramatic" pause in the code.
     * @param {Number} ms Pause time in milliseconds
     */
    async sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    /**
     * Returns a function with delay.
     * @param {Object} func Function that will be called with delay
     * @param {(Number|null)} timeout Delay time in milliseconds
     *
     * @returns Function
     */
    debounce(func, timeout = 300) {
        let timer;

        return (...args) => {
            clearTimeout(timer);

            timer = setTimeout(() => {
                func.apply(this, args);
            }, timeout);
        }
    }

    /**
     * Converts a string from one case style to another (camel, snake, kebab).
     * @param {string} fromType - The original string case ('camel', 'snake', or 'kebab').
     * @param {string} toType - The target string case ('camel', 'snake', or 'kebab').
     * @param {string} string - The string to be converted.
     * 
     * @returns {string} The converted string.
     */
    convertStringCaseStyle(fromType, toType, string) {
        if (fromType == toType)
            return string;

        let conversionMap = {
            camel: {
                kebab: str => str.match(/[A-Z]?[a-z]+|[0-9]+/g).join('-').toLowerCase(),
                snake: str => str.match(/[A-Z]?[a-z]+|[0-9]+/g).join('_').toLowerCase()
            },
            snake: {
                kebab: str => str.replace(/_/g, '-'),
                camel: str => str.replace(/_([a-z])/g, (_, letra) => letra.toUpperCase())
            },
            kebab: {
                camel: str => str.replace(/-([a-z])/g, (_, letra) => letra.toUpperCase()),
                snake: str => str.replace(/-/g, '_')
            }
        };

        return conversionMap[fromType]?.[toType]?.(string) || string;
    }

    /**
     * Retrieves the road setting name by its ID from the segments categories.
     * @param {string} id - The ID of the road setting.
     * 
     * @returns {string|null} The name of the road setting if found, otherwise null.
     */
    getRoadSettingNameById(id) {
        for (let category of Object.values(this.segmentsCategories)) {
            let segment = category.find(item => item.id === id);

            if (segment)
                return segment.name;
        }

        // Returns null if ID is not found
        return null;
    }

    /**
     * Logs a debug message to the console if debug mode is enabled or forceMessage is true.
     * @param {string} message - The message to log.
     * @param {boolean} [forceMessage] - Whether to log the message regardless of the debug mode setting.
     */
    logDebug(message, forceMessage = false) {
        if (this.debugMode || forceMessage)
            console.log(`[WME Speed Display]: ${message}`);
    }

    /**
     * Adds a checkbox to the layer switcher to toggle the speed display layer visibility.
     */
    addLayerCheckbox() {
        let houseNumbersCheckbox     = document.getElementById('layer-switcher-item_house_numbers');
        this.layerCheckbox.roadGroup = document.getElementById('layer-switcher-group_road');

        if (!houseNumbersCheckbox) {
            this.logDebug(this.spdTranslations.log.houseNumberCheckboxNotFound);

            setTimeout(() => this.addLayerCheckbox(), 1000);

            return;
        }

        let layerItem       = document.createElement('li');
        layerItem.innerHTML = `
            <div class="layer-selector">
                <wz-checkbox id="layer-switcher-item_speed_display" checked="${this.settings.spdEnabled}" disabled="${!this.layerCheckbox.roadGroup.checked}">
                    <div class="layer-selector-container" title="WME ${this.spdTranslations.name}">${this.spdTranslations.label.displaySpeeds}</div>
                </wz-checkbox>
            </div>`;

        houseNumbersCheckbox.closest('li').insertAdjacentElement('afterend', layerItem);

        this.layerCheckbox.speedDisplay = document.getElementById('layer-switcher-item_speed_display');

        if (!this.layerCheckbox.speedDisplay)
            return;

        this.layerCheckbox.speedDisplay.addEventListener('change', this.onSpeedDisplayCheckboxChange.bind(this));
        this.layerCheckbox.roadGroup.addEventListener('change', this.onLayerSwithcerGroupRoadChange.bind(this));

        this.toggleLayerVisibility(this.layerCheckbox.roadGroup.checked && this.settings.spdEnabled);
    }

    /**
     * Initializes settings from localStorage or sets default values.
     */
    defineInitialSettings() {
        let localSettings = localStorage.getItem('wmeSpeedDisplaySettings');
        localSettings     = localSettings ? JSON.parse(localSettings) : null;

        this.settings = {
            spdEnabled: true,
            general: {
                spdShowNoSpeed: true,
                spdShowRoundabout: true,
                spdShowUnpaved: true,
                spdMaxZoom: 18
            },
            roads: {}
        };

        Object.values(this.segmentsCategories).forEach(category => {
            Object.values(category).forEach(roadType => {
                let settingId = this.convertStringCaseStyle('snake', 'camel', `spd_show_speed_in_${roadType.name}`);
                
                this.settings.roads[settingId] = true;
            });
        });

        if (localSettings) {
            this.loadSettings(localSettings);
            this.updateSettingsElementsStates();
        }
    }

    /**
     * Checks if the plugin version changed and displays the changelog if necessary.
     */
    checkVersionAndShowChangelog() {
        this.logDebug(this.spdTranslations.log.checkingVersion);
        
        let localSpdVersion = JSON.parse(localStorage.getItem('wmeSpeedDisplayVersion'));

        if (localSpdVersion == null || localSpdVersion != this.version) {
            this.hideSpeedDisplayDialog();
            this.openChangelogDialog();

            localStorage.setItem('wmeSpeedDisplayVersion', JSON.stringify(this.version));
        }
    }
    
    /**
     * Opens changelog dialog.
     */
    openChangelogDialog() {
        this.showSpeedDisplayDialog(`${this.spdTranslations.changelog} ${this.spdTranslations.name} v${this.version}`, this.spdTranslations.changelogMessage, null, `<a href="https://gf.qytechs.cn/pt-BR/scripts/526702-wme-speed-display" target="_blank"><wz-button color="primary">${this.spdTranslations.viewScript}</wz-button></a>`);
    }

    /**
     * Displays a modal dialog with customizable title, body content, and button text.
     * @param {string} title - The title of the modal (default: 'Without title').
     * @param {string} body - The HTML content or string inside the modal (default: '<span>Without body message</span>').
     * @param {string} [closeButtonText] - The text for the close button (default: 'Close').
     * @param {string} [customHtmlButtons] - Custom HTML button(s).
     */
    showSpeedDisplayDialog(title, body = '<span>Without body message</span>', closeButtonText, customHtmlButtons) {
        title                 = title && typeof title == 'string' ? title : 'Without title';
        closeButtonText       = closeButtonText ?? this.spdTranslations.close;
        let wzDialogContainer = document.getElementById('wz-dialog-container');
        let divDialog         = document.createElement('div');
        divDialog.id          = 'spd-dialog-container';

        Object.assign(divDialog.style, {
            display: 'flex',
            alignItems: 'center',
            justifyContent: 'center',
            position: 'absolute',
            width: '100vw',
            height: '100vh',
            top: 0,
            left: 0
        });

        let divDialogHtml = `
            <div class="dark-overlay" style="background-color: var(--background_modal, rgba(32, 33, 36, 0.6)); width: 100vw; height: 100vh; position: absolute; top: 0px; left: 0px; z-index: 9999;"></div>

            <div style="display: flex; flex-direction: column; background-color: var(--background_default, #ffffff); border-radius: var(--wz-dialog-border-radius, 10px); box-shadow: rgba(0, 0, 0, 0.26) 0px 4px 8px 3px; width: var(--wz-dialog-width, 720px); height: var(--wz-dialog-height); padding: var(--wz-dialog-padding, var(--space-l, 24px)); position: fixed; z-index: 99999;">
                <h3 style="margin-bottom: 10px;">${title}</h3>
                
                <div style="max-height: 70vh; overflow: auto;">
                    ${body}
                </div>

                <div style="display: flex; justify-content: end; gap: 10px; margin-top: 10px;">
                    <wz-button color="secondary" id="btn-spd-hide-dialog">${closeButtonText}</wz-button>`;

        if (customHtmlButtons)
            divDialogHtml += `${customHtmlButtons}`;
        
        divDialogHtml += `
                </div>
            </div>`;

        divDialog.innerHTML = divDialogHtml;

        wzDialogContainer.appendChild(divDialog);
        
        this.attachDialogListeners();
    }

    /**
     * Closes the dialog and removes associated event listeners.
     */
    hideSpeedDisplayDialog() {
        let spdDialog = document.getElementById('spd-dialog-container');

        document.removeEventListener('keydown', this.simulateBtnHideDialogClick.bind(this));

        spdDialog?.remove();
    }

    /**
     * Simulates a click on the close dialog button.
     * @param {Event} event
     */
    simulateBtnHideDialogClick(event) {
        if (event.key && !['Escape', 'Enter'].includes(event.key))
            return;

        document.getElementById('btn-spd-hide-dialog')?.click();
    }

    /**
     * Sets translations for the current locale.
     */
    defineTranslations() {
        switch (I18n.locale) {
            case 'af':
                // Afrikaans
                this.spdTranslations = {
                    name: 'Spoedvertoning',
                    settingTabName: 'Spoedvertoning Instellings',
                    enabled: 'geaktiveer',
                    disabled: 'gedeaktiveer',
                    zoomOut: 'Verder uit',
                    zoomIn: 'Nader in',
                    changelog: 'Verandering logboek',
                    changelogMessage: '<h6>Nuutjies:</h6><ul style="margin-bottom: 10px"><li>Jy kan nou die spoed op nie-geplaveide segmente wegsteek;</li><li>Jy kan nou die spoedlaag in- en uitskakel deur die sneltoets sleutels te gebruik: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Jy kan die sneltoets in die sneltoetspaneel sien).</li></ul><h6>Regstellings:</h6><ul><li>Wanneer jy die laagverskakelaar vir paaie deaktiveer, sal die spoedlaag ook weggeblaas word;</li><li>Nuwe manier om die aanvanklike en gestoor instellings te laai, sodat geen konfigurasie verlore gaan nie en nuwe funksies van opdaterings bygevoeg word;</li><li>Ander kood regstellings en verbeterings.</li></ul>',
                    close: 'Maak toe',
                    viewScript: 'Bekyk Skrip',
                    showDialog: 'Wys modaal',
                    title: {
                        general: 'Algemeen',
                        showOnRoadType: 'Vertoon op padsegmente van tipe:'
                    },
                    label: {
                        displaySpeeds: 'Vertoon spoed',
                        showNoSpeed: 'Vertoon op segmente sonder spoed',
                        showOnRoundabout: 'Vertoon op sirkelroetes',
                        showOnUnpaved: 'Vertoon op ongeplaveide pad',
                        maxZoom: 'Vertoon tot zoomvlak:',
                        toggleLayerShortcut: 'Toggle layer switcher speed display'
                    },
                    btn: {
                        updateSettingsTab: 'Opdateer menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME gelaai en gereed. Begin skrip...',
                        waitingWme: 'Wag vir WME om gereed te wees...',
                        wmeReadyStartingPlugin: 'WME is gereed. Stel pasgemaakte laag op...',
                        shortSleep: 'Wag ongeveer 1 sekonde vir alles om te laai...',
                        updateMapDisplay: 'Opdateer kaartvertoning...',
                        maxZoomExceeded: 'Maksimum zoomvlak oorskry. Geen spoed sal vertoon word nie.',
                        noneSegment: 'Geen segmente gevind nie.',
                        numSegmentsLoaded: 'Totale gelaaide segmente:',
                        attributesNotFound: 'Kon nie eienskappe vind of dit is afwesig op die segment nie',
                        disallowedSegment: 'Hierdie tipe segment moet nie gelaai word nie.',
                        invalidGeometry: 'Ongeldige geometrie op segment:',
                        updateMapDisplayFinished: 'Opdatering voltooi.',
                        shortCutDialogNotFound: 'Kon nie die sleutelbordkortpaaie dialoog vind nie. Probeer weer...',
                        houseNumberCheckboxNotFound: 'Die "Huisnommers"-merkblokkie is nie gevind nie. Probeer weer...',
                        scriptsTabNotFound: 'Skrip-paneel nie gevind nie. Probeer weer...',
                        settingsTabAdded: 'Instellings-oortjie bygevoeg.',
                        speedLayer: 'Spoedlaag',
                        opacityUpdated: 'Deursigtigheid van ikone aangepas na',
                        updatingSettingsTab: 'Opdateer instellings-oortjie...',
                        languageDefined: 'Tale gedefinieer.',
                        checkingVersion: 'Kontroleer die weergawe van die inprop.'
                    }
                };

                break;

            case 'ar':
                // Arabic
                this.spdTranslations = {
                    name: 'عرض السرعة',
                    settingTabName: 'إعدادات عرض السرعة',
                    enabled: 'مفعل',
                    disabled: 'معطل',
                    zoomOut: 'تكبير للخارج',
                    zoomIn: 'تكبير للداخل',
                    changelog: 'سجل التغييرات',
                    changelogMessage: '<h6>الميزات الجديدة:</h6><ul style="margin-bottom: 10px"><li>يمكنك الآن إخفاء السرعة في المقاطع غير المعبدة;</li><li>يمكنك الآن تمكين أو تعطيل طبقة السرعة باستخدام مفاتيح الاختصار: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (يمكنك مشاهدة مفتاح الاختصار في النافذة المنبثقة للاختصارات).</li></ul><h6>التصحيحات:</h6><ul><li>عند تعطيل مفتاح التبديل للطبقات، سيتم إخفاء طبقة السرعة أيضًا;</li><li>طريقة جديدة لتحميل الإعدادات الأولية والمحفوظة، حتى لا تضيع التكوينات الحالية ويضاف الميزات الجديدة من التحديثات;</li><li>تصحيحات وتحسينات أخرى في الشيفرة.</li></ul>',
                    close: 'إغلاق',
                    viewScript: 'عرض البرنامج النصي',
                    showDialog: 'عرض النافذة المنبثقة',
                    title: {
                        general: 'عام',
                        showOnRoadType: 'عرض على أنواع الطرق:'
                    },
                    label: {
                        displaySpeeds: 'عرض السرعات',
                        showNoSpeed: 'عرض على الطرق بدون سرعة',
                        showOnRoundabout: 'عرض في الدوارات',
                        showOnUnpaved: 'عرض على طريق غير معبد',
                        maxZoom: 'العرض حتى مستوى التكبير:',
                        toggleLayerShortcut: 'تبديل مبدل الطبقة لعرض السرعة'
                    },
                    btn: {
                        updateSettingsTab: 'تحديث القائمة',
                    },
                    log: {
                        wmeReadyStartScript: 'تم تحميل WME وجاهز. بدء السكريبت...',
                        waitingWme: 'انتظار جاهزية WME...',
                        wmeReadyStartingPlugin: 'WME جاهز. إعداد الطبقة المخصصة...',
                        shortSleep: 'انتظار ثانية واحدة لتحميل كل شيء...',
                        updateMapDisplay: 'تحديث عرض الخريطة...',
                        maxZoomExceeded: 'تم تجاوز الحد الأقصى للتكبير. لن يتم عرض أي سرعات.',
                        noneSegment: 'لم يتم العثور على أي مقاطع.',
                        numSegmentsLoaded: 'إجمالي المقاطع المحملة:',
                        attributesNotFound: 'تعذر العثور على الخصائص أو أنها مفقودة في المقطع',
                        disallowedSegment: 'هذا النوع من المقاطع لا يجب تحميله.',
                        invalidGeometry: 'هندسة غير صالحة في المقطع:',
                        updateMapDisplayFinished: 'اكتمل التحديث.',
                        houseNumberCheckboxNotFound: 'لم يتم العثور على خانة اختيار "أرقام المنازل". المحاولة مرة أخرى...',
                        shortCutDialogNotFound: 'تعذر العثور على مربع حوار اختصارات لوحة المفاتيح. جارٍ المحاولة مرة أخرى...',
                        scriptsTabNotFound: 'لم يتم العثور على لوحة البرامج النصية. المحاولة مرة أخرى...',
                        settingsTabAdded: 'تمت إضافة علامة تبويب الإعدادات.',
                        speedLayer: 'طبقة السرعة',
                        opacityUpdated: 'تم ضبط شفافية الأيقونات إلى',
                        updatingSettingsTab: 'تحديث علامة تبويب الإعدادات...',
                        languageDefined: 'تم تحديد اللغات.',
                        checkingVersion: 'التحقق من إصدار الإضافة.'
                    }
                };
            
                break;
            
            case 'bg':
                // Bulgarian
                this.spdTranslations = {
                    name: 'Показване на скоростта',
                    settingTabName: 'Настройки за показване на скоростта',
                    enabled: 'активиран',
                    disabled: 'деактивиран',
                    zoomOut: 'Отдалечаване',
                    zoomIn: 'Приближаване',
                    changelog: 'Дневник на промените',
                    changelogMessage: '<h6>Новини:</h6><ul style="margin-bottom: 10px"><li>Вече можете да скриете скоростта на неасфалтирани сегменти;</li><li>Вече можете да активирате или деактивирате слоя със скоростта, използвайки клавишни комбинации: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Можете да видите клавишната комбинация в модала за бързи клавиши).</li></ul><h6>Поправки:</h6><ul><li>Когато деактивирате превключвателя за слоеве на пътищата, слоят със скоростта също ще бъде скрит;</li><li>Нов начин за зареждане на начални и запазени настройки, така че няма да загубите текущата конфигурация и ще добавите нови функции от актуализациите;</li><li>Други корекции и подобрения на кода.</li></ul>',
                    close: 'Затвори',
                    viewScript: 'Преглед на скрипта',
                    showDialog: 'Показване на модален прозорец',
                    title: {
                        general: 'Общи',
                        showOnRoadType: 'Показване на пътните сегменти от тип:'
                    },
                    label: {
                        displaySpeeds: 'Показване на скоростите',
                        showNoSpeed: 'Показване на сегменти без скорост',
                        showOnRoundabout: 'Показване на кръгови движения',
                        showOnUnpaved: 'Показване на неасфалтиран път',
                        maxZoom: 'Показване до ниво на увеличение:',
                        toggleLayerShortcut: 'Превключване на превключвателя на слоя за показване на скорост'
                    },
                    btn: {
                        updateSettingsTab: 'Актуализиране на менюто',
                    },
                    log: {
                        wmeReadyStartScript: 'WME е зареден и готов. Стартиране на скрипта...',
                        waitingWme: 'Изчакване WME да бъде готов...',
                        wmeReadyStartingPlugin: 'WME е готов. Настройване на персонализиран слой...',
                        shortSleep: 'Изчакване около 1 секунда за зареждане на всичко...',
                        updateMapDisplay: 'Актуализиране на картата...',
                        maxZoomExceeded: 'Превишено максимално увеличение. Няма да се показват скорости.',
                        noneSegment: 'Не са намерени сегменти.',
                        numSegmentsLoaded: 'Общ брой заредени сегменти:',
                        attributesNotFound: 'Неуспешно намиране на атрибутите или те липсват в сегмента',
                        disallowedSegment: 'Този тип сегмент не трябва да се зарежда.',
                        invalidGeometry: 'Невалидна геометрия в сегмента:',
                        updateMapDisplayFinished: 'Актуализацията е завършена.',
                        shortCutDialogNotFound: 'Не можа да се намери диалоговият прозорец за бързи клавиши. Повторен опит...',
                        houseNumberCheckboxNotFound: 'Не е намерена отметката „Номера на къщи“. Повторен опит...',
                        scriptsTabNotFound: 'Не е намерен панел със скриптове. Повторен опит...',
                        settingsTabAdded: 'Добавен е раздел с настройки.',
                        speedLayer: 'Слой за скорост',
                        opacityUpdated: 'Прозрачността на иконите е настроена на',
                        updatingSettingsTab: 'Актуализиране на раздела с настройки...',
                        languageDefined: 'Определени езици.',
                        checkingVersion: 'Проверка на версията на приставката.'
                    }
                };
            
                break;
            
            case 'ca':
                // Catalan
                this.spdTranslations = {
                    name: 'Visualització de velocitat',
                    settingTabName: 'Configuració de la visualització de velocitat',
                    enabled: 'activat',
                    disabled: 'desactivat',
                    zoomOut: 'Allunyar',
                    zoomIn: 'Apropar',
                    changelog: 'Registre de canvis',
                    changelogMessage: '<h6>Novetats:</h6><ul style="margin-bottom: 10px"><li>Ara podeu amagar la velocitat en segments no pavimentats;</li><li>També podeu activar i desactivar la capa de velocitat utilitzant les tecles d\'accés ràpid: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Podeu veure la tecla d\'accés ràpid al modal d\'accés ràpid).</li></ul><h6>Correccions:</h6><ul><li>En desactivar el commutador de capa de camins, la capa de velocitat també serà amagada;</li><li>Nova manera de carregar les configuracions inicials i desades, per no perdre les configuracions actuals i afegir les noves funcionalitats de les actualitzacions;</li><li>Altres correccions i millores del codi.</li></ul>',
                    close: 'Tancar',
                    viewScript: 'Veure l\'script',
                    showDialog: 'Mostra el modal',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Mostrar en segments de tipus:'
                    },
                    label: {
                        displaySpeeds: 'Mostrar velocitats',
                        showNoSpeed: 'Mostrar en segments sense velocitat',
                        showOnRoundabout: 'Mostrar en rotondes',
                        showOnUnpaved: 'Mostrar en carretera no pavimentada',
                        maxZoom: 'Renderitzar fins al zoom:',
                        toggleLayerShortcut: 'Alterna l\'interruptor de capa per mostrar la velocitat'
                    },
                    btn: {
                        updateSettingsTab: 'Actualitzar menú',
                    },
                    log: {
                        wmeReadyStartScript: 'WME carregat i llest. Iniciant script...',
                        waitingWme: 'Esperant que el WME estigui llest...',
                        wmeReadyStartingPlugin: 'WME llest. Configurant capa personalitzada...',
                        shortSleep: 'Esperant 1 segon perquè tot es carregui...',
                        updateMapDisplay: 'Actualitzant la visualització del mapa...',
                        maxZoomExceeded: 'Zoom màxim excedit. No es mostrarà cap velocitat.',
                        noneSegment: 'No s’han trobat segments.',
                        numSegmentsLoaded: 'Total de segments carregats:',
                        attributesNotFound: 'No s’han pogut trobar els atributs o estan absents en el segment',
                        disallowedSegment: 'Aquest tipus de segment no s’ha de carregar.',
                        invalidGeometry: 'Geometria no vàlida en el segment:',
                        updateMapDisplayFinished: 'Actualització completada.',
                        shortCutDialogNotFound: 'No s’ha pogut trobar el diàleg de dreceres del teclat. Intentant-ho de nou...',
                        houseNumberCheckboxNotFound: 'No s’ha trobat la casella de selecció "Números de casa". Tornant a intentar...',
                        scriptsTabNotFound: 'No s’ha trobat el panell de scripts. Tornant a intentar...',
                        settingsTabAdded: 'S’ha afegit la pestanya de configuració.',
                        speedLayer: 'Capa de velocitat',
                        opacityUpdated: 'Opacitat de les icones ajustada a',
                        updatingSettingsTab: 'Actualitzant la pestanya de configuració...',
                        languageDefined: 'Idiomes definits.',
                        checkingVersion: 'Comprovant la versió del complement.'
                    }
                };
            
                break;

            case 'cs':
                // Czech
                this.spdTranslations = {
                    name: 'Zobrazení rychlosti',
                    settingTabName: 'Nastavení zobrazení rychlosti',
                    enabled: 'povolené',
                    disabled: 'zakázané',
                    zoomOut: 'Oddálit',
                    zoomIn: 'Přiblížit',
                    changelog: 'Seznam změn',
                    changelogMessage: '<h6>Novinky:</h6><ul style="margin-bottom: 10px"><li>Nyní můžete skrýt rychlost na nezpevněných segmentech;</li><li>Nyní můžete aktivovat nebo deaktivovat vrstvu rychlosti pomocí klávesových zkratek: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Můžete zobrazit klávesovou zkratku v modálním okně pro klávesové zkratky).</li></ul><h6>Opravy:</h6><ul><li>Při deaktivaci přepínače vrstev cest bude vrstva rychlosti také skrytá;</li><li>Nový způsob načítání počátečních a uložených nastavení, aby nedošlo ke ztrátě aktuální konfigurace a přidání nových funkcí z aktualizací;</li><li>Další opravy a vylepšení kódu.</li></ul>',
                    close: 'Zavřít',
                    viewScript: 'Zobrazit skript',
                    showDialog: 'Zobrazit dialog',
                    title: {
                        general: 'Obecné',
                        showOnRoadType: 'Zobrazit na segmentech typu:'
                    },
                    label: {
                        displaySpeeds: 'Zobrazit rychlosti',
                        showNoSpeed: 'Zobrazit na segmentu bez rychlosti',
                        showOnRoundabout: 'Zobrazit na kruhovém objezdu',
                        showOnUnpaved: 'Zobrazit na nezpevněné cestě',
                        maxZoom: 'Renderovat až do úrovně zoomu:',
                        toggleLayerShortcut: 'Přepnout přepínač vrstvy pro zobrazení rychlosti'
                    },
                    btn: {
                        updateSettingsTab: 'Aktualizovat menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME načteno a připraveno. Spouštím skript...',
                        waitingWme: 'Čekám, až bude WME připraveno...',
                        wmeReadyStartingPlugin: 'WME je připraveno. Nastavuji vlastní vrstvu...',
                        shortSleep: 'Čekám asi 1 sekundu, než se vše načte...',
                        updateMapDisplay: 'Aktualizuji zobrazení na mapě...',
                        maxZoomExceeded: 'Byl překročen maximální zoom. Rychlost nebude zobrazena.',
                        noneSegment: 'Žádné segmenty nebyly nalezeny.',
                        numSegmentsLoaded: 'Celkový počet načtených segmentů:',
                        attributesNotFound: 'Nelze najít atributy nebo chybí v segmentu',
                        disallowedSegment: 'Tento typ segmentu by neměl být načten.',
                        invalidGeometry: 'Neplatná geometrie v segmentu:',
                        updateMapDisplayFinished: 'Aktualizace dokončena.',
                        shortCutDialogNotFound: 'Nepodařilo se najít dialog klávesových zkratek. Zkouším znovu...',
                        houseNumberCheckboxNotFound: 'Checkbox "Čísla domů" nebyl nalezen. Pokouším se znovu...',
                        scriptsTabNotFound: 'Záložka skriptů nebyla nalezena. Pokouším se znovu...',
                        settingsTabAdded: 'Přidána karta nastavení.',
                        speedLayer: 'Vrstva rychlosti',
                        opacityUpdated: 'Průhlednost ikon byla nastavena na',
                        updatingSettingsTab: 'Aktualizuji záložku nastavení...',
                        languageDefined: 'Jazyky definovány.',
                        checkingVersion: 'Kontroluji verzi pluginu.',
                    }
                };                

                break;

            case 'da':
                // Danish
                this.spdTranslations = {
                    name: 'Hastighedsvisning',
                    settingTabName: 'Indstillinger for hastighedsvisning',
                    enabled: 'aktiveret',
                    disabled: 'deaktiveret',
                    zoomOut: 'Zoom ud',
                    zoomIn: 'Zoom ind',
                    changelog: 'Ændringslog',
                    changelogMessage: '<h6>Nye funktioner:</h6><ul style="margin-bottom: 10px"><li>Du kan nu skjule hastigheden på ikke-belagte segmenter;</li><li>Du kan nu aktivere eller deaktivere hastighedslaget ved hjælp af genvejstaster: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Du kan se genvejstasten i genvejstastmodalen).</li></ul><h6>Fejlrettelser:</h6><ul><li>Når du deaktiverer lag-skifteren for vejnet, vil hastighedslaget også blive skjult;</li><li>Ny metode til at indlæse initiale og gemte indstillinger, så du ikke mister den nuværende konfiguration og tilføjer nye funktioner fra opdateringer;</li><li>Andre kodefejl og forbedringer.</li></ul>',
                    close: 'Luk',
                    viewScript: 'Vis skript',
                    showDialog: 'Vis dialog',
                    title: {
                        general: 'Generelt',
                        showOnRoadType: 'Vis på vejsegmenter af typen:'
                    },
                    label: {
                        displaySpeeds: 'Vis hastigheder',
                        showNoSpeed: 'Vis på segmenter uden hastighed',
                        showOnRoundabout: 'Vis på rundkørsler',
                        showOnUnpaved: 'Vis på ujævn vej',
                        maxZoom: 'Render til zoom-niveau:',
                        toggleLayerShortcut: 'Skift lagvægtsveksel til hastighedsvisning'
                    },
                    btn: {
                        updateSettingsTab: 'Opdater menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME indlæst og klar. Starter script...',
                        waitingWme: 'Venter på, at WME er klar...',
                        wmeReadyStartingPlugin: 'WME er klar. Konfigurerer tilpasset lag...',
                        shortSleep: 'Venter ca. 1 sekund på, at alt indlæses...',
                        updateMapDisplay: 'Opdaterer kortvisning...',
                        maxZoomExceeded: 'Maksimum zoom overskredet. Ingen hastigheder vil blive vist.',
                        noneSegment: 'Ingen segmenter fundet.',
                        numSegmentsLoaded: 'Samlet antal indlæste segmenter:',
                        attributesNotFound: 'Kunne ikke finde attributterne eller de mangler i segmentet',
                        disallowedSegment: 'Denne type segment bør ikke indlæses.',
                        invalidGeometry: 'Ugyldig geometri i segment:',
                        updateMapDisplayFinished: 'Opdatering fuldført.',
                        shortCutDialogNotFound: 'Kunne ikke finde tastaturgenvejsdialogen. Prøver igen...',
                        houseNumberCheckboxNotFound: 'Checkboxen "Husnumre" blev ikke fundet. Prøver igen...',
                        scriptsTabNotFound: 'Script-panelet blev ikke fundet. Prøver igen...',
                        settingsTabAdded: 'Indstillingsfanen tilføjet.',
                        speedLayer: 'Hastighedslag',
                        opacityUpdated: 'Ikonernes gennemsigtighed justeret til',
                        updatingSettingsTab: 'Opdaterer indstillingsfanen...',
                        languageDefined: 'Sprog defineret.',
                        checkingVersion: 'Kontrollerer plugin-versionen.'
                    }
                };
            
                break;
            
            case 'de':
                // German
                this.spdTranslations = {
                    name: 'Geschwindigkeitsanzeige',
                    settingTabName: 'Einstellungen für Geschwindigkeitsanzeige',
                    enabled: 'aktiviert',
                    disabled: 'deaktiviert',
                    zoomOut: 'Herauszoomen',
                    zoomIn: 'Hineinzoomen',
                    changelog: 'Änderungsprotokoll',
                    changelogMessage: '<h6>Neuigkeiten:</h6><ul style="margin-bottom: 10px"><li>Jetzt können Sie die Geschwindigkeit auf nicht asphaltierten Segmenten ausblenden;</li><li>Jetzt können Sie die Geschwindigkeitsschicht mit den Tastenkombinationen aktivieren oder deaktivieren: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Sie können die Tastenkombination im Tastenkürzel-Modus sehen).</li></ul><h6>Fehlerbehebungen:</h6><ul><li>Wenn Sie den Layer-Umschalter für Straßen deaktivieren, wird auch die Geschwindigkeitsschicht ausgeblendet;</li><li>Neue Methode zum Laden der initialen und gespeicherten Einstellungen, sodass keine aktuelle Konfiguration verloren geht und neue Funktionen aus den Updates hinzugefügt werden;</li><li>Weitere Fehlerbehebungen und Verbesserungen im Code.</li></ul>',
                    close: 'Schließen',
                    viewScript: 'Skript anzeigen',
                    showDialog: 'Dialog anzeigen',
                    title: {
                        general: 'Allgemein',
                        showOnRoadType: 'Anzeigen für Straßentypen:'
                    },
                    label: {
                        displaySpeeds: 'Geschwindigkeiten anzeigen',
                        showNoSpeed: 'Bei Segmenten ohne Geschwindigkeit anzeigen',
                        showOnRoundabout: 'Bei Kreisverkehren anzeigen',
                        showOnUnpaved: 'Auf unbefestigter Straße anzeigen',
                        maxZoom: 'Rendern bis Zoomstufe:',
                        toggleLayerShortcut: 'Schalte Layer-Schalter für Geschwindigkeitsanzeige um'
                    },
                    btn: {
                        updateSettingsTab: 'Menü aktualisieren',
                    },
                    log: {
                        wmeReadyStartScript: 'WME geladen und bereit. Starte Skript...',
                        waitingWme: 'Warten auf WME, um bereit zu sein...',
                        wmeReadyStartingPlugin: 'WME ist bereit. Benutzerdefinierte Ebene wird konfiguriert...',
                        shortSleep: 'Warte ca. 1 Sekunde, damit alles geladen wird...',
                        updateMapDisplay: 'Kartenanzeige wird aktualisiert...',
                        maxZoomExceeded: 'Maximale Zoomstufe überschritten. Keine Geschwindigkeiten werden angezeigt.',
                        noneSegment: 'Keine Segmente gefunden.',
                        numSegmentsLoaded: 'Gesamtzahl der geladenen Segmente:',
                        attributesNotFound: 'Attribute konnten nicht gefunden werden oder fehlen im Segment',
                        disallowedSegment: 'Dieser Segmenttyp sollte nicht geladen werden.',
                        invalidGeometry: 'Ungültige Geometrie im Segment:',
                        updateMapDisplayFinished: 'Aktualisierung abgeschlossen.',
                        shortCutDialogNotFound: 'Das Tastenkürzel-Dialogfeld konnte nicht gefunden werden. Erneuter Versuch...',
                        houseNumberCheckboxNotFound: 'Checkbox "Hausnummern" nicht gefunden. Erneuter Versuch...',
                        scriptsTabNotFound: 'Skript-Panel nicht gefunden. Erneuter Versuch...',
                        settingsTabAdded: 'Einstellungs-Tab hinzugefügt.',
                        speedLayer: 'Geschwindigkeits-Ebene',
                        opacityUpdated: 'Symboltransparenz angepasst auf',
                        updatingSettingsTab: 'Einstellungs-Tab wird aktualisiert...',
                        languageDefined: 'Sprachen definiert.',
                        checkingVersion: 'Überprüfe Plugin-Version.'
                    }
                };
            
                break;
            
            case 'el':
                // Greek
                this.spdTranslations = {
                    name: 'Εμφάνιση Ταχύτητας',
                    settingTabName: 'Ρυθμίσεις Εμφάνισης Ταχύτητας',
                    enabled: 'ενεργοποιημένο',
                    disabled: 'απενεργοποιημένο',
                    zoomOut: 'Απομάκρυνση',
                    zoomIn: 'Εστίαση',
                    changelog: 'Αρχείο αλλαγών',
                    changelogMessage: '<h6>Νέα χαρακτηριστικά:</h6><ul style="margin-bottom: 10px"><li>Τώρα μπορείτε να κρύψετε την ταχύτητα σε μη ασφαλτοστρωμένα τμήματα;</li><li>Τώρα μπορείτε επίσης να ενεργοποιήσετε ή να απενεργοποιήσετε το επίπεδο ταχύτητας χρησιμοποιώντας τα πλήκτρα συντόμευσης: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Μπορείτε να δείτε την συντόμευση στο παράθυρο συντομεύσεων).</li></ul><h6>Διορθώσεις:</h6><ul><li>Όταν απενεργοποιείτε τον διακόπτη επιπέδων δρόμου, το επίπεδο ταχύτητας θα κρυφτεί επίσης;</li><li>Νέος τρόπος φόρτωσης αρχικών και αποθηκευμένων ρυθμίσεων, έτσι ώστε να μην χάνονται οι τρέχουσες ρυθμίσεις και να προστίθενται νέες δυνατότητες από τις ενημερώσεις;</li><li>Άλλες διορθώσεις και βελτιώσεις του κώδικα.</li></ul>',
                    close: 'Κλείσιμο',
                    viewScript: 'Προβολή σεναρίου',
                    showDialog: 'Εμφάνιση διαλόγου',
                    title: {
                        general: 'Γενικά',
                        showOnRoadType: 'Εμφάνιση σε τύπους δρόμων:'
                    },
                    label: {
                        displaySpeeds: 'Εμφάνιση ταχυτήτων',
                        showNoSpeed: 'Εμφάνιση σε τμήματα χωρίς ταχύτητα',
                        showOnRoundabout: 'Εμφάνιση σε κυκλικούς κόμβους',
                        showOnUnpaved: 'Εμφάνιση σε μη ασφαλτοστρωμένο δρόμο',
                        maxZoom: 'Απεικόνιση έως μεγέθυνση:',
                        toggleLayerShortcut: 'Εναλλαγή διακόπτη επιπέδου εμφάνισης ταχύτητας'
                    },
                    btn: {
                        updateSettingsTab: 'Ενημέρωση μενού',
                    },
                    log: {
                        wmeReadyStartScript: 'Το WME φορτώθηκε και είναι έτοιμο. Εκκίνηση σεναρίου...',
                        waitingWme: 'Αναμονή για το WME να είναι έτοιμο...',
                        wmeReadyStartingPlugin: 'Το WME είναι έτοιμο. Διαμόρφωση προσαρμοσμένου επιπέδου...',
                        shortSleep: 'Αναμονή περίπου 1 δευτερόλεπτο για να φορτώσουν όλα...',
                        updateMapDisplay: 'Ενημέρωση εμφάνισης χάρτη...',
                        maxZoomExceeded: 'Υπέρβαση μέγιστης μεγέθυνσης. Δεν θα εμφανίζονται ταχύτητες.',
                        noneSegment: 'Δεν βρέθηκαν τμήματα.',
                        numSegmentsLoaded: 'Σύνολο φορτωμένων τμημάτων:',
                        attributesNotFound: 'Δεν βρέθηκαν ή λείπουν τα χαρακτηριστικά στο τμήμα',
                        disallowedSegment: 'Αυτός ο τύπος τμήματος δεν πρέπει να φορτωθεί.',
                        invalidGeometry: 'Μη έγκυρη γεωμετρία στο τμήμα:',
                        updateMapDisplayFinished: 'Η ενημέρωση ολοκληρώθηκε.',
                        shortCutDialogNotFound: 'Δεν ήταν δυνατή η εύρεση του διαλόγου συντομεύσεων πληκτρολογίου. Προσπάθεια ξανά...',
                        houseNumberCheckboxNotFound: 'Το πλαίσιο επιλογής "Αριθμοί σπιτιών" δεν βρέθηκε. Προσπάθεια ξανά...',
                        scriptsTabNotFound: 'Ο πίνακας σεναρίων δεν βρέθηκε. Προσπάθεια ξανά...',
                        settingsTabAdded: 'Προστέθηκε καρτέλα ρυθμίσεων.',
                        speedLayer: 'Επίπεδο ταχύτητας',
                        opacityUpdated: 'Η αδιαφάνεια των εικονιδίων ρυθμίστηκε σε',
                        updatingSettingsTab: 'Ενημέρωση καρτέλας ρυθμίσεων...',
                        languageDefined: 'Ορισμένες γλώσσες.',
                        checkingVersion: 'Έλεγχος έκδοσης προσθέτου.'
                    }
                };
            
                break;
            
            case 'en-AU':
                // English (Australia)
                this.spdTranslations = {
                    name: 'Speed Display',
                    settingTabName: 'Speed Display Settings',
                    enabled: 'enabled',
                    disabled: 'disabled',
                    zoomOut: 'Zoom out',
                    zoomIn: 'Zoom in',
                    changelog: 'Changelog',
                    changelogMessage: '<h6>New Features:</h6><ul style="margin-bottom: 10px"><li>You can now hide speed on unpaved segments;</li><li>You can also enable or disable the speed layer using shortcut keys: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (You can view the shortcut in the shortcut modal).</li></ul><h6>Fixes:</h6><ul><li>When disabling the road layer switcher, the speed layer will also be hidden;</li><li>New way to load initial and saved settings, so you don\'t lose the current configuration and add new features from updates;</li><li>Other code fixes and improvements.</li></ul>',
                    close: 'Close',
                    viewScript: 'View script',
                    showDialog: 'Show dialog',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Show on road types:'
                    },
                    label: {
                        displaySpeeds: 'Display speeds',
                        showNoSpeed: 'Show on segments without speed',
                        showOnRoundabout: 'Show on roundabouts',
                        showOnUnpaved: 'Show on unpaved road',
                        maxZoom: 'Render up to zoom level:',
                        toggleLayerShortcut: 'Toggle layer switcher speed display'
                    },
                    btn: {
                        updateSettingsTab: 'Update menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME loaded and ready. Starting script...',
                        waitingWme: 'Waiting for WME to be ready...',
                        wmeReadyStartingPlugin: 'WME is ready. Setting up custom layer...',
                        shortSleep: 'Waiting about 1 second for everything to load...',
                        updateMapDisplay: 'Updating map display...',
                        maxZoomExceeded: 'Maximum zoom exceeded. No speeds will be displayed.',
                        noneSegment: 'No segments found.',
                        numSegmentsLoaded: 'Total segments loaded:',
                        attributesNotFound: 'Could not find attributes or they are missing in the segment',
                        disallowedSegment: 'This segment type should not be loaded.',
                        invalidGeometry: 'Invalid geometry in segment:',
                        updateMapDisplayFinished: 'Update complete.',
                        shortCutDialogNotFound: 'Could not find the keyboard shortcuts dialogue. Trying again...',
                        houseNumberCheckboxNotFound: '"House Numbers" checkbox not found. Retrying...',
                        scriptsTabNotFound: 'Scripts panel not found. Retrying...',
                        settingsTabAdded: 'Settings tab added.',
                        speedLayer: 'Speed layer',
                        opacityUpdated: 'Icon opacity adjusted to',
                        updatingSettingsTab: 'Updating settings tab...',
                        languageDefined: 'Languages defined.',
                        checkingVersion: 'Checking plugin version.'
                    }
                };
            
                break;
            
            case 'en-GB':
                // English (UK)
                this.spdTranslations = {
                    name: 'Speed Display',
                    settingTabName: 'Speed Display Settings',
                    enabled: 'enabled',
                    disabled: 'disabled',
                    zoomOut: 'Zoom out',
                    zoomIn: 'Zoom in',
                    changelog: 'Changelog',
                    changelogMessage: '<h6>New Features:</h6><ul style="margin-bottom: 10px"><li>You can now hide speed on unpaved segments;</li><li>You can also enable or disable the speed layer using shortcut keys: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (You can view the shortcut in the shortcut modal).</li></ul><h6>Fixes:</h6><ul><li>When disabling the road layer switcher, the speed layer will also be hidden;</li><li>New way to load initial and saved settings, so you don\'t lose the current configuration and add new features from updates;</li><li>Other code fixes and improvements.</li></ul>',
                    close: 'Close',
                    viewScript: 'View script',
                    showDialog: 'Show dialog',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Show on road types:'
                    },
                    label: {
                        displaySpeeds: 'Display speeds',
                        showNoSpeed: 'Show on segments without speed',
                        showOnRoundabout: 'Show on roundabouts',
                        showOnUnpaved: 'Show on unpaved road',
                        maxZoom: 'Render up to zoom level:',
                        toggleLayerShortcut: 'Toggle layer switcher speed display'
                    },
                    btn: {
                        updateSettingsTab: 'Update menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME loaded and ready. Starting script...',
                        waitingWme: 'Waiting for WME to be ready...',
                        wmeReadyStartingPlugin: 'WME is ready. Setting up custom layer...',
                        shortSleep: 'Waiting about 1 second for everything to load...',
                        updateMapDisplay: 'Updating map display...',
                        maxZoomExceeded: 'Maximum zoom exceeded. No speeds will be displayed.',
                        noneSegment: 'No segments found.',
                        numSegmentsLoaded: 'Total segments loaded:',
                        attributesNotFound: 'Could not find attributes or they are missing in the segment',
                        disallowedSegment: 'This segment type should not be loaded.',
                        invalidGeometry: 'Invalid geometry in segment:',
                        updateMapDisplayFinished: 'Update complete.',
                        shortCutDialogNotFound: 'Could not find the keyboard shortcuts dialogue. Trying again...',
                        houseNumberCheckboxNotFound: '"House Numbers" checkbox not found. Retrying...',
                        scriptsTabNotFound: 'Scripts panel not found. Retrying...',
                        settingsTabAdded: 'Settings tab added.',
                        speedLayer: 'Speed layer',
                        opacityUpdated: 'Icon opacity adjusted to',
                        updatingSettingsTab: 'Updating settings tab...',
                        languageDefined: 'Languages defined.',
                        checkingVersion: 'Checking plugin version.'
                    }
                };
            
                break;
            
            case 'en-US':
                // US English
                this.spdTranslations = {
                    name: 'Speed Display',
                    settingTabName: 'Speed Display Settings',
                    enabled: 'enabled',
                    disabled: 'disabled',
                    zoomOut: 'Zoom out',
                    zoomIn: 'Zoom in',
                    changelog: 'Changelog',
                    changelogMessage: '<h6>New Features:</h6><ul style="margin-bottom: 10px"><li>You can now hide speed on unpaved segments;</li><li>You can also enable or disable the speed layer using shortcut keys: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (You can view the shortcut in the shortcut modal).</li></ul><h6>Fixes:</h6><ul><li>When disabling the road layer switcher, the speed layer will also be hidden;</li><li>New way to load initial and saved settings, so you don\'t lose the current configuration and add new features from updates;</li><li>Other code fixes and improvements.</li></ul>',
                    close: 'Close',
                    viewScript: 'View script',
                    showDialog: 'Show dialog',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Show on road types:'
                    },
                    label: {
                        displaySpeeds: 'Display speeds',
                        showNoSpeed: 'Show on segments without speed',
                        showOnRoundabout: 'Show on roundabouts',
                        showOnUnpaved: 'Show on unpaved road',
                        maxZoom: 'Render up to zoom level:',
                        toggleLayerShortcut: 'Toggle layer switcher speed display'
                    },
                    btn: {
                        updateSettingsTab: 'Update menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME loaded and ready. Starting script...',
                        waitingWme: 'Waiting for WME to be ready...',
                        wmeReadyStartingPlugin: 'WME is ready. Setting up custom layer...',
                        shortSleep: 'Waiting about 1 second for everything to load...',
                        updateMapDisplay: 'Updating map display...',
                        maxZoomExceeded: 'Maximum zoom exceeded. No speeds will be displayed.',
                        noneSegment: 'No segments found.',
                        numSegmentsLoaded: 'Total segments loaded:',
                        attributesNotFound: 'Could not find attributes or they are missing in the segment',
                        disallowedSegment: 'This segment type should not be loaded.',
                        invalidGeometry: 'Invalid geometry in segment:',
                        updateMapDisplayFinished: 'Update complete.',
                        shortCutDialogNotFound: 'Could not find the keyboard shortcuts dialog. Trying again...',
                        houseNumberCheckboxNotFound: '"House Numbers" checkbox not found. Retrying...',
                        scriptsTabNotFound: 'Scripts panel not found. Retrying...',
                        settingsTabAdded: 'Settings tab added.',
                        speedLayer: 'Speed layer',
                        opacityUpdated: 'Icon opacity adjusted to',
                        updatingSettingsTab: 'Updating settings tab...',
                        languageDefined: 'Languages defined.',
                        checkingVersion: 'Checking plugin version.'
                    }
                };
            
                break;

            case 'es':
                // Spanish
                this.spdTranslations = {
                    name: 'Mostrar Velocidad',
                    settingTabName: 'Configuración de Mostrar Velocidad',
                    enabled: 'habilitado',
                    disabled: 'deshabilitado',
                    zoomOut: 'Alejar',
                    zoomIn: 'Acercar',
                    changelog: 'Registro de Cambios',
                    changelogMessage: '<h6>Novedades:</h6><ul style="margin-bottom: 10px"><li>Ahora es posible ocultar la velocidad en segmentos no pavimentados;</li><li>Ahora también es posible activar y desactivar la capa de velocidad utilizando las teclas de acceso rápido: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Puedes ver la tecla de acceso rápido en el modal de acceso rápido).</li></ul><h6>Correcciones:</h6><ul><li>Al desactivar el interruptor de capas de caminos, la capa de velocidad también se ocultará;</li><li>Nuevo método para cargar la configuración inicial y guardada, para no perder lo que ya está configurado y añadir las nuevas funciones de las actualizaciones;</li><li>Otras correcciones y mejoras del código.</li></ul>',
                    close: 'Cerrar',
                    viewScript: 'Ver script',
                    showDialog: 'Mostrar diálogo',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Mostrar en los segmentos de tipo:'
                    },
                    label: {
                        displaySpeeds: 'Mostrar velocidades',
                        showNoSpeed: 'Mostrar en segmentos sin velocidad',
                        showOnRoundabout: 'Mostrar en rotonda',
                        showOnUnpaved: 'Mostrar en vía no pavimentada',
                        maxZoom: 'Renderizar hasta el zoom máximo:',
                        toggleLayerShortcut: 'Alternar conmutador de capa para mostrar la velocidad'
                    },
                    btn: {
                        updateSettingsTab: 'Actualizar menú',
                    },
                    log: {
                        wmeReadyStartScript: 'WME cargado y listo. Iniciando script...',
                        waitingWme: 'Esperando a que WME esté listo...',
                        wmeReadyStartingPlugin: 'WME está listo. Configurando capa personalizada...',
                        shortSleep: 'Esperando alrededor de 1 segundo para que todo cargue...',
                        updateMapDisplay: 'Actualizando visualización en el mapa...',
                        maxZoomExceeded: 'Zoom máximo excedido. No se mostrará la velocidad.',
                        noneSegment: 'No se encontraron segmentos.',
                        numSegmentsLoaded: 'Total de segmentos cargados:',
                        attributesNotFound: 'No se encontraron los atributos o están ausentes en el segmento',
                        disallowedSegment: 'Este tipo de segmento no debe cargarse.',
                        invalidGeometry: 'Geometría inválida en el segmento:',
                        updateMapDisplayFinished: 'Actualización completada.',
                        shortCutDialogNotFound: 'No se pudo encontrar el cuadro de diálogo de accesos directos del teclado. Intentando de nuevo...',
                        houseNumberCheckboxNotFound: 'No se encontró el checkbox "Números de Casas". Intentando de nuevo...',
                        scriptsTabNotFound: 'No se encontró la pestaña de scripts. Intentando de nuevo...',
                        settingsTabAdded: 'Pestaña de configuración agregada.',
                        speedLayer: 'Capa de velocidad',
                        opacityUpdated: 'Opacidad de los íconos ajustada a',
                        updatingSettingsTab: 'Actualizando pestaña de configuración...',
                        languageDefined: 'Idiomas definidos.',
                        checkingVersion: 'Verificando la versión del plugin.'
                    }
                };
            
                break;

            case 'es-419':
                // Latin-american spanish
                this.spdTranslations = {
                    name: 'Mostrar Velocidad',
                    settingTabName: 'Configuraciones de Mostrar Velocidad',
                    enabled: 'habilitada',
                    disabled: 'deshabilitada',
                    zoomOut: 'Alejar',
                    zoomIn: 'Acercar',
                    changelog: 'Registro de cambios',
                    changelogMessage: '<h6>Novedades:</h6><ul style="margin-bottom: 10px"><li>Ahora es posible ocultar la velocidad en segmentos no pavimentados;</li><li>Ahora también es posible activar y desactivar la capa de velocidad utilizando las teclas de acceso rápido: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Puedes ver la tecla de acceso rápido en el modal de acceso rápido).</li></ul><h6>Correcciones:</h6><ul><li>Al desactivar el interruptor de capas de caminos, la capa de velocidad también se ocultará;</li><li>Nuevo método para cargar la configuración inicial y guardada, para no perder lo que ya está configurado y añadir las nuevas funciones de las actualizaciones;</li><li>Otras correcciones y mejoras del código.</li></ul>',
                    close: 'Cerrar',
                    viewScript: 'Ver script',
                    showDialog: 'Mostrar diálogo',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Mostrar en los segmentos del tipo:'
                    },
                    label: {
                        displaySpeeds: 'Mostrar velocidades',
                        showNoSpeed: 'Mostrar en segmento sin velocidad',
                        showOnRoundabout: 'Mostrar en rotonda',
                        showOnUnpaved: 'Mostrar en vía no pavimentada',
                        maxZoom: 'Renderizar hasta el nivel de zoom:',
                        toggleLayerShortcut: 'Alternar conmutador de capa para mostrar la velocidad'
                    },
                    btn: {
                        updateSettingsTab: 'Actualizar menú',
                    },
                    log: {
                        wmeReadyStartScript: 'WME cargado y listo. Iniciando el script...',
                        waitingWme: 'Esperando que WME esté listo...',
                        wmeReadyStartingPlugin: 'WME está listo. Configurando la capa personalizada...',
                        shortSleep: 'Esperando aproximadamente 1 segundo para que todo se cargue...',
                        updateMapDisplay: 'Actualizando la visualización en el mapa...',
                        maxZoomExceeded: 'Se ha excedido el zoom máximo. No se mostrará velocidad.',
                        noneSegment: 'No se encontraron segmentos.',
                        numSegmentsLoaded: 'Número total de segmentos cargados:',
                        attributesNotFound: 'No se pudieron encontrar los atributos o están ausentes en el segmento',
                        disallowedSegment: 'Este tipo de segmento no debe cargarse.',
                        invalidGeometry: 'Geometría inválida en el segmento:',
                        updateMapDisplayFinished: 'Actualización completada.',
                        shortCutDialogNotFound: 'No se pudo encontrar el cuadro de diálogo de accesos directos del teclado. Intentando nuevamente...',
                        houseNumberCheckboxNotFound: 'No se encontró el checkbox "Números de Casas". Intentando nuevamente...',
                        scriptsTabNotFound: 'No se encontró la pestaña de scripts. Intentando nuevamente...',
                        settingsTabAdded: 'Pestaña de configuraciones añadida.',
                        speedLayer: 'Capa de velocidad',
                        opacityUpdated: 'Opacidad de los íconos ajustada a',
                        updatingSettingsTab: 'Actualizando la pestaña de configuraciones...',
                        languageDefined: 'Idiomas definidos.',
                        checkingVersion: 'Comprobando la versión del plugin.',
                    }
                };                
                
                break;

            case 'et':
                // Estonian
                this.spdTranslations = {
                    name: 'Kiirus näidik',
                    settingTabName: 'Kiirus näidiku seadistused',
                    enabled: 'lubatud',
                    disabled: 'keelatud',
                    zoomOut: 'Kaugemalt',
                    zoomIn: 'Lähemalt',
                    changelog: 'Muudatuste logi',
                    changelogMessage: '<h6>Uued funktsioonid:</h6><ul style="margin-bottom: 10px"><li>Nüüd on võimalik peita kiirus mittetäidetud segmentidel;</li><li>Nüüd saab kiiruskihti aktiveerida või deaktiveerida klahvikombinatsioonidega: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Klõpsa klahvikombinatsiooni nägemiseks klahvikombinatsiooni modalis).</li></ul><h6>Parandused:</h6><ul><li>Kui tee kihtide lüliti keelatakse, peidetakse ka kiiruskiht;</li><li>Uus meetod algsete ja salvestatud seadete laadimiseks, et mitte kaotada praegust konfiguratsiooni ja lisada uusi funktsioone värskendustest;</li><li>Teised kooditõrked ja täiustused.</li></ul>',
                    close: 'Sulge',
                    viewScript: 'Vaata skripti',
                    showDialog: 'Näita dialoogi',
                    title: {
                        general: 'Üldine',
                        showOnRoadType: 'Kuva järgmistes tee tüüpides:'
                    },
                    label: {
                        displaySpeeds: 'Kuva kiirus',
                        showNoSpeed: 'Kuva kiiruseta segmentides',
                        showOnRoundabout: 'Kuva ringristmikul',
                        showOnUnpaved: 'Kuva sillutamata teel',
                        maxZoom: 'Renderda kuni maksimaalse suumimiseni:',
                        toggleLayerShortcut: 'Lülita kihivahetaja kiiruskuva'
                    },
                    btn: {
                        updateSettingsTab: 'Uuenda menüüd',
                    },
                    log: {
                        wmeReadyStartScript: 'WME on laaditud ja valmis. Skripti käivitamine...',
                        waitingWme: 'Oodates, et WME oleks valmis...',
                        wmeReadyStartingPlugin: 'WME on valmis. Kohandatud kihi seadistamine...',
                        shortSleep: 'Oodates umbes 1 sekundit, et kõik laeks...',
                        updateMapDisplay: 'Kaardi kuvamise uuendamine...',
                        maxZoomExceeded: 'Maksimaalne suum ületatud. Kiirus ei kuvata.',
                        noneSegment: 'Ühtegi segmenti ei leitud.',
                        numSegmentsLoaded: 'Laaditud segmentide kogus:',
                        attributesNotFound: 'Segmentidest ei leitud omadusi või need puuduvad',
                        disallowedSegment: 'Seda tüüpi segment ei tohiks laadida.',
                        invalidGeometry: 'Geomeetria on vigane segmentis:',
                        updateMapDisplayFinished: 'Uuendamine lõppenud.',
                        shortCutDialogNotFound: 'Klaviatuuri otseteede dialoogi ei leitud. Proovin uuesti...',
                        houseNumberCheckboxNotFound: 'Maja numbri valikut ei leitud. Üritatakse uuesti...',
                        scriptsTabNotFound: 'Skriptide vahelehte ei leitud. Üritatakse uuesti...',
                        settingsTabAdded: 'Seadistuste vahekaart lisatud.',
                        speedLayer: 'Kiiruskiht',
                        opacityUpdated: 'Ikonide läbipaistvus on seatud: ',
                        updatingSettingsTab: 'Seadistuste vahekaardi uuendamine...',
                        languageDefined: 'Keel määratud.',
                        checkingVersion: 'Kontrollin plugin-a versiooni.'
                    }
                };
            
                break;
            
            
            case 'eu':
                // Basque
                this.spdTranslations = {
                    name: 'Abiadura Bistaratzea',
                    settingTabName: 'Abiadura Bistaratzeko Ezarpenak',
                    enabled: 'gaituta',
                    disabled: 'desgaituta',
                    zoomOut: 'Urrundu',
                    zoomIn: 'Zooma handitu',
                    changelog: 'Aldaketa erregistroa',
                    changelogMessage: '<h6>Ezaugarriak:</h6><ul style="margin-bottom: 10px"><li>Orain ez daude asfaltatuta dauden segmentuetan abiadura ezkutatzeko aukera;</li><li>Orain abiadura-geruza aktibatu edo desgaitzeko aukera dago tekla-lasterkideen bidez: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Tekla-lasterkideak ikusteko modalaren barruan ikus dezakezu).</li></ul><h6>Akatsak:</h6><ul><li>Errepide-geruza aldaketa desaktibatzean, abiadura-geruza ere ezkutatuko da;</li><li>Lehenetsitako eta gordetako ezarpenak kargatzeko modu berri bat, dagoen konfigurazioa ez galtzeko eta eguneraketetatik funtzio berriak gehitzeko;</li><li>Beste akats batzuk eta kodearen hobekuntzak.</li></ul>',
                    close: 'Itxi',
                    viewScript: 'Ikusi script-a',
                    showDialog: 'Irudiak erakutsi',
                    title: {
                        general: 'Orokorra',
                        showOnRoadType: 'Erakutsi errepide mota hauetan:'
                    },
                    label: {
                        displaySpeeds: 'Abiadurak bistaratu',
                        showNoSpeed: 'Abiadurarik gabeko segmentuetan erakutsi',
                        showOnRoundabout: 'Biribilguneetan erakutsi',
                        showOnUnpaved: 'Erakutsi asfaltatu gabeko bidean',
                        maxZoom: 'Errendatu zoom maila honetara arte:',
                        toggleLayerShortcut: 'Aldatu geruzako aldatzailea abiadura erakusteko'
                    },
                    btn: {
                        updateSettingsTab: 'Eguneratu menua',
                    },
                    log: {
                        wmeReadyStartScript: 'WME kargatuta eta prest. Script abiatzen...',
                        waitingWme: 'WME prest egon arte itxaroten...',
                        wmeReadyStartingPlugin: 'WME prest dago. Geruza pertsonalizatua ezartzen...',
                        shortSleep: 'Segundu 1 inguru itxaroten elementu guztiak kargatzeko...',
                        updateMapDisplay: 'Mapa bistaratzeko eguneratzen...',
                        maxZoomExceeded: 'Gehienezko zooma gaindituta. Ez da abiadurarik bistaratuko.',
                        noneSegment: 'Ez da segmenturik aurkitu.',
                        numSegmentsLoaded: 'Guztira kargatutako segmentuak:',
                        attributesNotFound: 'Ez dira atributuak aurkitu edo falta dira segmentuan',
                        disallowedSegment: 'Segmentu mota hau ez da kargatu behar.',
                        invalidGeometry: 'Geometria baliogabea segmentuan:',
                        updateMapDisplayFinished: 'Eguneratzea osatua.',
                        shortCutDialogNotFound: 'Ezin izan da teklatuko lasterbideen elkarrizketa-koadroa aurkitu. Berriro saiatzen...',
                        houseNumberCheckboxNotFound: '"Etxe zenbakiak" kontrol-laukia ez da aurkitu. Berriro saiatzen...',
                        scriptsTabNotFound: 'Script panelean ez da aurkitu. Berriro saiatzen...',
                        settingsTabAdded: 'Ezarpenen fitxa gehituta.',
                        speedLayer: 'Abiadura geruza',
                        opacityUpdated: 'Ikonoen gardentasuna egokituta honela:',
                        updatingSettingsTab: 'Ezarpen fitxa eguneratzen...',
                        languageDefined: 'Hizkuntzak definituta.',
                        checkingVersion: 'Pluginaren bertsioa egiaztatzen.'
                    }
                };
            
                break;
            
            case 'fa-IR':
                // Persian (Iran)
                this.spdTranslations = {
                    name: 'نمایش سرعت',
                    settingTabName: 'تنظیمات نمایش سرعت',
                    enabled: 'فعال',
                    disabled: 'غیرفعال',
                    zoomOut: 'بزرگنمایی کمتر',
                    zoomIn: 'بزرگنمایی بیشتر',
                    changelog: 'لیست تغییرات',
                    changelogMessage: '<h6>ویژگی‌های جدید:</h6><ul style="margin-bottom: 10px"><li>اکنون می‌توانید سرعت را در بخش‌های آسفالت نشده پنهان کنید;</li><li>اکنون می‌توانید لایه سرعت را با استفاده از میانبرهای کیبورد فعال یا غیرفعال کنید: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (می‌توانید میانبر را در مودال میانبرها مشاهده کنید).</li></ul><h6>رفع اشکال:</h6><ul><li>هنگامی که سوئیچ لایه‌های جاده غیرفعال می‌شود، لایه سرعت نیز پنهان خواهد شد;</li><li>روش جدیدی برای بارگذاری تنظیمات اولیه و ذخیره شده تا تنظیمات موجود از دست نرود و ویژگی‌های جدید از به‌روزرسانی‌ها اضافه شوند;</li><li>رفع اشکال‌های دیگر و بهبود کد.</li></ul>',
                    close: 'بستن',
                    viewScript: 'مشاهده اسکریپت',
                    showDialog: 'نمایش مودال',
                    title: {
                        general: 'عمومی',
                        showOnRoadType: 'نمایش در نوع جاده:'
                    },
                    label: {
                        displaySpeeds: 'نمایش سرعت‌ها',
                        showNoSpeed: 'نمایش در بخش‌های بدون سرعت',
                        showOnRoundabout: 'نمایش در میدان‌ها',
                        showOnUnpaved: 'نمایش در جاده خاکی',
                        maxZoom: 'نمایش تا سطح بزرگنمایی:',
                        toggleLayerShortcut: 'سوئیچ لایه نمایش سرعت'
                    },
                    btn: {
                        updateSettingsTab: 'بروزرسانی منو',
                    },
                    log: {
                        wmeReadyStartScript: 'WME بارگذاری شده و آماده است. شروع اسکریپت...',
                        waitingWme: 'منتظر آماده شدن WME...',
                        wmeReadyStartingPlugin: 'WME آماده است. پیکربندی لایه سفارشی...',
                        shortSleep: 'منتظر حدود 1 ثانیه برای بارگذاری کامل...',
                        updateMapDisplay: 'بروزرسانی نمایش نقشه...',
                        maxZoomExceeded: 'بزرگنمایی حداکثر فراتر رفته است. هیچ سرعتی نمایش داده نمی‌شود.',
                        noneSegment: 'هیچ بخشی یافت نشد.',
                        numSegmentsLoaded: 'تعداد بخش‌های بارگذاری شده:',
                        attributesNotFound: 'ویژگی‌ها یافت نشدند یا در بخش وجود ندارند',
                        disallowedSegment: 'این نوع بخش نباید بارگذاری شود.',
                        invalidGeometry: 'هندسه نامعتبر در بخش:',
                        updateMapDisplayFinished: 'بروزرسانی کامل شد.',
                        shortCutDialogNotFound: 'گفتگوی میانبرهای صفحه کلید یافت نشد. در حال تلاش مجدد...',
                        houseNumberCheckboxNotFound: 'چک‌باکس "شماره خانه" یافت نشد. تلاش مجدد...',
                        scriptsTabNotFound: 'پنل اسکریپت یافت نشد. تلاش مجدد...',
                        settingsTabAdded: 'زبانه تنظیمات اضافه شد.',
                        speedLayer: 'لایه سرعت',
                        opacityUpdated: 'شفافیت آیکون‌ها تنظیم شد به',
                        updatingSettingsTab: 'در حال بروزرسانی زبانه تنظیمات...',
                        languageDefined: 'زبان‌ها تعیین شد.',
                        checkingVersion: 'در حال بررسی نسخه پلاگین.'
                    }
                };
            
                break;

            case 'fi':
                // Finnish
                this.spdTranslations = {
                    name: 'Nopeuden näyttö',
                    settingTabName: 'Nopeuden näyttöasetukset',
                    enabled: 'käytössä',
                    disabled: 'poistettu käytöstä',
                    zoomOut: 'Loitontaa',
                    zoomIn: 'Lähentää',
                    changelog: 'Muutosloki',
                    changelogMessage: '<h6>Uudet ominaisuudet:</h6><ul style="margin-bottom: 10px"><li>Voit nyt piilottaa nopeuden päällystämättömissä segmenteissä;</li><li>Voit myös aktivoida tai deaktivoida nopeuskerroksen käyttämällä näppäimistökomentoja: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Näet pikanäppäimen pikanäppäimet-modaalissa).</li></ul><h6>Korjaukset:</h6><ul><li>Kun tiekerroksen kytkin poistetaan käytöstä, nopeuskerros piilotetaan myös;</li><li>Uusi tapa ladata alkuperäiset ja tallennetut asetukset, jotta nykyiset asetukset eivät katoa ja uusien päivitysten uudet ominaisuudet lisätään;</li><li>Muita virheenkorjauksia ja parannuksia.</li></ul>',
                    close: 'Sulje',
                    viewScript: 'Avaa skripti',
                    showDialog: 'Avaa ikkuna',
                    title: {
                        general: 'Yleinen',
                        showOnRoadType: 'Näytä tyypin segmenttien kohdalla:'
                    },
                    label: {
                        displaySpeeds: 'Näytä nopeudet',
                        showNoSpeed: 'Näytä segmentissä, jossa ei ole nopeutta',
                        showOnRoundabout: 'Näytä liikenneympyrässä',
                        showOnUnpaved: 'Näytä päällystämättömällä tiellä',
                        maxZoom: 'Renderöi enintään zoom-tasolle:',
                        toggleLayerShortcut: 'Vaihda kerroksen kytkintä nopeusnäytöllä'
                    },
                    btn: {
                        updateSettingsTab: 'Päivitä valikko',
                    },
                    log: {
                        wmeReadyStartScript: 'WME ladattu ja valmis. Käynnistetään skripti...',
                        waitingWme: 'Odotetaan, että WME on valmis...',
                        wmeReadyStartingPlugin: 'WME on valmis. Asetetaan mukautettua kerrosta...',
                        shortSleep: 'Odota noin 1 sekunti ennen kuin kaikki latautuu...',
                        updateMapDisplay: 'Päivitetään näyttö kartalla...',
                        maxZoomExceeded: 'Maksimi zoomaus ylitetty. Nopeutta ei näytetä.',
                        noneSegment: 'Ei löytynyt segmenttejä.',
                        numSegmentsLoaded: 'Yhteensä ladattuja segmenttejä:',
                        attributesNotFound: 'Attribuutteja ei löytynyt tai ne puuttuvat segmentistä',
                        disallowedSegment: 'Tämän tyyppistä segmenttiä ei tule ladata.',
                        invalidGeometry: 'Virheellinen geometria segmentissä:',
                        updateMapDisplayFinished: 'Päivitys valmis.',
                        shortCutDialogNotFound: 'Pikanäppäindialogia ei löytynyt. Yritetään uudelleen...',
                        houseNumberCheckboxNotFound: '"Talojen numerot" -valintaruutua ei löytynyt. Yritetään uudelleen...',
                        scriptsTabNotFound: 'Skripti-välilehteä ei löytynyt. Yritetään uudelleen...',
                        settingsTabAdded: 'Asetusvälilehti lisätty.',
                        speedLayer: 'Nopeuskerros',
                        opacityUpdated: 'Ikonien opasiteetti säädetty arvoon',
                        updatingSettingsTab: 'Päivitetään asetusten välilehteä...',
                        languageDefined: 'Kielet määritetty.',
                        checkingVersion: 'Tarkistetaan liitännäisen versiota.',
                    }
                };

                break;

            case 'fr':
                // French
                this.spdTranslations = {
                    name: 'Affichage de la vitesse',
                    settingTabName: 'Paramètres d\'affichage de la vitesse',
                    enabled: 'activée',
                    disabled: 'désactivée',
                    zoomOut: 'Dézoomer',
                    zoomIn: 'Zoomer',
                    changelog: 'Journal des modifications',
                    changelogMessage: '<h6>Nouveautés :</h6><ul style="margin-bottom: 10px"><li>Il est désormais possible de masquer la vitesse sur les segments non pavés;</li><li>Il est également possible d\'activer ou de désactiver la couche de vitesse à l\'aide des raccourcis clavier : <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Le raccourci clavier peut être vu dans le modal des raccourcis clavier).</li></ul><h6>Corrections :</h6><ul><li>Lorsque l\'interrupteur de couche de route est désactivé, la couche de vitesse est également masquée;</li><li>Nouvelle méthode pour charger les paramètres initiaux et enregistrés afin de ne pas perdre la configuration existante et d\'ajouter les nouvelles fonctionnalités des mises à jour;</li><li>Autres corrections et améliorations du code.</li></ul>',
                    close: 'Fermer',
                    viewScript: 'Voir le script',
                    showDialog: 'Afficher la fenêtre modale',
                    title: {
                        general: 'Général',
                        showOnRoadType: 'Afficher sur les segments de type :'
                    },
                    label: {
                        displaySpeeds: 'Afficher les vitesses',
                        showNoSpeed: 'Afficher sur le segment sans vitesse',
                        showOnRoundabout: 'Afficher sur le rond-point',
                        showOnUnpaved: 'Afficher sur route non pavée',
                        maxZoom: 'Rendre jusqu\'au niveau de zoom :',
                        toggleLayerShortcut: 'Basculer l\'interrupteur de couche pour afficher la vitesse'
                    },
                    btn: {
                        updateSettingsTab: 'Mettre à jour le menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME chargé et prêt. Démarrage du script...',
                        waitingWme: 'En attente que WME soit prêt...',
                        wmeReadyStartingPlugin: 'WME est prêt. Configuration de la couche personnalisée...',
                        shortSleep: 'Attente d\'environ 1 seconde pour que tout se charge...',
                        updateMapDisplay: 'Mise à jour de l\'affichage sur la carte...',
                        maxZoomExceeded: 'Le zoom maximum a été dépassé. Aucune vitesse ne sera affichée.',
                        noneSegment: 'Aucun segment trouvé.',
                        numSegmentsLoaded: 'Nombre total de segments chargés :',
                        attributesNotFound: 'Impossible de trouver les attributs ou ils sont manquants dans le segment',
                        disallowedSegment: 'Ce type de segment ne doit pas être chargé.',
                        invalidGeometry: 'Géométrie invalide dans le segment :',
                        updateMapDisplayFinished: 'Mise à jour terminée.',
                        shortCutDialogNotFound: 'Impossible de trouver la boîte de dialogue des raccourcis clavier. Nouvelle tentative...',
                        houseNumberCheckboxNotFound: 'La case à cocher "Numéros des maisons" n\'a pas été trouvée. Tentative de nouveau...',
                        scriptsTabNotFound: 'L\'onglet des scripts n\'a pas été trouvé. Tentative de nouveau...',
                        settingsTabAdded: 'Onglet des paramètres ajouté.',
                        speedLayer: 'Couche de vitesse',
                        opacityUpdated: 'Opacité des icônes ajustée à',
                        updatingSettingsTab: 'Mise à jour de l\'onglet des paramètres...',
                        languageDefined: 'Langues définies.',
                        checkingVersion: 'Vérification de la version du plugin.',
                    }
                };
                
                break;

            case 'gl':
                // Galician
                this.spdTranslations = {
                    name: 'Visualización da velocidade',
                    settingTabName: 'Configuración da visualización da velocidade',
                    enabled: 'activado',
                    disabled: 'desactivado',
                    zoomOut: 'Afastar',
                    zoomIn: 'Achegar',
                    changelog: 'Rexistro de cambios',
                    changelogMessage: '<h6>Novidades:</h6><ul style="margin-bottom: 10px"><li>Agora é posible ocultar a velocidade en segmentos non pavimentados;</li><li>Agora tamén é posible activar ou desactivar a capa de velocidade utilizando as teclas de atallo: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Poderás ver a tecla de atallo na xanela de atallos).</li></ul><h6>Correccións:</h6><ul><li>Cando se desactiva o interruptor da capa de camiños, tamén se ocultará a capa de velocidade;</li><li>Nova maneira de cargar as configuracións iniciais e gardadas para non perder a configuración e engadir novas funcións das actualizacións;</li><li>Outras correccións e melloras no código.</li></ul>',
                    close: 'Pechar',
                    viewScript: 'Ver o script',
                    showDialog: 'Amosar modal',
                    title: {
                        general: 'Xeral',
                        showOnRoadType: 'Amosar nos segmentos do tipo:'
                    },
                    label: {
                        displaySpeeds: 'Amosar velocidades',
                        showNoSpeed: 'Amosar en segmentos sen velocidade',
                        showOnRoundabout: 'Amosar en rotondas',
                        showOnUnpaved: 'Amosar en vía sen pavimentar',
                        maxZoom: 'Renderizar ata o zoom:',
                        toggleLayerShortcut: 'Alternar o interruptor de capa para mostrar a velocidade'
                    },
                    btn: {
                        updateSettingsTab: 'Actualizar menú',
                    },
                    log: {
                        wmeReadyStartScript: 'WME cargado e listo. Iniciando script...',
                        waitingWme: 'Agardando a que WME estea listo...',
                        wmeReadyStartingPlugin: 'WME está listo. Configurando capa personalizada...',
                        shortSleep: 'Agardando uns 1 segundo para que todo se cargue...',
                        updateMapDisplay: 'Actualizando a visualización no mapa...',
                        maxZoomExceeded: 'Zoom máximo excedido. Ningunha velocidade será mostrada.',
                        noneSegment: 'Non se atoparon segmentos.',
                        numSegmentsLoaded: 'Total de segmentos cargados:',
                        attributesNotFound: 'Non se puideron atopar os atributos ou están ausentes no segmento',
                        disallowedSegment: 'Este tipo de segmento non debe ser cargado.',
                        invalidGeometry: 'Xeometría non válida no segmento:',
                        updateMapDisplayFinished: 'Actualización completada.',
                        shortCutDialogNotFound: 'Non foi posible atopar o cadro de diálogo dos atallos de teclado. Intentando de novo...',
                        houseNumberCheckboxNotFound: 'Non se atopou a caixa de selección "Números das casas". Intentando de novo...',
                        scriptsTabNotFound: 'Non se atopou o panel de scripts. Intentando de novo...',
                        settingsTabAdded: 'Aba de configuración engadida.',
                        speedLayer: 'Capa de velocidade',
                        opacityUpdated: 'Opacidade dos iconas axustada a',
                        updatingSettingsTab: 'Actualizando a aba de configuración...',
                        languageDefined: 'Idiomas definidos.',
                        checkingVersion: 'Comprobando a versión do plugin.'
                    }
                };
            
                break;
            
            case 'he':
                // Hebrew
                this.spdTranslations = {
                    name: 'תצוגת מהירות',
                    settingTabName: 'הגדרות תצוגת מהירות',
                    enabled: 'מופעל',
                    disabled: 'מנוטרל',
                    zoomOut: 'התרחק',
                    zoomIn: 'התקרב',
                    changelog: 'יומן שינויים',
                    changelogMessage: '<h6>חידושים:</h6><ul style="margin-bottom: 10px"><li>כעת אפשר להסתיר את המהירות בקטעים שאינם מרוצפים;</li><li>כעת אפשר גם להפעיל או להשבית את שכבת המהירות בעזרת קיצורי מקלדת: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (ניתן לראות את קיצור המקשים במודאל קיצורי המקלדת).</li></ul><h6>תיקונים:</h6><ul><li>כאשר מפסיקים את החלפת השכבות של הדרכים, שכבת המהירות תוסתר גם;</li><li>שיטה חדשה לטעון את ההגדרות ההתחלתיות והנשמרות כך שלא ייאבדו ההגדרות הקיימות ותתווספנה פונקציות חדשות מעדכונים;</li><li>תיקונים ושיפורים נוספים בקוד.</li></ul>',
                    close: 'סגור',
                    viewScript: 'צפייה בסקריפט',
                    showDialog: 'הצג מודאלי',
                    title: {
                        general: 'כללי',
                        showOnRoadType: 'הצג בקטעי דרך מהסוג:'
                    },
                    label: {
                        displaySpeeds: 'הצג מהירויות',
                        showNoSpeed: 'הצג בקטעי דרך ללא מהירות',
                        showOnRoundabout: 'הצג בכיכרות',
                        showOnUnpaved: 'הצג בדרך לא סלולה',
                        maxZoom: 'הצג עד רמת התקרבות:',
                        toggleLayerShortcut: 'Alternar o interruptor de capa para mostrar a velocidade'
                    },
                    btn: {
                        updateSettingsTab: 'עדכן תפריט',
                    },
                    log: {
                        wmeReadyStartScript: 'WME נטען ומוכן. מפעיל סקריפט...',
                        waitingWme: 'ממתין ל-WME שיטען...',
                        wmeReadyStartingPlugin: 'WME מוכן. מגדיר שכבה מותאמת אישית...',
                        shortSleep: 'ממתין כשנייה לטעינה מלאה...',
                        updateMapDisplay: 'מעדכן תצוגת מפה...',
                        maxZoomExceeded: 'ההתקרבות חרגה מהמקסימום. מהירות לא תוצג.',
                        noneSegment: 'לא נמצאו קטעים.',
                        numSegmentsLoaded: 'סך כל הקטעים שנטענו:',
                        attributesNotFound: 'לא ניתן למצוא את המאפיינים או שהם חסרים בקטע',
                        disallowedSegment: 'קטע זה אינו אמור להיטען.',
                        invalidGeometry: 'גיאומטריה לא תקינה בקטע:',
                        updateMapDisplayFinished: 'העדכון הושלם.',
                        shortCutDialogNotFound: 'Non foi posible atopar o cadro de diálogo dos atallos de teclado. Intentando de novo...',
                        houseNumberCheckboxNotFound: 'תיבת הסימון "מספרי בתים" לא נמצאה. מנסה שוב...',
                        scriptsTabNotFound: 'לשונית הסקריפטים לא נמצאה. מנסה שוב...',
                        settingsTabAdded: 'לשונית ההגדרות נוספה.',
                        speedLayer: 'שכבת מהירות',
                        opacityUpdated: 'שקיפות האייקונים הותאמה ל',
                        updatingSettingsTab: 'מעדכן את לשונית ההגדרות...',
                        languageDefined: 'השפות הוגדרו.',
                        checkingVersion: 'בודק את גרסת התוסף.'
                    }
                };
            
                break;
            
            case 'hi':
                // Hindi
                this.spdTranslations = {
                    name: 'स्पीड डिस्प्ले',
                    settingTabName: 'स्पीड डिस्प्ले सेटिंग्स',
                    enabled: 'सक्षम',
                    disabled: 'अक्षम',
                    zoomOut: 'जूम आउट',
                    zoomIn: 'जूम इन',
                    changelog: 'चेंजलॉग',
                    changelogMessage: '<h6>नवीनताएँ:</h6><ul style="margin-bottom: 10px"><li>अब असफलित क्षेत्रों में गति को छुपाना संभव है;</li><li>अब आप कीबोर्ड शॉर्टकट का उपयोग करके गति परत को सक्रिय या निष्क्रिय कर सकते हैं: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (आप शॉर्टकट की को शॉर्टकट मोडल में देख सकते हैं)।</li></ul><h6>सुधार:</h6><ul><li>जब सड़क लेयर स्विच को निष्क्रिय किया जाता है, तो गति लेयर भी छिपा दी जाएगी;</li><li>नई विधि द्वारा प्रारंभिक और संरक्षित सेटिंग्स को लोड किया जाता है, ताकि पहले से सेट की गई सेटिंग्स खो न जाएं और अपडेट के नए फ़ंक्शंस जोड़ें;</li><li>अन्य बग सुधार और कोड सुधार।</li></ul>',
                    close: 'बंद करें',
                    viewScript: 'स्क्रिप्ट देखें',
                    showDialog: 'मोडल दिखाएँ',
                    title: {
                        general: 'सामान्य',
                        showOnRoadType: 'इस सड़क प्रकार पर दिखाएं:'
                    },
                    label: {
                        displaySpeeds: 'स्पीड दिखाएं',
                        showNoSpeed: 'स्पीड न होने पर दिखाएं',
                        showOnRoundabout: 'राउंडअबाउट पर दिखाएं',
                        showOnUnpaved: 'असंपन्न सड़क पर दिखाएँ',
                        maxZoom: 'मैक्स जूम पर रेंडर करें:',
                        toggleLayerShortcut: 'लेयर स्विचर गति प्रदर्शन टॉगल करें'
                    },
                    btn: {
                        updateSettingsTab: 'मेनू अपडेट करें',
                    },
                    log: {
                        wmeReadyStartScript: 'WME लोड हो गया और तैयार है। स्क्रिप्ट शुरू हो रही है...',
                        waitingWme: 'WME के तैयार होने का इंतजार कर रहे हैं...',
                        wmeReadyStartingPlugin: 'WME तैयार है। कस्टम लेयर सेट कर रहे हैं...',
                        shortSleep: 'सब कुछ लोड होने के लिए लगभग 1 सेकंड रुक रहे हैं...',
                        updateMapDisplay: 'मानचित्र प्रदर्शन अपडेट कर रहे हैं...',
                        maxZoomExceeded: 'अधिकतम जूम स्तर पार हो गया। कोई स्पीड नहीं दिखाई देगी।',
                        noneSegment: 'कोई सेगमेंट नहीं मिला।',
                        numSegmentsLoaded: 'लोड किए गए सेगमेंट की कुल संख्या:',
                        attributesNotFound: 'सेगमेंट में गुण नहीं मिले या गायब हैं',
                        disallowedSegment: 'यह प्रकार का सेगमेंट लोड नहीं किया जाना चाहिए।',
                        invalidGeometry: 'सेगमेंट में अमान्य ज्यामिति:',
                        updateMapDisplayFinished: 'अद्यतन समाप्त हो गया।',
                        shortCutDialogNotFound: 'कीबोर्ड शॉर्टकट संवाद नहीं मिला। पुनः प्रयास कर रहे हैं...',
                        houseNumberCheckboxNotFound: '"हाउस नंबर" चेकबॉक्स नहीं मिला। फिर से प्रयास कर रहे हैं...',
                        scriptsTabNotFound: 'स्क्रिप्ट पैनल नहीं मिला। फिर से प्रयास कर रहे हैं...',
                        settingsTabAdded: 'सेटिंग्स टैब जोड़ा गया।',
                        speedLayer: 'स्पीड लेयर',
                        opacityUpdated: 'आइकन की अपारदर्शिता को समायोजित किया गया',
                        updatingSettingsTab: 'सेटिंग्स टैब को अपडेट कर रहे हैं...',
                        languageDefined: 'भाषाएं परिभाषित की गईं।',
                        checkingVersion: 'प्लगइन संस्करण की जाँच कर रहे हैं।'
                    }
                };
            
                break;
            
            case 'hr':
                // Croatian
                this.spdTranslations = {
                    name: 'Prikaz brzine',
                    settingTabName: 'Postavke prikaza brzine',
                    enabled: 'omogućeno',
                    disabled: 'onemogućeno',
                    zoomOut: 'Udalji',
                    zoomIn: 'Povećaj',
                    changelog: 'Dnevnik promjena',
                    changelogMessage: '<h6>Novosti:</h6><ul style="margin-bottom: 10px"><li>Sad je moguće sakriti brzinu na nepavlanim segmentima;</li><li>Sad je također moguće aktivirati ili deaktivirati sloj brzine pomoću tipkovničkih prečaca: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Prečace možete vidjeti u modalnom prozoru prečaca).</li></ul><h6>Ispravci:</h6><ul><li>Isključivanjem prekidača sloja cesta, sloj brzine također će biti skriven;</li><li>Nova metoda učitavanja početnih i spremljenih postavki kako ne bi došlo do gubitka postojećih postavki i dodavanja novih funkcionalnosti s ažuriranjima;</li><li>Ostale ispravke i poboljšanja koda.</li></ul>',
                    close: 'Zatvori',
                    viewScript: 'Pogledaj skriptu',
                    showDialog: 'Prikaži dijalog',
                    title: {
                        general: 'Općenito',
                        showOnRoadType: 'Prikaz na segmentima vrste:'
                    },
                    label: {
                        displaySpeeds: 'Prikaz brzina',
                        showNoSpeed: 'Prikaz na segmentima bez brzine',
                        showOnRoundabout: 'Prikaz na kružnim tokovima',
                        showOnUnpaved: 'Prikaži na neasfaltiranoj cesti',
                        maxZoom: 'Renderirati do razine uvećanja:',
                        toggleLayerShortcut: 'Prebacite prekidač sloja za prikaz brzine'
                    },
                    btn: {
                        updateSettingsTab: 'Ažuriraj izbornik',
                    },
                    log: {
                        wmeReadyStartScript: 'WME učitano i spremno. Pokrećem skriptu...',
                        waitingWme: 'Čekam da WME bude spreman...',
                        wmeReadyStartingPlugin: 'WME je spreman. Postavljam prilagođeni sloj...',
                        shortSleep: 'Čekam 1 sekundu da se sve učita...',
                        updateMapDisplay: 'Ažuriram prikaz na karti...',
                        maxZoomExceeded: 'Maksimalno uvećanje premašeno. Brzina neće biti prikazana.',
                        noneSegment: 'Nema segmenata.',
                        numSegmentsLoaded: 'Ukupno učitanih segmenata:',
                        attributesNotFound: 'Nisu pronađeni atributi ili nedostaju u segmentu',
                        disallowedSegment: 'Ova vrsta segmenta ne bi trebala biti učitana.',
                        invalidGeometry: 'Nevažeća geometrija na segmentu:',
                        updateMapDisplayFinished: 'Ažuriranje završeno.',
                        shortCutDialogNotFound: 'Nije moguće pronaći dijalog prečaca tipkovnice. Pokušavam ponovno...',
                        houseNumberCheckboxNotFound: '"Brojevi kuća" kutija za potvrdu nije pronađena. Pokušavam ponovno...',
                        scriptsTabNotFound: 'Kartica skripti nije pronađena. Pokušavam ponovno...',
                        settingsTabAdded: 'Kartica postavki dodana.',
                        speedLayer: 'Sloj brzine',
                        opacityUpdated: 'Prozirnost ikona postavljena na',
                        updatingSettingsTab: 'Ažuriram karticu postavki...',
                        languageDefined: 'Jezici definirani.',
                        checkingVersion: 'Provjeravam verziju dodatka.'
                    }
                };
            
                break;
            
            case 'hu':
                // Hungarian
                this.spdTranslations = {
                    name: 'Sebesség kijelzés',
                    settingTabName: 'Sebesség kijelzés beállítások',
                    enabled: 'engedélyezve',
                    disabled: 'letiltva',
                    zoomOut: 'Távolítás',
                    zoomIn: 'Közelítés',
                    changelog: 'Változásnapló',
                    changelogMessage: '<h6>Újdonságok:</h6><ul style="margin-bottom: 10px"><li>Most már elrejtheted a sebességet nem burkolt szakaszokon;</li><li>Most már a billentyűparancsokkal is aktiválhatod vagy deaktiválhatod a sebesség réteget: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (A billentyűparancsok a billentyűparancs modalban láthatóak).</li></ul><h6>Javítások:</h6><ul><li>Amikor a réteg kapcsolója kikapcsolásra kerül, a sebesség réteg is el lesz rejtve;</li><li>Új módszer a kezdő és mentett beállítások betöltésére, hogy ne vesszenek el a meglévő beállítások, és hozzáadhatók legyenek az új frissítések új funkciói;</li><li>Egyéb hibajavítások és kódbeli fejlesztések.</li></ul>',
                    close: 'Bezárás',
                    viewScript: 'Szkript megtekintése',
                    showDialog: 'Modális ablak megjelenítése',
                    title: {
                        general: 'Általános',
                        showOnRoadType: 'Megjelenítés ezen az úttípuson:'
                    },
                    label: {
                        displaySpeeds: 'Sebességek megjelenítése',
                        showNoSpeed: 'Megjelenítés sebesség nélküli szegmenseken',
                        showOnRoundabout: 'Megjelenítés körforgalomra',
                        showOnUnpaved: 'Megjelenítés burkolatlan úton',
                        maxZoom: 'Renderelés a legnagyobb nagyításig:',
                        toggleLayerShortcut: 'Rétegváltó sebesség kijelző váltás'
                    },
                    btn: {
                        updateSettingsTab: 'Menü frissítése',
                    },
                    log: {
                        wmeReadyStartScript: 'WME betöltve és kész. A szkript indítása...',
                        waitingWme: 'Várakozás a WME betöltődésére...',
                        wmeReadyStartingPlugin: 'A WME kész. Egyéni réteg beállítása...',
                        shortSleep: 'Várakozás körülbelül 1 másodpercig, hogy minden betöltődjön...',
                        updateMapDisplay: 'Térkép megjelenítés frissítése...',
                        maxZoomExceeded: 'Maximális nagyítási szint túllépve. Sebesség nem jeleníthető meg.',
                        noneSegment: 'Nincs szegmens.',
                        numSegmentsLoaded: 'Betöltött szegmensek száma:',
                        attributesNotFound: 'A szegmensen nem találhatók az attribútumok vagy hiányoznak',
                        disallowedSegment: 'Ez a szegmensként nem engedélyezett betöltésre.',
                        invalidGeometry: 'Érvénytelen geometria a szegmensen:',
                        updateMapDisplayFinished: 'Frissítés befejeződött.',
                        shortCutDialogNotFound: 'Nem található a billentyűparancsok párbeszédpanel. Újrapróbálkozás...',
                        houseNumberCheckboxNotFound: '"Házszám" jelölőnégyzet nem található. Újrapróbálkozás...',
                        scriptsTabNotFound: 'Skript fül nem található. Újrapróbálkozás...',
                        settingsTabAdded: 'Beállítások fül hozzáadva.',
                        speedLayer: 'Sebesség réteg',
                        opacityUpdated: 'Ikonok átlátszósága beállítva',
                        updatingSettingsTab: 'Beállítások fül frissítése...',
                        languageDefined: 'Nyelvek definiálva.',
                        checkingVersion: 'A bővítmény verziójának ellenőrzése.'
                    }
                };
            
                break;
            
            case 'id':
                // Indonesian
                this.spdTranslations = {
                    name: 'Tampilan Kecepatan',
                    settingTabName: 'Pengaturan Tampilan Kecepatan',
                    enabled: 'aktif',
                    disabled: 'nonaktif',
                    zoomOut: 'Perkecil',
                    zoomIn: 'Perbesar',
                    changelog: 'Catatan Perubahan',
                    changelogMessage: '<h6>Pembaruan:</h6><ul style="margin-bottom: 10px"><li>Sekarang dimungkinkan untuk menyembunyikan kecepatan pada segmen jalan yang tidak teraspal;</li><li>Sekarang Anda juga dapat mengaktifkan atau menonaktifkan lapisan kecepatan menggunakan pintasan keyboard: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Pintasan keyboard dapat dilihat pada modal pintasan).</li></ul><h6>Perbaikan:</h6><ul><li>Ketika sakelar lapisan jalan dimatikan, lapisan kecepatan juga akan disembunyikan;</li><li>Cara baru untuk memuat pengaturan awal dan yang disimpan agar pengaturan yang sudah ada tidak hilang dan menambahkan fungsi baru dari pembaruan;</li><li>Perbaikan lainnya dan peningkatan kode.</li></ul>',
                    close: 'Tutup',
                    viewScript: 'Lihat Skrip',
                    showDialog: 'Tampilkan modal',
                    title: {
                        general: 'Umum',
                        showOnRoadType: 'Tampilkan pada tipe jalan:'
                    },
                    label: {
                        displaySpeeds: 'Tampilkan kecepatan',
                        showNoSpeed: 'Tampilkan di segmen tanpa kecepatan',
                        showOnRoundabout: 'Tampilkan di bundaran',
                        showOnUnpaved: 'Tampilkan di jalan yang tidak teras',
                        maxZoom: 'Render hingga zoom maksimal:',
                        toggleLayerShortcut: 'Alihkan sakelar lapisan untuk menampilkan kecepatan'
                    },
                    btn: {
                        updateSettingsTab: 'Perbarui Menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME dimuat dan siap. Memulai skrip...',
                        waitingWme: 'Menunggu WME untuk siap...',
                        wmeReadyStartingPlugin: 'WME siap. Menyiapkan lapisan khusus...',
                        shortSleep: 'Menunggu sekitar 1 detik agar semuanya dimuat...',
                        updateMapDisplay: 'Memperbarui tampilan peta...',
                        maxZoomExceeded: 'Zoom maksimal terlampaui. Kecepatan tidak akan ditampilkan.',
                        noneSegment: 'Tidak ada segmen yang ditemukan.',
                        numSegmentsLoaded: 'Jumlah segmen yang dimuat:',
                        attributesNotFound: 'Atribut tidak ditemukan atau hilang di segmen',
                        disallowedSegment: 'Segmen jenis ini tidak boleh dimuat.',
                        invalidGeometry: 'Geometri tidak valid di segmen:',
                        updateMapDisplayFinished: 'Pembaruan selesai.',
                        shortCutDialogNotFound: 'Tidak dapat menemukan dialog pintasan keyboard. Mencoba lagi...',
                        houseNumberCheckboxNotFound: 'Checkbox "Nomor Rumah" tidak ditemukan. Mencoba lagi...',
                        scriptsTabNotFound: 'Tab skrip tidak ditemukan. Mencoba lagi...',
                        settingsTabAdded: 'Tab pengaturan ditambahkan.',
                        speedLayer: 'Lapisan Kecepatan',
                        opacityUpdated: 'Opasitas ikon diatur ke',
                        updatingSettingsTab: 'Memperbarui tab pengaturan...',
                        languageDefined: 'Bahasa telah didefinisikan.',
                        checkingVersion: 'Memeriksa versi plugin.'
                    }
                };
            
                break;
            
            case 'it':
                // Italian
                this.spdTranslations = {
                    name: 'Visualizzazione della velocità',
                    settingTabName: 'Impostazioni visualizzazione della velocità',
                    enabled: 'abilitato',
                    disabled: 'disabilitato',
                    zoomOut: 'Zoom indietro',
                    zoomIn: 'Zoom avanti',
                    changelog: 'Registro modifiche',
                    changelogMessage: '<h6>Novità:</h6><ul style="margin-bottom: 10px"><li>Ora è possibile nascondere la velocità nei segmenti non asfaltati;</li><li>Ora è anche possibile attivare o disattivare il livello di velocità utilizzando le scorciatoie da tastiera: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Le scorciatoie da tastiera sono visibili nel modulo delle scorciatoie da tastiera).</li></ul><h6>Correzioni:</h6><ul><li>Disattivando l\'interruttore dei livelli stradali, anche il livello della velocità verrà nascosto;</li><li>Nuovo metodo per caricare le impostazioni iniziali e quelle salvate, in modo che non vengano perse le impostazioni esistenti e vengano aggiunte le nuove funzionalità degli aggiornamenti;</li><li>Altri miglioramenti e correzioni del codice.</li></ul>',
                    close: 'Chiudi',
                    viewScript: 'Vedi Script',
                    showDialog: 'Mostra finestra modale',
                    title: {
                        general: 'Generale',
                        showOnRoadType: 'Mostra su tipo di strada:'
                    },
                    label: {
                        displaySpeeds: 'Mostra velocità',
                        showNoSpeed: 'Mostra su segmenti senza velocità',
                        showOnRoundabout: 'Mostra sulle rotonde',
                        showOnUnpaved: 'Mostra sulla strada non pavimentata',
                        maxZoom: 'Renderizza fino allo zoom:',
                        toggleLayerShortcut: 'Attiva/disattiva il selettore del livello per visualizzare la velocità'
                    },
                    btn: {
                        updateSettingsTab: 'Aggiorna menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME caricato e pronto. Avvio lo script...',
                        waitingWme: 'In attesa che WME sia pronto...',
                        wmeReadyStartingPlugin: 'WME pronto. Impostando layer personalizzato...',
                        shortSleep: 'Attendere circa 1 secondo affinché tutto venga caricato...',
                        updateMapDisplay: 'Aggiornando la visualizzazione della mappa...',
                        maxZoomExceeded: 'Zoom massimo superato. La velocità non verrà visualizzata.',
                        noneSegment: 'Nessun segmento trovato.',
                        numSegmentsLoaded: 'Numero totale di segmenti caricati:',
                        attributesNotFound: 'Impossibile trovare gli attributi o mancano nel segmento',
                        disallowedSegment: 'Questo tipo di segmento non deve essere caricato.',
                        invalidGeometry: 'Geometria non valida nel segmento:',
                        updateMapDisplayFinished: 'Aggiornamento completato.',
                        shortCutDialogNotFound: 'Impossibile trovare la finestra di dialogo delle scorciatoie da tastiera. Riprovo...',
                        houseNumberCheckboxNotFound: 'Non trovata la casella di selezione "Numeri civici". Riprovo...',
                        scriptsTabNotFound: 'Non trovata la scheda degli script. Riprovo...',
                        settingsTabAdded: 'Scheda impostazioni aggiunta.',
                        speedLayer: 'Layer velocità',
                        opacityUpdated: 'Opacità delle icone impostata su',
                        updatingSettingsTab: 'Aggiornamento scheda impostazioni...',
                        languageDefined: 'Lingue definite.',
                        checkingVersion: 'Verifica versione del plugin.'
                    }
                };
            
                break;

            case 'ja':
                // Japanese
                this.spdTranslations = {
                    name: '速度表示',
                    settingTabName: '速度表示設定',
                    enabled: '有効',
                    disabled: '無効',
                    zoomOut: 'ズームアウト',
                    zoomIn: 'ズームイン',
                    changelog: '変更履歴',
                    changelogMessage: '<h6>新機能:</h6><ul style="margin-bottom: 10px"><li>未舗装のセグメントで速度を非表示にすることができるようになりました;</li><li>キーボードショートカットを使用して速度レイヤーをオンまたはオフにすることができるようになりました:<span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span>(ショートカットはショートカットモーダルで確認できます)。</li></ul><h6>修正内容:</h6><ul><li>道路レイヤーのスイッチをオフにすると、速度レイヤーも非表示になります;</li><li>既存の設定が失われないように、新しい機能のアップデートを追加するための設定の読み込み方法が変更されました;</li><li>その他のバグ修正とコードの改善。</li></ul>',
                    close: '閉じる',
                    viewScript: 'スクリプトを表示',
                    showDialog: 'モーダルを表示',
                    title: {
                        general: '一般',
                        showOnRoadType: '次のタイプのセグメントに表示:'
                    },
                    label: {
                        displaySpeeds: '速度を表示',
                        showNoSpeed: '速度なしのセグメントに表示',
                        showOnRoundabout: 'ラウンドアバウトに表示',
                        showOnUnpaved: '未舗装道路に表示',
                        maxZoom: '最大ズームレベルまでレンダリング:',
                        toggleLayerShortcut: 'レイヤースイッチャー速度表示を切り替える'
                    },
                    btn: {
                        updateSettingsTab: 'メニューを更新',
                    },
                    log: {
                        wmeReadyStartScript: 'WMEが読み込まれ、準備が整いました。スクリプトを開始します...',
                        waitingWme: 'WMEの準備が整うのを待っています...',
                        wmeReadyStartingPlugin: 'WMEが準備完了。カスタムレイヤーを設定中...',
                        shortSleep: 'すべての読み込みが完了するまで約1秒間待機...',
                        updateMapDisplay: '地図表示を更新しています...',
                        maxZoomExceeded: '最大ズームを超えました。速度は表示されません。',
                        noneSegment: 'セグメントが見つかりませんでした。',
                        numSegmentsLoaded: '読み込まれたセグメントの数:',
                        attributesNotFound: 'セグメントの属性が見つかりませんまたは不足しています',
                        disallowedSegment: 'このタイプのセグメントは読み込むべきではありません。',
                        invalidGeometry: 'セグメントのジオメトリが無効です:',
                        updateMapDisplayFinished: '更新が完了しました。',
                        shortCutDialogNotFound: 'キーボードショートカットのダイアログが見つかりませんでした。再試行中...',
                        houseNumberCheckboxNotFound: '「家番号」のチェックボックスが見つかりませんでした。再試行します...',
                        scriptsTabNotFound: 'スクリプトタブが見つかりませんでした。再試行します...',
                        settingsTabAdded: '設定タブが追加されました。',
                        speedLayer: '速度レイヤー',
                        opacityUpdated: 'アイコンの透明度が次のように更新されました:',
                        updatingSettingsTab: '設定タブを更新しています...',
                        languageDefined: '言語が設定されました。',
                        checkingVersion: 'プラグインのバージョンを確認しています。'
                    }
                };
            
                break;
            
            case 'ka':
                // Georgian
                this.spdTranslations = {
                    name: 'მოჩვენების სიჩქარე',
                    settingTabName: 'მოჩვენების სიჩქარის პარამეტრები',
                    enabled: 'ჩართულია',
                    disabled: 'გამორთულია',
                    zoomOut: 'დისტანცირება',
                    zoomIn: 'დაახლოვება',
                    changelog: 'ცვლილებების ისტორია',
                    changelogMessage: '<h6>ახალობები:</h6><ul style="margin-bottom: 10px"><li>ახლა შესაძლებელია სწრაფობის დამალვა არაპლასტიურ მონაკვეთებზე;</li><li>ახლა ასევე შესაძლებელია სიჩქარის ფენის გააქტიურება ან გამორთვა კლავიატურის ნამუშევრების გამოყენებით: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (კლავიატურის ნამუშევრები შეგიძლიათ იხილოთ კლავიატურის ნამუშევრების მოდალში).</li></ul><h6>შეცდომები:</h6><ul><li>როდესაც გზის ფენის გადამრთველი გამორთულია, სიჩქარის ფენიც იმალება;</li><li>ახალი მეთოდი დასაწყისი და შენახული პარამეტრების ჩატვირთვისთვის, რათა არსებული პარამეტრები არ დაკარგონ და ახალი ფუნქციები დაემატოს განახლებებისგან;</li><li> სხვა შეცდომების გამოსწორება და კოდის გაუმჯობესება.</li></ul>',
                    close: 'დახურვა',
                    viewScript: 'სკრიპტის ნახვა',
                    showDialog: 'მოდალური ფანჯრის ჩვენება',
                    title: {
                        general: 'ზოგადი',
                        showOnRoadType: 'მოჩვენება შემდეგი ტიპის მონაკვეთებზე:'
                    },
                    label: {
                        displaySpeeds: 'მოჩვენება სიჩქარე',
                        showNoSpeed: 'მოჩვენება სიჩქარის გარეშე მონაკვეთებზე',
                        showOnRoundabout: 'მოჩვენება როტონდაზე',
                        showOnUnpaved: 'აჩვენე უგრუნტო გზაზე',
                        maxZoom: 'გახსენით მაქსიმალური ზუმი:',
                        toggleLayerShortcut: 'შედეგის სიჩქარის საჩვენებელი ფენის გადამრთველი'
                    },
                    btn: {
                        updateSettingsTab: 'განახლება მენიუ',
                    },
                    log: {
                        wmeReadyStartScript: 'WME დამუხტულია და მზადაა. სკრიპტის დაწყება...',
                        waitingWme: 'WME-ის მოლოდინი...',
                        wmeReadyStartingPlugin: 'WME მზადაა. პერსონალური ფენების კონფიგურაცია...',
                        shortSleep: 'მოლოდინი დაახლოებით 1 წამით, რომ ყველაფერი დატვირთული იყოს...',
                        updateMapDisplay: 'რუკის ჩვენების განახლება...',
                        maxZoomExceeded: 'მაქსიმალური ზუმი გადააჭარბა. სიჩქარე არ გამოიჩენს.',
                        noneSegment: 'არ არის მონაკვეთები.',
                        numSegmentsLoaded: 'დატვირთული მონაკვეთების რაოდენობა:',
                        attributesNotFound: 'მონაკვეთებში ვერ მოიძებნა ატრიბუტები ან ისინი აკლია',
                        disallowedSegment: 'ეს ტიპის მონაკვეთები არ უნდა ჩაიტვირთოს.',
                        invalidGeometry: 'გეომეტრია არასწორია მონაკვეთზე:',
                        updateMapDisplayFinished: 'განახლება დასრულდა.',
                        shortCutDialogNotFound: 'ვერ მოიძებნა კლავიატურის მალსახმობების დიალოგი. ხელახლა ცდა...',
                        houseNumberCheckboxNotFound: '„სახლების ნომრის“ საკონტროლო ჩხიკი არ მოიძებნა. ვცდილობთ თავიდან...',
                        scriptsTabNotFound: 'სკრიპტების ჩანართი ვერ მოიძებნა. ვცდილობთ თავიდან...',
                        settingsTabAdded: 'პარამეტრების ჩანართი დაემატა.',
                        speedLayer: 'სიჩქარის ფენა',
                        opacityUpdated: 'ხატების გამჭვირვალობა განახლდა:',
                        updatingSettingsTab: 'პარამეტრების ჩანართის განახლება...',
                        languageDefined: 'ენის გადამზადება.',
                        checkingVersion: 'ამოწმდება პლაგინის ვერსია.'
                    }
                };
            
                break;

            case 'ko':
                // Korean
                this.spdTranslations = {
                    name: '속도 표시',
                    settingTabName: '속도 표시 설정',
                    enabled: '활성화됨',
                    disabled: '비활성화됨',
                    zoomOut: '축소',
                    zoomIn: '확대',
                    changelog: '변경 로그',
                    changelogMessage: '<h6>새로운 기능:</h6><ul style="margin-bottom: 10px"><li>비포장 도로에서 속도를 숨길 수 있게 되었습니다;</li><li>이제 키보드 단축키를 사용하여 속도 레이어를 활성화하거나 비활성화할 수 있습니다: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (단축키는 단축키 모달에서 확인할 수 있습니다).</li></ul><h6>수정 사항:</h6><ul><li>도로 레이어 스위치를 끄면 속도 레이어도 숨겨집니다;</li><li>기존 설정이 손실되지 않도록 새로운 업데이트 기능을 추가하는 방법이 변경되었습니다;</li><li>기타 버그 수정 및 코드 개선.</li></ul>',
                    close: '닫기',
                    viewScript: '스크립트 보기',
                    showDialog: '모달 표시',
                    title: {
                        general: '일반',
                        showOnRoadType: '다음 도로 유형에 표시:'
                    },
                    label: {
                        displaySpeeds: '속도 표시',
                        showNoSpeed: '속도가 없는 구간에 표시',
                        showOnRoundabout: '회전 교차로에 표시',
                        showOnUnpaved: '포장되지 않은 도로에 표시',
                        maxZoom: '최대 확대 수준까지 렌더링:',
                        toggleLayerShortcut: '레이어 전환기 속도 표시 전환'
                    },
                    btn: {
                        updateSettingsTab: '메뉴 업데이트',
                    },
                    log: {
                        wmeReadyStartScript: 'WME가 로드되고 준비되었습니다. 스크립트를 시작합니다...',
                        waitingWme: 'WME가 준비되기를 기다리고 있습니다...',
                        wmeReadyStartingPlugin: 'WME가 준비되었습니다. 사용자 정의 레이어 설정 중...',
                        shortSleep: '모든 것이 로드될 때까지 약 1초 기다립니다...',
                        updateMapDisplay: '지도 표시 업데이트 중...',
                        maxZoomExceeded: '최대 확대 수준을 초과했습니다. 속도가 표시되지 않습니다.',
                        noneSegment: '세그먼트가 없습니다.',
                        numSegmentsLoaded: '로드된 세그먼트의 총 수:',
                        attributesNotFound: '세그먼트에서 속성을 찾을 수 없거나 누락됨',
                        disallowedSegment: '이 유형의 세그먼트는 로드되어서는 안 됩니다.',
                        invalidGeometry: '세그먼트에 유효하지 않은 기하학이 있습니다:',
                        updateMapDisplayFinished: '업데이트 완료.',
                        shortCutDialogNotFound: '키보드 단축키 대화 상자를 찾을 수 없습니다. 다시 시도 중...',
                        houseNumberCheckboxNotFound: '"집 번호" 체크박스를 찾을 수 없습니다. 다시 시도 중...',
                        scriptsTabNotFound: '스크립트 탭을 찾을 수 없습니다. 다시 시도 중...',
                        settingsTabAdded: '설정 탭이 추가되었습니다.',
                        speedLayer: '속도 레이어',
                        opacityUpdated: '아이콘 불투명도가 설정되었습니다:',
                        updatingSettingsTab: '설정 탭을 업데이트 중...',
                        languageDefined: '언어 정의됨.',
                        checkingVersion: '플러그인 버전 확인 중.'
                    }
                };
            
                break;

            case 'lt':
                // Lithuanian
                this.spdTranslations = {
                    name: 'Greitį rodymas',
                    settingTabName: 'Greitį rodymo nustatymai',
                    enabled: 'Įjungta',
                    disabled: 'Išjungta',
                    zoomOut: 'Toliau',
                    zoomIn: 'Artimiau',
                    changelog: 'Pakeitimų registras',
                    changelogMessage: '<h6>Naujienos:</h6><ul style="margin-bottom: 10px"><li>Dabar galima slėpti greitį nepaviršiniuose segmentuose;</li><li>Dabar taip pat galima įjungti ir išjungti greičio sluoksnį naudojant klaviatūros spartiuosius klavišus: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Galite pamatyti spartųjį klavišą spartaus klavišų dialoge).</li></ul><h6>Klaidos pataisymai:</h6><ul><li>Išjungus kelių sluoksnių perjungimą, greičio sluoksnis taip pat bus paslėptas;</li><li>Įdiegta nauja būdas įkelti pradinius ir išsaugotus nustatymus, kad nebus prarasti esami nustatymai ir bus pridėtos naujos funkcijos;</li><li>Kitų klaidų pataisymai ir kodo patobulinimai.</li></ul>',
                    close: 'Uždaryti',
                    viewScript: 'Peržiūrėti scenarijų',
                    showDialog: 'Rodyti modalą',
                    title: {
                        general: 'Bendrieji',
                        showOnRoadType: 'Rodyti šiuose kelio segmentuose:'
                    },
                    label: {
                        displaySpeeds: 'Rodyti greičius',
                        showNoSpeed: 'Rodyti segmentuose be greičio',
                        showOnRoundabout: 'Rodyti žiede',
                        showOnUnpaved: 'Rodyti nepaviršiniuose keliuose',
                        maxZoom: 'Rodymas iki priartinimo lygio:',
                        toggleLayerShortcut: 'Perjungti greičio sluoksnį'
                    },
                    btn: {
                        updateSettingsTab: 'Atnaujinti meniu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME įkeltas ir paruoštas. Paleidžiamas scenarijus...',
                        waitingWme: 'Laukiama, kol WME bus paruoštas...',
                        wmeReadyStartingPlugin: 'WME paruoštas. Nustatoma pasirinktinių sluoksnių...',
                        shortSleep: 'Laukiama kelias sekundes, kad viskas užsikrautų...',
                        updateMapDisplay: 'Atnaujinama žemėlapio rodymas...',
                        maxZoomExceeded: 'Peržengtas didžiausias priartinimo lygis. Greitis nerodomas.',
                        noneSegment: 'Nepavyko rasti segmento.',
                        numSegmentsLoaded: 'Iš viso įkeltų segmentų:',
                        attributesNotFound: 'Nepavyko rasti atributų arba jie yra trūkstami šiame segmente',
                        disallowedSegment: 'Šio tipo segmentas neturėtų būti įkeltas.',
                        invalidGeometry: 'Netinkama geometrija segmente:',
                        updateMapDisplayFinished: 'Atnaujinimas baigtas.',
                        shortCutDialogNotFound: 'Nepavyko rasti spartaus klavišo modalą. Bandome dar kartą...',
                        houseNumberCheckboxNotFound: 'Nepavyko rasti "Namų numeriai" žymės. Bandome dar kartą...',
                        scriptsTabNotFound: 'Nepavyko rasti scenarijų skirtuko. Bandome dar kartą...',
                        settingsTabAdded: 'Nustatymų skirtukas pridėtas.',
                        speedLayer: 'Greičio sluoksnis',
                        opacityUpdated: 'Piktogramų skaidrumas nustatytas į',
                        updatingSettingsTab: 'Atnaujinami nustatymų skirtukai...',
                        languageDefined: 'Kalbos nustatytos.',
                        checkingVersion: 'Tikrinama versija.'
                    }
                };
            
                break;
                
            case 'lv':
                // Latvian
                this.spdTranslations = {
                    name: 'Ātruma attēlojums',
                    settingTabName: 'Ātruma attēlojuma iestatījumi',
                    enabled: 'Ieslēgts',
                    disabled: 'Izslēgts',
                    zoomOut: 'Tālāk',
                    zoomIn: 'Tuvāk',
                    changelog: 'Izmaiņu žurnāls',
                    changelogMessage: '<h6>Jaunumi:</h6><ul style="margin-bottom: 10px"><li>Tagad ir iespējams paslēpt ātrumu neasfaltētos segmentos;</li><li>Tagad arī ir iespējams aktivizēt un deaktivizēt ātruma slāni, izmantojot īsinājumtaustiņus: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Jūs varat apskatīt īsinājumtaustiņu īsinājumtaustiņu logā).</li></ul><h6>Kļūdu labojumi:</h6><ul><li>Izslēdzot ceļa slāņa pārslēgšanu, arī ātruma slānis tiks paslēpts;</li><li>Jauna metode sākotnējo un saglabāto iestatījumu ielādēšanai, lai netiktu zaudēti esošie iestatījumi un pievienotas jaunās funkcijas no jaunām atjauninājumiem;</li><li>Daži citi kļūdu labojumi un koda uzlabojumi.</li></ul>',
                    close: 'Aizvērt',
                    viewScript: 'Skatīt skriptu',
                    showDialog: 'Parādīt modāli',
                    title: {
                        general: 'Vispārīgi',
                        showOnRoadType: 'Parādīt šajos ceļa segmentos:'
                    },
                    label: {
                        displaySpeeds: 'Parādīt ātrumus',
                        showNoSpeed: 'Parādīt segmentos bez ātruma',
                        showOnRoundabout: 'Parādīt apļveida krustojumā',
                        showOnUnpaved: 'Parādīt nepavedinātos ceļos',
                        maxZoom: 'Renderēt līdz pieejamajam tālummaiņas līmenim:',
                        toggleLayerShortcut: 'Pārslēgt ātruma slāni'
                    },
                    btn: {
                        updateSettingsTab: 'Atjaunināt izvēlni',
                    },
                    log: {
                        wmeReadyStartScript: 'WME ielādēts un gatavs. Sākam skriptu...',
                        waitingWme: 'Gaida, kamēr WME būs gatavs...',
                        wmeReadyStartingPlugin: 'WME gatavs. Iestatām pielāgotos slāņus...',
                        shortSleep: 'Gaida dažas sekundes, lai viss ielādētos...',
                        updateMapDisplay: 'Atjauninām kartes attēlojumu...',
                        maxZoomExceeded: 'Pārsniegts maksimālais tālummaiņas līmenis. Ātrums netiks attēlots.',
                        noneSegment: 'Nav atrasts segments.',
                        numSegmentsLoaded: 'Kopā ielādēto segmentu:',
                        attributesNotFound: 'Neizdevās atrast atribūtus vai tie nav pieejami segmentā',
                        disallowedSegment: 'Šī veida segments nedrīkst būt ielādēts.',
                        invalidGeometry: 'Nederīga ģeometrija segmentā:',
                        updateMapDisplayFinished: 'Atjauninājums pabeigts.',
                        shortCutDialogNotFound: 'Neizdevās atrast īsinājumtaustiņu modāli. Mēģinām vēlreiz...',
                        houseNumberCheckboxNotFound: 'Neizdevās atrast "Māju numuru" ķeksi. Mēģinām vēlreiz...',
                        scriptsTabNotFound: 'Neizdevās atrast skriptu cilni. Mēģinām vēlreiz...',
                        settingsTabAdded: 'Pievienots iestatījumu cilne.',
                        speedLayer: 'Ātruma slānis',
                        opacityUpdated: 'Ikonu caurspīdīgums ir iestatīts uz',
                        updatingSettingsTab: 'Atjauninām iestatījumu cilnes...',
                        languageDefined: 'Valodas definētas.',
                        checkingVersion: 'Pārbauda spraudņa versiju.'
                    }
                };
            
                break;
            
            case 'ms':
                // Malay
                this.spdTranslations = {
                    name: 'Paparan Kelajuan',
                    settingTabName: 'Tetapan Paparan Kelajuan',
                    enabled: 'didayakan',
                    disabled: 'dinonaktifkan',
                    zoomOut: 'Zum Keluar',
                    zoomIn: 'Zum Masuk',
                    changelog: 'Log Perubahan',
                    changelogMessage: '<h6>Kemas Kini:</h6><ul style="margin-bottom: 10px"><li>Sekarang anda boleh menyembunyikan kelajuan pada segmen tidak berturap;</li><li>Sekarang juga boleh menghidupkan atau mematikan lapisan kelajuan menggunakan pintasan papan kekunci: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Pintasan papan kekunci boleh dilihat dalam modal pintasan papan kekunci).</li></ul><h6>Pembaikan:</h6><ul><li>Apabila suis lapisan jalan dimatikan, lapisan kelajuan juga akan disembunyikan;</li><li>Kaedah baru untuk memuatkan tetapan awal dan disimpan untuk memastikan tetapan yang sedia ada tidak hilang dan menambah fungsi baru dengan kemas kini;</li><li>Pembaikan lain dan penambahbaikan kod.</li></ul>',
                    close: 'Tutup',
                    viewScript: 'Lihat Skrip',
                    showDialog: 'Tunjukkan modal',
                    title: {
                        general: 'Am',
                        showOnRoadType: 'Tunjukkan pada jenis jalan:'
                    },
                    label: {
                        displaySpeeds: 'Paparkan kelajuan',
                        showNoSpeed: 'Paparkan pada segmen tanpa kelajuan',
                        showOnRoundabout: 'Paparkan pada bulatan jalan',
                        showOnUnpaved: 'Rodyti neasfaltuotame kelyje',
                        maxZoom: 'Render sehingga zum maksima:',
                        toggleLayerShortcut: 'Togol suis lapisan untuk paparan kelajuan'
                    },
                    btn: {
                        updateSettingsTab: 'Kemas kini menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME dimuatkan dan sedia. Memulakan skrip...',
                        waitingWme: 'Menunggu WME untuk bersedia...',
                        wmeReadyStartingPlugin: 'WME telah sedia. Menetapkan lapisan khas...',
                        shortSleep: 'Menunggu lebih kurang 1 saat untuk semua dimuatkan...',
                        updateMapDisplay: 'Mengemas kini paparan peta...',
                        maxZoomExceeded: 'Zum maksimum melebihi had. Kelajuan tidak akan dipaparkan.',
                        noneSegment: 'Tiada segmen dijumpai.',
                        numSegmentsLoaded: 'Jumlah segmen yang dimuatkan:',
                        attributesNotFound: 'Atribut tidak dijumpai atau hilang pada segmen',
                        disallowedSegment: 'Segmen jenis ini tidak dibenarkan dimuatkan.',
                        invalidGeometry: 'Geometri tidak sah pada segmen:',
                        updateMapDisplayFinished: 'Kemaskini selesai.',
                        shortCutDialogNotFound: 'Tidak dapat mencari dialog pintasan papan kekunci. Mencuba semula...',
                        houseNumberCheckboxNotFound: 'Checkbox "Nombor Rumah" tidak dijumpai. Mencuba semula...',
                        scriptsTabNotFound: 'Tab skrip tidak dijumpai. Mencuba semula...',
                        settingsTabAdded: 'Tab tetapan ditambah.',
                        speedLayer: 'Lapisan kelajuan',
                        opacityUpdated: 'Keburaman ikon disetkan ke',
                        updatingSettingsTab: 'Mengemas kini tab tetapan...',
                        languageDefined: 'Bahasa ditentukan.',
                        checkingVersion: 'Memeriksa versi plugin.'
                    }
                };
            
                break;
            
            case 'nl':
                // Dutch
                this.spdTranslations = {
                    name: 'Snelheidsweergave',
                    settingTabName: 'Instellingen voor snelheidsweergave',
                    enabled: 'ingeschakeld',
                    disabled: 'uitgeschakeld',
                    zoomOut: 'Uitzoomen',
                    zoomIn: 'Inzoomen',
                    changelog: 'Wijzigingslog',
                    changelogMessage: '<h6>Nieuwigheden:</h6><ul style="margin-bottom: 10px"><li>Het is nu mogelijk om de snelheid op onverharde segmenten te verbergen;</li><li>Het is nu ook mogelijk om de snelheidslaag in of uit te schakelen met behulp van sneltoetsen: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Je kunt de sneltoetsen zien in het sneltoetsen-modus).</li></ul><h6>Bugfixes:</h6><ul><li>Wanneer de laagschakelaar van de wegen is uitgeschakeld, wordt de snelheidslaag ook verborgen;</li><li>Nieuwe manier om de begin- en opgeslagen instellingen te laden, zodat de bestaande instellingen niet verloren gaan en nieuwe functies van updates kunnen worden toegevoegd;</li><li>Andere bugfixes en verbeteringen van de code.</li></ul>',
                    close: 'Sluiten',
                    viewScript: 'Script bekijken',
                    showDialog: 'Modaal venster tonen',
                    title: {
                        general: 'Algemeen',
                        showOnRoadType: 'Weergeven op wegtype:'
                    },
                    label: {
                        displaySpeeds: 'Toon snelheden',
                        showNoSpeed: 'Toon op segmenten zonder snelheid',
                        showOnRoundabout: 'Toon op rotondes',
                        showOnUnpaved: 'Toon op onbeschikte wegen',
                        maxZoom: 'Renderen tot zoomniveau:',
                        toggleLayerShortcut: 'Schakel laagwisselaar snelheidsoverzicht in'
                    },
                    btn: {
                        updateSettingsTab: 'Menu bijwerken',
                    },
                    log: {
                        wmeReadyStartScript: 'WME geladen en klaar. Starten van script...',
                        waitingWme: 'Wachten totdat WME klaar is...',
                        wmeReadyStartingPlugin: 'WME is klaar. Aanpassen van aangepaste laag...',
                        shortSleep: 'Wachten ongeveer 1 seconde totdat alles geladen is...',
                        updateMapDisplay: 'Bijwerken van de kaartweergave...',
                        maxZoomExceeded: 'Maximale zoom overschreden. Snelheid wordt niet weergegeven.',
                        noneSegment: 'Geen segmenten gevonden.',
                        numSegmentsLoaded: 'Totaal geladen segmenten:',
                        attributesNotFound: 'Kan attributen niet vinden of ze ontbreken in het segment',
                        disallowedSegment: 'Dit segmenttype mag niet worden geladen.',
                        invalidGeometry: 'Ongeldige geometrie op segment:',
                        updateMapDisplayFinished: 'Bijwerken voltooid.',
                        shortCutDialogNotFound: 'Kan het dialoogvenster voor sneltoetsen niet vinden. Opnieuw proberen...',
                        houseNumberCheckboxNotFound: 'De checkbox "Huisnummers" werd niet gevonden. Probeer opnieuw...',
                        scriptsTabNotFound: 'Het scripts-tabblad werd niet gevonden. Probeer opnieuw...',
                        settingsTabAdded: 'Instellingen tabblad toegevoegd.',
                        speedLayer: 'Snelheidslaag',
                        opacityUpdated: 'Doorzichtigheid van iconen ingesteld op',
                        updatingSettingsTab: 'Instellingen tabblad wordt bijgewerkt...',
                        languageDefined: 'Talen gedefinieerd.',
                        checkingVersion: 'Versie van de plugin controleren.'
                    }
                };
            
                break;

            case 'no':
                // Norwegian
                this.spdTranslations = {
                    name: 'Hastighetsvisning',
                    settingTabName: 'Innstillinger for hastighetsvisning',
                    enabled: 'aktivert',
                    disabled: 'deaktivert',
                    zoomOut: 'Zoom ut',
                    zoomIn: 'Zoom inn',
                    changelog: 'Endringslogg',
                    changelogMessage: '<h6>Nyheter:</h6><ul style="margin-bottom: 10px"><li>Det er nå mulig å skjule hastigheten på ikke-belagte segmenter;</li><li>Det er nå også mulig å aktivere eller deaktivere hastighetslaget ved hjelp av hurtigtaster: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Hurtigtaster kan ses i hurtigtastmodalen).</li></ul><h6>Feilrettinger:</h6><ul><li>Når lagbryteren for veier er slått av, vil hastighetslaget også skjules;</li><li>Ny metode for å laste inn start- og lagrede innstillinger slik at eksisterende innstillinger ikke går tapt og nye funksjoner fra oppdateringer kan legges til;</li><li>Annet feilretting og kodeforbedringer.</li></ul>',
                    close: 'Lukk',
                    viewScript: 'Vis skript',
                    showDialog: 'Vis modalvindu',
                    title: {
                        general: 'Generelt',
                        showOnRoadType: 'Vis på segmenter av typen:'
                    },
                    label: {
                        displaySpeeds: 'Vis hastigheter',
                        showNoSpeed: 'Vis på segmenter uten hastighet',
                        showOnRoundabout: 'Vis på rundkjøring',
                        showOnUnpaved: 'Vis på ubelagt vei',
                        maxZoom: 'Render til maks zoom nivå:',
                        toggleLayerShortcut: 'Bytt lagbryter hastighetsvisning'
                    },
                    btn: {
                        updateSettingsTab: 'Oppdater menyen',
                    },
                    log: {
                        wmeReadyStartScript: 'WME lastet og klar. Starter skript...',
                        waitingWme: 'Venter på at WME skal bli klart...',
                        wmeReadyStartingPlugin: 'WME er klart. Setter opp tilpasset lag...',
                        shortSleep: 'Venter i ca. 1 sekund for at alt skal lastes...',
                        updateMapDisplay: 'Oppdaterer kartvisning...',
                        maxZoomExceeded: 'Maks zoomnivå overskredet. Ingen hastighet vil bli vist.',
                        noneSegment: 'Fant ingen segmenter.',
                        numSegmentsLoaded: 'Totalt antall lastede segmenter:',
                        attributesNotFound: 'Fant ikke attributtene eller de mangler på segmentet',
                        disallowedSegment: 'Denne typen segment bør ikke lastes.',
                        invalidGeometry: 'Ugyldig geometri på segmentet:',
                        updateMapDisplayFinished: 'Oppdatering fullført.',
                        shortCutDialogNotFound: 'Kunne ikke finne dialogboksen for tastatursnarveier. Prøver igjen...',
                        houseNumberCheckboxNotFound: 'Finnes ikke avmerkingsboksen "Husnummer". Prøver igjen...',
                        scriptsTabNotFound: 'Fant ikke skriptfanen. Prøver igjen...',
                        settingsTabAdded: 'Innstillingsfanen er lagt til.',
                        speedLayer: 'Hastighetslag',
                        opacityUpdated: 'Ikonens opasitet er oppdatert til',
                        updatingSettingsTab: 'Oppdaterer innstillingsfanen...',
                        languageDefined: 'Språk definert.',
                        checkingVersion: 'Sjekker plugin-versjon.'
                    }
                };
            
                break;

            case 'pl':
                // Polish
                this.spdTranslations = {
                    name: 'Wyświetlanie prędkości',
                    settingTabName: 'Ustawienia wyświetlania prędkości',
                    enabled: 'włączona',
                    disabled: 'wyłączona',
                    zoomOut: 'Oddal',
                    zoomIn: 'Przybliż',
                    changelog: 'Dziennik zmian',
                    changelogMessage: '<h6>Nowości:</h6><ul style="margin-bottom: 10px"><li>Teraz można ukryć prędkość na segmentach nieutwardzonych;</li><li>Teraz możesz również włączyć lub wyłączyć warstwę prędkości za pomocą skrótów klawiszowych: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Skróty klawiszowe można zobaczyć w oknie skrótów klawiszowych).</li></ul><h6>Poprawki:</h6><ul><li>Po wyłączeniu przełącznika warstw dróg, warstwa prędkości również zostanie ukryta;</li><li>Nowa metoda ładowania ustawień początkowych i zapisanych, aby nie utracić istniejących ustawień i dodać nowe funkcje z aktualizacji;</li><li>Inne poprawki i usprawnienia kodu.</li></ul>',
                    close: 'Zamknij',
                    viewScript: 'Pokaż skrypt',
                    showDialog: 'Pokaż okno modalne',
                    title: {
                        general: 'Ogólne',
                        showOnRoadType: 'Wyświetl na segmentach typu:'
                    },
                    label: {
                        displaySpeeds: 'Wyświetlaj prędkości',
                        showNoSpeed: 'Pokaż na segmencie bez prędkości',
                        showOnRoundabout: 'Pokaż na rondzie',
                        showOnUnpaved: 'Pokaż na nieodkrytych drogach',
                        maxZoom: 'Renderuj do poziomu zoomu:',
                        toggleLayerShortcut: 'Przełącz przełącznik warstwy wyświetlania prędkości'
                    },
                    btn: {
                        updateSettingsTab: 'Zaktualizuj menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME załadowane i gotowe. Uruchamiam skrypt...',
                        waitingWme: 'Czekam, aż WME będzie gotowe...',
                        wmeReadyStartingPlugin: 'WME jest gotowe. Konfigurowanie warstwy niestandardowej...',
                        shortSleep: 'Czekam około 1 sekundy, aż wszystko się załaduje...',
                        updateMapDisplay: 'Aktualizuję wyświetlanie na mapie...',
                        maxZoomExceeded: 'Przekroczono maksymalny poziom zoomu. Prędkość nie będzie wyświetlana.',
                        noneSegment: 'Nie znaleziono segmentów.',
                        numSegmentsLoaded: 'Łączna liczba załadowanych segmentów:',
                        attributesNotFound: 'Nie można znaleźć atrybutów lub są one brakujące w segmencie',
                        disallowedSegment: 'Tego typu segment nie powinien być ładowany.',
                        invalidGeometry: 'Nieprawidłowa geometria w segmencie:',
                        updateMapDisplayFinished: 'Aktualizacja zakończona.',
                        shortCutDialogNotFound: 'Nie można znaleźć okna dialogowego skrótów klawiaturowych. Ponowna próba...',
                        houseNumberCheckboxNotFound: 'Nie znaleziono pola wyboru „Numery domów”. Próbuję ponownie...',
                        scriptsTabNotFound: 'Nie znaleziono zakładki skryptów. Próbuję ponownie...',
                        settingsTabAdded: 'Dodano kartę ustawień.',
                        speedLayer: 'Warstwa prędkości',
                        opacityUpdated: 'Przezroczystość ikon została ustawiona na',
                        updatingSettingsTab: 'Aktualizowanie zakładki ustawień...',
                        languageDefined: 'Języki zdefiniowane.',
                        checkingVersion: 'Sprawdzanie wersji wtyczki.',
                    }
                };
                
                break;

            case 'pt-BR':
                // Portuguese (Brazil)
                this.spdTranslations = {
                    name: 'Exibição de Velocidade',
                    settingTabName: 'Configurações de Exibição de Velocidade',
                    enabled: 'atiavada',
                    disabled: 'desativada',
                    zoomOut: 'Mais afastado',
                    zoomIn: 'Mais aproximado',
                    changelog: 'Registro de alterações',
                    changelogMessage: '<h6>Novidades:</h6><ul style="margin-bottom: 10px"><li>Agora é possível ocultar a velocidade em segmentos não pavimentados;</li><li>Agora é também é possível ativar e desativar a camada de velocidades utilizando as teclas de atalho: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (É possível visualizar a tecla de atalho no modal de atalhos).</li></ul><h6>Correções:</h6><ul><li>Ao desativar o swtich de camadas das vias, a camada das velocidades também será ocultada;</li><li>Nova forma de carregar as configurações iniciais e salvas, para não perder o que já está configurado e adicionar as novas funções de novas atualizações;</li><li>Outras correções e melhorias de código.</li></ul>',
                    close: 'Fechar',
                    viewScript: 'Ver script',
                    showDialog: 'Exibir modal',
                    title: {
                        general: 'Geral',
                        showOnRoadType: 'Exibir nos seguimentos do tipo:'
                    },
                    label: {
                        displaySpeeds: 'Exibir velocidades',
                        showNoSpeed: 'Exibir em seguimento sem velocidade',
                        showOnRoundabout: 'Exibir em rotatória',
                        showOnUnpaved: 'Exibir em via não pavimentada',
                        maxZoom: 'Renderizar até o zoom:',
                        toggleLayerShortcut: 'Alternar a camada de exibição da velocidade'
                    },
                    btn: {
                        updateSettingsTab: 'Atualizar menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME carregado e pronto. Iniciando script...',
                        waitingWme: 'Aguardando o WME estar pronto...',
                        wmeReadyStartingPlugin: 'WME está pronto. Configurando camada personalizada...',
                        shortSleep: 'Aguardando uns 1 segundo para tudo carregar...',
                        updateMapDisplay: 'Atualizando display no mapa...',
                        maxZoomExceeded: 'Zoom máximo excedido. Nenhuma velocidade será exibida.',
                        noneSegment: 'Nenhum segmento encontrado.',
                        numSegmentsLoaded: 'Total de segmentos carregados:',
                        attributesNotFound: 'Não foi possível encontrar os atributos ou estão ausentes no segmento',
                        disallowedSegment: 'Este tipo de seguimento não deve ser carregado.',
                        invalidGeometry: 'Geometria inválida no seguimento:',
                        updateMapDisplayFinished: 'Atualização concluída.',
                        shortCutDialogNotFound: 'Não foi possível encontrar o modal de atalhos do teclado. Tentando novamente...',
                        houseNumberCheckboxNotFound: 'O checkbox "Números das Casas" não foi encontrado. Tentando novamente...',
                        scriptsTabNotFound: 'Painel de scripts não encontrado. Tentando novamente...',
                        settingsTabAdded: 'Aba de configurações adicionada.',
                        speedLayer: 'Camada de velocidade',
                        opacityUpdated: 'Opacidade dos ícones ajustada para',
                        updatingSettingsTab: 'Atualizando aba de configurações...',
                        languageDefined: 'Idiomas definidos.',
                        checkingVersion: 'Verificando a versão do plugin.'
                    }
                };

                break;

            case 'pt-PT':
                // Portuguese (Portugal)
                this.spdTranslations = {
                    name: 'Exibição de Velocidade',
                    settingTabName: 'Configurações de Exibição de Velocidade',
                    enabled: 'ativado',
                    disabled: 'desativado',
                    zoomOut: 'Mais afastado',
                    zoomIn: 'Mais próximo',
                    changelog: 'Registro de alterações',
                    changelogMessage: '<h6>Novidades:</h6><ul style="margin-bottom: 10px"><li>Agora é possível ocultar a velocidade em segmentos não pavimentados;</li><li>Agora é também é possível ativar e desativar a camada de velocidades utilizando as teclas de atalho: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (É possível visualizar a tecla de atalho no modal de atalhos).</li></ul><h6>Correções:</h6><ul><li>Ao desativar o swtich de camadas das vias, a camada das velocidades também será ocultada;</li><li>Nova forma de carregar as configurações iniciais e salvas, para não perder o que já está configurado e adicionar as novas funções de novas atualizações;</li><li>Outras correções e melhorias de código.</li></ul>',
                    close: 'Fechar',
                    viewScript: 'Ver script',
                    showDialog: 'Exibir modal',
                    title: {
                        general: 'Geral',
                        showOnRoadType: 'Exibir nos segmentos do tipo:'
                    },
                    label: {
                        displaySpeeds: 'Exibir velocidades',
                        showNoSpeed: 'Exibir em segmentos sem velocidade',
                        showOnRoundabout: 'Exibir em rotatórias',
                        showOnUnpaved: 'Exibir em via não pavimentada',
                        maxZoom: 'Renderizar até o nível de zoom máximo:',
                        toggleLayerShortcut: 'Alternar o interruptor de camada para mostrar a velocidade'
                    },
                    btn: {
                        updateSettingsTab: 'Atualizar menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME carregado e pronto. Iniciando script...',
                        waitingWme: 'Aguardando o WME estar pronto...',
                        wmeReadyStartingPlugin: 'WME está pronto. Configurando camada personalizada...',
                        shortSleep: 'Aguardando cerca de 1 segundo para tudo carregar...',
                        updateMapDisplay: 'Atualizando a exibição no mapa...',
                        maxZoomExceeded: 'Zoom máximo excedido. Nenhuma velocidade será exibida.',
                        noneSegment: 'Nenhum segmento encontrado.',
                        numSegmentsLoaded: 'Total de segmentos carregados:',
                        attributesNotFound: 'Não foi possível encontrar os atributos ou estão ausentes no segmento',
                        disallowedSegment: 'Este tipo de segmento não deve ser carregado.',
                        invalidGeometry: 'Geometria inválida no segmento:',
                        updateMapDisplayFinished: 'Atualização concluída.',
                        shortCutDialogNotFound: 'Não foi possível encontrar a janela de atalhos do teclado. A tentar novamente...',
                        houseNumberCheckboxNotFound: 'A caixa de seleção "Números das Casas" não foi encontrada. Tentando novamente...',
                        scriptsTabNotFound: 'Painel de scripts não encontrado. Tentando novamente...',
                        settingsTabAdded: 'Aba de configurações adicionada.',
                        speedLayer: 'Camada de velocidade',
                        opacityUpdated: 'Opacidade dos ícones ajustada para',
                        updatingSettingsTab: 'Atualizando aba de configurações...',
                        languageDefined: 'Idioma definido.',
                        checkingVersion: 'Verificando a versão do plugin.'
                    }
                };
            
                break;

            case 'ro':
                // Romanian
                this.spdTranslations = {
                    name: 'Afisare viteza',
                    settingTabName: 'Setări Afisare Viteza',
                    enabled: 'activat',
                    disabled: 'dezactivat',
                    zoomOut: 'Zoom iesire',
                    zoomIn: 'Zoom intrare',
                    changelog: 'Jurnal modificari',
                    changelogMessage: '<h6>Nouătăți:</h6><ul style="margin-bottom: 10px"><li>Acum este posibil să ascundeți viteza pe segmentele neasfaltate;</li><li>Acum este, de asemenea, posibil să activați sau să dezactivați stratul de viteză folosind tastele de comandă rapidă: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (tastele de comandă rapidă pot fi vizualizate în fereastra de comenzi rapide).</li></ul><h6>Corecturi:</h6><ul><li>Când comutatorul de straturi de drumuri este dezactivat, stratul de viteză va fi, de asemenea, ascuns;</li><li>Nouă metodă de încărcare a setărilor inițiale și salvate pentru a nu pierde setările existente și pentru a adăuga noi funcții din actualizări;</li><li>Alte corecturi și îmbunătățiri ale codului.</li></ul>',
                    close: 'Închide',
                    viewScript: 'Vezi script',
                    showDialog: 'Afișează fereastra modală',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Afișează pe tipuri de drum:'
                    },
                    label: {
                        displaySpeeds: 'Afișează viteze',
                        showNoSpeed: 'Afișează pe segmente fără viteză',
                        showOnRoundabout: 'Afișează pe sensuri giratorii',
                        showOnUnpaved: 'Afișează pe drum nepavat',
                        maxZoom: 'Renderizează până la zoom maxim:',
                        toggleLayerShortcut: 'Comuta comutatorul de strat pentru a afișa viteza'
                    },
                    btn: {
                        updateSettingsTab: 'Actualizează meniul',
                    },
                    log: {
                        wmeReadyStartScript: 'WME încărcat și gata. Pornesc scriptul...',
                        waitingWme: 'Aștept ca WME să fie gata...',
                        wmeReadyStartingPlugin: 'WME este gata. Setez stratul personalizat...',
                        shortSleep: 'Aștept aproximativ 1 secundă pentru ca totul să se încarce...',
                        updateMapDisplay: 'Actualizez afișarea pe hartă...',
                        maxZoomExceeded: 'Zoom maxim depășit. Viteza nu va fi afișată.',
                        noneSegment: 'Nu au fost găsite segmente.',
                        numSegmentsLoaded: 'Număr total de segmente încărcate:',
                        attributesNotFound: 'Atributele nu au fost găsite sau lipsesc în segment',
                        disallowedSegment: 'Acest tip de segment nu ar trebui să fie încărcat.',
                        invalidGeometry: 'Geometrie invalidă pe segment:',
                        updateMapDisplayFinished: 'Actualizarea a fost finalizată.',
                        shortCutDialogNotFound: 'Nu s-a putut găsi caseta de dialog a comenzilor rapide de la tastatură. Încerc din nou...',
                        houseNumberCheckboxNotFound: 'Checkbox-ul "Numerele caselor" nu a fost găsit. Încerc din nou...',
                        scriptsTabNotFound: 'Tab-ul de scripturi nu a fost găsit. Încerc din nou...',
                        settingsTabAdded: 'Tab-ul de setări a fost adăugat.',
                        speedLayer: 'Strat de viteză',
                        opacityUpdated: 'Opacitatea iconițelor a fost setată la',
                        updatingSettingsTab: 'Actualizare tab de setări...',
                        languageDefined: 'Limbi definite.',
                        checkingVersion: 'Verificare versiune plugin.'
                    }
                };
            
                break;

            case 'ru':
                // Russian
                this.spdTranslations = {
                    name: 'Отображение скорости',
                    settingTabName: 'Настройки отображения скорости',
                    enabled: 'включено',
                    disabled: 'выключено',
                    zoomOut: 'Отдалить',
                    zoomIn: 'Приблизить',
                    changelog: 'Журнал изменений',
                    changelogMessage: '<h6>Новые функции:</h6><ul style="margin-bottom: 10px"><li>Теперь можно скрывать скорость на непокрытых участках;</li><li>Теперь также можно включать или выключать слой скорости с помощью сочетаний клавиш: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Сочетания клавиш можно увидеть в модальном окне сочетаний клавиш).</li></ul><h6>Исправления:</h6><ul><li>Когда переключатель слоев дорог выключен, слой скорости также будет скрыт;</li><li>Новый способ загрузки начальных и сохраненных настроек, чтобы не потерять существующие настройки и добавить новые функции с обновлениями;</li><li>Другие исправления и улучшения кода.</li></ul>',
                    close: 'Закрыть',
                    viewScript: 'Просмотреть скрипт',
                    showDialog: 'Показать модальное окно',
                    title: {
                        general: 'Общие',
                        showOnRoadType: 'Отображать на сегментах типа:'
                    },
                    label: {
                        displaySpeeds: 'Отображать скорости',
                        showNoSpeed: 'Показывать на сегменте без скорости',
                        showOnRoundabout: 'Показывать на круговом движении',
                        showOnUnpaved: 'Показать на грунтовой дороге',
                        maxZoom: 'Отображать до уровня зума:',
                        toggleLayerShortcut: 'Переключить переключатель слоя для отображения скорости'
                    },
                    btn: {
                        updateSettingsTab: 'Обновить меню',
                    },
                    log: {
                        wmeReadyStartScript: 'WME загружен и готов. Запуск скрипта...',
                        waitingWme: 'Ожидание готовности WME...',
                        wmeReadyStartingPlugin: 'WME готово. Настройка пользовательского слоя...',
                        shortSleep: 'Ожидание около 1 секунды, пока все загрузится...',
                        updateMapDisplay: 'Обновление отображения на карте...',
                        maxZoomExceeded: 'Превышен максимальный уровень зума. Скорость отображаться не будет.',
                        noneSegment: 'Сегменты не найдены.',
                        numSegmentsLoaded: 'Общее количество загруженных сегментов:',
                        attributesNotFound: 'Не удалось найти атрибуты или они отсутствуют в сегменте',
                        disallowedSegment: 'Этот тип сегмента не должен загружаться.',
                        invalidGeometry: 'Неверная геометрия в сегменте:',
                        updateMapDisplayFinished: 'Обновление завершено.',
                        shortCutDialogNotFound: 'Не удалось найти диалоговое окно клавиш быстрого доступа. Повторная попытка...',
                        houseNumberCheckboxNotFound: 'Не найден флажок "Номера домов". Попробую снова...',
                        scriptsTabNotFound: 'Вкладка скриптов не найдена. Попробую снова...',
                        settingsTabAdded: 'Вкладка настроек добавлена.',
                        speedLayer: 'Слой скорости',
                        opacityUpdated: 'Прозрачность значков обновлена до',
                        updatingSettingsTab: 'Обновление вкладки настроек...',
                        languageDefined: 'Языки определены.',
                        checkingVersion: 'Проверка версии плагина.',
                    }
                };
                
                break;
                
            case 'sk':
                // Slovak
                this.spdTranslations = {
                    name: 'Zobrazenie rýchlosti',
                    settingTabName: 'Nastavenia zobrazenia rýchlosti',
                    enabled: 'povolené',
                    disabled: 'zakázané',
                    zoomOut: 'Oddialiť',
                    zoomIn: 'Priblížiť',
                    changelog: 'Záznam zmien',
                    changelogMessage: '<h6>Novinky:</h6><ul style="margin-bottom: 10px"><li>Teraz je možné skryť rýchlosť na nespevnených segmentoch;</li><li>Teraz je tiež možné aktivovať a deaktivovať vrstvu rýchlosti pomocou klávesových skratiek: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Klávesové skratky môžete zobraziť v okne klávesových skratiek).</li></ul><h6>Opravy:</h6><ul><li>Po vypnutí prepínača vrstiev ciest bude vrstva rýchlosti tiež skrytá;</li><li>Nový spôsob načítania počiatočných a uložených nastavení, aby sa nezmizli existujúce nastavenia a pridali sa nové funkcie z aktualizácií;</li><li>Ďalšie opravy a vylepšenia kódu.</li></ul>',
                    close: 'Zavrieť',
                    viewScript: 'Prezrieť skript',
                    showDialog: 'Zobraziť modálne okno',
                    title: {
                        general: 'Všeobecné',
                        showOnRoadType: 'Zobraziť na type cesty:'
                    },
                    label: {
                        displaySpeeds: 'Zobraziť rýchlosti',
                        showNoSpeed: 'Zobraziť na segmentoch bez rýchlosti',
                        showOnRoundabout: 'Zobraziť na okružnej križovatke',
                        showOnUnpaved: 'Zobraziť na nespevnenej ceste',
                        maxZoom: 'Zobraziť až po maximálne priblíženie:',
                        toggleLayerShortcut: 'Prepínač vrstvy pre zobrazenie rýchlosti'
                    },
                    btn: {
                        updateSettingsTab: 'Aktualizovať menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME načítané a pripravené. Spúšťam skript...',
                        waitingWme: 'Čakám, kým bude WME pripravené...',
                        wmeReadyStartingPlugin: 'WME je pripravené. Nastavujem vlastnú vrstvu...',
                        shortSleep: 'Čakám približne 1 sekundu, kým sa všetko načíta...',
                        updateMapDisplay: 'Aktualizujem zobrazenie mapy...',
                        maxZoomExceeded: 'Maximálne priblíženie bolo prekročené. Rýchlosť sa nebude zobrazovať.',
                        noneSegment: 'Neboli nájdené žiadne segmenty.',
                        numSegmentsLoaded: 'Celkový počet načítaných segmentov:',
                        attributesNotFound: 'Atribúty neboli nájdené alebo chýbajú v segmente',
                        disallowedSegment: 'Tento typ segmentu by nemal byť načítaný.',
                        invalidGeometry: 'Neplatná geometria v segmente:',
                        updateMapDisplayFinished: 'Aktualizácia dokončená.',
                        shortCutDialogNotFound: 'Dialóg klávesových skratiek sa nepodarilo nájsť. Skúšam znova...',
                        houseNumberCheckboxNotFound: 'Zaškrtávacie políčko "Čísla domov" nebolo nájdené. Pokúšam sa znova...',
                        scriptsTabNotFound: 'Záložka skriptov nebola nájdená. Pokúšam sa znova...',
                        settingsTabAdded: 'Pridaná záložka nastavení.',
                        speedLayer: 'Vrstva rýchlosti',
                        opacityUpdated: 'Priehľadnosť ikon nastavená na',
                        updatingSettingsTab: 'Aktualizujem záložku nastavení...',
                        languageDefined: 'Jazyky definované.',
                        checkingVersion: 'Kontrola verzie pluginu.'
                    }
                };
            
                break;

            case 'sl':
                // Slovenian
                this.spdTranslations = {
                    name: 'Prikaz hitrosti',
                    settingTabName: 'Nastavitve prikaza hitrosti',
                    enabled: 'omogočeno',
                    disabled: 'onemogočeno',
                    zoomOut: 'Oddaljiti',
                    zoomIn: 'Povečati',
                    changelog: 'Zapis sprememb',
                    changelogMessage: '<h6>Novosti:</h6><ul style="margin-bottom: 10px"><li>Zdaj je mogoče skriti hitrost na neasfaltiranih segmentih;</li><li>Zdaj lahko tudi vklopite in izklopite plast hitrosti z uporabo bližnjic na tipkovnici: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Bližnjice si lahko ogledate v oknu za bližnjice na tipkovnici).</li></ul><h6>Popravki:</h6><ul><li>Ko izklopite preklopnik plasti cest, bo plast hitrosti prav tako skrita;</li><li>Nova metoda nalaganja začetnih in shranjenih nastavitev, da ne izgubite obstoječih nastavitev in dodate nove funkcionalnosti z novimi posodobitvami;</li><li>Drugi popravki in izboljšave kode.</li></ul>',
                    close: 'Zapri',
                    viewScript: 'Ogledaj skript',
                    showDialog: 'Prikaži modalno okno',
                    title: {
                        general: 'Splošno',
                        showOnRoadType: 'Prikaz na segmentih tipa:'
                    },
                    label: {
                        displaySpeeds: 'Prikaz hitrosti',
                        showNoSpeed: 'Prikaz na segmentih brez hitrosti',
                        showOnRoundabout: 'Prikaz na krožišču',
                        showOnUnpaved: 'Prikaži na neutrjeni cesti',
                        maxZoom: 'Upodabljanje do največje stopnje povečave:',
                        toggleLayerShortcut: 'Preklopite preklopnik plasti za prikaz hitrosti'
                    },
                    btn: {
                        updateSettingsTab: 'Posodobi meni',
                    },
                    log: {
                        wmeReadyStartScript: 'WME je naložen in pripravljen. Začenjam skripto...',
                        waitingWme: 'Čakam, da se WME pripravi...',
                        wmeReadyStartingPlugin: 'WME je pripravljen. Nastavljam prilagojen sloj...',
                        shortSleep: 'Čakam približno 1 sekundo, da se vse naloži...',
                        updateMapDisplay: 'Posodabljam prikaz na zemljevidu...',
                        maxZoomExceeded: 'Maksimalna stopnja povečave je bila presežena. Hitrost ne bo prikazana.',
                        noneSegment: 'Noben segment ni bil najden.',
                        numSegmentsLoaded: 'Skupno število naloženih segmentov:',
                        attributesNotFound: 'Atributi niso bili najdeni ali manjkajo na segmentu',
                        disallowedSegment: 'Ta vrsta segmenta ne sme biti naložena.',
                        invalidGeometry: 'Neveljavna geometrija na segmentu:',
                        updateMapDisplayFinished: 'Posodobitev zaključena.',
                        shortCutDialogNotFound: 'Ni bilo mogoče najti pogovornega okna bližnjic na tipkovnici. Poskušam znova...',
                        houseNumberCheckboxNotFound: 'Polje za označevanje "Hišne številke" ni bilo najdeno. Poskušam znova...',
                        scriptsTabNotFound: 'Zavihek skriptov ni bil najden. Poskušam znova...',
                        settingsTabAdded: 'Zavihek nastavitev je bil dodan.',
                        speedLayer: 'Sloj hitrosti',
                        opacityUpdated: 'Opacnost ikon je bila posodobljena na',
                        updatingSettingsTab: 'Posodabljam zavihek nastavitev...',
                        languageDefined: 'Jezik je bil določen.',
                        checkingVersion: 'Preverjam različico vtičnika.'
                    }
                };
            
                break;
            
            case 'sv':
                // Swedish
                this.spdTranslations = {
                    name: 'Hastighetsvisning',
                    settingTabName: 'Inställningar för hastighetsvisning',
                    enabled: 'aktiverad',
                    disabled: 'inaktiverad',
                    zoomOut: 'Zooma ut',
                    zoomIn: 'Zooma in',
                    changelog: 'Ändringslogg',
                    changelogMessage: '<h6>Nyheter:</h6><ul style="margin-bottom: 10px"><li>Det går nu att dölja hastigheten på oslipade segment;</li><li>Det går nu också att aktivera och avaktivera hastighetslagret med hjälp av kortkommandon: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Du kan se kortkommandona i snabbkommando-fönstret).</li></ul><h6>Bugfixar:</h6><ul><li>När vägskiktsväxlaren är avstängd, kommer hastighetslagret också att döljas;</li><li>Ny metod för att ladda in initiala och sparade inställningar så att inga befintliga inställningar förloras och nya funktioner från uppdateringar läggs till;</li><li>Andra buggfixar och kodförbättringar.</li></ul>',
                    close: 'Stäng',
                    viewScript: 'Visa skript',
                    showDialog: 'Visa modal',
                    title: {
                        general: 'Allmänt',
                        showOnRoadType: 'Visa på segment av typen:'
                    },
                    label: {
                        displaySpeeds: 'Visa hastigheter',
                        showNoSpeed: 'Visa på segment utan hastighet',
                        showOnRoundabout: 'Visa på rondell',
                        showOnUnpaved: 'Visa på oändliga väggen',
                        maxZoom: 'Rendera upp till zoom-nivå:',
                        toggleLayerShortcut: 'Växla lageromkopplare för att visa hastighet'
                    },
                    btn: {
                        updateSettingsTab: 'Uppdatera meny',
                    },
                    log: {
                        wmeReadyStartScript: 'WME laddad och redo. Startar skriptet...',
                        waitingWme: 'Väntar på att WME ska bli redo...',
                        wmeReadyStartingPlugin: 'WME är redo. Konfigurerar anpassad lager...',
                        shortSleep: 'Väntar cirka 1 sekund innan allt laddas...',
                        updateMapDisplay: 'Uppdaterar visningen på kartan...',
                        maxZoomExceeded: 'Maximal zoomnivå överskriden. Hastighet visas inte.',
                        noneSegment: 'Inga segment hittades.',
                        numSegmentsLoaded: 'Totalt antal laddade segment:',
                        attributesNotFound: 'Kunde inte hitta attribut eller de saknas i segmentet',
                        disallowedSegment: 'Den här typen av segment ska inte laddas.',
                        invalidGeometry: 'Ogiltig geometri i segmentet:',
                        updateMapDisplayFinished: 'Uppdatering slutförd.',
                        shortCutDialogNotFound: 'Nije moguće pronaći dijalog prečica na tastaturi. Pokušavam ponovo...',
                        houseNumberCheckboxNotFound: 'Checkboxen "Husnummer" hittades inte. Försöker igen...',
                        scriptsTabNotFound: 'Fliken för skript hittades inte. Försöker igen...',
                        settingsTabAdded: 'Inställningsflik tillagd.',
                        speedLayer: 'Hastighetslager',
                        opacityUpdated: 'Opaciteten för ikoner har uppdaterats till',
                        updatingSettingsTab: 'Uppdaterar inställningsfliken...',
                        languageDefined: 'Språk definierade.',
                        checkingVersion: 'Kontrollerar plugin-version.',
                    }
                };
                
                break;

            case 'th':
                // Thai
                this.spdTranslations = {
                    name: 'แสดงความเร็ว',
                    settingTabName: 'การตั้งค่าแสดงความเร็ว',
                    enabled: 'เปิดใช้งาน',
                    disabled: 'ปิดการใช้งาน',
                    zoomOut: 'ย่อออก',
                    zoomIn: 'ขยายเข้า',
                    changelog: 'บันทึกการเปลี่ยนแปลง',
                    changelogMessage: '<h6>สิ่งใหม่:</h6><ul style="margin-bottom: 10px"><li>ตอนนี้สามารถซ่อนความเร็วในช่วงถนนที่ไม่ได้ปูได้;</li><li>ตอนนี้ยังสามารถเปิดหรือปิดชั้นความเร็วโดยใช้ปุ่มลัด: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (สามารถดูปุ่มลัดได้ในหน้าต่างปุ่มลัด).</li></ul><h6>การแก้ไข:</h6><ul><li>เมื่อปิดสวิตช์ชั้นถนนแล้ว ชั้นความเร็วก็จะถูกซ่อนเช่นกัน;</li><li>วิธีใหม่ในการโหลดการตั้งค่าเริ่มต้นและที่บันทึกไว้เพื่อไม่ให้การตั้งค่าที่มีอยู่หายไปและเพิ่มฟังก์ชันใหม่จากการอัปเดต;</li><li>การแก้ไขและการปรับปรุงโค้ดอื่น ๆ.</li></ul>',
                    close: 'ปิด',
                    viewScript: 'ดูสคริปต์',
                    showDialog: 'แสดงโมดอล',
                    title: {
                        general: 'ทั่วไป',
                        showOnRoadType: 'แสดงบนประเภทถนน:'
                    },
                    label: {
                        displaySpeeds: 'แสดงความเร็ว',
                        showNoSpeed: 'แสดงในช่วงที่ไม่มีความเร็ว',
                        showOnRoundabout: 'แสดงในวงเวียน',
                        showOnUnpaved: 'แสดงบนถนนที่ไม่ได้ลาดยาง',
                        maxZoom: 'แสดงจนถึงระดับซูมสูงสุด:',
                        toggleLayerShortcut: 'สลับตัวเลือกเลเยอร์เพื่อแสดงความเร็ว'
                    },
                    btn: {
                        updateSettingsTab: 'อัปเดตเมนู',
                    },
                    log: {
                        wmeReadyStartScript: 'WME โหลดเสร็จแล้วและพร้อมใช้งาน กำลังเริ่มสคริปต์...',
                        waitingWme: 'รอให้ WME พร้อมใช้งาน...',
                        wmeReadyStartingPlugin: 'WME พร้อมแล้ว กำลังตั้งค่าชั้นข้อมูลที่กำหนดเอง...',
                        shortSleep: 'รอประมาณ 1 วินาทีให้ทุกอย่างโหลด...',
                        updateMapDisplay: 'กำลังอัปเดตการแสดงผลแผนที่...',
                        maxZoomExceeded: 'ระดับการซูมสูงสุดเกินขีดจำกัด ความเร็วจะไม่แสดง',
                        noneSegment: 'ไม่พบช่วงข้อมูลใด ๆ',
                        numSegmentsLoaded: 'จำนวนช่วงข้อมูลที่โหลดทั้งหมด:',
                        attributesNotFound: 'ไม่พบหรือขาดคุณสมบัติในช่วงข้อมูล',
                        disallowedSegment: 'ไม่ควรโหลดประเภทช่วงข้อมูลนี้',
                        invalidGeometry: 'รูปทรงไม่ถูกต้องในช่วงข้อมูล:',
                        updateMapDisplayFinished: 'การอัปเดตเสร็จสิ้น',
                        shortCutDialogNotFound: 'ไม่พบกล่องโต้ตอบทางลัดของแป้นพิมพ์ กำลังลองอีกครั้ง...',
                        houseNumberCheckboxNotFound: 'ไม่พบช่องทำเครื่องหมาย "หมายเลขบ้าน" กำลังพยายามอีกครั้ง...',
                        scriptsTabNotFound: 'ไม่พบแท็บสคริปต์ กำลังพยายามอีกครั้ง...',
                        settingsTabAdded: 'เพิ่มแท็บการตั้งค่าแล้ว',
                        speedLayer: 'ชั้นข้อมูลความเร็ว',
                        opacityUpdated: 'อัปเดตความโปร่งใสของไอคอนแล้ว:',
                        updatingSettingsTab: 'กำลังอัปเดตแท็บการตั้งค่า...',
                        languageDefined: 'กำหนดภาษาแล้ว',
                        checkingVersion: 'กำลังตรวจสอบเวอร์ชันของปลั๊กอิน'
                    }
                };
            
                break;

            case 'tr':
                // Turkish
                this.spdTranslations = {
                    name: 'Hız Görüntüleme',
                    settingTabName: 'Hız Görüntüleme Ayarları',
                    enabled: 'etkin',
                    disabled: 'devre dışı',
                    zoomOut: 'Daha uzak',
                    zoomIn: 'Daha yakın',
                    changelog: 'Değişiklik Kaydı',
                    changelogMessage: '<h6>Yeni Özellikler:</h6><ul style="margin-bottom: 10px"><li>Artık asfaltlanmamış segmentlerde hız gizlenebiliyor;</li><li>Artık hız katmanını açmak veya kapatmak için kısayol tuşlarını kullanabilirsiniz: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Kısayol tuşlarını kısayol modunda görebilirsiniz).</li></ul><h6>Hata Düzeltmeleri:</h6><ul><li>Yol katmanları anahtarı kapalı olduğunda hız katmanı da gizlenecektir;</li><li>Var olan ayarların kaybolmaması ve yeni güncellemelerle gelen yeni özelliklerin eklenmesi için başlangıç ve kaydedilen ayarları yüklemenin yeni bir yolu;</li><li>Diğer hata düzeltmeleri ve kod iyileştirmeleri.</li></ul>',
                    close: 'Kapat',
                    viewScript: 'Kodu gör',
                    showDialog: 'Modalı Göster',
                    title: {
                        general: 'Genel',
                        showOnRoadType: 'Şu yol türlerinde göster:'
                    },
                    label: {
                        displaySpeeds: 'Hızları göster',
                        showNoSpeed: 'Hızsız segmentlerde göster',
                        showOnRoundabout: 'Dönel kavşaklarda göster',
                        showOnUnpaved: 'Asfaltsız yolda göster',
                        maxZoom: 'Maksimum yakınlaştırma seviyesine kadar renderle:',
                        toggleLayerShortcut: 'Katman anahtarı hız görüntüsünü değiştirme'
                    },
                    btn: {
                        updateSettingsTab: 'Menüyü güncelle',
                    },
                    log: {
                        wmeReadyStartScript: 'WME yüklendi ve hazır. Script başlatılıyor...',
                        waitingWme: 'WME\'nin hazır olmasını bekliyorum...',
                        wmeReadyStartingPlugin: 'WME hazır. Özel katman kuruluyor...',
                        shortSleep: 'Her şeyin yüklenmesi için yaklaşık 1 saniye bekliyorum...',
                        updateMapDisplay: 'Harita görüntüsünü güncelliyorum...',
                        maxZoomExceeded: 'Maksimum yakınlaştırma aşılabilir. Hız gösterilmeyecek.',
                        noneSegment: 'Hiçbir segment bulunamadı.',
                        numSegmentsLoaded: 'Yüklenen segmentlerin toplam sayısı:',
                        attributesNotFound: 'Atributlar bulunamadı veya segmentte eksik',
                        disallowedSegment: 'Bu tür segmentler yüklenmemelidir.',
                        invalidGeometry: 'Segmentte geçersiz geometri:',
                        updateMapDisplayFinished: 'Güncelleme tamamlandı.',
                        shortCutDialogNotFound: 'Klavye kısayolları iletişim kutusu bulunamadı. Tekrar deneniyor...',
                        houseNumberCheckboxNotFound: '"Ev Numaraları" onay kutusu bulunamadı. Yeniden deneniyor...',
                        scriptsTabNotFound: 'Script sekmesi bulunamadı. Yeniden deneniyor...',
                        settingsTabAdded: 'Ayarlar sekmesi eklendi.',
                        speedLayer: 'Hız Katmanı',
                        opacityUpdated: 'Simge opaklığı şu şekilde ayarlandı:',
                        updatingSettingsTab: 'Ayarlar sekmesi güncelleniyor...',
                        languageDefined: 'Diller tanımlandı.',
                        checkingVersion: 'Plugin sürümü kontrol ediliyor.'
                    }
                };
            
                break;

            case 'uk':
                // Ukrainian
                this.spdTranslations = {
                    name: 'Відображення швидкості',
                    settingTabName: 'Налаштування відображення швидкості',
                    enabled: 'увімкнено',
                    disabled: 'вимкнено',
                    zoomOut: 'Віддалити',
                    zoomIn: 'Приблизити',
                    changelog: 'Журнал змін',
                    changelogMessage: '<h6>Нові можливості:</h6><ul style="margin-bottom: 10px"><li>Тепер можна приховувати швидкість на непокритих сегментах;</li><li>Тепер також можна увімкнути або вимкнути шар швидкості за допомогою гарячих клавіш: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Гарячі клавіші можна переглянути в модальному вікні гарячих клавіш).</li></ul><h6>Виправлення:</h6><ul><li>Коли вимкнено перемикач шарів доріг, шар швидкості також буде прихований;</li><li>Нова методика завантаження початкових і збережених налаштувань, щоб не втратити існуючі налаштування та додати нові функції з оновлень;</li><li>Інші виправлення та покращення коду.</li></ul>',
                    close: 'Закрити',
                    viewScript: 'Переглянути скрипт',
                    showDialog: 'Показати модальне вікно',
                    title: {
                        general: 'Загальні',
                        showOnRoadType: 'Відображати на сегментах типу:'
                    },
                    label: {
                        displaySpeeds: 'Відображати швидкості',
                        showNoSpeed: 'Показувати на сегменті без швидкості',
                        showOnRoundabout: 'Показувати на круговому русі',
                        showOnUnpaved: 'Показати на ґрунтовій дорозі',
                        maxZoom: 'Рендерити до рівня масштабування:',
                        toggleLayerShortcut: 'Перемикач шару для відображення швидкості'
                    },
                    btn: {
                        updateSettingsTab: 'Оновити меню',
                    },
                    log: {
                        wmeReadyStartScript: 'WME завантажено та готове. Запуск скрипта...',
                        waitingWme: 'Очікуємо, поки WME стане готовим...',
                        wmeReadyStartingPlugin: 'WME готове. Налаштування кастомного шару...',
                        shortSleep: 'Чекаємо близько 1 секунди, поки все завантажиться...',
                        updateMapDisplay: 'Оновлення відображення на карті...',
                        maxZoomExceeded: 'Максимальний рівень масштабування перевищено. Швидкість не буде відображена.',
                        noneSegment: 'Сегменти не знайдено.',
                        numSegmentsLoaded: 'Загальна кількість завантажених сегментів:',
                        attributesNotFound: 'Не вдалося знайти атрибути або вони відсутні в сегменті',
                        disallowedSegment: 'Цей тип сегмента не повинен завантажуватися.',
                        invalidGeometry: 'Невірна геометрія в сегменті:',
                        updateMapDisplayFinished: 'Оновлення завершено.',
                        shortCutDialogNotFound: 'Не вдалося знайти діалогове вікно комбінацій клавіш. Спроба знову...',
                        houseNumberCheckboxNotFound: 'Не знайдено чекбокс "Номери будинків". Спробую ще раз...',
                        scriptsTabNotFound: 'Не знайдена вкладка скриптів. Спробую ще раз...',
                        settingsTabAdded: 'Вкладку налаштувань додано.',
                        speedLayer: 'Шар швидкості',
                        opacityUpdated: 'Прозорість значків оновлено до',
                        updatingSettingsTab: 'Оновлення вкладки налаштувань...',
                        languageDefined: 'Мови визначено.',
                        checkingVersion: 'Перевірка версії плагіна.',
                    }
                };
                
                break;

            case 'vi':
                // Vietnamese
                this.spdTranslations = {
                    name: 'Hiển thị Tốc độ',
                    settingTabName: 'Cài đặt Hiển thị Tốc độ',
                    enabled: 'đã bật',
                    disabled: 'đã tắt',
                    zoomOut: 'Thu nhỏ',
                    zoomIn: 'Phóng to',
                    changelog: 'Lịch sử thay đổi',
                    changelogMessage: '<h6>Tính năng mới:</h6><ul style="margin-bottom: 10px"><li>Bây giờ có thể ẩn tốc độ trên các đoạn đường chưa được trải nhựa;</li><li>Bây giờ cũng có thể kích hoạt hoặc vô hiệu hóa lớp tốc độ bằng phím tắt: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (Các phím tắt có thể xem trong cửa sổ phím tắt).</li></ul><h6>Sửa lỗi:</h6><ul><li>Khi công tắc lớp đường bị tắt, lớp tốc độ cũng sẽ bị ẩn;</li><li>Phương pháp mới để tải các cài đặt ban đầu và đã lưu để không làm mất cài đặt hiện tại và thêm các chức năng mới từ các bản cập nhật;</li><li>Các bản sửa lỗi và cải tiến mã khác.</li></ul>',
                    close: 'Đóng',
                    viewScript: 'Xem Script',
                    showDialog: 'Hiển thị hộp thoại',
                    title: {
                        general: 'Chung',
                        showOnRoadType: 'Hiển thị trên các đoạn đường loại:'
                    },
                    label: {
                        displaySpeeds: 'Hiển thị tốc độ',
                        showNoSpeed: 'Hiển thị trên đoạn đường không có tốc độ',
                        showOnRoundabout: 'Hiển thị trên vòng xuyến',
                        showOnUnpaved: 'Hiển thị trên đường chưa lát',
                        maxZoom: 'Render tới mức thu phóng tối đa:',
                        toggleLayerShortcut: 'Chuyển đổi công tắc lớp hiển thị tốc độ'
                    },
                    btn: {
                        updateSettingsTab: 'Cập nhật menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME đã tải xong và sẵn sàng. Bắt đầu chạy script...',
                        waitingWme: 'Đang chờ WME sẵn sàng...',
                        wmeReadyStartingPlugin: 'WME đã sẵn sàng. Đang cấu hình lớp tùy chỉnh...',
                        shortSleep: 'Đang chờ khoảng 1 giây để mọi thứ tải xong...',
                        updateMapDisplay: 'Đang cập nhật hiển thị trên bản đồ...',
                        maxZoomExceeded: 'Vượt quá mức thu phóng tối đa. Không có tốc độ nào sẽ được hiển thị.',
                        noneSegment: 'Không tìm thấy đoạn đường nào.',
                        numSegmentsLoaded: 'Tổng số đoạn đường đã tải:',
                        attributesNotFound: 'Không thể tìm thấy các thuộc tính hoặc chúng đang thiếu trên đoạn đường',
                        disallowedSegment: 'Đoạn đường loại này không nên được tải.',
                        invalidGeometry: 'Hình học không hợp lệ trên đoạn đường:',
                        updateMapDisplayFinished: 'Cập nhật hoàn tất.',
                        shortCutDialogNotFound: 'Không tìm thấy hộp thoại phím tắt. Đang thử lại...',
                        houseNumberCheckboxNotFound: 'Không tìm thấy checkbox "Số nhà". Đang thử lại...',
                        scriptsTabNotFound: 'Không tìm thấy tab scripts. Đang thử lại...',
                        settingsTabAdded: 'Đã thêm tab cài đặt.',
                        speedLayer: 'Lớp tốc độ',
                        opacityUpdated: 'Độ mờ của các biểu tượng đã được cập nhật thành',
                        updatingSettingsTab: 'Đang cập nhật tab cài đặt...',
                        languageDefined: 'Ngôn ngữ đã được xác định.',
                        checkingVersion: 'Đang kiểm tra phiên bản plugin.'
                    }
                };
            
                break;

            case 'zh':
                // Chinese
                this.spdTranslations = {
                    name: '速度显示',
                    settingTabName: '速度显示设置',
                    enabled: '启用',
                    disabled: '禁用',
                    zoomOut: '缩小',
                    zoomIn: '放大',
                    changelog: '更新日志',
                    changelogMessage: '<h6>新增功能:</h6><ul style="margin-bottom: 10px"><li>现在可以在未铺设的路段隐藏速度;</li><li>现在也可以使用快捷键启用或禁用速度层: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (快捷键可以在快捷键模态中查看).</li></ul><h6>修复:</h6><ul><li>当道路层开关关闭时,速度层也将被隐藏;</li><li>加载初始和已保存设置的新方法,以便不会丢失现有设置,并添加新的更新功能;</li><li>其他错误修复和代码改进。</li></ul>',
                    close: '关闭',
                    viewScript: '查看脚本',
                    showDialog: '显示模态框',
                    title: {
                        general: '一般',
                        showOnRoadType: '显示在以下道路类型:'
                    },
                    label: {
                        displaySpeeds: '显示速度',
                        showNoSpeed: '在无速度的段落中显示',
                        showOnRoundabout: '在环形交叉口显示',
                        showOnUnpaved: '在未铺砌道路上显示',
                        maxZoom: '渲染直到最大缩放级别:',
                        toggleLayerShortcut: '切换图层切换器速度显示'
                    },
                    btn: {
                        updateSettingsTab: '更新菜单',
                    },
                    log: {
                        wmeReadyStartScript: 'WME已加载并准备就绪,开始脚本...',
                        waitingWme: '等待WME准备好...',
                        wmeReadyStartingPlugin: 'WME已准备好,开始设置自定义层...',
                        shortSleep: '等待大约1秒钟,等待所有内容加载...',
                        updateMapDisplay: '更新地图显示...',
                        maxZoomExceeded: '已超出最大缩放级别,无法显示速度。',
                        noneSegment: '没有找到任何段落。',
                        numSegmentsLoaded: '已加载的段落总数:',
                        attributesNotFound: '无法找到属性或该段落缺失',
                        disallowedSegment: '不应加载此类型的段落。',
                        invalidGeometry: '段落中有无效的几何形状:',
                        updateMapDisplayFinished: '更新完成。',
                        shortCutDialogNotFound: '无法找到键盘快捷键对话框。正在重试...',
                        houseNumberCheckboxNotFound: '未找到“房屋号码”复选框,正在重试...',
                        scriptsTabNotFound: '未找到脚本标签,正在重试...',
                        settingsTabAdded: '已添加设置标签。',
                        speedLayer: '速度层',
                        opacityUpdated: '图标透明度已设置为',
                        updatingSettingsTab: '正在更新设置标签...',
                        languageDefined: '已定义语言。',
                        checkingVersion: '正在检查插件版本。'
                    }
                };
            
                break;

            case 'zh-TW':
                // Traditional Chinese
                this.spdTranslations = {
                    name: '速度顯示',
                    settingTabName: '速度顯示設定',
                    enabled: '啟用',
                    disabled: '停用',
                    zoomOut: '縮小',
                    zoomIn: '放大',
                    changelog: '更新記錄',
                    changelogMessage: '<h6>新增功能:</h6><ul style="margin-bottom: 10px"><li>現在可以在未鋪設的路段隱藏速度;</li><li>現在也可以使用快捷鍵開啟或關閉速度圖層: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (您可以在快捷鍵模態中查看快捷鍵).</li></ul><h6>修正:</h6><ul><li>當道路圖層開關被關閉時,速度圖層也會被隱藏;</li><li>載入初始設置和已保存設置的新方法,這樣就不會丟失現有設置,並且可以添加新更新的功能;</li><li>其他錯誤修正和代碼改進。</li></ul>',
                    close: '關閉',
                    viewScript: '查看腳本',
                    showDialog: '顯示模態窗口',
                    title: {
                        general: '一般',
                        showOnRoadType: '顯示在以下路段類型:'
                    },
                    label: {
                        displaySpeeds: '顯示速度',
                        showNoSpeed: '顯示在無速度的路段',
                        showOnRoundabout: '顯示在環形交叉路口',
                        showOnUnpaved: '在未鋪設道路上顯示',
                        maxZoom: '渲染至最大縮放層級:',
                        toggleLayerShortcut: '切換圖層切換器速度顯示'
                    },
                    btn: {
                        updateSettingsTab: '更新選單',
                    },
                    log: {
                        wmeReadyStartScript: 'WME 已加載並準備好。開始執行腳本...',
                        waitingWme: '等待 WME 準備好...',
                        wmeReadyStartingPlugin: 'WME 已準備好。設定自訂圖層...',
                        shortSleep: '等待約 1 秒讓所有內容加載...',
                        updateMapDisplay: '更新地圖顯示...',
                        maxZoomExceeded: '已超過最大縮放層級。將不顯示速度。',
                        noneSegment: '未找到任何路段。',
                        numSegmentsLoaded: '已加載的路段總數:',
                        attributesNotFound: '未能找到屬性或屬性在該路段中缺失',
                        disallowedSegment: '此類型路段不應加載。',
                        invalidGeometry: '該路段的幾何圖形無效:',
                        updateMapDisplayFinished: '更新完成。',
                        shortCutDialogNotFound: '找不到鍵盤快捷鍵對話框。正在重試...',
                        houseNumberCheckboxNotFound: '未找到「門牌號碼」選項框。正在重新嘗試...',
                        scriptsTabNotFound: '未找到腳本選項卡。正在重新嘗試...',
                        settingsTabAdded: '已添加設定選項卡。',
                        speedLayer: '速度層',
                        opacityUpdated: '圖示不透明度已更新為',
                        updatingSettingsTab: '正在更新設定選項卡...',
                        languageDefined: '語言已設定。',
                        checkingVersion: '正在檢查插件版本。'
                    }
                };
            
                break;

            default:
                // Default language (english)
                this.spdTranslations = {
                    name: 'Speed Display',
                    settingTabName: 'Speed Display Settings',
                    enabled: 'enabled',
                    disabled: 'disabled',
                    zoomOut: 'Zoom out',
                    zoomIn: 'Zoom in',
                    changelog: 'Changelog',
                    changelogMessage: '<h6>New Features:</h6><ul style="margin-bottom: 10px"><li>You can now hide speed on unpaved segments;</li><li>You can also enable or disable the speed layer using shortcut keys: <span><span><kbd class="altKey"><span>$altKey</span></kbd> + </span><span><kbd class="shiftKey"><span>$shiftKey</span></kbd> + </span><kbd>S</kbd></span> (You can view the shortcut in the shortcut modal).</li></ul><h6>Fixes:</h6><ul><li>When disabling the road layer switcher, the speed layer will also be hidden;</li><li>New way to load initial and saved settings, so you don\'t lose the current configuration and add new features from updates;</li><li>Other code fixes and improvements.</li></ul>',
                    close: 'Close',
                    viewScript: 'View script',
                    showDialog: 'Show dialog',
                    title: {
                        general: 'General',
                        showOnRoadType: 'Display on segments of type:'
                    },
                    label: {
                        displaySpeeds: 'Display speeds',
                        showNoSpeed: 'Show on segment with no speed',
                        showOnRoundabout: 'Show on roundabout',
                        showOnUnpaved: 'Show on unpaved road',
                        maxZoom: 'Render up to zoom level:',
                        toggleLayerShortcut: 'Toggle layer switcher speed display'
                    },
                    btn: {
                        updateSettingsTab: 'Update menu',
                    },
                    log: {
                        wmeReadyStartScript: 'WME loaded and ready. Starting script...',
                        waitingWme: 'Waiting for WME to be ready...',
                        wmeReadyStartingPlugin: 'WME is ready. Setting up custom layer...',
                        shortSleep: 'Waiting about 1 second for everything to load...',
                        updateMapDisplay: 'Updating display on the map...',
                        maxZoomExceeded: 'Maximum zoom exceeded. No speed will be displayed.',
                        noneSegment: 'No segments found.',
                        numSegmentsLoaded: 'Total segments loaded:',
                        attributesNotFound: 'Could not find attributes or they are missing in the segment',
                        disallowedSegment: 'This type of segment should not be loaded.',
                        invalidGeometry: 'Invalid geometry in segment:',
                        updateMapDisplayFinished: 'Update completed.',
                        shortCutDialogNotFound: 'Could not find the keyboard shortcuts dialog. Trying again...',
                        houseNumberCheckboxNotFound: 'The "House Numbers" checkbox was not found. Trying again...',
                        settingsTabAdded: 'Settings tab added.',
                        settingsTabAdded: 'Aba de configurações adicionada.',
                        speedLayer: 'Speed layer',
                        opacityUpdated: 'Icon opacity adjusted to',
                        updatingSettingsTab: 'Updating settings tab...',
                        languageDefined: 'Languages defined.',
                        checkingVersion: 'Checking plugin version.',
                    }
                };                

                break;
        };

        this.logDebug(this.spdTranslations.log.languageDefined);
    }
}

new WmeSpeedDisplay();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址