diff --git a/interface/src/SignIn.tsx b/interface/src/SignIn.tsx index e364f3efe..297658e0e 100644 --- a/interface/src/SignIn.tsx +++ b/interface/src/SignIn.tsx @@ -23,6 +23,7 @@ import { loadLocaleAsync } from './i18n/i18n-util.async'; import { ReactComponent as NLflag } from './i18n/NL.svg'; import { ReactComponent as DEflag } from './i18n/DE.svg'; import { ReactComponent as GBflag } from './i18n/GB.svg'; +import { ReactComponent as SEflag } from './i18n/SE.svg'; const SignIn: FC = () => { const authenticationContext = useContext(AuthenticationContext); @@ -120,6 +121,10 @@ const SignIn: FC = () => {  NL + ({ maxWidth: '250px', @@ -82,6 +83,10 @@ const LayoutAuthMenu: FC = () => {  NL + + +  SE + { } }; - const renderSetTimeDialog = () => { - return ( - setSettingTime(false)}> - {LL.SET_TIME()} - - {LL.SET_TIME_TEXT()} - - - - - - - - ); - }; + const renderSetTimeDialog = () => ( + setSettingTime(false)}> + {LL.SET_TIME()} + + + {LL.SET_TIME_TEXT()} + + + + + + + + + ); const content = () => { if (!data) { diff --git a/interface/src/i18n/SE.svg b/interface/src/i18n/SE.svg new file mode 100644 index 000000000..7ec1787a5 --- /dev/null +++ b/interface/src/i18n/SE.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index 0bfd8e64d..cf16d1b33 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -230,7 +230,7 @@ const de: Translation = { ACTIVE: 'Aktiv', UNKNOWN: 'Unbekannt', SET_TIME: 'Zeiteinstellung', - SET_TIME_TEXT: 'Geben Sie das lokale Datum und die Zeit ein.', + SET_TIME_TEXT: 'Geben Sie das lokale Datum und die Zeit ein', LOCAL_TIME: 'Lokalzeit', UTC_TIME: 'UTC Zeit', ENABLE_NTP: 'Aktiviere NTP', diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index de30e2a58..c70c47e0e 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -134,7 +134,7 @@ const en: BaseTranslation = { CUSTOMIZATIONS_RESTART: 'All customizations have been removed. Restarting...', CUSTOMIZATIONS_FULL: 'Selected entities exceeded limit. Please save in batches', CUSTOMIZATIONS_SAVED: 'Customizations saved', - CUSTOMIZATIONS_HELP_1: 'Select a device and customize the entities using the options', + CUSTOMIZATIONS_HELP_1: 'Select a device and customize the entities options or click to rename', CUSTOMIZATIONS_HELP_2: 'mark as favorite', CUSTOMIZATIONS_HELP_3: 'disable write action', CUSTOMIZATIONS_HELP_4: 'exclude from MQTT and API', @@ -230,7 +230,7 @@ const en: BaseTranslation = { ACTIVE: 'Active', UNKNOWN: 'Unknown', SET_TIME: 'Set Time', - SET_TIME_TEXT: 'Enter local date and time below to set the time.', + SET_TIME_TEXT: 'Enter local date and time below to set the time', LOCAL_TIME: 'Local Time', UTC_TIME: 'UTC Time', ENABLE_NTP: 'Enable NTP', diff --git a/interface/src/i18n/i18n-types.ts b/interface/src/i18n/i18n-types.ts index ddc6adf75..83a8f773f 100644 --- a/interface/src/i18n/i18n-types.ts +++ b/interface/src/i18n/i18n-types.ts @@ -9,6 +9,7 @@ export type Locales = | 'de' | 'en' | 'nl' + | 'se' export type Translation = RootTranslation @@ -543,7 +544,7 @@ type RootTranslation = { */ CUSTOMIZATIONS_SAVED: string /** - * Select a device and customize the entities using the options + * Select a device and customize the entities options or click to rename */ CUSTOMIZATIONS_HELP_1: string /** @@ -907,7 +908,7 @@ type RootTranslation = { */ SET_TIME: string /** - * Enter local date and time below to set the time. + * Enter local date and time below to set the time */ SET_TIME_TEXT: string /** @@ -1548,7 +1549,7 @@ export type TranslationFunctions = { */ CUSTOMIZATIONS_SAVED: () => LocalizedString /** - * Select a device and customize the entities using the options + * Select a device and customize the entities options or click to rename */ CUSTOMIZATIONS_HELP_1: () => LocalizedString /** @@ -1912,7 +1913,7 @@ export type TranslationFunctions = { */ SET_TIME: () => LocalizedString /** - * Enter local date and time below to set the time. + * Enter local date and time below to set the time */ SET_TIME_TEXT: () => LocalizedString /** diff --git a/interface/src/i18n/i18n-util.async.ts b/interface/src/i18n/i18n-util.async.ts index fbba713cb..7f8ac7330 100644 --- a/interface/src/i18n/i18n-util.async.ts +++ b/interface/src/i18n/i18n-util.async.ts @@ -9,6 +9,7 @@ const localeTranslationLoaders = { de: () => import('./de'), en: () => import('./en'), nl: () => import('./nl'), + se: () => import('./se'), } const updateDictionary = (locale: Locales, dictionary: Partial) => diff --git a/interface/src/i18n/i18n-util.sync.ts b/interface/src/i18n/i18n-util.sync.ts index ade10c586..2dd390d3f 100644 --- a/interface/src/i18n/i18n-util.sync.ts +++ b/interface/src/i18n/i18n-util.sync.ts @@ -8,11 +8,13 @@ import { loadedFormatters, loadedLocales, locales } from './i18n-util' import de from './de' import en from './en' import nl from './nl' +import se from './se' const localeTranslations = { de, en, nl, + se, } export const loadLocale = (locale: Locales): void => { diff --git a/interface/src/i18n/i18n-util.ts b/interface/src/i18n/i18n-util.ts index 9e0e035c0..98632d6e6 100644 --- a/interface/src/i18n/i18n-util.ts +++ b/interface/src/i18n/i18n-util.ts @@ -11,7 +11,8 @@ export const baseLocale: Locales = 'en' export const locales: Locales[] = [ 'de', 'en', - 'nl' + 'nl', + 'se' ] export const loadedLocales = {} as Record diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index 3099b9607..d545c42eb 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -230,7 +230,7 @@ const nl: BaseTranslation = { ACTIVE: 'Actief', UNKNOWN: 'Onbekend', SET_TIME: 'Tijd instellen', - SET_TIME_TEXT: 'Geef de locale datum en tijd in.', + SET_TIME_TEXT: 'Geef de locale datum en tijd in', LOCAL_TIME: 'Locale Tijd', UTC_TIME: 'UTC Tijd', ENABLE_NTP: 'Activeer NTP', diff --git a/interface/src/i18n/se/index.ts b/interface/src/i18n/se/index.ts new file mode 100644 index 000000000..821b7b71f --- /dev/null +++ b/interface/src/i18n/se/index.ts @@ -0,0 +1,266 @@ +import type { BaseTranslation } from '../i18n-types'; + +const se: BaseTranslation = { + LANGUAGE: 'SE_Language', + RETRY: 'SE_Retry', + LOADING: 'SE_Loading', + IS_REQUIRED: 'SE_is required', + SIGN_IN: 'SE_Sign In', + SIGN_OUT: 'SE_Sign Out', + USERNAME: 'SE_Username', + PASSWORD: 'SE_Password', + DASHBOARD: 'SE_Dashboard', + SETTINGS: 'SE_Settings', + SAVED: 'SE_saved', + HELP: 'SE_Help', + LOGGED_IN: 'SE_Logged in as {name}', + PLEASE_SIGNIN: 'SE_Please sign in to continue', + UPLOAD_SUCCESSFUL: 'SE_Upload successful', + DOWNLOAD_SUCCESSFUL: 'SE_Download successful', + INVALID_LOGIN: 'SE_Invalid login details', + NETWORK: 'SE_Network', + SECURITY: 'SE_Security', + ONOFF_CAP: 'SE_ON/OFF', + ONOFF: 'SE_on/off', + TYPE: 'SE_Type', + DESCRIPTION: 'SE_Description', + ENTITIES: 'SE_Entities', + REFRESH: 'SE_Refresh', + EXPORT: 'SE_Export', + DEVICE_DETAILS: 'SE_Device Details', + BRAND: 'SE_Brand', + ENTITY_NAME: 'SE_Entity Name', + VALUE: 'SE_Value', + SHOW_FAV: 'SE_only show favorites', + DEVICE_SENSOR_DATA: 'SE_Device and Sensor Data', + DEVICES_SENSORS: 'SE_Devices & Sensors', + ATTACHED_SENSORS: 'SE_Attached EMS-ESP Sensors', + RUN_COMMAND: 'SE_Call Command', + CHANGE_VALUE: 'SE_Change Value', + CANCEL: 'SE_Cancel', + RESET: 'SE_Reset', + SEND: 'SE_Send', + SAVE: 'SE_Save', + REMOVE: 'SE_Remove', + PROBLEM_UPDATING: 'SE_Problem updating', + PROBLEM_LOADING: 'SE_Problem loading', + ACCESS_DENIED: 'SE_Access Denied', + ANALOG_SENSOR: 'SE_Analog Sensor', + ANALOG_SENSORS: 'SE_Analog Sensors', + UPDATED: 'SE_Updated', + UPDATE: 'SE_Update', + REMOVED: 'SE_Removed', + DELETION: 'SE_Deletion', + OFFSET: 'SE_Offset', + FACTOR: 'SE_Factor', + FREQ: 'SE_Frequency', + STARTVALUE: 'SE_Start value', + WARN_GPIO: 'SE_Warning: be careful when assigning a GPIO!', + EDIT: 'SE_Edit', + TEMP_SENSOR: 'SE_Temperature Sensor', + TEMP_SENSORS: 'SE_Temperature Sensors', + WRITE_COMMAND: 'SE_Write command {cmd}', + EMS_BUS_WARNING: + 'EMS bus disconnected. If this warning still persists after a few seconds please check settings and board profile', + EMS_BUS_SCANNING: 'SE_Scanning for EMS devices...', + CONNECTED: 'SE_Connected', + TX_ISSUES: 'SE_Tx issues - try a different Tx Mode', + DISCONNECTED: 'SE_Disconnected', + EMS_SCAN: 'SE_Are you sure you want to initiate a full device scan of the EMS bus?', + EMS_BUS_STATUS: 'SE_EMS Bus Status', + ACTIVE_DEVICES: 'SE_Active Devices & Sensors', + DEVICE: 'SE_Device', + SUCCESS: 'SE_SUCCESS', + FAIL: 'SE_FAIL', + QUALITY: 'SE_QUALITY', + SCAN_DEVICES: 'SE_Scan for new devices', + EMS_BUS_STATUS_TITLE: 'SE_EMS Bus & Activity Status', + SCAN: 'SE_Scan', + STATUS_NAMES: [ + 'SE_EMS Telegrams Received (Rx)', + 'SE_EMS Reads (Tx)', + 'SE_EMS Writes (Tx)', + 'SE_Temperature Sensor Reads', + 'SE_Analog Sensor Reads', + 'SE_MQTT Publishes', + 'SE_API Calls', + 'SE_Syslog Messages' + ], + NUM_DEVICES: 'SE_{num} Device{{s}}', + NUM_TEMP_SENSORS: 'SE_{num} Temperature Sensor{{s}}', + NUM_ANALOG_SENSORS: 'SE_{num} Analog Sensor{{s}}', + NUM_DAYS: 'SE_{num} Day{{s}}', + NUM_SECONDS: 'SE_{num} Second{{s}}', + NUM_HOURS: 'SE_{num} Hour{{s}}', + NUM_MINUTES: 'SE_{num} Minute{{s}}', + APPLICATION_SETTINGS: 'SE_Application Settings', + CUSTOMIZATION: 'SE_Customization', + APPLICATION_RESTARTING: 'SE_EMS-ESP is restarting', + BOARD_PROFILE_TEXT: + 'Select a pre-configured interface board profile from the list below or choose Custom to configure your own hardware settings', + BOARD_PROFILE: 'SE_Board Profile', + BUTTON: 'SE_Button', + TEMPERATURE: 'SE_Temperature', + DISABLED: 'SE_disabled', + GENERAL_OPTIONS: 'SE_General Options', + LANGUAGE_ENTITIES: 'SE_Language (for device entities)', + HIDE_LED: 'SE_Hide LED', + ENABLE_TELNET: 'SE_Enable Telnet Console', + ENABLE_ANALOG: 'SE_Enable Analog Sensors', + CONVERT_FAHRENHEIT: 'SE_Convert temperature values to Fahrenheit', + BYPASS_TOKEN: 'SE_Bypass Access Token authorization on API calls', + READONLY: 'SE_Enable read-only mode (blocks all outgoing EMS Tx Write commands)', + UNDERCLOCK_CPU: 'SE_Underclock CPU speed', + ENABLE_SHOWER_TIMER: 'SE_Enable Shower Timer', + ENABLE_SHOWER_ALERT: 'SE_Enable Shower Alert', + TRIGGER_TIME: 'SE_Trigger Time', + COLD_SHOT_DURATION: 'SE_Cold Shot Duration', + FORMATTING_OPTIONS: 'SE_Formatting Options', + BOOLEAN_FORMAT_DASHBOARD: 'SE_Boolean Format Dashboard', + BOOLEAN_FORMAT_API: 'SE_Boolean Format API/MQTT', + ENUM_FORMAT: 'SE_Enum Format API/MQTT', + INDEX: 'SE_Index', + ENABLE_PARASITE: 'SE_Enable parasite power', + LOGGING: 'SE_Logging', + LOG_HEX: 'SE_Log EMS telegrams in hexadecimal', + ENABLE_SYSLOG: 'SE_Enable Syslog', + MARK_INTERVAL: 'SE_Mark Interval', + SECONDS: 'SE_seconds', + MINUTES: 'SE_minutes', + RESTART: 'SE_Restart', + HOURS: 'SE_hours', + RESTART_TEXT: 'SE_EMS-ESP needs to be restarted to apply changed system settings', + COMMAND: 'SE_Command', + CUSTOMIZATIONS_RESTART: 'SE_All customizations have been removed. Restarting...', + CUSTOMIZATIONS_FULL: 'SE_Selected entities exceeded limit. Please save in batches', + CUSTOMIZATIONS_SAVED: 'SE_Customizations saved', + CUSTOMIZATIONS_HELP_1: 'SE_Select a device and customize the entities using the options', + CUSTOMIZATIONS_HELP_2: 'SE_mark as favorite', + CUSTOMIZATIONS_HELP_3: 'SE_disable write action', + CUSTOMIZATIONS_HELP_4: 'SE_exclude from MQTT and API', + CUSTOMIZATIONS_HELP_5: 'SE_hide from Dashboard', + SELECT_DEVICE: 'SE_Select a device', + SET_ALL: 'SE_set all', + OPTIONS: 'SE_Options', + NAME: 'SE_Name', + CUSTOMIZATIONS_RESET: + 'Are you sure you want remove all customizations including the custom settings of the Temperature and Analog sensors?', + DEVICE_ENTITIES: 'SE_Device Entities', + USER_CUSTOMIZATION: 'SE_User Customization', + SUPPORT_INFORMATION: 'SE_Support Information', + CLICK_HERE: 'SE_Click Here', + HELP_INFORMATION_1: 'SE_Visit the online wiki to get instructions on how to configure EMS-ESP', + HELP_INFORMATION_2: 'SE_For live community chat join our Discord server', + HELP_INFORMATION_3: 'SE_To request a feature or report a bug', + HELP_INFORMATION_4: + 'SE_remember to download and attach your system information for a faster response when reporting an issue', + HELP_INFORMATION_5: + 'SE_EMS-ESP is a free and open-source project. Please support its future development by giving it a star on Github!', + SUPPORT_INFO: 'SE_Support Info', + UPLOAD: 'SE_Upload', + DOWNLOAD: 'SE_Download', + ABORTED: 'SE_aborted', + FAILED: 'SE_failed', + SUCCESSFUL: 'SE_successful', + SYSTEM: 'SE_System', + LOG: 'SE_Log', + STATUS: 'SE_Status', + UPLOAD_DOWNLOAD: 'SE_Upload/Download', + SYSTEM_VERSION_RUNNING: 'SE_You are currently running version', + SYSTEM_APPLY_FIRMWARE: 'SE_to apply the new firmware', + CLOSE: 'SE_Close', + USE: 'SE_Use', + FACTORY_RESET: 'SE_Factory Reset', + SYSTEM_FACTORY_TEXT: 'SE_Device has been factory reset and will now restart', + SYSTEM_FACTORY_TEXT_DIALOG: 'SE_Are you sure you want to reset the device to its factory defaults?', + VERSION_CHECK: 'SE_Version Check', + THE_LATEST: 'SE_The latest', + PLATFORM: 'SE_Device (Platform / SDK)', + UPTIME: 'SE_System Uptime', + CPU_FREQ: 'SE_CPU Frequency', + HEAP: 'SE_Heap (Free / Max Alloc)', + PSRAM: 'SE_PSRAM (Size / Free)', + FLASH: 'SE_Flash Chip (Size / Speed)', + FILESYSTEM: 'SE_File System (Used / Total)', + BUFFER_SIZE: 'SE_Buffer Size', + COMPACT: 'SE_Compact', + ENABLE_OTA: 'SE_Enable OTA Updates', + DOWNLOAD_CUSTOMIZATION_TEXT: 'SE_Download the entity customizations', + DOWNLOAD_SETTINGS_TEXT: + 'Download the application settings. Be careful when sharing your settings as this file contains passwords and other sensitive system information', + UPLOAD_TEXT: 'SE_Upload a new firmware (.bin) file, settings or customizations (.json) file below', + UPLOADING: 'SE_Uploading', + UPLOAD_DROP_TEXT: 'SE_Drop file or click here', + ERROR: 'SE_Unexpected Error, please try again', + TIME_SET: 'SE_Time set', + MANAGE_USERS: 'SE_Manage Users', + IS_ADMIN: 'SE_is Admin', + USER_WARNING: 'SE_You must have at least one admin user configured', + ADD: 'SE_Add', + ACCESS_TOKEN_FOR: 'SE_Access Token for', + ACCESS_TOKEN_TEXT: + 'SE_The token below is used with REST API calls that require authorization. It can be passed either as a Bearer token in the Authorization header or in the access_token URL query parameter.', + GENERATING_TOKEN: 'SE_Generating token', + USER: 'SE_User', + MODIFY: 'SE_Modify', + SU_TEXT: + 'SE_The su (super user) password is used to sign authentication tokens and also enable admin privileges within the Console.', + NOT_ENABLED: 'SE_Not enabled', + ERRORS: 'SE_Errors', + DISCONNECT_REASON: 'SE_Disconnect Reason', + ENABLE_MQTT: 'SE_Enable MQTT', + OPTIONAL: 'SE_Optional', + FORMATTING: 'SE_Formatting', + FORMAT: 'SE_Format', + MQTT_NEST_1: 'SE_Nested in a single topic', + MQTT_NEST_2: 'SE_As individual topics', + MQTT_RESPONSE: 'SE_Publish command output to a `response` topic', + MQTT_PUBLISH_TEXT_1: 'SE_Publish single value topics on change', + MQTT_PUBLISH_TEXT_2: 'SE_Publish to command topics (ioBroker)', + MQTT_PUBLISH_TEXT_3: 'SE_Enable MQTT Discovery (Home Assistant, Domoticz)', + MQTT_PUBLISH_TEXT_4: 'SE_Prefix for the Discovery topics', + MQTT_PUBLISH_INTERVALS: 'SE_Publish Intervals', + MQTT_INT_BOILER: 'SE_Boilers and Heat Pumps', + MQTT_INT_THERMOSTATS: 'SE_Thermostats', + MQTT_INT_SOLAR: 'SE_Solar Modules', + MQTT_INT_MIXER: 'SE_Mixer Modules', + DEFAULT: 'SE_Default', + MQTT_CLEAN_SESSION: 'SE_Set Clean Session', + MQTT_RETAIN_FLAG: 'SE_Always set Retain flag', + INACTIVE: 'SE_Inactive', + ACTIVE: 'SE_Active', + UNKNOWN: 'SE_Unknown', + SET_TIME: 'SE_Set Time', + SET_TIME_TEXT: 'SE_Enter local date and time below to set the time', + LOCAL_TIME: 'SE_Local Time', + UTC_TIME: 'SE_UTC Time', + ENABLE_NTP: 'SE_Enable NTP', + TIME_ZONE: 'SE_Time Zone', + ACCESS_POINT: 'SE_Access Point', + AP_PROVIDE: 'SE_Enable Access Point', + AP_PROVIDE_TEXT_1: 'SE_always', + AP_PROVIDE_TEXT_2: 'SE_when WiFi is disconnected', + AP_PROVIDE_TEXT_3: 'SE_never', + AP_PREFERRED_CHANNEL: 'SE_Preferred Channel', + AP_HIDE_SSID: 'SE_Hide SSID', + NETWORK_SCAN: 'SE_Scan WiFi Networks', + IDLE: 'SE_Idle', + LOST: 'SE_Lost', + SCANNING: 'SE_Scanning', + SCAN_AGAIN: 'SE_Scan again', + NETWORK_SCANNER: 'SE_Network Scanner', + NETWORK_NO_WIFI: 'SE_No WiFi networks found', + NETWORK_BLANK_SSID: 'SE_leave blank to disable WiFi', + POWER: 'SE_Power', + NETWORK_DISABLE_SLEEP: 'SE_Disable WiFi Sleep Mode', + NETWORK_LOW_BAND: 'SE_Use Lower WiFi Bandwidth', + NETWORK_USE_DNS: 'SE_Enable mDNS Service', + NETWORK_ENABLE_IPV6: 'SE_Enable IPv6 support', + NETWORK_FIXED_IP: 'SE_Use Fixed IP address', + ADMIN: 'SE_Admin', + GUEST: 'SE_Guest', + NEW: 'SE_New', + RENAME: 'SE_Rename' +}; + +export default se; diff --git a/interface/src/project/DashboardData.tsx b/interface/src/project/DashboardData.tsx index e02e38bb2..c60c4eed9 100644 --- a/interface/src/project/DashboardData.tsx +++ b/interface/src/project/DashboardData.tsx @@ -580,11 +580,11 @@ const DashboardData: FC = () => { return ( setSensor(undefined)}> - {LL.EDIT()} {LL.TEMP_SENSORS()} + {LL.EDIT()} {LL.TEMP_SENSOR()} - Sensor ID {sensor.id} + Sensor ID: {sensor.id} @@ -1034,7 +1034,7 @@ const DashboardData: FC = () => { return ( setAnalog(undefined)}> - {LL.EDIT()} {LL.ANALOG_SENSORS()} + {LL.EDIT()} {LL.ANALOG_SENSOR()} diff --git a/interface/src/project/SettingsApplication.tsx b/interface/src/project/SettingsApplication.tsx index 7a1039e23..a9ef1bf48 100644 --- a/interface/src/project/SettingsApplication.tsx +++ b/interface/src/project/SettingsApplication.tsx @@ -338,9 +338,10 @@ const SettingsApplication: FC = () => { size="small" select > - English (en) - Deutsch (de) - Nederlands (nl) + English (EN) + Deutsch (DE) + Nederlands (NL) + Svenska (SE) {data.led_gpio !== 0 && ( diff --git a/interface/src/project/SettingsCustomization.tsx b/interface/src/project/SettingsCustomization.tsx index 247d9fd1c..315bdb234 100644 --- a/interface/src/project/SettingsCustomization.tsx +++ b/interface/src/project/SettingsCustomization.tsx @@ -284,7 +284,7 @@ const SettingsCustomization: FC = () => { return ( <> - {LL.CUSTOMIZATIONS_HELP_1()}: + {LL.CUSTOMIZATIONS_HELP_1()} ={LL.CUSTOMIZATIONS_HELP_2()}   ={LL.CUSTOMIZATIONS_HELP_3()}   @@ -558,10 +558,10 @@ const SettingsCustomization: FC = () => { ); }; - const renderEditEntity = () => ( - setDeviceEntity(undefined)}> - {deviceEntity && ( - <> + const renderEditEntity = () => { + if (deviceEntity) { + return ( + setDeviceEntity(undefined)}> {LL.RENAME() + ' ' + LL.ENTITY_NAME()} @@ -599,10 +599,10 @@ const SettingsCustomization: FC = () => { {LL.SAVE()} - - )} - - ); + + ); + } + }; return ( diff --git a/src/locale_translations.h b/src/locale_translations.h index b542ebd83..acdebc7c6 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -22,8 +22,9 @@ #define EMSESP_LOCALE_EN "en" #define EMSESP_LOCALE_DE "de" #define EMSESP_LOCALE_NL "nl" +#define EMSESP_LOCALE_SE "se" -// translations are in order en, de +// translations are in order en, de,nl, se.... // if there is no translation, it will default to en // General