@iobroker/adapter-react-v5 7.4.22 → 7.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -22
- package/build/AdminConnection.js.map +1 -1
- package/build/Components/404.js +13 -13
- package/build/Components/404.js.map +1 -1
- package/build/Components/ColorPicker.js.map +1 -1
- package/build/Components/ComplexCron.js.map +1 -1
- package/build/Components/CopyToClipboard.js.map +1 -1
- package/build/Components/CustomModal.js.map +1 -1
- package/build/Components/FileBrowser.js +1 -1
- package/build/Components/FileBrowser.js.map +1 -1
- package/build/Components/FileViewer.js.map +1 -1
- package/build/Components/Icon.js.map +1 -1
- package/build/Components/IconPicker.js.map +1 -1
- package/build/Components/IconSelector.js.map +1 -1
- package/build/Components/IobUri.js.map +1 -1
- package/build/Components/Loader.js +223 -223
- package/build/Components/Loader.js.map +1 -1
- package/build/Components/Loaders/MV.js.map +1 -1
- package/build/Components/Loaders/PT.js +103 -103
- package/build/Components/Loaders/PT.js.map +1 -1
- package/build/Components/Loaders/Vendor.js +7 -7
- package/build/Components/Loaders/Vendor.js.map +1 -1
- package/build/Components/MDUtils.js.map +1 -1
- package/build/Components/ObjectBrowser.d.ts +25 -8
- package/build/Components/ObjectBrowser.js +46 -12
- package/build/Components/ObjectBrowser.js.map +1 -1
- package/build/Components/Router.js.map +1 -1
- package/build/Components/SaveCloseButtons.js.map +1 -1
- package/build/Components/Schedule.js.map +1 -1
- package/build/Components/SelectWithIcon.js.map +1 -1
- package/build/Components/SimpleCron/cronText.js.map +1 -1
- package/build/Components/SimpleCron/index.js.map +1 -1
- package/build/Components/TabContainer.js.map +1 -1
- package/build/Components/TabContent.js.map +1 -1
- package/build/Components/TabHeader.js.map +1 -1
- package/build/Components/TableResize.js.map +1 -1
- package/build/Components/TextWithIcon.js.map +1 -1
- package/build/Components/ToggleThemeMenu.js.map +1 -1
- package/build/Components/TreeTable.js.map +1 -1
- package/build/Components/UploadImage.js +305 -305
- package/build/Components/UploadImage.js.map +1 -1
- package/build/Components/withWidth.js.map +1 -1
- package/build/Connection.js.map +1 -1
- package/build/Dialogs/ComplexCron.js.map +1 -1
- package/build/Dialogs/Confirm.js.map +1 -1
- package/build/Dialogs/Cron.js.map +1 -1
- package/build/Dialogs/Error.js.map +1 -1
- package/build/Dialogs/Message.js.map +1 -1
- package/build/Dialogs/SelectFile.js.map +1 -1
- package/build/Dialogs/SelectID.d.ts +3 -0
- package/build/Dialogs/SelectID.js +17 -4
- package/build/Dialogs/SelectID.js.map +1 -1
- package/build/Dialogs/SimpleCron.js.map +1 -1
- package/build/Dialogs/TextInput.d.ts +1 -1
- package/build/Dialogs/TextInput.js.map +1 -1
- package/build/GenericApp.js.map +1 -1
- package/build/LegacyConnection.d.ts +4 -46
- package/build/LegacyConnection.js.map +1 -1
- package/build/Prompt.js +7 -7
- package/build/Prompt.js.map +1 -1
- package/build/assets/devices/parseNames.js.map +1 -1
- package/build/assets/devices.json +1 -1
- package/build/assets/lamp_ceiling.svg +8 -8
- package/build/assets/lamp_table.svg +7 -7
- package/build/assets/no_icon.svg +9 -9
- package/build/assets/rooms/parseNames.js.map +1 -1
- package/build/assets/rooms.json +1 -1
- package/build/dictionary.js.map +1 -1
- package/build/i18n/de.json +6 -0
- package/build/i18n/en.json +6 -0
- package/build/i18n/es.json +6 -0
- package/build/i18n/fr.json +6 -0
- package/build/i18n/it.json +6 -0
- package/build/i18n/nl.json +6 -0
- package/build/i18n/pl.json +6 -0
- package/build/i18n/pt.json +6 -0
- package/build/i18n/ru.json +6 -0
- package/build/i18n/uk.json +6 -0
- package/build/i18n/zh-cn.json +6 -0
- package/build/i18n.js.map +1 -1
- package/build/icons/IconAdapter.js.map +1 -1
- package/build/icons/IconAlias.js.map +1 -1
- package/build/icons/IconButtonImage.js.map +1 -1
- package/build/icons/IconChannel.js.map +1 -1
- package/build/icons/IconClearFilter.js.map +1 -1
- package/build/icons/IconClosed.js.map +1 -1
- package/build/icons/IconCopy.js.map +1 -1
- package/build/icons/IconDevice.js.map +1 -1
- package/build/icons/IconDocument.js.map +1 -1
- package/build/icons/IconDocumentReadOnly.js.map +1 -1
- package/build/icons/IconExpert.js.map +1 -1
- package/build/icons/IconFx.js +1 -1
- package/build/icons/IconFx.js.map +1 -1
- package/build/icons/IconInstance.js.map +1 -1
- package/build/icons/IconLogout.js +1 -1
- package/build/icons/IconLogout.js.map +1 -1
- package/build/icons/IconNoIcon.js.map +1 -1
- package/build/icons/IconOpen.js.map +1 -1
- package/build/icons/IconProps.js.map +1 -1
- package/build/icons/IconState.js.map +1 -1
- package/build/icons/IconVacuum.js.map +1 -1
- package/build/index.css +56 -56
- package/build/index.js.map +1 -1
- package/craco-module-federation.js +62 -62
- package/i18n/de.json +6 -0
- package/i18n/en.json +6 -0
- package/i18n/es.json +6 -0
- package/i18n/fr.json +6 -0
- package/i18n/it.json +6 -0
- package/i18n/nl.json +6 -0
- package/i18n/pl.json +6 -0
- package/i18n/pt.json +6 -0
- package/i18n/ru.json +6 -0
- package/i18n/uk.json +6 -0
- package/i18n/zh-cn.json +6 -0
- package/index.css +56 -56
- package/modulefederation.admin.config.js +33 -33
- package/package.json +4 -5
- package/tasksExample.js +91 -91
package/build/dictionary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictionary.js","sourceRoot":"./src/","sources":["dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAuD;IAC1E,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,OAAO,EAAE,QAAQ;CACpB,CAAC","sourcesContent":["import langEn from './i18n/en.json';\nimport langDe from './i18n/de.json';\nimport langRu from './i18n/ru.json';\nimport langPt from './i18n/pt.json';\nimport langNl from './i18n/nl.json';\nimport langFr from './i18n/fr.json';\nimport langIt from './i18n/it.json';\nimport langEs from './i18n/es.json';\nimport langPl from './i18n/pl.json';\nimport langUk from './i18n/uk.json';\nimport langZhCn from './i18n/zh-cn.json';\n\nexport const dictionary: Record<ioBroker.Languages, Record<string, string>> = {\n en: langEn,\n de: langDe,\n ru: langRu,\n pt: langPt,\n nl: langNl,\n fr: langFr,\n it: langIt,\n es: langEs,\n pl: langPl,\n uk: langUk,\n 'zh-cn': langZhCn,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"dictionary.js","sourceRoot":"./src/","sources":["dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,MAAM,MAAM,gBAAgB,CAAC;AACpC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAuD;IAC1E,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,OAAO,EAAE,QAAQ;CACpB,CAAC","sourcesContent":["import langEn from './i18n/en.json';\r\nimport langDe from './i18n/de.json';\r\nimport langRu from './i18n/ru.json';\r\nimport langPt from './i18n/pt.json';\r\nimport langNl from './i18n/nl.json';\r\nimport langFr from './i18n/fr.json';\r\nimport langIt from './i18n/it.json';\r\nimport langEs from './i18n/es.json';\r\nimport langPl from './i18n/pl.json';\r\nimport langUk from './i18n/uk.json';\r\nimport langZhCn from './i18n/zh-cn.json';\r\n\r\nexport const dictionary: Record<ioBroker.Languages, Record<string, string>> = {\r\n en: langEn,\r\n de: langDe,\r\n ru: langRu,\r\n pt: langPt,\r\n nl: langNl,\r\n fr: langFr,\r\n it: langIt,\r\n es: langEs,\r\n pl: langPl,\r\n uk: langUk,\r\n 'zh-cn': langZhCn,\r\n};\r\n"]}
|
package/build/i18n/de.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Spalten Konfigurieren",
|
|
47
47
|
"ra_Confirm deletion of %s": "Das Löschen von %s bestätigen",
|
|
48
48
|
"ra_Connected": "Verbunden",
|
|
49
|
+
"ra_Continue": "Weitermachen",
|
|
49
50
|
"ra_Copied": "Kopiert",
|
|
50
51
|
"ra_Copied %s": "\"%s\" kopiert",
|
|
51
52
|
"ra_Copy content": "Inhalte kopieren",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Gerät → Kanal → Zustand",
|
|
67
68
|
"ra_Discard": "Verwerfen",
|
|
68
69
|
"ra_Disconnected": "Getrennt",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Fragen Sie nicht nach den nächsten 2 Stunden in dieser Sitzung",
|
|
69
71
|
"ra_Do not export values of states": "Keine Zustandswerte exportieren",
|
|
70
72
|
"ra_Do not use let's encrypt": "Let's encrypt nicht verwenden",
|
|
71
73
|
"ra_Double click to reset table layout": "Doppelklicken, um das Tabellenlayout zurückzusetzen",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "ACL bearbeiten",
|
|
77
79
|
"ra_Edit alias": "Alias bearbeiten",
|
|
78
80
|
"ra_Edit custom config": "Bearbeite Benutzerdefinierte Konfiguration",
|
|
81
|
+
"ra_Edit full path": "Vollständigen Pfad bearbeiten",
|
|
79
82
|
"ra_Edit function": "Funktion bearbeiten",
|
|
80
83
|
"ra_Edit object field": "Objektfeld bearbeiten",
|
|
81
84
|
"ra_Edit role": "Rolle bearbeiten",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Lizenz im Lizenzmanager nicht gefunden. Möchten Sie Lizenzen von iobroker.net aktualisieren?",
|
|
124
127
|
"ra_Listen on all IPs": "Zugriff von allen IPs zulassen",
|
|
125
128
|
"ra_Load configuration from file": "Konfiguration aus Datei laden",
|
|
129
|
+
"ra_Logout": "Ausloggen",
|
|
126
130
|
"ra_Longitude": "Längengrad",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Löst möglicherweise nicht „updateLicenses“ aus",
|
|
128
132
|
"ra_Message": "Meldung",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Qualität",
|
|
159
163
|
"ra_Refresh tree": "Baum aktualisieren",
|
|
160
164
|
"ra_Reload files": "Dateien neu laden",
|
|
165
|
+
"ra_Rename_Move_Copy": "Umbenennen/Verschieben/Kopieren",
|
|
161
166
|
"ra_Repeat": "Wiederholen",
|
|
162
167
|
"ra_Replace": "Ersetzen",
|
|
163
168
|
"ra_Request timed out": "Zeitüberschreitung der Anforderung",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "Ausgewählt %s Objekt(en)",
|
|
177
182
|
"ra_Serial number (UUID)": "Seriennummer (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Seriennummer (UUID) „%s“ in der Lizenz gilt für ein anderes Gerät.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "Die Sitzung läuft in %s Sekunden ab. Fortfahren?",
|
|
179
185
|
"ra_Show all folders": "Alle Ordner anzeigen",
|
|
180
186
|
"ra_Show lines between rows": "Linien zwischen Zeilen anzeigen",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Objektbeschreibungen ein-/ausblenden",
|
package/build/i18n/en.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Configure visible columns",
|
|
47
47
|
"ra_Confirm deletion of %s": "Confirm deletion of %s",
|
|
48
48
|
"ra_Connected": "Connected",
|
|
49
|
+
"ra_Continue": "Continue",
|
|
49
50
|
"ra_Copied": "Copied",
|
|
50
51
|
"ra_Copied %s": "Copied \"%s\"",
|
|
51
52
|
"ra_Copy content": "Copy content",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Device → Channel → State",
|
|
67
68
|
"ra_Discard": "Discard",
|
|
68
69
|
"ra_Disconnected": "Disconnected",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Do not ask for next 2 hours in this session",
|
|
69
71
|
"ra_Do not export values of states": "Do not export values of states",
|
|
70
72
|
"ra_Do not use let's encrypt": "Do not use let's encrypt",
|
|
71
73
|
"ra_Double click to reset table layout": "Double click to reset table layout",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Edit ACL",
|
|
77
79
|
"ra_Edit alias": "Edit alias",
|
|
78
80
|
"ra_Edit custom config": "Edit custom config",
|
|
81
|
+
"ra_Edit full path": "Edit full path",
|
|
79
82
|
"ra_Edit function": "Edit function",
|
|
80
83
|
"ra_Edit object field": "Edit object field",
|
|
81
84
|
"ra_Edit role": "Edit role",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "License not found in the license manager. Do you want to update licenses from iobroker.net?",
|
|
124
127
|
"ra_Listen on all IPs": "Listen on all IPs",
|
|
125
128
|
"ra_Load configuration from file": "Load configuration from file",
|
|
129
|
+
"ra_Logout": "Logout",
|
|
126
130
|
"ra_Longitude": "Longitude",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "May not trigger \"updateLicenses\"",
|
|
128
132
|
"ra_Message": "Message",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Quality",
|
|
159
163
|
"ra_Refresh tree": "Refresh tree",
|
|
160
164
|
"ra_Reload files": "Reload files",
|
|
165
|
+
"ra_Rename_Move_Copy": "Rename/Move/Copy",
|
|
161
166
|
"ra_Repeat": "Repeat",
|
|
162
167
|
"ra_Replace": "Replace",
|
|
163
168
|
"ra_Request timed out": "Request timed out",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "Selected %s object(s)",
|
|
177
182
|
"ra_Serial number (UUID)": "Serial number (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Serial number (UUID) \"%s\" in license is for other device.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "Session will expire in %s seconds. Continue?",
|
|
179
185
|
"ra_Show all folders": "Show all folders",
|
|
180
186
|
"ra_Show lines between rows": "Show lines between rows",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Show/Hide object descriptions",
|
package/build/i18n/es.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Configurar columnas visibles",
|
|
47
47
|
"ra_Confirm deletion of %s": "Confirmar la eliminación de %s",
|
|
48
48
|
"ra_Connected": "Conectado",
|
|
49
|
+
"ra_Continue": "Continuar",
|
|
49
50
|
"ra_Copied": "Copiado",
|
|
50
51
|
"ra_Copied %s": "Copiado \"%s\"",
|
|
51
52
|
"ra_Copy content": "Copiar contenido",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Dispositivo → Canal → Estado",
|
|
67
68
|
"ra_Discard": "Desechar",
|
|
68
69
|
"ra_Disconnected": "Desconectado",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "No preguntes por las siguientes 2 horas en esta sesión.",
|
|
69
71
|
"ra_Do not export values of states": "No exportar valores de estados.",
|
|
70
72
|
"ra_Do not use let's encrypt": "No use vamos a cifrar",
|
|
71
73
|
"ra_Double click to reset table layout": "Haga doble clic para restablecer el diseño de la tabla",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Editar LCA",
|
|
77
79
|
"ra_Edit alias": "Editar alias",
|
|
78
80
|
"ra_Edit custom config": "Editar configuración personalizada",
|
|
81
|
+
"ra_Edit full path": "Editar ruta completa",
|
|
79
82
|
"ra_Edit function": "Función de edición",
|
|
80
83
|
"ra_Edit object field": "Editar campo de objeto",
|
|
81
84
|
"ra_Edit role": "Editar rol",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Licencia no encontrada en el administrador de licencias. ¿Quieres actualizar las licencias de iobroker.net?",
|
|
124
127
|
"ra_Listen on all IPs": "Escuche en todas las IP",
|
|
125
128
|
"ra_Load configuration from file": "Cargar configuración desde archivo",
|
|
129
|
+
"ra_Logout": "Cerrar sesión",
|
|
126
130
|
"ra_Longitude": "Longitud",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "No puede activar \"updateLicenses\"",
|
|
128
132
|
"ra_Message": "Mensaje",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Calidad",
|
|
159
163
|
"ra_Refresh tree": "Actualizar árbol",
|
|
160
164
|
"ra_Reload files": "Recargar archivos",
|
|
165
|
+
"ra_Rename_Move_Copy": "Cambiar nombre/Mover/Copiar",
|
|
161
166
|
"ra_Repeat": "Repetir",
|
|
162
167
|
"ra_Replace": "Reemplazar",
|
|
163
168
|
"ra_Request timed out": "Tiempo de espera agotado",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "%s objetos seleccionados",
|
|
177
182
|
"ra_Serial number (UUID)": "Número de serie (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "El número de serie (UUID) \"%s\" en la licencia es para otro dispositivo.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "La sesión expirará en %s segundos. ¿Continuar?",
|
|
179
185
|
"ra_Show all folders": "Mostrar todas las carpetas",
|
|
180
186
|
"ra_Show lines between rows": "Mostrar líneas entre filas",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Mostrar/ocultar descripciones de objetos",
|
package/build/i18n/fr.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Configurer les colonnes visibles",
|
|
47
47
|
"ra_Confirm deletion of %s": "Confirmer la suppression de %s",
|
|
48
48
|
"ra_Connected": "Lié",
|
|
49
|
+
"ra_Continue": "Continuer",
|
|
49
50
|
"ra_Copied": "Copié",
|
|
50
51
|
"ra_Copied %s": "\"%s\" copié",
|
|
51
52
|
"ra_Copy content": "Copier le contenu",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Appareil → Canal → État",
|
|
67
68
|
"ra_Discard": "Jeter",
|
|
68
69
|
"ra_Disconnected": "Débranché",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Ne demandez pas les 2 prochaines heures de cette session",
|
|
69
71
|
"ra_Do not export values of states": "Ne pas exporter les valeurs des états",
|
|
70
72
|
"ra_Do not use let's encrypt": "Ne pas utiliser let's encrypt",
|
|
71
73
|
"ra_Double click to reset table layout": "Double-cliquez pour réinitialiser la disposition du tableau",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Modifier la LCA",
|
|
77
79
|
"ra_Edit alias": "Modifier l'alias",
|
|
78
80
|
"ra_Edit custom config": "Modifier la configuration personnalisée",
|
|
81
|
+
"ra_Edit full path": "Modifier le chemin complet",
|
|
79
82
|
"ra_Edit function": "Fonction d'édition",
|
|
80
83
|
"ra_Edit object field": "Modifier le champ d'objet",
|
|
81
84
|
"ra_Edit role": "Modifier le rôle",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Licence introuvable dans le gestionnaire de licences. Voulez-vous mettre à jour les licences depuis iobroker.net ?",
|
|
124
127
|
"ra_Listen on all IPs": "Écoutez sur toutes les adresses IP",
|
|
125
128
|
"ra_Load configuration from file": "Charger la configuration à partir du fichier",
|
|
129
|
+
"ra_Logout": "Déconnexion",
|
|
126
130
|
"ra_Longitude": "Longitude",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Peut ne pas déclencher \"updateLicences\"",
|
|
128
132
|
"ra_Message": "Message",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Qualité",
|
|
159
163
|
"ra_Refresh tree": "Rafraîchir l'arborescence",
|
|
160
164
|
"ra_Reload files": "Recharger les fichiers",
|
|
165
|
+
"ra_Rename_Move_Copy": "Renommer/Déplacer/Copier",
|
|
161
166
|
"ra_Repeat": "Répéter",
|
|
162
167
|
"ra_Replace": "Remplacer",
|
|
163
168
|
"ra_Request timed out": "La demande a expiré",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "Objet(s) %s sélectionné(s)",
|
|
177
182
|
"ra_Serial number (UUID)": "Numéro de série (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Le numéro de série (UUID) \"%s\" dans la licence est pour un autre appareil.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "La session expirera dans %s secondes. Continuer ?",
|
|
179
185
|
"ra_Show all folders": "Afficher tous les dossiers",
|
|
180
186
|
"ra_Show lines between rows": "Afficher les lignes entre les lignes",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Afficher/Masquer les descriptions d'objets",
|
package/build/i18n/it.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Configura colonne visibili",
|
|
47
47
|
"ra_Confirm deletion of %s": "Conferma l'eliminazione di %s",
|
|
48
48
|
"ra_Connected": "Collegato",
|
|
49
|
+
"ra_Continue": "Continuare",
|
|
49
50
|
"ra_Copied": "Copiato",
|
|
50
51
|
"ra_Copied %s": "\"%s\" copiato",
|
|
51
52
|
"ra_Copy content": "Copia contenuto",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Dispositivo → Canale → Stato",
|
|
67
68
|
"ra_Discard": "Scartare",
|
|
68
69
|
"ra_Disconnected": "Disconnesso",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Non chiedere per le prossime 2 ore in questa sessione",
|
|
69
71
|
"ra_Do not export values of states": "Non esportare i valori degli stati",
|
|
70
72
|
"ra_Do not use let's encrypt": "Non utilizzare crittografiamo",
|
|
71
73
|
"ra_Double click to reset table layout": "Fare doppio clic per ripristinare il layout della tabella",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Modifica ACL",
|
|
77
79
|
"ra_Edit alias": "Modifica alias",
|
|
78
80
|
"ra_Edit custom config": "Modifica configurazione personalizzata",
|
|
81
|
+
"ra_Edit full path": "Modifica percorso completo",
|
|
79
82
|
"ra_Edit function": "Funzione di modifica",
|
|
80
83
|
"ra_Edit object field": "Modifica campo oggetto",
|
|
81
84
|
"ra_Edit role": "Modifica ruolo",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Licenza non trovata nel gestore delle licenze. Vuoi aggiornare le licenze da iobroker.net?",
|
|
124
127
|
"ra_Listen on all IPs": "Ascolta su tutti gli IP",
|
|
125
128
|
"ra_Load configuration from file": "Carica la configurazione dal file",
|
|
129
|
+
"ra_Logout": "Esci",
|
|
126
130
|
"ra_Longitude": "Longitudine",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Potrebbe non attivare \"updateLicenses\"",
|
|
128
132
|
"ra_Message": "Messaggio",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Qualità",
|
|
159
163
|
"ra_Refresh tree": "Aggiorna l'albero",
|
|
160
164
|
"ra_Reload files": "Ricarica i file",
|
|
165
|
+
"ra_Rename_Move_Copy": "Rinomina/Sposta/Copia",
|
|
161
166
|
"ra_Repeat": "Ripetere",
|
|
162
167
|
"ra_Replace": "Sostituire",
|
|
163
168
|
"ra_Request timed out": "Tempo scaduto per la richiesta",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "%s oggetto/i selezionato/i",
|
|
177
182
|
"ra_Serial number (UUID)": "Numero di serie (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Il numero di serie (UUID) \"%s\" nella licenza è per un altro dispositivo.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "La sessione scadrà tra %s secondi. Continuare?",
|
|
179
185
|
"ra_Show all folders": "Mostra tutte le cartelle",
|
|
180
186
|
"ra_Show lines between rows": "Mostra linee tra le righe",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Mostra/Nascondi le descrizioni degli oggetti",
|
package/build/i18n/nl.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Configureer zichtbare kolommen",
|
|
47
47
|
"ra_Confirm deletion of %s": "Bevestig het verwijderen van %s",
|
|
48
48
|
"ra_Connected": "Verbonden",
|
|
49
|
+
"ra_Continue": "Doorgaan",
|
|
49
50
|
"ra_Copied": "Gekopieerd",
|
|
50
51
|
"ra_Copied %s": "\"%s\" gekopieerd",
|
|
51
52
|
"ra_Copy content": "Inhoud kopiëren",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Apparaat → Kanaal → Staat",
|
|
67
68
|
"ra_Discard": "Weggooien",
|
|
68
69
|
"ra_Disconnected": "Verbinding verbroken",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Vraag niet om de volgende 2 uur in deze sessie",
|
|
69
71
|
"ra_Do not export values of states": "Exporteer geen waarden van staten",
|
|
70
72
|
"ra_Do not use let's encrypt": "Gebruik geen let's encrypt",
|
|
71
73
|
"ra_Double click to reset table layout": "Dubbelklik om de tafelindeling te resetten",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "ACL bewerken",
|
|
77
79
|
"ra_Edit alias": "Alias bewerken",
|
|
78
80
|
"ra_Edit custom config": "Bewerk aangepaste config",
|
|
81
|
+
"ra_Edit full path": "Volledig pad bewerken",
|
|
79
82
|
"ra_Edit function": "Bewerkingsfunctie",
|
|
80
83
|
"ra_Edit object field": "Bewerk objectveld",
|
|
81
84
|
"ra_Edit role": "Rol bewerken",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Licentie niet gevonden in licentiebeheer. Wilt u licenties van iobroker.net bijwerken?",
|
|
124
127
|
"ra_Listen on all IPs": "Luister op alle IP's",
|
|
125
128
|
"ra_Load configuration from file": "Laad configuratie uit bestand",
|
|
129
|
+
"ra_Logout": "Uitloggen",
|
|
126
130
|
"ra_Longitude": "Lengtegraad",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Activeert mogelijk niet \"updateLicenses\"",
|
|
128
132
|
"ra_Message": "Bericht",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Kwaliteit",
|
|
159
163
|
"ra_Refresh tree": "Vernieuw de boom",
|
|
160
164
|
"ra_Reload files": "Laad bestanden opnieuw",
|
|
165
|
+
"ra_Rename_Move_Copy": "Hernoemen/Verplaatsen/Kopiëren",
|
|
161
166
|
"ra_Repeat": "Herhaling",
|
|
162
167
|
"ra_Replace": "Vervangen",
|
|
163
168
|
"ra_Request timed out": "Verzoek verlopen",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "Geselecteerde %s object(en)",
|
|
177
182
|
"ra_Serial number (UUID)": "Serienummer (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Serienummer (UUID) \"%s\" in licentie is voor ander apparaat.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "Sessie verloopt over %s seconden. Doorgaan?",
|
|
179
185
|
"ra_Show all folders": "Toon alle mappen",
|
|
180
186
|
"ra_Show lines between rows": "Toon lijnen tussen rijen",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Toon/verberg objectbeschrijvingen",
|
package/build/i18n/pl.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Skonfiguruj widoczne kolumny",
|
|
47
47
|
"ra_Confirm deletion of %s": "Potwierdź usunięcie %s",
|
|
48
48
|
"ra_Connected": "Połączony",
|
|
49
|
+
"ra_Continue": "Kontynuować",
|
|
49
50
|
"ra_Copied": "Skopiowano",
|
|
50
51
|
"ra_Copied %s": "Skopiowano \"%s\"",
|
|
51
52
|
"ra_Copy content": "Kopiuj zawartość",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Urządzenie → Kanał → Stan",
|
|
67
68
|
"ra_Discard": "Wyrzucać",
|
|
68
69
|
"ra_Disconnected": "Niepowiązany",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Nie proś o kolejne 2 godziny w tej sesji",
|
|
69
71
|
"ra_Do not export values of states": "Nie eksportuj wartości stanów",
|
|
70
72
|
"ra_Do not use let's encrypt": "Nie używaj zaszyfrujmy",
|
|
71
73
|
"ra_Double click to reset table layout": "Kliknij dwukrotnie, aby zresetować układ tabeli",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Edytuj listy ACL",
|
|
77
79
|
"ra_Edit alias": "Edytuj alias",
|
|
78
80
|
"ra_Edit custom config": "Edytuj konfigurację niestandardową",
|
|
81
|
+
"ra_Edit full path": "Edytuj pełną ścieżkę",
|
|
79
82
|
"ra_Edit function": "Funkcja edycji",
|
|
80
83
|
"ra_Edit object field": "Edytuj pole obiektu",
|
|
81
84
|
"ra_Edit role": "Edytuj rolę",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Nie znaleziono licencji w menedżerze licencji. Chcesz zaktualizować licencje z iobroker.net?",
|
|
124
127
|
"ra_Listen on all IPs": "Słuchaj na wszystkich adresach IP",
|
|
125
128
|
"ra_Load configuration from file": "Załaduj konfigurację z pliku",
|
|
129
|
+
"ra_Logout": "Wyloguj",
|
|
126
130
|
"ra_Longitude": "Długość geograficzna",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Może nie uruchamiać „updateLicenses”",
|
|
128
132
|
"ra_Message": "Wiadomość",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Jakości",
|
|
159
163
|
"ra_Refresh tree": "Odśwież drzewo",
|
|
160
164
|
"ra_Reload files": "Załaduj ponownie pliki",
|
|
165
|
+
"ra_Rename_Move_Copy": "Zmień nazwę/Przenieś/Kopiuj",
|
|
161
166
|
"ra_Repeat": "Powtarzać",
|
|
162
167
|
"ra_Replace": "Zastępować",
|
|
163
168
|
"ra_Request timed out": "Upłynął limit czasu żądania",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "Wybrane obiekty %s",
|
|
177
182
|
"ra_Serial number (UUID)": "Numer seryjny (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Numer seryjny (UUID) „%s” w licencji dotyczy innego urządzenia.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "Sesja wygaśnie za %s sekund. Kontynuować?",
|
|
179
185
|
"ra_Show all folders": "Pokaż wszystkie foldery",
|
|
180
186
|
"ra_Show lines between rows": "Pokaż linie między rzędami",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Pokaż/ukryj opisy obiektów",
|
package/build/i18n/pt.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Configurar colunas visíveis",
|
|
47
47
|
"ra_Confirm deletion of %s": "Confirme a exclusão de %s",
|
|
48
48
|
"ra_Connected": "Conectado",
|
|
49
|
+
"ra_Continue": "Continuar",
|
|
49
50
|
"ra_Copied": "Copiado",
|
|
50
51
|
"ra_Copied %s": "\"%s\" copiado",
|
|
51
52
|
"ra_Copy content": "Copiar conteúdo",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Dispositivo → Canal → Estado",
|
|
67
68
|
"ra_Discard": "Descartar",
|
|
68
69
|
"ra_Disconnected": "Desconectado",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Não peça as próximas 2 horas nesta sessão",
|
|
69
71
|
"ra_Do not export values of states": "Não exporte valores de estados",
|
|
70
72
|
"ra_Do not use let's encrypt": "Não use vamos criptografar",
|
|
71
73
|
"ra_Double click to reset table layout": "Clique duas vezes para redefinir o layout da tabela",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Editar ACL",
|
|
77
79
|
"ra_Edit alias": "Editar alias",
|
|
78
80
|
"ra_Edit custom config": "Editar configuração personalizada",
|
|
81
|
+
"ra_Edit full path": "Editar caminho completo",
|
|
79
82
|
"ra_Edit function": "Função de edição",
|
|
80
83
|
"ra_Edit object field": "Editar campo de objeto",
|
|
81
84
|
"ra_Edit role": "Editar papel",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Licença não encontrada no gerenciador de licenças. Deseja atualizar as licenças do iobroker.net?",
|
|
124
127
|
"ra_Listen on all IPs": "Ouça em todos os IPs",
|
|
125
128
|
"ra_Load configuration from file": "Carregar configuração do arquivo",
|
|
129
|
+
"ra_Logout": "Sair",
|
|
126
130
|
"ra_Longitude": "Longitude",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Pode não acionar \"updateLicenses\"",
|
|
128
132
|
"ra_Message": "mensagem",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Qualidade",
|
|
159
163
|
"ra_Refresh tree": "Atualizar árvore",
|
|
160
164
|
"ra_Reload files": "Recarregar arquivos",
|
|
165
|
+
"ra_Rename_Move_Copy": "Renomear/Mover/Copiar",
|
|
161
166
|
"ra_Repeat": "Repita",
|
|
162
167
|
"ra_Replace": "Substituir",
|
|
163
168
|
"ra_Request timed out": "Solicitação expirou",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "%s objeto(s) selecionado(s)",
|
|
177
182
|
"ra_Serial number (UUID)": "Número de série (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "O número de série (UUID) \"%s\" na licença é para outro dispositivo.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "A sessão irá expirar em %s segundos. Continuar?",
|
|
179
185
|
"ra_Show all folders": "Mostrar todas as pastas",
|
|
180
186
|
"ra_Show lines between rows": "Mostrar linhas entre as linhas",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Mostrar/ocultar descrições de objetos",
|
package/build/i18n/ru.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Настроить видимые столбцы",
|
|
47
47
|
"ra_Confirm deletion of %s": "Подтвердите удаление %s",
|
|
48
48
|
"ra_Connected": "Соединение установлено",
|
|
49
|
+
"ra_Continue": "Продолжать",
|
|
49
50
|
"ra_Copied": "скопировано",
|
|
50
51
|
"ra_Copied %s": "Скопировано \"%s\"",
|
|
51
52
|
"ra_Copy content": "Копировать содержимое",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Устройство → Канал → Состояние",
|
|
67
68
|
"ra_Discard": "Отказаться",
|
|
68
69
|
"ra_Disconnected": "Отключено",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Не спрашивайте о следующих 2 часах в этом сеансе",
|
|
69
71
|
"ra_Do not export values of states": "Не экспортировать значения состояний",
|
|
70
72
|
"ra_Do not use let's encrypt": "Не использовать Let’s Encrypt",
|
|
71
73
|
"ra_Double click to reset table layout": "Дважды щелкните, чтобы сбросить макет таблицы",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Изменить ACL-список",
|
|
77
79
|
"ra_Edit alias": "Изменить псевдоним",
|
|
78
80
|
"ra_Edit custom config": "Редактировать настраиваемую конфигурацию",
|
|
81
|
+
"ra_Edit full path": "Изменить полный путь",
|
|
79
82
|
"ra_Edit function": "Изменить функцию",
|
|
80
83
|
"ra_Edit object field": "Поле редактирования объекта",
|
|
81
84
|
"ra_Edit role": "Изменить роль",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Лицензия не найдена в диспетчере лицензий. Вы хотите обновить лицензии от iobroker.net?",
|
|
124
127
|
"ra_Listen on all IPs": "Слушать на всех IP",
|
|
125
128
|
"ra_Load configuration from file": "Загрузить конфигурацию из файла",
|
|
129
|
+
"ra_Logout": "Выйти",
|
|
126
130
|
"ra_Longitude": "Долгота",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Не может запускать «updateLicenses»",
|
|
128
132
|
"ra_Message": "Сообщение",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "Валидность",
|
|
159
163
|
"ra_Refresh tree": "Обновить дерево",
|
|
160
164
|
"ra_Reload files": "Обновить",
|
|
165
|
+
"ra_Rename_Move_Copy": "Переименовать/Переместить/Копировать",
|
|
161
166
|
"ra_Repeat": "Повторение",
|
|
162
167
|
"ra_Replace": "Заменять",
|
|
163
168
|
"ra_Request timed out": "Истекло время запроса",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "Объектов: %s",
|
|
177
182
|
"ra_Serial number (UUID)": "Серийный номер (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Серийный номер (UUID) «%s» в лицензии предназначен для другого устройства.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "Сессия истечет через %s секунд. Продолжить?",
|
|
179
185
|
"ra_Show all folders": "Показать все папки",
|
|
180
186
|
"ra_Show lines between rows": "Показать линии между строками",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Показать/скрыть описания объектов",
|
package/build/i18n/uk.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "Налаштувати видимі стовпці",
|
|
47
47
|
"ra_Confirm deletion of %s": "Підтвердити видалення %s",
|
|
48
48
|
"ra_Connected": "Підключено",
|
|
49
|
+
"ra_Continue": "Продовжити",
|
|
49
50
|
"ra_Copied": "Скопійовано",
|
|
50
51
|
"ra_Copied %s": "Скопійовано \"%s\"",
|
|
51
52
|
"ra_Copy content": "Скопіюйте вміст",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "Пристрій → Канал → Стан",
|
|
67
68
|
"ra_Discard": "Відкинути",
|
|
68
69
|
"ra_Disconnected": "Відключено",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "Не запитуйте про наступні 2 години цього сеансу",
|
|
69
71
|
"ra_Do not export values of states": "Не експортуйте значення станів",
|
|
70
72
|
"ra_Do not use let's encrypt": "Не використовуйте let's encrypt",
|
|
71
73
|
"ra_Double click to reset table layout": "Двічі клацніть, щоб скинути макет таблиці",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "Редагувати ACL",
|
|
77
79
|
"ra_Edit alias": "Редагувати псевдонім",
|
|
78
80
|
"ra_Edit custom config": "Редагувати спеціальну конфігурацію",
|
|
81
|
+
"ra_Edit full path": "Редагувати повний шлях",
|
|
79
82
|
"ra_Edit function": "функція редагування",
|
|
80
83
|
"ra_Edit object field": "Поле редагування об'єкта",
|
|
81
84
|
"ra_Edit role": "Редагувати роль",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "Ліцензія не знайдена в менеджері ліцензій. Хочете оновити ліцензії з iobroker.net?",
|
|
124
127
|
"ra_Listen on all IPs": "Прослуховування на всіх IP",
|
|
125
128
|
"ra_Load configuration from file": "Завантажити конфігурацію з файлу",
|
|
129
|
+
"ra_Logout": "Вийти",
|
|
126
130
|
"ra_Longitude": "Довгота",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "Може не запускати \"updateLicenses\"",
|
|
128
132
|
"ra_Message": "повідомлення",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "якість",
|
|
159
163
|
"ra_Refresh tree": "Оновити дерево",
|
|
160
164
|
"ra_Reload files": "Перезавантажте файли",
|
|
165
|
+
"ra_Rename_Move_Copy": "Перейменувати/Перемістити/Копіювати",
|
|
161
166
|
"ra_Repeat": "Повторіть",
|
|
162
167
|
"ra_Replace": "Замінити",
|
|
163
168
|
"ra_Request timed out": "Час запиту вичерпано",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "Вибрані об’єкти %s",
|
|
177
182
|
"ra_Serial number (UUID)": "Серійний номер (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "Серійний номер (UUID) \"%s\" у ліцензії призначений для іншого пристрою.",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "Сеанс закінчиться через %s секунд. Продовжити?",
|
|
179
185
|
"ra_Show all folders": "Показати всі папки",
|
|
180
186
|
"ra_Show lines between rows": "Показувати лінії між рядками",
|
|
181
187
|
"ra_Show/Hide object descriptions": "Показати/Сховати описи об’єктів",
|
package/build/i18n/zh-cn.json
CHANGED
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"ra_Configure visible columns": "配置可见列",
|
|
47
47
|
"ra_Confirm deletion of %s": "确认删除%s",
|
|
48
48
|
"ra_Connected": "连接的",
|
|
49
|
+
"ra_Continue": "继续",
|
|
49
50
|
"ra_Copied": "复制的",
|
|
50
51
|
"ra_Copied %s": "复制的\"%s\"",
|
|
51
52
|
"ra_Copy content": "复制内容",
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
"ra_Device → Channel → State": "设备→频道→状态",
|
|
67
68
|
"ra_Discard": "丢弃",
|
|
68
69
|
"ra_Disconnected": "断开连接",
|
|
70
|
+
"ra_Do not ask for next 2 hours in this session": "本次会话中不要询问接下来的 2 个小时",
|
|
69
71
|
"ra_Do not export values of states": "不导出状态值",
|
|
70
72
|
"ra_Do not use let's encrypt": "不要使用让我们加密",
|
|
71
73
|
"ra_Double click to reset table layout": "双击重置表格布局",
|
|
@@ -76,6 +78,7 @@
|
|
|
76
78
|
"ra_Edit ACL": "编辑访问控制列表",
|
|
77
79
|
"ra_Edit alias": "编辑别名",
|
|
78
80
|
"ra_Edit custom config": "编辑自定义配置",
|
|
81
|
+
"ra_Edit full path": "编辑完整路径",
|
|
79
82
|
"ra_Edit function": "编辑功能",
|
|
80
83
|
"ra_Edit object field": "编辑对象字段",
|
|
81
84
|
"ra_Edit role": "编辑角色",
|
|
@@ -123,6 +126,7 @@
|
|
|
123
126
|
"ra_License not found in license manager. Do you want to read licenses from iobroker.net?": "在许可证管理器中找不到许可证。您要从 iobroker.net 更新许可证吗?",
|
|
124
127
|
"ra_Listen on all IPs": "监听所有IP",
|
|
125
128
|
"ra_Load configuration from file": "从文件加载配置",
|
|
129
|
+
"ra_Logout": "登出",
|
|
126
130
|
"ra_Longitude": "经度",
|
|
127
131
|
"ra_May not trigger \"updateLicenses\"": "可能不会触发“updateLicenses”",
|
|
128
132
|
"ra_Message": "信息",
|
|
@@ -158,6 +162,7 @@
|
|
|
158
162
|
"ra_Quality code": "质量代码",
|
|
159
163
|
"ra_Refresh tree": "刷新树",
|
|
160
164
|
"ra_Reload files": "重新载入文件",
|
|
165
|
+
"ra_Rename_Move_Copy": "重命名/移动/复制",
|
|
161
166
|
"ra_Repeat": "重复",
|
|
162
167
|
"ra_Replace": "代替",
|
|
163
168
|
"ra_Request timed out": "请求超时",
|
|
@@ -176,6 +181,7 @@
|
|
|
176
181
|
"ra_Selected %s object(s)": "选定的 %s 个对象",
|
|
177
182
|
"ra_Serial number (UUID)": "序列号 (UUID)",
|
|
178
183
|
"ra_Serial number (UUID) \"%s\" in license is for other device.": "许可证中的序列号 (UUID)“%s”用于其他设备。",
|
|
184
|
+
"ra_Session will expire in %s seconds. Continue?": "会话将在 %s 秒后过期。是否继续?",
|
|
179
185
|
"ra_Show all folders": "显示所有文件夹",
|
|
180
186
|
"ra_Show lines between rows": "显示行之间的线",
|
|
181
187
|
"ra_Show/Hide object descriptions": "显示/隐藏对象描述",
|
package/build/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"./src/","sources":["i18n.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>\n *\n * MIT License\n *\n */\n\ndeclare global {\n interface Window {\n sysLang: ioBroker.Languages;\n i18nShow: (filter: string | RegExp) => void;\n i18nDisableWarning: (disable: boolean) => void;\n }\n}\n\ntype I18nWordDictionary = Record<ioBroker.Languages, string>;\n\ntype I18nWordsDictionary = Record<string, I18nWordDictionary>;\n\ntype I18nOneLanguageDictionary = Record<string, string>;\n\ntype I18nDictionary = {\n [lang in ioBroker.Languages]?: I18nOneLanguageDictionary;\n};\n\ntype I18nWordsWithPrefix = I18nDictionary & { prefix?: string };\n\n/**\n * Translation string management.\n */\nexport class I18n {\n /** List of all languages with their translations. */\n static translations: I18nDictionary = {};\n\n /** List of unknown translations during development. */\n static unknownTranslations: string[] = [];\n\n /** The currently displayed language. */\n static lang: ioBroker.Languages = window.sysLang || 'en';\n\n static _disableWarning: boolean = false;\n\n /**\n * Set the language to display\n *\n * @param lang The default language for translations.\n */\n static setLanguage(lang: ioBroker.Languages): void {\n if (lang) {\n I18n.lang = lang;\n }\n }\n\n /**\n * Add translations\n * User can provide two types of structures:\n * - {\"word1\": \"translated word1\", \"word2\": \"translated word2\"}, but in this case the lang must be provided\n * - {\"word1\": {\"en\": \"translated en word1\", \"de\": \"translated de word1\"}, \"word2\": {\"en\": \"translated en word2\", \"de\": \"translated de word2\"}}, but no lang must be provided\n *\n * @param words additional words for specific language\n * @param lang language for the words\n */\n static extendTranslations(\n words: I18nWordsWithPrefix | I18nOneLanguageDictionary | I18nWordsDictionary,\n lang?: ioBroker.Languages,\n ): void {\n // automatically extend all languages with prefix\n if ((words as I18nWordsWithPrefix).prefix) {\n const wordsWithPrefix = words as I18nWordsWithPrefix;\n if (typeof wordsWithPrefix.prefix === 'string') {\n const prefix = wordsWithPrefix.prefix;\n delete wordsWithPrefix.prefix;\n Object.keys(wordsWithPrefix).forEach(key => {\n const _lang = key as ioBroker.Languages;\n const _words: I18nOneLanguageDictionary = {};\n const wordsOfOneLanguage = wordsWithPrefix[_lang];\n Object.keys(wordsOfOneLanguage as Record<string, string>).forEach(word => {\n if (!word) {\n return;\n }\n if (wordsOfOneLanguage) {\n if (!word.startsWith(prefix)) {\n _words[`${prefix}${word}`] = wordsOfOneLanguage[word];\n } else {\n _words[word] = wordsOfOneLanguage[word];\n }\n }\n });\n words[_lang] = _words;\n });\n } else {\n console.warn('Found prefix in translations, but it is not a string');\n }\n }\n\n try {\n if (!lang) {\n // if it is a dictionary with all/many languages\n if (words.en && words.de && words.ru) {\n Object.keys(words).forEach(key => {\n const _lang = key as ioBroker.Languages;\n I18n.translations[_lang] = I18n.translations[_lang] || {};\n const wordsOfOneLang: I18nOneLanguageDictionary | undefined = I18n.translations[_lang];\n Object.assign(wordsOfOneLang as Record<string, string>, words[_lang]);\n });\n } else {\n // It could be vice versa: words.word1 = {en: 'translated word1', de: 'übersetztes Wort2'}\n Object.keys(words).forEach(word => {\n const _word: I18nWordDictionary = (words as I18nWordsDictionary)[word];\n Object.keys(_word).forEach(key => {\n const _lang = key as ioBroker.Languages;\n const languageDictionary: I18nOneLanguageDictionary | undefined = I18n.translations[_lang];\n if (!languageDictionary) {\n console.warn(`Used unknown language: ${_lang}`);\n } else if (!languageDictionary[word]) {\n languageDictionary[word] = _word[_lang];\n } else if (languageDictionary[word] !== _word[_lang]) {\n console.warn(\n `Translation for word \"${word}\" in \"${_lang}\" was ignored: existing = \"${languageDictionary[word]}\", new = ${_word[_lang]}`,\n );\n }\n });\n });\n }\n } else {\n // translations for one language\n if (!I18n.translations[lang]) {\n console.warn(`Used unknown language: ${lang}`);\n }\n I18n.translations[lang] = I18n.translations[lang] || {};\n const languageDictionary: I18nOneLanguageDictionary | undefined = I18n.translations[lang];\n if (languageDictionary) {\n Object.keys(words).forEach(word => {\n if (!languageDictionary[word]) {\n languageDictionary[word] = (words as I18nOneLanguageDictionary)[word];\n } else if (languageDictionary[word] !== (words as I18nOneLanguageDictionary)[word]) {\n console.warn(\n `Translation for word \"${word}\" in \"${lang}\" was ignored: existing = \"${languageDictionary[word]}\", new = ${(words as I18nOneLanguageDictionary)[word]}`,\n );\n }\n });\n }\n }\n } catch (e: any) {\n console.error(`Cannot apply translations: ${e}`);\n }\n }\n\n /**\n * Sets all translations (in all languages).\n *\n * @param translations The translations to add.\n */\n static setTranslations(translations: I18nDictionary): void {\n if (translations) {\n I18n.translations = translations;\n }\n }\n\n /**\n * Get the currently chosen language.\n *\n * @returns The current language.\n */\n static getLanguage(): ioBroker.Languages {\n return I18n.lang;\n }\n\n /**\n * Translate the given string to the selected language\n *\n * @param word The (key) word to look up the string.\n * @param args Optional arguments which will replace the first (second, third, ...) occurrences of %s\n */\n static t(word: string, ...args: any[]): string {\n const translation = I18n.translations[I18n.lang];\n if (translation) {\n const w = translation[word];\n if (w) {\n word = w;\n } else {\n if (!I18n.unknownTranslations.includes(word)) {\n I18n.unknownTranslations.push(word);\n !I18n._disableWarning && console.log(`Translate: ${word}`);\n }\n // fallback to english\n if (I18n.lang !== 'en' && I18n.translations.en) {\n const wordEn = I18n.translations.en[word];\n if (wordEn) {\n word = wordEn;\n }\n }\n }\n }\n for (const arg of args) {\n word = word.replace('%s', arg);\n }\n return word;\n }\n\n /**\n * Show non-translated words\n * Required during development\n *\n * @param filter The filter to apply to the list of non-translated words.\n */\n static i18nShow(filter?: string | RegExp): void {\n /** List words with their translations. */\n const result: Record<string, string> = {};\n if (!filter) {\n I18n.unknownTranslations.forEach(word => (result[word] = word));\n console.log(JSON.stringify(result, null, 2));\n } else if (typeof filter === 'string') {\n I18n.unknownTranslations.forEach(word => {\n if (word.startsWith(filter)) {\n result[word] = word.replace(filter, '');\n }\n });\n console.log(JSON.stringify(result, null, 2));\n } else if (typeof filter === 'object') {\n I18n.unknownTranslations.forEach(word => {\n if (filter.test(word)) {\n result[word] = word;\n }\n });\n console.log(JSON.stringify(result, null, 2));\n }\n }\n\n /**\n * Disable warning about non-translated words\n * Required during development\n *\n * @param disable Whether to disable the warning\n */\n static disableWarning(disable: boolean): void {\n I18n._disableWarning = !!disable;\n }\n}\n\n// install global handlers\nwindow.i18nShow = I18n.i18nShow;\nwindow.i18nDisableWarning = I18n.disableWarning;\n\n/*\nI18n.translations = {\n 'en': require('./i18n/en'),\n 'ru': require('./i18n/ru'),\n 'de': require('./i18n/de'),\n};\nI18n.fallbacks = true;\nI18n.t = function () {};\n*/\n"]}
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"./src/","sources":["i18n.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Copyright 2018-2024 Denis Haev (bluefox) <dogafox@gmail.com>\r\n *\r\n * MIT License\r\n *\r\n */\r\n\r\ndeclare global {\r\n interface Window {\r\n sysLang: ioBroker.Languages;\r\n i18nShow: (filter: string | RegExp) => void;\r\n i18nDisableWarning: (disable: boolean) => void;\r\n }\r\n}\r\n\r\ntype I18nWordDictionary = Record<ioBroker.Languages, string>;\r\n\r\ntype I18nWordsDictionary = Record<string, I18nWordDictionary>;\r\n\r\ntype I18nOneLanguageDictionary = Record<string, string>;\r\n\r\ntype I18nDictionary = {\r\n [lang in ioBroker.Languages]?: I18nOneLanguageDictionary;\r\n};\r\n\r\ntype I18nWordsWithPrefix = I18nDictionary & { prefix?: string };\r\n\r\n/**\r\n * Translation string management.\r\n */\r\nexport class I18n {\r\n /** List of all languages with their translations. */\r\n static translations: I18nDictionary = {};\r\n\r\n /** List of unknown translations during development. */\r\n static unknownTranslations: string[] = [];\r\n\r\n /** The currently displayed language. */\r\n static lang: ioBroker.Languages = window.sysLang || 'en';\r\n\r\n static _disableWarning: boolean = false;\r\n\r\n /**\r\n * Set the language to display\r\n *\r\n * @param lang The default language for translations.\r\n */\r\n static setLanguage(lang: ioBroker.Languages): void {\r\n if (lang) {\r\n I18n.lang = lang;\r\n }\r\n }\r\n\r\n /**\r\n * Add translations\r\n * User can provide two types of structures:\r\n * - {\"word1\": \"translated word1\", \"word2\": \"translated word2\"}, but in this case the lang must be provided\r\n * - {\"word1\": {\"en\": \"translated en word1\", \"de\": \"translated de word1\"}, \"word2\": {\"en\": \"translated en word2\", \"de\": \"translated de word2\"}}, but no lang must be provided\r\n *\r\n * @param words additional words for specific language\r\n * @param lang language for the words\r\n */\r\n static extendTranslations(\r\n words: I18nWordsWithPrefix | I18nOneLanguageDictionary | I18nWordsDictionary,\r\n lang?: ioBroker.Languages,\r\n ): void {\r\n // automatically extend all languages with prefix\r\n if ((words as I18nWordsWithPrefix).prefix) {\r\n const wordsWithPrefix = words as I18nWordsWithPrefix;\r\n if (typeof wordsWithPrefix.prefix === 'string') {\r\n const prefix = wordsWithPrefix.prefix;\r\n delete wordsWithPrefix.prefix;\r\n Object.keys(wordsWithPrefix).forEach(key => {\r\n const _lang = key as ioBroker.Languages;\r\n const _words: I18nOneLanguageDictionary = {};\r\n const wordsOfOneLanguage = wordsWithPrefix[_lang];\r\n Object.keys(wordsOfOneLanguage as Record<string, string>).forEach(word => {\r\n if (!word) {\r\n return;\r\n }\r\n if (wordsOfOneLanguage) {\r\n if (!word.startsWith(prefix)) {\r\n _words[`${prefix}${word}`] = wordsOfOneLanguage[word];\r\n } else {\r\n _words[word] = wordsOfOneLanguage[word];\r\n }\r\n }\r\n });\r\n words[_lang] = _words;\r\n });\r\n } else {\r\n console.warn('Found prefix in translations, but it is not a string');\r\n }\r\n }\r\n\r\n try {\r\n if (!lang) {\r\n // if it is a dictionary with all/many languages\r\n if (words.en && words.de && words.ru) {\r\n Object.keys(words).forEach(key => {\r\n const _lang = key as ioBroker.Languages;\r\n I18n.translations[_lang] = I18n.translations[_lang] || {};\r\n const wordsOfOneLang: I18nOneLanguageDictionary | undefined = I18n.translations[_lang];\r\n Object.assign(wordsOfOneLang as Record<string, string>, words[_lang]);\r\n });\r\n } else {\r\n // It could be vice versa: words.word1 = {en: 'translated word1', de: 'übersetztes Wort2'}\r\n Object.keys(words).forEach(word => {\r\n const _word: I18nWordDictionary = (words as I18nWordsDictionary)[word];\r\n Object.keys(_word).forEach(key => {\r\n const _lang = key as ioBroker.Languages;\r\n const languageDictionary: I18nOneLanguageDictionary | undefined = I18n.translations[_lang];\r\n if (!languageDictionary) {\r\n console.warn(`Used unknown language: ${_lang}`);\r\n } else if (!languageDictionary[word]) {\r\n languageDictionary[word] = _word[_lang];\r\n } else if (languageDictionary[word] !== _word[_lang]) {\r\n console.warn(\r\n `Translation for word \"${word}\" in \"${_lang}\" was ignored: existing = \"${languageDictionary[word]}\", new = ${_word[_lang]}`,\r\n );\r\n }\r\n });\r\n });\r\n }\r\n } else {\r\n // translations for one language\r\n if (!I18n.translations[lang]) {\r\n console.warn(`Used unknown language: ${lang}`);\r\n }\r\n I18n.translations[lang] = I18n.translations[lang] || {};\r\n const languageDictionary: I18nOneLanguageDictionary | undefined = I18n.translations[lang];\r\n if (languageDictionary) {\r\n Object.keys(words).forEach(word => {\r\n if (!languageDictionary[word]) {\r\n languageDictionary[word] = (words as I18nOneLanguageDictionary)[word];\r\n } else if (languageDictionary[word] !== (words as I18nOneLanguageDictionary)[word]) {\r\n console.warn(\r\n `Translation for word \"${word}\" in \"${lang}\" was ignored: existing = \"${languageDictionary[word]}\", new = ${(words as I18nOneLanguageDictionary)[word]}`,\r\n );\r\n }\r\n });\r\n }\r\n }\r\n } catch (e: any) {\r\n console.error(`Cannot apply translations: ${e}`);\r\n }\r\n }\r\n\r\n /**\r\n * Sets all translations (in all languages).\r\n *\r\n * @param translations The translations to add.\r\n */\r\n static setTranslations(translations: I18nDictionary): void {\r\n if (translations) {\r\n I18n.translations = translations;\r\n }\r\n }\r\n\r\n /**\r\n * Get the currently chosen language.\r\n *\r\n * @returns The current language.\r\n */\r\n static getLanguage(): ioBroker.Languages {\r\n return I18n.lang;\r\n }\r\n\r\n /**\r\n * Translate the given string to the selected language\r\n *\r\n * @param word The (key) word to look up the string.\r\n * @param args Optional arguments which will replace the first (second, third, ...) occurrences of %s\r\n */\r\n static t(word: string, ...args: any[]): string {\r\n const translation = I18n.translations[I18n.lang];\r\n if (translation) {\r\n const w = translation[word];\r\n if (w) {\r\n word = w;\r\n } else {\r\n if (!I18n.unknownTranslations.includes(word)) {\r\n I18n.unknownTranslations.push(word);\r\n !I18n._disableWarning && console.log(`Translate: ${word}`);\r\n }\r\n // fallback to english\r\n if (I18n.lang !== 'en' && I18n.translations.en) {\r\n const wordEn = I18n.translations.en[word];\r\n if (wordEn) {\r\n word = wordEn;\r\n }\r\n }\r\n }\r\n }\r\n for (const arg of args) {\r\n word = word.replace('%s', arg);\r\n }\r\n return word;\r\n }\r\n\r\n /**\r\n * Show non-translated words\r\n * Required during development\r\n *\r\n * @param filter The filter to apply to the list of non-translated words.\r\n */\r\n static i18nShow(filter?: string | RegExp): void {\r\n /** List words with their translations. */\r\n const result: Record<string, string> = {};\r\n if (!filter) {\r\n I18n.unknownTranslations.forEach(word => (result[word] = word));\r\n console.log(JSON.stringify(result, null, 2));\r\n } else if (typeof filter === 'string') {\r\n I18n.unknownTranslations.forEach(word => {\r\n if (word.startsWith(filter)) {\r\n result[word] = word.replace(filter, '');\r\n }\r\n });\r\n console.log(JSON.stringify(result, null, 2));\r\n } else if (typeof filter === 'object') {\r\n I18n.unknownTranslations.forEach(word => {\r\n if (filter.test(word)) {\r\n result[word] = word;\r\n }\r\n });\r\n console.log(JSON.stringify(result, null, 2));\r\n }\r\n }\r\n\r\n /**\r\n * Disable warning about non-translated words\r\n * Required during development\r\n *\r\n * @param disable Whether to disable the warning\r\n */\r\n static disableWarning(disable: boolean): void {\r\n I18n._disableWarning = !!disable;\r\n }\r\n}\r\n\r\n// install global handlers\r\nwindow.i18nShow = I18n.i18nShow;\r\nwindow.i18nDisableWarning = I18n.disableWarning;\r\n\r\n/*\r\nI18n.translations = {\r\n 'en': require('./i18n/en'),\r\n 'ru': require('./i18n/ru'),\r\n 'de': require('./i18n/de'),\r\n};\r\nI18n.fallbacks = true;\r\nI18n.t = function () {};\r\n*/\r\n"]}
|