diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index c6a57aa19..72139a574 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -27,6 +27,7 @@ const de: Translation = { ENTITIES: 'Entitäten', REFRESH: 'Aktualisieren', EXPORT: 'Exportieren', + BRAND: "Marke", ENTITY_NAME: 'Entitätsname', VALUE: 'Wert', SHOW_FAV: 'nur Favoriten anzeigen', @@ -45,6 +46,12 @@ const de: Translation = { ACCESS_DENIED: 'Zugriff abgelehnt', ANALOG_SENSOR: 'Analogsensor{post}', ANALOG_SENSORS: 'Analogsensoren', + OFFSET: "Addition", + FACTOR: "Faktor", + FREQ: "Frequenz", + STARTVALUE: "Startwert", + WARN_GPIO: "Warnung: Vorsicht bei der korrekten Wahl des GPIO!", + EDIT: "Editiere", TEMP_SENSOR: 'Temperatursensor{post}', TEMP_SENSORS: 'Temperatursensoren', WRITE_COMMAND: 'Befehl schreiben {cmd}', @@ -189,7 +196,7 @@ const de: Translation = { ADD: 'Hinzufügen', ACCESS_TOKEN_FOR: 'Zugangs-Token für', ACCESS_TOKEN_TEXT: - 'Das untenstehende Token ist für REST API Aufrufe, die eine Authentifizierung benötigen. Es kann entweder als Bearer Token im `Authorization-Header` oder in der Access_Token URL verwendet werden.', + 'Dieses Token ist für REST API Aufrufe bestimmt, die eine Authentifizierung benötigen. Es kann entweder als Bearer Token im `Authorization-Header` oder in der Access_Token URL verwendet werden.', GENERATING_TOKEN: 'Erzeuge Token', USER: 'Nutzer', MODIFY: 'Ändern', diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index d24adb773..d896a0575 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -27,6 +27,7 @@ const en: BaseTranslation = { ENTITIES: 'Entities', REFRESH: 'Refresh', EXPORT: 'Export', + BRAND: "Brand", ENTITY_NAME: 'Entity Name', VALUE: 'Value', SHOW_FAV: 'only show favorites', @@ -45,6 +46,12 @@ const en: BaseTranslation = { ACCESS_DENIED: 'Access Denied', ANALOG_SENSOR: 'Analog Sensor{post}', ANALOG_SENSORS: 'Analog Sensors', + OFFSET: "Offset", + FACTOR: "Factor", + FREQ: "Frequency", + STARTVALUE: "Start value", + WARN_GPIO: "Warning: be careful when assigning a GPIO!", + EDIT: "Edit", TEMP_SENSOR: 'Temperature Sensor{post}', TEMP_SENSORS: 'Temperature Sensors', WRITE_COMMAND: 'Write command {cmd}', diff --git a/interface/src/i18n/i18n-types.ts b/interface/src/i18n/i18n-types.ts index 3b9a5b411..f3c32fe8a 100644 --- a/interface/src/i18n/i18n-types.ts +++ b/interface/src/i18n/i18n-types.ts @@ -8,6 +8,7 @@ export type BaseLocale = 'en' export type Locales = | 'de' | 'en' + | 'nl' export type Translation = RootTranslation @@ -119,6 +120,10 @@ type RootTranslation = { * Export */ EXPORT: string + /** + * Brand + */ + BRAND: string /** * Entity Name */ @@ -192,7 +197,31 @@ type RootTranslation = { * Analog Sensors */ ANALOG_SENSORS: string - /** + /** + * Offset + */ + OFFSET: string + /** + * Factor + */ + FACTOR: string + /** + * Frequency + */ + FREQ: string + /** + * Start value + */ + STARTVALUE: string + /** + * Warning: be careful when assigning a GPIO! + */ + WARN_GPIO: string + /** + * Edit + */ + EDIT: string + /** * Temperature Sensor{post} * @param {unknown} post */ @@ -467,14 +496,14 @@ type RootTranslation = { * minutes */ MINUTES: string + /** + * Restart + */ + RESTART: string /** * hours */ HOURS: string - /** - * Restart - */ - RESTART: string /** * EMS-ESP needs to be restarted to apply changed system settings */ @@ -692,8 +721,8 @@ type RootTranslation = { */ FILESYSTEM: string /** - * Buffer Size - */ + * Buffer Size + */ BUFFER_SIZE: string /** * Compact @@ -1094,6 +1123,10 @@ export type TranslationFunctions = { * Export */ EXPORT: () => LocalizedString + /** + * Brand + */ + BRAND: () => LocalizedString /** * Entity Name */ @@ -1165,8 +1198,32 @@ export type TranslationFunctions = { /** * Analog Sensors */ - ANALOG_SENSORS: () => LocalizedString - /** + ANALOG_SENSORS: () => LocalizedString + /** + * Offset + */ + OFFSET: () => LocalizedString + /** + * Factor + */ + FACTOR: () => LocalizedString + /** + * Frequency + */ + FREQ: () => LocalizedString + /** + * Start value + */ + STARTVALUE: () => LocalizedString + /** + * Warning: be careful when assigning a GPIO! + */ + WARN_GPIO: () => LocalizedString + /** + * Edit + */ + EDIT: () => LocalizedString + /** * Temperature Sensor{post} */ TEMP_SENSOR: (arg: { post: unknown }) => LocalizedString @@ -1432,14 +1489,14 @@ export type TranslationFunctions = { * minutes */ MINUTES: () => LocalizedString + /** + * Restart + */ + RESTART: () => LocalizedString /** * hours */ HOURS: () => LocalizedString - /** - * Restart - */ - RESTART: () => LocalizedString /** * EMS-ESP needs to be restarted to apply changed system settings */ @@ -1633,7 +1690,7 @@ export type TranslationFunctions = { */ PLATFORM: () => LocalizedString /** - * ystem Uptime + * System Uptime */ UPTIME: () => LocalizedString /** diff --git a/interface/src/i18n/i18n-util.async.ts b/interface/src/i18n/i18n-util.async.ts index 599b8a6fc..fbba713cb 100644 --- a/interface/src/i18n/i18n-util.async.ts +++ b/interface/src/i18n/i18n-util.async.ts @@ -8,6 +8,7 @@ import { loadedFormatters, loadedLocales, locales } from './i18n-util' const localeTranslationLoaders = { de: () => import('./de'), en: () => import('./en'), + nl: () => import('./nl'), } 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 6898c2b38..ade10c586 100644 --- a/interface/src/i18n/i18n-util.sync.ts +++ b/interface/src/i18n/i18n-util.sync.ts @@ -7,10 +7,12 @@ import { loadedFormatters, loadedLocales, locales } from './i18n-util' import de from './de' import en from './en' +import nl from './nl' const localeTranslations = { de, en, + nl, } export const loadLocale = (locale: Locales): void => { diff --git a/interface/src/i18n/i18n-util.ts b/interface/src/i18n/i18n-util.ts index 3f990ad80..9e0e035c0 100644 --- a/interface/src/i18n/i18n-util.ts +++ b/interface/src/i18n/i18n-util.ts @@ -10,7 +10,8 @@ export const baseLocale: Locales = 'en' export const locales: Locales[] = [ 'de', - 'en' + 'en', + 'nl' ] export const loadedLocales = {} as Record diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts new file mode 100644 index 000000000..d896a0575 --- /dev/null +++ b/interface/src/i18n/nl/index.ts @@ -0,0 +1,261 @@ +import type { BaseTranslation } from '../i18n-types'; + +const en: BaseTranslation = { + LANGUAGE: 'Language', + RETRY: 'Retry', + LOADING: 'Loading', + IS_REQUIRED: 'is required', + SIGN_IN: 'Sign In', + SIGN_OUT: 'Sign Out', + USERNAME: 'Username', + PASSWORD: 'Password', + DASHBOARD: 'Dashboard', + SETTINGS: 'Settings', + SAVED: 'saved', + HELP: 'Help', + LOGGED_IN: 'Logged in as {name}', + PLEASE_SIGNIN: 'Please sign in to continue', + UPLOAD_SUCCESSFUL: 'Upload successful', + DOWNLOAD_SUCCESSFUL: 'Download successful', + INVALID_LOGIN: 'Invalid login details', + NETWORK: 'Network', + SECURITY: 'Security', + ONOFF_CAP: 'ON/OFF', + ONOFF: 'on/off', + TYPE: 'Type', + DESCRIPTION: 'Description', + ENTITIES: 'Entities', + REFRESH: 'Refresh', + EXPORT: 'Export', + BRAND: "Brand", + ENTITY_NAME: 'Entity Name', + VALUE: 'Value', + SHOW_FAV: 'only show favorites', + DEVICE_SENSOR_DATA: 'Device and Sensor Data', + DEVICES_SENSORS: 'Devices & Sensors', + ATTACHED_SENSORS: 'Attached EMS-ESP Sensors', + RUN_COMMAND: 'Call Command', + CHANGE_VALUE: 'Change Value', + CANCEL: 'Cancel', + RESET: 'Reset', + SEND: 'Send', + SAVE: 'Save', + REMOVE: 'Remove', + PROBLEM_UPDATING: 'Problem updating', + PROBLEM_LOADING: 'Problem loading', + ACCESS_DENIED: 'Access Denied', + ANALOG_SENSOR: 'Analog Sensor{post}', + ANALOG_SENSORS: 'Analog Sensors', + OFFSET: "Offset", + FACTOR: "Factor", + FREQ: "Frequency", + STARTVALUE: "Start value", + WARN_GPIO: "Warning: be careful when assigning a GPIO!", + EDIT: "Edit", + TEMP_SENSOR: 'Temperature Sensor{post}', + TEMP_SENSORS: 'Temperature Sensors', + WRITE_COMMAND: '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: 'Scanning for EMS devices...', + CONNECTED: 'Connected', + TX_ISSUES: 'Tx issues - try a different Tx Mode', + DISCONNECTED: 'Disconnected', + EMS_SCAN: 'Are you sure you want to initiate a full device scan of the EMS bus?', + EMS_BUS_STATUS: 'EMS Bus Status', + ACTIVE_DEVICES: 'Active Devices & Sensors', + DEVICE: 'Device', + SUCCESS: 'SUCCESS', + FAIL: 'FAIL', + QUALITY: 'QUALITY', + SCAN_DEVICES: 'Scan for new devices', + EMS_BUS_STATUS_TITLE: 'EMS Bus & Activity Status', + SCAN: 'Scan', + STATUS_NAMES: [ + 'EMS Telegrams Received (Rx)', + 'EMS Reads (Tx)', + 'EMS Writes (Tx)', + 'Temperature Sensor Reads', + 'Analog Sensor Reads', + 'MQTT Publishes', + 'API Calls', + 'Syslog Messages' + ], + NUM_DEVICES: '{num} Device{{s}}', + NUM_TEMP_SENSORS: '{num} Temperature Sensor{{s}}', + NUM_ANALOG_SENSORS: '{num} Analog Sensor{{s}}', + NUM_DAYS: '{num} Day{{s}}', + NUM_SECONDS: '{num} Second{{s}}', + NUM_HOURS: '{num} Hour{{s}}', + NUM_MINUTES: '{num} Minute{{s}}', + APPLICATION_SETTINGS: 'Application Settings', + CUSTOMIZATION: 'Customization', + APPLICATION_RESTARTING: '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: 'Board Profile', + BUTTON: 'Button', + TEMPERATURE: 'Temperature', + DISABLED: 'disabled', + GENERAL_OPTIONS: 'General Options', + LANGUAGE_ENTITIES: 'Language (for device entities)', + HIDE_LED: 'Hide LED', + ENABLE_TELNET: 'Enable Telnet Console', + ENABLE_ANALOG: 'Enable Analog Sensors', + CONVERT_FAHRENHEIT: 'Convert temperature values to Fahrenheit', + BYPASS_TOKEN: 'Bypass Access Token authorization on API calls', + READONLY: 'Enable read-only mode (blocks all outgoing EMS Tx Write commands)', + UNDERCLOCK_CPU: 'Underclock CPU speed', + ENABLE_SHOWER_TIMER: 'Enable Shower Timer', + ENABLE_SHOWER_ALERT: 'Enable Shower Alert', + TRIGGER_TIME: 'Trigger Time', + COLD_SHOT_DURATION: 'Cold Shot Duration', + FORMATTING_OPTIONS: 'Formatting Options', + BOOLEAN_FORMAT_DASHBOARD: 'Boolean Format Dashboard', + BOOLEAN_FORMAT_API: 'Boolean Format API/MQTT', + ENUM_FORMAT: 'Enum Format API/MQTT', + INDEX: 'Index', + ENABLE_PARASITE: 'Enable parasite power', + LOGGING: 'Logging', + LOG_HEX: 'Log EMS telegrams in hexadecimal', + ENABLE_SYSLOG: 'Enable Syslog', + MARK_INTERVAL: 'Mark Interval', + SECONDS: 'seconds', + MINUTES: 'minutes', + RESTART: 'Restart', + HOURS: "hours", + RESTART_TEXT: 'EMS-ESP needs to be restarted to apply changed system settings', + COMMAND: 'Command', + CUSTOMIZATIONS_RESTART: 'All customizations have been removed. Restarting...', + CUSTOMIZATIONS_FULL: 'Selected entities exceeded limit of 60. Please Save in batches', + CUSTOMIZATIONS_SAVED: 'Customizations saved', + CUSTOMIZATIONS_HELP_1: 'Select a device and customize the entities using the options', + CUSTOMIZATIONS_HELP_2: 'mark as favorite', + CUSTOMIZATIONS_HELP_3: 'disable write action', + CUSTOMIZATIONS_HELP_4: 'exclude from MQTT and API', + CUSTOMIZATIONS_HELP_5: 'hide from Dashboard', + SELECT_DEVICE: 'Select a device', + SET_ALL: 'set all', + OPTIONS: 'Options', + NAME: 'Name', + CUSTOMIZATIONS_RESET: + 'Are you sure you want remove all customizations including the custom settings of the Temperature and Analog sensors?', + DEVICE_ENTITIES: 'Device Entities', + CONFIGURE: 'configure', + USER_CUSTOMIZATION: 'User Customization', + SUPPORT_INFORMATION: 'Support Information', + HELP_INFORMATION_1: 'Visit the online', + HELP_INFORMATION_2: 'to get instructions on how to', + HELP_INFORMATION_3: 'and access other information', + HELP_INFORMATION_4: 'For live community chat join our', + HELP_INFORMATION_5: 'Submit a', + HELP_INFORMATION_6: 'support issue', + HELP_INFORMATION_7: 'for requesting a new feature or reporting a bug', + HELP_INFORMATION_8: 'Make sure you also', + HELP_INFORMATION_9: 'and attach your system details for a faster response', + HELP_INFORMATION_10: 'EMS-ESP will always be a free and open-source project. Please consider supporting it with a', + UPLOAD: 'Upload', + DOWNLOAD: 'Download', + ABORTED: 'aborted', + FAILED: 'failed', + SUCCESSFUL: 'successful', + SYSTEM: 'System', + LOG: 'Log', + STATUS: 'Status', + UPLOAD_DOWNLOAD: 'Upload/Download', + SYSTEM_VERSION_RUNNING: 'You are currently running version', + SYSTEM_APPLY_FIRMWARE: 'to apply the new firmware', + CLOSE: 'Close', + USE: 'Use', + FACTORY_RESET: 'Factory Reset', + SYSTEM_FACTORY_TEXT: 'Device has been factory reset and will now restart', + SYSTEM_FACTORY_TEXT_DIALOG: 'Are you sure you want to reset the device to its factory defaults?', + VERSION_CHECK: 'Version Check', + THE_LATEST: 'The latest', + PLATFORM: 'Device (Platform / SDK)', + UPTIME: 'System Uptime', + CPU_FREQ: 'CPU Frequency', + HEAP: 'Heap (Free / Max Alloc)', + PSRAM: 'PSRAM (Size / Free)', + FLASH: 'Flash Chip (Size / Speed)', + FILESYSTEM: 'File System (Used / Total)', + BUFFER_SIZE: 'Buffer Size', + COMPACT: 'Compact', + ENABLE_OTA: 'Enable OTA Updates', + DOWNLOAD_CUSTOMIZATION_TEXT: '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: 'Upload a new firmware (.bin) file, settings or customizations (.json) file below', + UPLOADING: 'Uploading', + UPLOAD_DROP_TEXT: 'Drop file or click here', + ERROR: 'Unexpected Error, please try again', + TIME_SET: 'Time set', + MANAGE_USERS: 'Manage Users', + IS_ADMIN: 'is Admin', + USER_WARNING: 'You must have at least one admin user configured', + ADD: 'Add', + ACCESS_TOKEN_FOR: 'Access Token for', + ACCESS_TOKEN_TEXT: + '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: 'Generating token', + USER: 'User', + MODIFY: 'Modify', + SU_TEXT: + 'The su (super user) password is used to sign authentication tokens and also enable admin privileges within the Console.', + NOT_ENABLED: 'Not enabled', + ERRORS: 'Errors', + DISCONNECT_REASON: 'Disconnect Reason', + ENABLE_MQTT: 'Enable MQTT', + OPTIONAL: 'Optional', + FORMATTING: 'Formatting', + FORMAT: 'Format', + MQTT_NEST_1: 'Nested in a single topic', + MQTT_NEST_2: 'As individual topics', + MQTT_RESPONSE: 'Publish command output to a `response` topic', + MQTT_PUBLISH_TEXT_1: 'Publish single value topics on change', + MQTT_PUBLISH_TEXT_2: 'Publish to command topics (ioBroker)', + MQTT_PUBLISH_TEXT_3: 'Enable MQTT Discovery (Home Assistant, Domoticz)', + MQTT_PUBLISH_TEXT_4: 'Prefix for the Discovery topics', + MQTT_PUBLISH_INTERVALS: 'Publish Intervals', + MQTT_INT_BOILER: 'Boilers and Heat Pumps', + MQTT_INT_THERMOSTATS: 'Thermostats', + MQTT_INT_SOLAR: 'Solar Modules', + MQTT_INT_MIXER: 'Mixer Modules', + DEFAULT: 'Default', + MQTT_CLEAN_SESSION: 'Set Clean Session', + MQTT_RETAIN_FLAG: 'Always set Retain flag', + INACTIVE: 'Inactive', + ACTIVE: 'Active', + UNKNOWN: 'Unknown', + SET_TIME: 'Set 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', + TIME_ZONE: 'Time Zone', + ACCESS_POINT: 'Access Point', + AP_PROVIDE: 'Enable Access Point', + AP_PROVIDE_TEXT_1: 'always', + AP_PROVIDE_TEXT_2: 'when WiFi is disconnected', + AP_PROVIDE_TEXT_3: 'never', + AP_PREFERRED_CHANNEL: 'Preferred Channel', + AP_HIDE_SSID: 'Hide SSID', + NETWORK_SCAN: 'Scan WiFi Networks', + IDLE: 'Idle', + LOST: 'Lost', + SCANNING: 'Scanning', + SCAN_AGAIN: 'Scan again', + NETWORK_SCANNER: 'Network Scanner', + NETWORK_NO_WIFI: 'No WiFi networks found', + NETWORK_BLANK_SSID: 'leave blank to disable WiFi', + POWER: 'Power', + NETWORK_DISABLE_SLEEP: 'Disable WiFi Sleep Mode', + NETWORK_LOW_BAND: 'Use Lower WiFi Bandwidth', + NETWORK_USE_DNS: 'Enable mDNS Service', + NETWORK_ENABLE_IPV6: 'Enable IPv6 support', + NETWORK_FIXED_IP: 'Use Fixed IP address', + ADMIN: 'Admin', + GUEST: 'Guest' +}; + +export default en; diff --git a/interface/src/project/DashboardData.tsx b/interface/src/project/DashboardData.tsx index bfe716de2..0697685d8 100644 --- a/interface/src/project/DashboardData.tsx +++ b/interface/src/project/DashboardData.tsx @@ -578,7 +578,7 @@ const DashboardData: FC = () => { if (sensor) { return ( setSensor(undefined)}> - Edit Temperature Sensor + {LL.EDIT()} {LL.TEMP_SENSORS()} Sensor ID {sensor.id} @@ -587,7 +587,7 @@ const DashboardData: FC = () => { { { - + - + - + { {LL.TYPE()} - VALUE + {LL.VALUE()} @@ -1030,7 +1030,7 @@ const DashboardData: FC = () => { if (analog) { return ( setAnalog(undefined)}> - Edit Analog Sensor + {LL.EDIT()} {LL.ANALOG_SENSORS()} @@ -1078,7 +1078,7 @@ const DashboardData: FC = () => { { { { { { )} - Warning: be careful when assigning a GPIO! + {LL.WARN_GPIO()} diff --git a/interface/src/project/SettingsApplication.tsx b/interface/src/project/SettingsApplication.tsx index efe05e2c9..fe9009f83 100644 --- a/interface/src/project/SettingsApplication.tsx +++ b/interface/src/project/SettingsApplication.tsx @@ -340,6 +340,7 @@ const SettingsApplication: FC = () => { > English (en) Deutsch (de) + Dutch (nl) {data.led_gpio !== 0 && (