diff --git a/interface/public/css/roboto.css b/interface/public/css/roboto.css index 3a747ac5e..30013e88b 100644 --- a/interface/public/css/roboto.css +++ b/interface/public/css/roboto.css @@ -10,8 +10,7 @@ font-style: normal; font-weight: 400; src: local('Roboto'), local('Roboto-Regular'), url(../fonts/re.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, - U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + unicode-range: U+0000-00FF, U+0104-0107, U+0118-0119, U+0131, U+0141-0144, U+0152-0153, U+015A-015B, U+0179-017C, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } @font-face { @@ -19,6 +18,5 @@ font-style: normal; font-weight: 500; src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/md.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, - U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + unicode-range: U+0000-00FF, U+0104-0107, U+0118-0119, U+0131, U+0141-0144, U+0152-0153, U+015A-015B, U+0179-017C, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } diff --git a/interface/public/fonts/re.woff2 b/interface/public/fonts/re.woff2 index 5ca942ccb..8fe24668b 100644 Binary files a/interface/public/fonts/re.woff2 and b/interface/public/fonts/re.woff2 differ diff --git a/interface/src/SignIn.tsx b/interface/src/SignIn.tsx index a2ffeb9f9..b658bfd39 100644 --- a/interface/src/SignIn.tsx +++ b/interface/src/SignIn.tsx @@ -41,7 +41,7 @@ const SignIn: FC = () => { const validateAndSignIn = async () => { setProcessing(true); SIGN_IN_REQUEST_VALIDATOR.messages({ - required: '%s ' + LL.IS_REQUIRED() + required: LL.IS_REQUIRED('%s') }); try { await validate(SIGN_IN_REQUEST_VALIDATOR, signInRequest); @@ -139,7 +139,7 @@ const SignIn: FC = () => { fieldErrors={fieldErrors} disabled={processing} name="username" - label={LL.USERNAME()} + label={LL.USERNAME(0)} value={signInRequest.username} onChange={updateLoginRequestValue} margin="normal" diff --git a/interface/src/framework/mqtt/MqttSettingsForm.tsx b/interface/src/framework/mqtt/MqttSettingsForm.tsx index c03915800..8de9f71fc 100644 --- a/interface/src/framework/mqtt/MqttSettingsForm.tsx +++ b/interface/src/framework/mqtt/MqttSettingsForm.tsx @@ -57,7 +57,7 @@ const MqttSettingsForm: FC = () => { { { { { { InputProps={{ endAdornment: {LL.SECONDS()} }} - label={LL.DEFAULT()} + label={LL.DEFAULT(0)} fullWidth variant="outlined" value={numberValue(data.publish_time_other)} diff --git a/interface/src/framework/mqtt/MqttStatusForm.tsx b/interface/src/framework/mqtt/MqttStatusForm.tsx index 8e6d373b5..51725c65f 100644 --- a/interface/src/framework/mqtt/MqttStatusForm.tsx +++ b/interface/src/framework/mqtt/MqttStatusForm.tsx @@ -103,7 +103,7 @@ const MqttStatusForm: FC = () => { # - + diff --git a/interface/src/framework/network/NetworkSettingsForm.tsx b/interface/src/framework/network/NetworkSettingsForm.tsx index 8dd52b265..d4a856146 100644 --- a/interface/src/framework/network/NetworkSettingsForm.tsx +++ b/interface/src/framework/network/NetworkSettingsForm.tsx @@ -196,7 +196,7 @@ const WiFiSettingsForm: FC = () => { { { { { { const ntpStatus = ({ status }: NTPStatus) => { switch (status) { case NTPSyncStatus.NTP_DISABLED: - return LL.DISABLED(); + return LL.DISABLED(0); case NTPSyncStatus.NTP_INACTIVE: return LL.INACTIVE(); case NTPSyncStatus.NTP_ACTIVE: diff --git a/interface/src/framework/security/ManageUsersForm.tsx b/interface/src/framework/security/ManageUsersForm.tsx index 29c29c6ee..1321eedc5 100644 --- a/interface/src/framework/security/ManageUsersForm.tsx +++ b/interface/src/framework/security/ManageUsersForm.tsx @@ -40,7 +40,7 @@ const ManageUsersForm: FC = () => { const table_theme = useTheme({ Table: ` - --data-table-library_grid-template-columns: repeat(1, minmax(0, 1fr)) 120px 120px; + --data-table-library_grid-template-columns: repeat(1, minmax(0, 1fr)) minmax(120px, max-content) 120px; `, BaseRow: ` font-size: 14px; @@ -140,7 +140,7 @@ const ManageUsersForm: FC = () => { <>
- {LL.USERNAME()} + {LL.USERNAME(1)} {LL.IS_ADMIN(0)} diff --git a/interface/src/framework/security/UserForm.tsx b/interface/src/framework/security/UserForm.tsx index 28e659469..22ec43fa5 100644 --- a/interface/src/framework/security/UserForm.tsx +++ b/interface/src/framework/security/UserForm.tsx @@ -60,7 +60,7 @@ const UserForm: FC = ({ creating, validator, user, setUser, onDon /** * S​i​g​n​ ​I​n */ @@ -43,7 +44,7 @@ type RootTranslation = { */ SIGN_OUT: string /** - * U​s​e​r​n​a​m​e + * {​{​U​s​e​r​n​a​m​e​}​} */ USERNAME: string /** @@ -82,11 +83,11 @@ type RootTranslation = { */ PLEASE_SIGNIN: string /** - * U​p​l​o​a​d​ ​s​u​c​c​e​s​s​f​u​l + * U​p​l​o​a​d​ ​f​i​n​i​s​h​e​d */ UPLOAD_SUCCESSFUL: string /** - * D​o​w​n​l​o​a​d​ ​s​u​c​c​e​s​s​f​u​l + * D​o​w​n​l​o​a​d​ ​f​i​n​i​s​h​e​d */ DOWNLOAD_SUCCESSFUL: string /** @@ -133,6 +134,23 @@ type RootTranslation = { * D​e​v​i​c​e​ ​D​e​t​a​i​l​s */ DEVICE_DETAILS: string + /** + * {​0​}​ ​I​D + * @param {unknown} 0 + */ + ID_OF: RequiredParams<'0'> + /** + * D​e​v​i​c​e + */ + DEVICE: string + /** + * P​r​o​d​u​c​t + */ + PRODUCT: string + /** + * V​e​r​s​i​o​n + */ + VERSION: string /** * B​r​a​n​d */ @@ -142,7 +160,7 @@ type RootTranslation = { */ ENTITY_NAME: string /** - * {​{​V​a​l​u​e​}​} + * {​{​V​a​l​u​e​|​v​a​l​u​e​}​} */ VALUE: string /** @@ -262,7 +280,7 @@ type RootTranslation = { */ EDIT: string /** - * T​e​m​p​e​r​a​t​u​r​e​ ​S​e​n​s​o​r + * {​{​|​T​e​m​p​e​r​a​t​u​r​e​}​}​ ​S​e​n​s​o​r */ TEMP_SENSOR: string /** @@ -427,6 +445,15 @@ type RootTranslation = { * B​o​a​r​d​ ​P​r​o​f​i​l​e */ BOARD_PROFILE: string + /** + * C​u​s​t​o​m + */ + CUSTOM: string + /** + * {​0​}​ ​G​P​I​O + * @param {unknown} 0 + */ + GPIO_OF: RequiredParams<'0'> /** * B​u​t​t​o​n */ @@ -440,13 +467,21 @@ type RootTranslation = { */ PHY_TYPE: string /** - * d​i​s​a​b​l​e​d + * {​{​d​i​s​a​b​l​e​d​}​} */ DISABLED: string /** * T​x​ ​M​o​d​e */ TX_MODE: string + /** + * H​a​r​d​w​a​r​e + */ + HARDWARE: string + /** + * {​{​B​U​S​|​E​M​S​ ​B​U​S​}​} + */ + EMS_BUS: string /** * G​e​n​e​r​a​l​ ​O​p​t​i​o​n​s */ @@ -616,7 +651,7 @@ type RootTranslation = { */ OPTIONS: string /** - * N​a​m​e + * {​{​N​a​m​e​}​} */ NAME: string /** @@ -891,6 +926,18 @@ type RootTranslation = { * E​n​a​b​l​e​ ​M​Q​T​T */ ENABLE_MQTT: string + /** + * B​r​o​k​e​r + */ + BROKER: string + /** + * C​l​i​e​n​t + */ + CLIENT: string + /** + * B​a​s​e + */ + BASE_TOPIC: string /** * O​p​t​i​o​n​a​l */ @@ -900,9 +947,9 @@ type RootTranslation = { */ FORMATTING: string /** - * F​o​r​m​a​t + * T​o​p​i​c​/​P​a​y​l​o​a​d​ ​F​o​r​m​a​t */ - FORMAT: string + MQTT_FORMAT: string /** * N​e​s​t​e​d​ ​i​n​ ​a​ ​s​i​n​g​l​e​ ​t​o​p​i​c */ @@ -956,7 +1003,7 @@ type RootTranslation = { */ MQTT_QUEUE: string /** - * D​e​f​a​u​l​t + * {​{​D​e​f​a​u​l​t​}​} */ DEFAULT: string /** @@ -1108,7 +1155,7 @@ type RootTranslation = { */ NETWORK_FIXED_IP: string /** - * G​e​t​a​w​a​y + * G​a​t​e​w​a​y */ NETWORK_GATEWAY: string /** @@ -1137,13 +1184,22 @@ type RootTranslation = { */ NEW: string /** - * R​e​n​a​m​e + * N​e​w​ ​{​0​}​ ​n​a​m​e + * @param {unknown} 0 */ - RENAME: string + NEW_NAME_OF: RequiredParams<'0'> /** - * E​n​t​i​t​y + * e​n​t​i​t​y */ ENTITY: string + /** + * m​i​n + */ + MIN: string + /** + * m​a​x + */ + MAX: string } export type TranslationFunctions = { @@ -1160,9 +1216,9 @@ export type TranslationFunctions = { */ LOADING: () => LocalizedString /** - * is required + * {0} is required */ - IS_REQUIRED: () => LocalizedString + IS_REQUIRED: (arg0: unknown) => LocalizedString /** * Sign In */ @@ -1172,9 +1228,9 @@ export type TranslationFunctions = { */ SIGN_OUT: () => LocalizedString /** - * Username + * {{Username}} */ - USERNAME: () => LocalizedString + USERNAME: (arg0: string | number | boolean) => LocalizedString /** * Password */ @@ -1208,11 +1264,11 @@ export type TranslationFunctions = { */ PLEASE_SIGNIN: () => LocalizedString /** - * Upload successful + * Upload finished */ UPLOAD_SUCCESSFUL: () => LocalizedString /** - * Download successful + * Download finished */ DOWNLOAD_SUCCESSFUL: () => LocalizedString /** @@ -1259,6 +1315,22 @@ export type TranslationFunctions = { * Device Details */ DEVICE_DETAILS: () => LocalizedString + /** + * {0} ID + */ + ID_OF: (arg0: unknown) => LocalizedString + /** + * Device + */ + DEVICE: () => LocalizedString + /** + * Product + */ + PRODUCT: () => LocalizedString + /** + * Version + */ + VERSION: () => LocalizedString /** * Brand */ @@ -1268,7 +1340,7 @@ export type TranslationFunctions = { */ ENTITY_NAME: () => LocalizedString /** - * {{Value}} + * {{Value|value}} */ VALUE: (arg0: string | number | boolean) => LocalizedString /** @@ -1384,9 +1456,9 @@ export type TranslationFunctions = { */ EDIT: () => LocalizedString /** - * Temperature Sensor + * {{|Temperature}} Sensor */ - TEMP_SENSOR: () => LocalizedString + TEMP_SENSOR: (arg0: string | number | boolean) => LocalizedString /** * Temperature Sensors */ @@ -1541,6 +1613,14 @@ export type TranslationFunctions = { * Board Profile */ BOARD_PROFILE: () => LocalizedString + /** + * Custom + */ + CUSTOM: () => LocalizedString + /** + * {0} GPIO + */ + GPIO_OF: (arg0: unknown) => LocalizedString /** * Button */ @@ -1554,13 +1634,21 @@ export type TranslationFunctions = { */ PHY_TYPE: () => LocalizedString /** - * disabled + * {{disabled}} */ - DISABLED: () => LocalizedString + DISABLED: (arg0: string | number | boolean) => LocalizedString /** * Tx Mode */ TX_MODE: () => LocalizedString + /** + * Hardware + */ + HARDWARE: () => LocalizedString + /** + * {{BUS|EMS BUS}} + */ + EMS_BUS: (arg0: string | number | boolean) => LocalizedString /** * General Options */ @@ -1730,9 +1818,9 @@ export type TranslationFunctions = { */ OPTIONS: () => LocalizedString /** - * Name + * {{Name}} */ - NAME: () => LocalizedString + NAME: (arg0: string | number | boolean) => LocalizedString /** * Are you sure you want remove all customizations including the custom settings of the Temperature and Analog sensors? */ @@ -2001,6 +2089,18 @@ export type TranslationFunctions = { * Enable MQTT */ ENABLE_MQTT: () => LocalizedString + /** + * Broker + */ + BROKER: () => LocalizedString + /** + * Client + */ + CLIENT: () => LocalizedString + /** + * Base + */ + BASE_TOPIC: () => LocalizedString /** * Optional */ @@ -2010,9 +2110,9 @@ export type TranslationFunctions = { */ FORMATTING: () => LocalizedString /** - * Format + * Topic/Payload Format */ - FORMAT: () => LocalizedString + MQTT_FORMAT: () => LocalizedString /** * Nested in a single topic */ @@ -2066,9 +2166,9 @@ export type TranslationFunctions = { */ MQTT_QUEUE: () => LocalizedString /** - * Default + * {{Default}} */ - DEFAULT: () => LocalizedString + DEFAULT: (arg0: string | number | boolean) => LocalizedString /** * Set Clean Session */ @@ -2218,7 +2318,7 @@ export type TranslationFunctions = { */ NETWORK_FIXED_IP: () => LocalizedString /** - * Getaway + * Gateway */ NETWORK_GATEWAY: () => LocalizedString /** @@ -2246,13 +2346,21 @@ export type TranslationFunctions = { */ NEW: () => LocalizedString /** - * Rename + * New {0} name */ - RENAME: () => LocalizedString + NEW_NAME_OF: (arg0: unknown) => LocalizedString /** - * Entity + * entity */ ENTITY: () => LocalizedString + /** + * min + */ + MIN: () => LocalizedString + /** + * max + */ + MAX: () => LocalizedString } export type Formatters = {} diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index 1ab08c6ed..f6edcf107 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -4,7 +4,7 @@ const nl: Translation = { LANGUAGE: 'Taal', RETRY: 'Opnieuw proberen', LOADING: 'Laden', - IS_REQUIRED: 'is verplicht', + IS_REQUIRED: '{0} is verplicht', SIGN_IN: 'Inloggen', SIGN_OUT: 'Uitloggen', USERNAME: 'Gebruikersnaam', @@ -29,6 +29,10 @@ const nl: Translation = { REFRESH: 'Ververs', EXPORT: 'Export', DEVICE_DETAILS: 'Device Gegevens', + ID_OF: '{0} ID', + DEVICE: 'Apparaat', + PRODUCT: 'Product', + VERSION: 'Versie', BRAND: 'Merk', ENTITY_NAME: 'Entiteit', VALUE: '{{Waarde|waarde}}', @@ -60,7 +64,7 @@ const nl: Translation = { STARTVALUE: 'Startwaarde', WARN_GPIO: 'Waarschuwing: let op met het koppelen van de juiste GPIO pin!', EDIT: 'Wijzigen', - TEMP_SENSOR: 'Temperatuur sensor', + TEMP_SENSOR: '{{Sensor|Temperatuur sensor}}', TEMP_SENSORS: 'Temperatuur Sensoren', WRITE_COMMAND: 'Schrijf commando {cmd}', EMS_BUS_WARNING: @@ -103,10 +107,14 @@ const nl: Translation = { BOARD_PROFILE_TEXT: 'Selecteer een vooraf ingesteld apparaat profiel uit de lijst of kies Eigen om zelf uw hardware te configureren', BOARD_PROFILE: 'Apparaatprofiel', + CUSTOM: 'Custom', + GPIO_OF: '{0} GPIO', BUTTON: 'Toets', TEMPERATURE: 'Temperatuur', PHY_TYPE: 'Eth PHY Type', TX_MODE: 'Tx Mode', + HARDWARE: 'Hardware', + EMS_BUS: '{{BUS|EMS BUS}}', DISABLED: 'Uitgeschakeld', GENERAL_OPTIONS: 'Algemene Opties', LANGUAGE_ENTITIES: 'Taal (voor apparaat entiteiten)', @@ -222,9 +230,12 @@ const nl: Translation = { ERRORS_OF: '{0} Foutmeldingen', DISCONNECT_REASON: 'Verbinding verbroken vanwege', ENABLE_MQTT: 'Activeer MQTT', + BROKER: 'Broker', + CLIENT: 'Client', + BASE_TOPIC: 'Base', OPTIONAL: 'Optioneel', FORMATTING: 'Formatteren', - FORMAT: 'Formattering', + MQTT_FORMAT: 'Topic/Payload Formattering', MQTT_NEST_1: 'Genest in 1 topic', MQTT_NEST_2: 'Als individuele topics', MQTT_RESPONSE: 'Publiceer commando output naar een `response` topic', @@ -276,15 +287,17 @@ const nl: Translation = { NETWORK_USE_DNS: 'Activeer mDNS Service', NETWORK_ENABLE_IPV6: 'Activeer IPv6 support', NETWORK_FIXED_IP: 'Gebruik vast IP addres', - NETWORK_GATEWAY: 'Getaway', - NETWORK_SUBNET: 'Subnet Mask', + NETWORK_GATEWAY: 'Gateway', + NETWORK_SUBNET: 'Subnetmasker', NETWORK_DNS: 'DNS Servers', ADDRESS_OF: '{0} Address', ADMIN: 'Admin', GUEST: 'Gast', NEW: 'Nieuwe', - RENAME: 'Hernoem', - ENTITY: 'Entiteit' + NEW_NAME_OF: 'Hernoem {0}', + ENTITY: 'Entiteit', + MIN: 'min', + MAX: 'max' }; export default nl; diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts index 7a8bf8041..b9f64f8b5 100644 --- a/interface/src/i18n/no/index.ts +++ b/interface/src/i18n/no/index.ts @@ -4,7 +4,7 @@ const no: Translation = { LANGUAGE: 'Språk', RETRY: 'Forsøk igjen', LOADING: 'Laster', - IS_REQUIRED: 'er nødvendig', + IS_REQUIRED: '{0} er nødvendig', SIGN_IN: 'Logg inn', SIGN_OUT: 'Logg ut', USERNAME: 'Brukernavn', @@ -29,6 +29,10 @@ const no: Translation = { REFRESH: 'Oppdater', EXPORT: 'Eksport', DEVICE_DETAILS: 'Enhetsdetaljer', + ID_OF: '{0}-ID', + DEVICE: 'Enhets', + PRODUCT: 'Produkt', + VERSION: 'Versjon', BRAND: 'Fabrikat', ENTITY_NAME: 'Objektsnavn', VALUE: '{{Verdi|verdi}}', @@ -60,7 +64,7 @@ const no: Translation = { STARTVALUE: 'Startverdi', WARN_GPIO: 'Advarsel: vær forsiktig ved aktivering av GPIO!', EDIT: 'Endre', - TEMP_SENSOR: 'Temperatursensor', + TEMP_SENSOR: '{{Sensor|Temperatursensor}}', TEMP_SENSORS: 'Temperaturesensorer', WRITE_COMMAND: 'Skriv kommando {cmd}', EMS_BUS_WARNING: @@ -103,11 +107,15 @@ const no: Translation = { BOARD_PROFILE_TEXT: 'Velg en pre-konfigurert prosessor profil fra listen under eller velg Tilpasset for å konfigurere dine egne innstillinger', BOARD_PROFILE: 'Prosessor Profil', + CUSTOM: 'Custom', + GPIO_OF: '{0} GPIO', BUTTON: 'Knapp', TEMPERATURE: 'Temperatur', PHY_TYPE: 'Eth PHY Type', DISABLED: 'avslått', TX_MODE: 'Tx Mode', + HARDWARE: 'Hardware', + EMS_BUS: '{{BUS|EMS BUS}}', GENERAL_OPTIONS: 'Generelle Innstillinger', LANGUAGE_ENTITIES: 'Språk (for objekter)', HIDE_LED: 'Skjul LED', @@ -223,9 +231,12 @@ const no: Translation = { ERRORS_OF: '{0} Feil', DISCONNECT_REASON: 'Årsak til nedkobling', ENABLE_MQTT: 'Aktiver MQTT', + BROKER: 'Broker', + CLIENT: 'Client', + BASE_TOPIC: 'Base', OPTIONAL: 'Valgfritt', FORMATTING: 'Formatering', - FORMAT: 'Format', + MQTT_FORMAT: 'Topic/Payload Format', MQTT_NEST_1: 'Nestet i en topic', MQTT_NEST_2: 'Som individuelle topics', MQTT_RESPONSE: 'Publiser kommandoer til en `response` topic', @@ -277,15 +288,17 @@ const no: Translation = { NETWORK_USE_DNS: 'Aktiviser mDNS Service', NETWORK_ENABLE_IPV6: 'Aktiviser IPv6 støtte', NETWORK_FIXED_IP: 'Benytt statisk IP adresse', - NETWORK_GATEWAY: 'Getaway', - NETWORK_SUBNET: 'Subnet Mask', + NETWORK_GATEWAY: 'Gateway', + NETWORK_SUBNET: 'Nettverksmaske', NETWORK_DNS: 'DNS Servers', ADDRESS_OF: '{0} Address', ADMIN: 'Admin', GUEST: 'Gjest', NEW: 'Ny', - RENAME: 'Bytt navn', - ENTITY: 'Entitet' + NEW_NAME_OF: 'Bytt navn {0}', + ENTITY: 'Entitet', + MIN: 'min', + MAX: 'max' }; export default no; diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts index b974a6d6a..767d9a586 100644 --- a/interface/src/i18n/pl/index.ts +++ b/interface/src/i18n/pl/index.ts @@ -4,21 +4,21 @@ const pl: Translation = { LANGUAGE: 'Język', RETRY: 'Ponów', LOADING: 'Ładowanie', - IS_REQUIRED: 'Czy wymagany?', - SIGN_IN: 'Zaloguj', - SIGN_OUT: 'Wyloguj', - USERNAME: 'Nazwa użytkownika', + IS_REQUIRED: 'Pole {0} nie może być puste!', + SIGN_IN: 'Zaloguj się', + SIGN_OUT: 'Wyloguj się', + USERNAME: '{{Użytkownik|Nazwa użytkownika|}}', PASSWORD: 'Hasło', SU_PASSWORD: 'Hasło "su"', DASHBOARD: 'Pulpit', SETTINGS_OF: 'Ustawienia {0}', SAVED: 'zostały zapisane.', HELP_OF: 'Pomoc {0}', - LOGGED_IN: 'Zalogowany jako {name}.', + LOGGED_IN: 'Zalogowano użytkownika {name}.', PLEASE_SIGNIN: 'Zaloguj się aby kontynuować.', UPLOAD_SUCCESSFUL: 'Wysyłanie zakończone.', DOWNLOAD_SUCCESSFUL: 'Pobieranie zakończone.', - INVALID_LOGIN: 'Niepoprawny login!', + INVALID_LOGIN: 'Nieprawidłowy użytkownik lub hasło!', NETWORK: '{{Sieć|sieci|}}', SECURITY: '{{B|b|}}ezpieczeństw{{o|a|}}', ONOFF_CAP: 'wł./wył.', @@ -29,9 +29,13 @@ const pl: Translation = { REFRESH: 'Odśwież', EXPORT: 'Eksportuj', DEVICE_DETAILS: 'Szczegóły urządzenia', + ID_OF: 'ID {0}', + DEVICE: 'urządzenia', + PRODUCT: 'produktu', BRAND: 'Marka', + VERSION: 'Wersja', ENTITY_NAME: 'Nazwa encji', - VALUE: '{{Wartość|wartość|}}', + VALUE: '{{W|w|}}artość', SHOW_FAV: 'Pokaż tylko "ulubione"', DEVICE_SENSOR_DATA: 'Dane z urządzeń i czujników', DEVICES_SENSORS: 'Urządzenia i czujniki', @@ -39,7 +43,7 @@ const pl: Translation = { RUN_COMMAND: 'Wykonaj komendę', CHANGE_VALUE: 'Zmień wartość', CANCEL: 'Anuluj', - RESET: '{{Resetuj|Resetowanie|}}', + RESET: 'Reset{{uj|owanie|}}', SEND: 'Wyślij', SAVE: 'Zapisz', REMOVE: 'Usuń', @@ -52,23 +56,23 @@ const pl: Translation = { UPDATE_OF: 'Aktualizacja {0}', REMOVED_OF: 'Usunięto ustawienia {0}.', DELETION_OF: 'Kasowanie {0}', - OFFSET: 'Korekta +/-', + OFFSET: 'Korekta ±', FACTOR: 'Mnożnik', FREQ: 'Częstotliwość', DUTY_CYCLE: 'Wypełnienie', UNIT: 'J.m.', STARTVALUE: 'Wartość początkowa', - WARN_GPIO: 'Uwaga! Bądź ostrożny przypisując GPIO do czujnika!', + WARN_GPIO: 'Uwaga! Zachowaj ostrożność przypisując GPIO do urządzenia!', EDIT: 'Edycja', - TEMP_SENSOR: 'czujnika temperatury', + TEMP_SENSOR: '{{czujnika temperatury|czujnika|}}', TEMP_SENSORS: 'Czujniki temperatury 1-Wire®', WRITE_COMMAND: 'Wyślij komendę {cmd}', EMS_BUS_WARNING: 'Brak połączenia z magistralą EMS. Jeśli ten błąd występuje dłużej niż kilka sekund, sprawdź ustawienia oraz profil płytki interfejsu.', - EMS_BUS_SCANNING: 'Trwa skanowanie magistrali EMS w poszukiwaniu urządzeń...', + EMS_BUS_SCANNING: 'Trwa skanowanie urządzeń na magistrali EMS...', CONNECTED: '{{połączono|połączenie|}}', - TX_ISSUES: 'Problem z zapisem na magistralę EMS. Spróbuj wybrać inny "Sposób transmisji (Tx)".', - DISCONNECTED: 'zostało rozłączone', + TX_ISSUES: 'Problem z zapisem na magistralę EMS. Spróbuj wybrać inny "Tryb transmisji (Tx)".', + DISCONNECTED: 'brak połączenia', EMS_SCAN: 'Czy na pewno wykonać pełne skanowanie magistrali EMS?', EMS_BUS_STATUS: 'Status magistrali EMS', ACTIVE_DEVICES: 'Aktywne urządzenia i czujniki', @@ -87,11 +91,11 @@ const pl: Translation = { 'Odczyty czujników analogowych i cyfrowych', 'Publikacje MQTT', 'Wywołania API', - 'Wpisy w logu systemowym' + 'Wpisy w SysLog' ], NUM_DEVICES: '{num} urządze{{ń|nie|nia|nia|ń}} EMS', NUM_TEMP_SENSORS: '{num} czujni{{ków|k|ki|ki|ków}} temperatury', - NUM_ANALOG_SENSORS: '{num} czujni{{ków|k|ki(two)|ki|ków}} analogow{{ych|y|e|e|ych}}', + NUM_ANALOG_SENSORS: '{num} inn{{ych|e|e|e|ych}} urządze{{ń|nie|nia(two)|nia|ń}} podłączon{{ych|e|e|e|ych}} do EMS-ESP', NUM_DAYS: '{num} {{dni|dzień|dni|dni|dni}}', NUM_SECONDS: '{num} sekun{{d|da|dy|dy|d}}', NUM_HOURS: '{num} godzi{{n|na|ny|ny|n}}', @@ -100,13 +104,17 @@ const pl: Translation = { CUSTOMIZATION: 'Personalizacja', APPLICATION_RESTARTING: 'Trwa ponowne uruchamianie...', INTERFACE_BOARD_PROFILE: 'Profil płytki interfejsu', - BOARD_PROFILE_TEXT: 'Wybierz z listy wstępną konfigurację płytki interfejsu lub stwórz własną konfigurację.', + BOARD_PROFILE_TEXT: 'Wybierz z listy gotowy profil płytki interfejsu lub wybierając "własny..." skonfiguruj posiadany sprzęt samodzielnie.', BOARD_PROFILE: 'Profil płytki', - BUTTON: 'Przycisk', + CUSTOM: 'własny', + GPIO_OF: 'GPIO {0}', + BUTTON: 'przycisku', TEMPERATURE: '1-Wire®', PHY_TYPE: 'Typ układu ethernetowego (PHY)', - DISABLED: 'wyłączony', - TX_MODE: 'Sposób transmisji (Tx)', + DISABLED: '{{wyłączono|brak|}}', + TX_MODE: 'Tryb transmisji (Tx)', + EMS_BUS: '{{magistrali EMS|na magistrali|}}', + HARDWARE: 'sprzętowy', GENERAL_OPTIONS: 'Opcje podstawowe', LANGUAGE_ENTITIES: 'Język encji', HIDE_LED: 'Wyłącz LED', @@ -121,9 +129,9 @@ const pl: Translation = { TRIGGER_TIME: 'Wyzwalaj po czasie', COLD_SHOT_DURATION: 'Czas trwania tryśnięcia zimnej wody', FORMATTING_OPTIONS: 'Opcje formatowania', - BOOLEAN_FORMAT_DASHBOARD: 'Format wartości binarnych dla pulpitu', - BOOLEAN_FORMAT_API: 'Format wartości binarnych dla API/MQTT', - ENUM_FORMAT: 'Format wartości numerowanych dla API/MQTT', + BOOLEAN_FORMAT_DASHBOARD: 'Wartości dwustanowe na pulpicie', + BOOLEAN_FORMAT_API: 'Wartości dwustanowe w API/MQTT', + ENUM_FORMAT: 'Wartości z listy w API/MQTT', INDEX: 'indeks', ENABLE_PARASITE: 'Aktywuj zasilanie pasożytnicze', LOGGING: 'Logowanie', @@ -143,29 +151,29 @@ const pl: Translation = { CUSTOMIZATIONS_SAVED: 'Personalizacje zostały zapisane.', CUSTOMIZATIONS_HELP_1: 'Wybierz urządzenie EMS, dostosuj opcje lub kliknij by zmienić nazwę encji.', CUSTOMIZATIONS_HELP_2: 'oznacz jako ulubioną', - CUSTOMIZATIONS_HELP_3: 'zablokuj możliwość zapisu', + CUSTOMIZATIONS_HELP_3: 'zablokuj akcje zapisu', CUSTOMIZATIONS_HELP_4: 'wyklucz z MQTT i API', CUSTOMIZATIONS_HELP_5: 'ukryj na pulpicie', SELECT_DEVICE: 'wybierz urządzenie', - SET_ALL: 'Zaznacz wszystko jako', + SET_ALL: 'Ustaw wszystko jako', OPTIONS: 'Opcje', - NAME: 'nazwa', + NAME: '{{Nazwa|nazwa|}}', CUSTOMIZATIONS_RESET: 'Czy jesteś pewien, że chcesz usunąć wszystkie personalizacje łącznie z ustawieniami dla czujników temperatury 1-Wire® i urządzeń podłączonych do EMS-ESP?', DEVICE_ENTITIES: 'Encje urządzenia', USER_CUSTOMIZATION: 'Personalizacje użytkownika', SUPPORT_INFORMATION: 'Informacje dotyczące wsparcia', CLICK_HERE: 'Kliknij tu', - HELP_INFORMATION_1: 'W celu znalezienia szczegółowych instrukcji jak skonfigurować EMS-ESP skorzystaj z wiki', - HELP_INFORMATION_2: 'W celu komunikacji na żywo ze społecznością skorzystaj z serwera Discord', + HELP_INFORMATION_1: 'Aby uzyskać instrukcje dotyczące konfiguracji EMS-ESP skorzystaj z wiki w internecie', + HELP_INFORMATION_2: 'Aby dołączyć do naszego serwera Discord i komunikować się na żywo ze społecznością', HELP_INFORMATION_3: 'Aby zaproponować nową funkcjonalność lub zgłosić problem', - HELP_INFORMATION_4: 'zgłaszając problem, nie zapomnij dołączyć informacji o swoim systemie', + HELP_INFORMATION_4: 'Zgłaszając problem, nie zapomnij dołączyć informacji o swoim systemie!', HELP_INFORMATION_5: 'EMS-ESP jest darmowym projektem typu open-source. Aby go wesprzeć, rozważ przyznanie nam gwiazdki na Github!', SUPPORT_INFO: 'Pobierz informacje', UPLOAD_OF: 'Wysyłanie {0}', UPLOAD: 'Wysyłanie', - DOWNLOAD: '{{P|p|P}}obier{{anie|z|z}}', + DOWNLOAD: '{{P|p||P}}obier{{anie|z||z}}', ABORTED: 'zostało przerwane!', FAILED: 'nie powiodło się!', SUCCESSFUL: 'powiodło się.', @@ -193,7 +201,7 @@ const pl: Translation = { CPU_FREQ: 'Taktowanie CPU', HEAP: 'HEAP (wolne / maksymalny przydział)', PSRAM: 'PSRAM (rozmiar / wolne)', - FLASH: 'Układ pamięci flash (rozmiar / taktowanie)', + FLASH: 'Flash (rozmiar / taktowanie)', APPSIZE: 'Aplikacja (wykorzystane / wolne)', FILESYSTEM: 'System plików (wykorzystane / wolne)', BUFFER_SIZE: 'Rozmiar bufora', @@ -202,15 +210,15 @@ const pl: Translation = { DOWNLOAD_CUSTOMIZATION_TEXT: 'Pobierz personalizacje', DOWNLOAD_SETTINGS_TEXT: 'Pobierz ustawienia aplikacji. Uważaj jeśli udostępniasz plik z ustawieniami, ponieważ zawiera on hasła oraz inne wrażliwe informacje!', - UPLOAD_TEXT: 'Wyślij firmware (.bin), ustawienia lub personalizacje (.json)', + UPLOAD_TEXT: 'Wyślij firmware (.bin), ustawienia lub personalizacje (.json). Opcjonalnie, wyślij wcześniej plik walidacji (.md5).', UPLOADING: 'Wysłano', UPLOAD_DROP_TEXT: 'Przeciągnij tutaj plik lub kliknij', ERROR: 'Nieoczekiwany błąd, spróbuj ponownie!', - TIME_SET: 'Ustaw czas', + TIME_SET: 'Zegar został ustawiony.', MANAGE_USERS: 'Zarządzanie użytkownikami', - IS_ADMIN: '{{Admin?|Uprawnienia administratora|}}', + IS_ADMIN: '{{Administrator|Uprawnienia administratora|}}', USER_WARNING: 'Przynajmniej jeden użytkownik musi mieć uprawnienia administratora!', - ADD: 'Doda{{j|wanie|C}}', + ADD: 'Doda{{j|wanie|}}', ACCESS_TOKEN_FOR: 'Token dostępu dla użytkownika', ACCESS_TOKEN_TEXT: 'Token jest używany w wywołaniach REST API wymagających autoryzacji. Można go przekazywać bezpośrednio lub przez URL.', @@ -218,29 +226,32 @@ const pl: Translation = { USER: '{{Użytkownik|użytkownika|}}', MODIFY: 'Edycja', SU_TEXT: - 'Hasło "su" (super-użytkownika) jest wykorzystywane do autoryzacji tokenów oraz dostępu do konsoli z uprawnieniami administratora.', - NOT_ENABLED: 'nieaktywowany', + 'Hasło "su" (super-użytkownika) służy do podpisywania tokenów autoryzujących oraz włączania uprawnień administratora w konsoli.', + NOT_ENABLED: 'nieaktywny', ERRORS_OF: 'Błędy {0}', - DISCONNECT_REASON: 'Powód rozłączenia', + DISCONNECT_REASON: 'Przyczyna braku połączenia', ENABLE_MQTT: 'Aktywuj MQTT', + BROKER: 'brokera', + CLIENT: 'klienta', + BASE_TOPIC: 'Prefiks bazowy', OPTIONAL: 'opcjonalny', FORMATTING: 'Formatowanie', - FORMAT: 'Format', + MQTT_FORMAT: 'Sposób publikowania danych', MQTT_NEST_1: 'zagnieżdżone w pojedynczym temacie', MQTT_NEST_2: 'jako indywidualne tematy', - MQTT_RESPONSE: 'Publikuj odpowiedzi na komendy w temacie "response"', - MQTT_PUBLISH_TEXT_1: 'Publikuj pojedyńcze wartości po zmianie', + MQTT_RESPONSE: 'Rezultat wykonania komendy publikuj w temacie "response"', + MQTT_PUBLISH_TEXT_1: 'Publikuj tematy z pojedynczą wartością bezpośrednio po zmianie', MQTT_PUBLISH_TEXT_2: 'Publikuj w temacie "command" (ioBroker)', - MQTT_PUBLISH_TEXT_3: 'Włącz opcję MQTT Discovery (Home Assistant, Domoticz)', - MQTT_PUBLISH_TEXT_4: 'Prefiks do tematów "discovery"', - MQTT_PUBLISH_INTERVALS: 'Interwał publikowania', + MQTT_PUBLISH_TEXT_3: 'Włącz opcję "MQTT discovery" (Home Assistant, Domoticz)', + MQTT_PUBLISH_TEXT_4: 'Prefiks dla tematów "MQTT discovery"', + MQTT_PUBLISH_INTERVALS: 'Interwały publikowania', MQTT_INT_BOILER: 'Kotły i pompy ciepła', MQTT_INT_THERMOSTATS: 'Termostaty', MQTT_INT_SOLAR: 'Panele solarne', MQTT_INT_MIXER: 'Mieszacze', MQTT_QUEUE: 'Kolejka MQTT', - DEFAULT: 'Domyślnie', - MQTT_CLEAN_SESSION: 'Ustawiaj "Clean session"', + DEFAULT: '{{Pozostałe|Domyślna|}}', + MQTT_CLEAN_SESSION: 'Ustawiaj flagę "Clean session"', MQTT_RETAIN_FLAG: 'Ustawiaj flagę "Retain"', INACTIVE: 'nieaktywny', ACTIVE: 'aktywny', @@ -253,7 +264,7 @@ const pl: Translation = { NTP_SERVER: 'Serwer NTP', TIME_ZONE: 'Strefa czasowa', ACCESS_POINT: '{{Punkt|punktu|}} {{dostępowy|dostępowego|}}', - AP_PROVIDE: 'Aktywuj punkt dostępowy (Access Point)', + AP_PROVIDE: 'Aktywuj punkt dostępowy', AP_PROVIDE_TEXT_1: 'zawsze', AP_PROVIDE_TEXT_2: 'gdy połączenie WiFi jest rozłączone', AP_PROVIDE_TEXT_3: 'nigdy', @@ -262,7 +273,7 @@ const pl: Translation = { AP_CLIENTS: 'Liczba klientów', AP_MAX_CLIENTS: 'Maksymalna liczba klientów', AP_LOCAL_IP: 'Lokalny adres IP', - NETWORK_SCAN: 'Skanuj sieci WiFi', + NETWORK_SCAN: 'Skanowanie sieci WiFi', IDLE: 'uśpiony', LOST: 'zostało utracone.', SCANNING: 'Skanuję', @@ -281,11 +292,13 @@ const pl: Translation = { NETWORK_SUBNET: 'Maska podsieci', NETWORK_DNS: 'Serwery DNS', ADDRESS_OF: 'Adres {0}', - ADMIN: 'Administrator', - GUEST: 'Gość', + ADMIN: 'Użytkownik "administrator".', + GUEST: 'Użytkownik "gość".', NEW: 'Nowy', - RENAME: 'Zmień nazwę', - ENTITY: 'encji' + NEW_NAME_OF: 'Nowa nazwa {0}', + ENTITY: 'encji', + MIN: 'Min.', + MAX: 'Maks.' }; export default pl; diff --git a/interface/src/i18n/se/index.ts b/interface/src/i18n/se/index.ts index d8beb47a7..3e7aa0bad 100644 --- a/interface/src/i18n/se/index.ts +++ b/interface/src/i18n/se/index.ts @@ -4,7 +4,7 @@ const se: Translation = { LANGUAGE: 'Språk', RETRY: 'Försök igen', LOADING: 'Laddar', - IS_REQUIRED: 'Krävs', + IS_REQUIRED: '{0} Krävs', SIGN_IN: 'Logga In', SIGN_OUT: 'Logga Ut', USERNAME: 'Användarnamn', @@ -29,6 +29,10 @@ const se: Translation = { REFRESH: 'Uppdatera', EXPORT: 'Exportera', DEVICE_DETAILS: 'Enhetsdetaljer', + ID_OF: '{0}-ID', + DEVICE: 'Enhets', + PRODUCT: 'Produkt', + VERSION: 'Version', BRAND: 'Fabrikat', ENTITY_NAME: 'Entitetsnamn', VALUE: '{{Värde|värde}}', @@ -60,7 +64,7 @@ const se: Translation = { STARTVALUE: 'Startvärde', WARN_GPIO: 'Varning: Var försiktig vid aktivering av GPIO!', EDIT: 'Ändra', - TEMP_SENSOR: 'Temperatursensor', + TEMP_SENSOR: '{{Sensor|Temperatursensor}}', TEMP_SENSORS: 'Temperatursensorer', WRITE_COMMAND: 'Skrivkommando {cmd}', EMS_BUS_WARNING: @@ -103,11 +107,15 @@ const se: Translation = { BOARD_PROFILE_TEXT: 'Välj en förkonfigurerad hårdvaruprofil från listan nedan eller välj Anpassad för att konfigurera dina egna hårdvaruinställningar', BOARD_PROFILE: 'Hårdvaruprofil', + CUSTOM: 'Custom', + GPIO_OF: '{0} GPIO', BUTTON: 'Knapp', TEMPERATURE: 'Temperatur', PHY_TYPE: 'Eth PHY-typ', DISABLED: 'inaktiverad', TX_MODE: 'Tx Mode', + HARDWARE: 'Hardware', + EMS_BUS: '{{BUS|EMS BUS}}', GENERAL_OPTIONS: 'Allmänna Inställningar', LANGUAGE_ENTITIES: 'Språk (för entiteter)', HIDE_LED: 'Inaktivera LED', @@ -223,9 +231,12 @@ const se: Translation = { ERRORS_OF: '{0} fel', DISCONNECT_REASON: 'Anledning till nedkoppling', ENABLE_MQTT: 'Aktivera MQTT', + BROKER: 'Broker', + CLIENT: 'Client', + BASE_TOPIC: 'Base', OPTIONAL: 'Valfritt', FORMATTING: 'Formatering', - FORMAT: 'Format', + MQTT_FORMAT: 'Topic/Payload Format', MQTT_NEST_1: 'Nestlat i en topic.', MQTT_NEST_2: 'Som individuella topics', MQTT_RESPONSE: 'Publish-kommando som ett `response` topic', @@ -284,8 +295,10 @@ const se: Translation = { ADMIN: 'Admin', GUEST: 'Gäst', NEW: 'Ny', - RENAME: 'Byt namn', - ENTITY: 'Entitet' + NEW_NAME_OF: 'Byt namn {0}', + ENTITY: 'Entitet', + MIN: 'min', + MAX: 'max' }; export default se; diff --git a/interface/src/project/DashboardData.tsx b/interface/src/project/DashboardData.tsx index 04d0bda83..8d96666d7 100644 --- a/interface/src/project/DashboardData.tsx +++ b/interface/src/project/DashboardData.tsx @@ -559,11 +559,11 @@ const DashboardData: FC = () => { offset: sensor.o }); if (response.status === 204) { - enqueueSnackbar(LL.UPLOAD_OF(LL.TEMP_SENSOR()) + ' ' + LL.FAILED(), { variant: 'error' }); + enqueueSnackbar(LL.UPLOAD_OF(LL.TEMP_SENSOR(0)) + ' ' + LL.FAILED(), { variant: 'error' }); } else if (response.status === 403) { enqueueSnackbar(LL.ACCESS_DENIED(), { variant: 'error' }); } else { - enqueueSnackbar(LL.UPDATED_OF(LL.TEMP_SENSOR()), { variant: 'success' }); + enqueueSnackbar(LL.UPDATED_OF(LL.TEMP_SENSOR(0)), { variant: 'success' }); } setSensor(undefined); } catch (error) { @@ -580,11 +580,11 @@ const DashboardData: FC = () => { return ( setSensor(undefined)}> - {LL.EDIT()} {LL.TEMP_SENSOR()} + {LL.EDIT()} {LL.TEMP_SENSOR(0)} - Sensor ID: {sensor.id} + {LL.ID_OF(LL.TEMP_SENSOR(1))}: {sensor.id} @@ -649,22 +649,22 @@ const DashboardData: FC = () => { - + - + - + diff --git a/interface/src/project/SettingsApplication.tsx b/interface/src/project/SettingsApplication.tsx index f73617d31..85379faf8 100644 --- a/interface/src/project/SettingsApplication.tsx +++ b/interface/src/project/SettingsApplication.tsx @@ -133,7 +133,7 @@ const SettingsApplication: FC = () => { {boardProfileSelectItems()} - Custom… + {LL.CUSTOM()}… {data.board_profile === 'CUSTOM' && ( @@ -143,7 +143,7 @@ const SettingsApplication: FC = () => { { { { { { margin="normal" select > - {LL.DISABLED()} + {LL.DISABLED(1)} LAN8720 TLK110 @@ -232,7 +232,7 @@ const SettingsApplication: FC = () => { { { { )} - {LL.SETTINGS_OF('EMS BUS')} + {LL.SETTINGS_OF(LL.EMS_BUS(0))} @@ -296,13 +296,13 @@ const SettingsApplication: FC = () => { EMS EMS+ HT3 - Hardware + {LL.HARDWARE()} { const entities_theme = useTheme({ Table: ` - --data-table-library_grid-template-columns: 120px repeat(1, minmax(80px, 1fr)) 40px 40px 120px; + --data-table-library_grid-template-columns: 120px repeat(1, minmax(80px, 1fr)) 45px 45px 120px; `, BaseRow: ` font-size: 14px; @@ -455,11 +455,11 @@ const SettingsCustomization: FC = () => { {LL.OPTIONS()} - min - max + {LL.MIN()} + {LL.MAX()} {LL.VALUE(0)}
@@ -582,7 +582,7 @@ const SettingsCustomization: FC = () => { const de = deviceEntity; return ( setDeviceEntity(undefined)}> - {LL.EDIT() + ' ' + LL.ENTITY() + ' ' + de.id} + {LL.EDIT() + ' ' + LL.ENTITY() + ' "' + de.id + '"'} { - {LL.DEFAULT() + ' ' + LL.NAME()}: {deviceEntity.n} + {LL.DEFAULT(1) + ' ' + LL.NAME(1)}: {deviceEntity.n} { {