iobroker.shoppingroute 0.3.3 → 0.3.4

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/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  ![ShoppingRoute](admin/shoppingroute.png)
4
4
 
5
- **Current version: 0.3.3**
5
+ **Current version: 0.3.4**
6
6
 
7
- ShoppingRoute sorts Alexa shopping-list entries by market, product group and each store's individual walking route. It assigns visible two-digit keys such as `20> Bananas` and `40> **** ALDI ****`; managed lists must therefore be set to **A–Z** in the Alexa app. ShoppingRoute reuses the local Alexa2 authentication for direct item updates, deletes and batch creates, while Alexa2 list states remain the external change trigger.
7
+ ShoppingRoute sorts Alexa shopping-list entries by market, product group and each store's individual walking route. It assigns visible two-digit keys such as `20> Bananas` and `40> ═════ ALDI ═════`; managed lists must therefore be set to **A–Z** in the Alexa app. ShoppingRoute reuses the local Alexa2 authentication for direct item updates, deletes and batch creates, while Alexa2 list states remain the external change trigger.
8
8
 
9
9
  ## User guide / Bedienungsanleitung
10
10
 
@@ -16,7 +16,7 @@ ShoppingRoute sorts Alexa shopping-list entries by market, product group and eac
16
16
  - multiple Alexa lists with per-list priority markets
17
17
  - global, per-list and temporary market priorities
18
18
  - market aliases and common market-name variants
19
- - optional automatically managed market headings such as `**** ALDI ****`
19
+ - optional automatically managed market headings such as `═════ ALDI ═════`
20
20
  - optional cross-market consolidation using a minimum-item threshold; explicit market requests are never moved
21
21
  - configurable product groups and store-specific routes
22
22
  - product catalogue with aliases, preferred and available markets
@@ -28,11 +28,10 @@ ShoppingRoute sorts Alexa shopping-list entries by market, product group and eac
28
28
  - sorting preview before writes
29
29
  - incremental `00>`–`99>` prefix sorting with gap-preserving inserts and suffix-only rebuilds
30
30
  - direct Amazon responses plus one final list read as write confirmation
31
- - API safe mode with write-rate limiting, batches and retry backoff
31
+ - API Safe Mode with configurable write-rate limiting
32
32
  - local-only shopping statistics
33
33
  - configuration backup/restore
34
34
  - shareable market-route profiles
35
- - npm beta version check
36
35
  - privacy-safe diagnostic/feedback report
37
36
  - Alexa2/alexa-remote2 direct-session diagnostics
38
37
  - Dry Run safety mode
@@ -41,6 +40,15 @@ See `README_DE.md` for the detailed German documentation.
41
40
 
42
41
  ## Changelog
43
42
 
43
+ ### 0.3.4 (2026-08-14)
44
+
45
+ - Added Admin 8 compatibility for all custom Admin components and set the minimum Admin version to 8.0.0.
46
+ - Improved logging with an optional sort-summary message and made market headings clearer (`═════ MARKET ═════`).
47
+ - Fixed the review queue’s “Accept all” action and now process foreign Alexa2 states only when their values are acknowledged.
48
+ - Removed obsolete timing/API configuration options and the internal npm version check.
49
+ - Removed code obfuscation and obsolete package-preparation paths.
50
+ - Completed repository-review compatibility cleanup, including English runtime log/state texts and bounded `maxWritesPerMinute` handling.
51
+
44
52
  ### 0.3.3 (2026-08-13)
45
53
 
46
54
  - New direct `00>`–`99>` prefix sorting for Alexa lists configured to A–Z.
@@ -62,7 +70,7 @@ See `README_DE.md` for the detailed German documentation.
62
70
 
63
71
  ### 0.3.0 (2026-08-10)
64
72
 
65
- - Added optional market headings (now formatted as `**** MARKET ****`).
73
+ - Added optional market headings (now formatted as `═════ MARKET ═════`).
66
74
  - A heading stays active until the last real item for that market is completed and is then deleted completely instead of remaining among completed items.
67
75
  - Added configurable minimum-items-per-market consolidation for flexible articles.
68
76
  - Explicit market phrases always remain assigned to the requested market.
@@ -72,7 +80,7 @@ See `README_DE.md` for the detailed German documentation.
72
80
 
73
81
  - First stable release of ShoppingRoute.
74
82
  - Completed Admin translations for all supported ioBroker languages and fixed the walking-route market help text.
75
- - Added protected stable publishing through GitHub Actions, npm Trusted Publishing/OIDC and an obfuscated runtime build.
83
+ - Added protected stable publishing through GitHub Actions and npm Trusted Publishing/OIDC.
76
84
  - Verified `updateListItem` compatibility with Alexa2 3.28.3 and alexa-remote2 8.1.0 without local modifications to foreign modules.
77
85
 
78
86
  ### 0.2.0-beta.12 (2026-08-09)
package/README_DE.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  ![ShoppingRoute](admin/shoppingroute.png)
4
4
 
5
- **Aktuelle Version: 0.3.3**
5
+ **Aktuelle Version: 0.3.4**
6
6
 
7
- ShoppingRoute sortiert Alexa-Einkaufslisteneinträge nach Markt, Produktgruppe und dem individuellen Laufweg durch den jeweiligen Markt. Dazu vergibt es sichtbare zweistellige Schlüssel wie `20> Bananen` und `40> **** ALDI ****`; verwaltete Listen müssen deshalb in der Alexa-App auf **A–Z** stehen. ShoppingRoute übernimmt lokal die Alexa2-Authentifizierung für direkte Updates, Deletes und Batch-Creates; Alexa2-Listenstates bleiben die Triggerquelle für externe Änderungen.
7
+ ShoppingRoute sortiert Alexa-Einkaufslisteneinträge nach Markt, Produktgruppe und dem individuellen Laufweg durch den jeweiligen Markt. Dazu vergibt es sichtbare zweistellige Schlüssel wie `20> Bananen` und `40> ═════ ALDI ═════`; verwaltete Listen müssen deshalb in der Alexa-App auf **A–Z** stehen. ShoppingRoute übernimmt lokal die Alexa2-Authentifizierung für direkte Updates, Deletes und Batch-Creates; Alexa2-Listenstates bleiben die Triggerquelle für externe Änderungen.
8
8
 
9
9
  ## Bedienungsanleitung / User guide
10
10
 
@@ -16,7 +16,7 @@ ShoppingRoute sortiert Alexa-Einkaufslisteneinträge nach Markt, Produktgruppe u
16
16
  - mehrere Alexa-Einkaufslisten mit eigenem Prioritätsmarkt
17
17
  - globale, listenbezogene und temporäre Marktpriorität
18
18
  - Markt-Aliase und automatische Erkennung häufiger Marktvarianten
19
- - optionale, automatisch verwaltete Marktüberschriften wie `**** ALDI ****`
19
+ - optionale, automatisch verwaltete Marktüberschriften wie `═════ ALDI ═════`
20
20
  - optionale marktübergreifende Zusammenlegung anhand einer Mindestanzahl von Artikeln pro zusätzlichem Markt; explizite Marktangaben bleiben unverändert
21
21
  - frei pflegbare Produktgruppen und marktbezogene Laufwege
22
22
  - Laufweg nach Tabellenreihenfolge; Reihenfolgen werden automatisch neu nummeriert
@@ -30,11 +30,10 @@ ShoppingRoute sortiert Alexa-Einkaufslisteneinträge nach Markt, Produktgruppe u
30
30
  - Sortiervorschau vor Alexa-Schreibzugriffen
31
31
  - inkrementelle Präfixsortierung `00>`–`99>` mit Lückenerhalt und Suffix-Fallback
32
32
  - direkte Amazon-Antworten plus ein abschließender Listenabruf als Bestätigung
33
- - API-Schonmodus mit Rate-Limit, Blöcken und Retry-Backoff
33
+ - API-Schonmodus mit konfigurierbarem Schreibzugriffs-Limit
34
34
  - lokale Einkaufsstatistik ohne Cloud-Telemetrie
35
35
  - Konfigurations-Export/Import
36
36
  - exportierbare/importierbare Marktprofile zum Teilen von Laufwegen
37
- - npm-Beta-Versionsprüfung im Adapter
38
37
  - datenschutzfreundlicher Diagnose-/Feedbackbericht
39
38
  - Alexa2/alexa-remote2-Diagnose der direkten Sitzung
40
39
  - Dry-Run für sichere Tests
@@ -62,21 +61,26 @@ Anschließend kann 0.3.0 flexible Artikel marktübergreifend zusammenlegen, wenn
62
61
  - `info.sortTransaction` – lokales Wiederherstellungsjournal einer laufenden Sortierung; im Normalzustand `{}`
63
62
  - `info.configExport` – komplette Konfigurationssicherung
64
63
  - `info.marketProfiles` – teilbare Marktprofile
65
- - `info.versionInstalled`, `info.versionBeta`, `info.updateAvailable` – Versionsstatus
64
+ - `info.versionInstalled` – installierte Adapterversion
66
65
  - `info.feedbackReport` – bereinigter Diagnose-/Feedbackbericht ohne Einkaufsinhalte
67
66
  - `control.temporaryPriorityMarket` – temporärer Markt für den aktuellen Einkauf
68
67
  - `control.importConfigJson` – Konfiguration importieren
69
68
  - `control.marketProfileImport` – Marktprofil importieren
70
69
 
71
- ## Hinweis zur ioBroker-Adapterkarte
70
+ ## Lizenz
72
71
 
73
- Solange ShoppingRoute noch nicht im offiziellen ioBroker-Repository geführt wird, kann ioBroker Admin bei **„Verfügbare Version“** generisch **„nicht gewartet“** anzeigen. Das ist keine Aussage des laufenden Adapters. ShoppingRoute zeigt deshalb seinen eigenen npm-Versionsstatus über die `info.version*`-Datenpunkte an.
72
+ ShoppingRoute wird unter der **MIT-Lizenz** veröffentlicht. Frühere bereits veröffentlichte Versionen bleiben unter der jeweils damals gültigen Lizenz.
74
73
 
75
- ## Lizenzierung der Beta-Versionen
74
+ ## Changelog
76
75
 
77
- ShoppingRoute wird ab dieser Version unter der **MIT-Lizenz** veröffentlicht. Frühere bereits veröffentlichte Versionen bleiben unter der jeweils damals gültigen Lizenz.
76
+ ### 0.3.4 (2026-08-14)
78
77
 
79
- ## Changelog
78
+ - Admin-8-Kompatibilität für alle benutzerdefinierten Admin-Komponenten ergänzt und die Admin-Mindestversion auf 8.0.0 gesetzt.
79
+ - Logging mit optionaler Sortier-Abschlussmeldung verbessert und Marktüberschriften deutlicher gestaltet (`═════ MARKT ═════`).
80
+ - Prüflisten-Funktion „Alle auf Übernehmen stellen“ repariert; fremde Alexa2-States werden nur noch bei bestätigten Werten verarbeitet.
81
+ - Veraltete Timing-/API-Konfigurationsoptionen und die interne npm-Versionsprüfung entfernt.
82
+ - Code-Obfuscation und überholte Paketvorbereitungswege entfernt.
83
+ - Repository-Review- und Kompatibilitätsbereinigung abgeschlossen, einschließlich englischer Runtime-Log-/State-Texte und begrenzter `maxWritesPerMinute`-Verarbeitung.
80
84
 
81
85
  ### 0.3.3 (2026-08-13)
82
86
 
@@ -99,7 +103,7 @@ ShoppingRoute wird ab dieser Version unter der **MIT-Lizenz** veröffentlicht. F
99
103
 
100
104
  ### 0.3.0 (2026-08-10)
101
105
 
102
- - Optionale Marktüberschriften ergänzt (jetziges Format: `**** MARKT ****`).
106
+ - Optionale Marktüberschriften ergänzt (jetziges Format: `═════ MARKT ═════`).
103
107
  - Überschriften bleiben aktiv, solange mindestens ein echter Artikel des Marktes offen ist, und werden danach vollständig gelöscht statt unter erledigten Artikeln stehen zu bleiben.
104
108
  - Marktübergreifende Zusammenlegung anhand einer konfigurierbaren Mindestanzahl ergänzt.
105
109
  - Explizite Marktangaben bleiben von der Zusammenlegung ausnahmslos unberührt.
@@ -5,11 +5,10 @@
5
5
  "type": "panel",
6
6
  "label": "ui.items.general.label",
7
7
  "items": {
8
- "betaWarning": {
8
+ "safetyWarning": {
9
9
  "type": "infoBox",
10
- "text": "ui.items.general.items.betawarning.text",
10
+ "text": "ui.items.general.items.safetywarning.text",
11
11
  "boxType": "warning",
12
- "closeable": false,
13
12
  "iconPosition": "middle",
14
13
  "xs": 12,
15
14
  "sm": 12,
@@ -83,6 +82,16 @@
83
82
  "lg": 6,
84
83
  "xl": 6
85
84
  },
85
+ "logSortSummary": {
86
+ "type": "checkbox",
87
+ "label": "ui.items.general.items.logsortsummary.label",
88
+ "newLine": true,
89
+ "xs": 12,
90
+ "sm": 12,
91
+ "md": 6,
92
+ "lg": 6,
93
+ "xl": 6
94
+ },
86
95
  "marketSectionDivider": {
87
96
  "type": "divider",
88
97
  "newLine": true,
@@ -189,7 +198,7 @@
189
198
  "lg": 6,
190
199
  "xl": 6
191
200
  },
192
- "timingSectionDivider": {
201
+ "apiDivider": {
193
202
  "type": "divider",
194
203
  "newLine": true,
195
204
  "xs": 12,
@@ -198,9 +207,9 @@
198
207
  "lg": 12,
199
208
  "xl": 12
200
209
  },
201
- "timingSectionTitle": {
210
+ "apiSectionTitle": {
202
211
  "type": "header",
203
- "text": "ui.items.general.items.timingsectiontitle.text",
212
+ "text": "ui.items.general.items.apisectiontitle.text",
204
213
  "size": 3,
205
214
  "newLine": true,
206
215
  "xs": 12,
@@ -209,42 +218,11 @@
209
218
  "lg": 12,
210
219
  "xl": 12
211
220
  },
212
- "debounceMs": {
213
- "type": "number",
214
- "label": "ui.items.general.items.debouncems.label",
215
- "min": 250,
216
- "max": 60000,
217
- "newLine": true,
218
- "xs": 12,
219
- "sm": 12,
220
- "md": 6,
221
- "lg": 6,
222
- "xl": 6
223
- },
224
- "writePauseMs": {
225
- "type": "number",
226
- "label": "ui.items.general.items.writepausems.label",
227
- "min": 250,
228
- "max": 10000,
229
- "xs": 12,
230
- "sm": 12,
231
- "md": 6,
232
- "lg": 6,
233
- "xl": 6
234
- },
235
- "apiDivider": {
236
- "type": "divider",
237
- "newLine": true,
238
- "xs": 12,
239
- "sm": 12,
240
- "md": 12,
241
- "lg": 12,
242
- "xl": 12
243
- },
244
- "apiSectionTitle": {
245
- "type": "header",
246
- "text": "ui.items.general.items.apisectiontitle.text",
247
- "size": 3,
221
+ "apiWarning": {
222
+ "type": "infoBox",
223
+ "text": "ui.items.general.items.apiwarning.text",
224
+ "boxType": "warning",
225
+ "iconPosition": "middle",
248
226
  "newLine": true,
249
227
  "xs": 12,
250
228
  "sm": 12,
@@ -288,52 +266,6 @@
288
266
  "md": 6,
289
267
  "lg": 6,
290
268
  "xl": 6
291
- },
292
- "batchSize": {
293
- "type": "number",
294
- "label": "ui.items.general.items.batchsize.label",
295
- "min": 1,
296
- "max": 100,
297
- "newLine": true,
298
- "xs": 12,
299
- "sm": 12,
300
- "md": 6,
301
- "lg": 6,
302
- "xl": 6
303
- },
304
- "batchPauseMs": {
305
- "type": "number",
306
- "label": "ui.items.general.items.batchpausems.label",
307
- "min": 0,
308
- "max": 60000,
309
- "xs": 12,
310
- "sm": 12,
311
- "md": 6,
312
- "lg": 6,
313
- "xl": 6
314
- },
315
- "maxWriteRetries": {
316
- "type": "number",
317
- "label": "ui.items.general.items.maxwriteretries.label",
318
- "min": 0,
319
- "max": 5,
320
- "newLine": true,
321
- "xs": 12,
322
- "sm": 12,
323
- "md": 6,
324
- "lg": 6,
325
- "xl": 6
326
- },
327
- "retryBaseMs": {
328
- "type": "number",
329
- "label": "ui.items.general.items.retrybasems.label",
330
- "min": 250,
331
- "max": 30000,
332
- "xs": 12,
333
- "sm": 12,
334
- "md": 6,
335
- "lg": 6,
336
- "xl": 6
337
269
  }
338
270
  }
339
271
  },
@@ -416,7 +348,7 @@
416
348
  "type": "custom",
417
349
  "url": "custom/markets/marketsEditor.js",
418
350
  "name": "ShoppingRouteMarketsSet/Components/MarketsEditor",
419
- "bundlerType": "module",
351
+ "guiApi": 2,
420
352
  "i18n": false,
421
353
  "xs": 12,
422
354
  "sm": 12,
@@ -471,7 +403,7 @@
471
403
  "type": "custom",
472
404
  "url": "custom/productGroups/productGroupsEditor.js",
473
405
  "name": "ShoppingRouteProductGroupsSet/Components/ProductGroupsEditor",
474
- "bundlerType": "module",
406
+ "guiApi": 2,
475
407
  "i18n": false,
476
408
  "xs": 12,
477
409
  "sm": 12,
@@ -516,7 +448,7 @@
516
448
  "type": "custom",
517
449
  "url": "custom/routeEditor.js",
518
450
  "name": "ShoppingRouteAdminSet/Components/RouteEditor",
519
- "bundlerType": "module",
451
+ "guiApi": 2,
520
452
  "i18n": false,
521
453
  "xs": 12,
522
454
  "sm": 12,
@@ -630,7 +562,6 @@
630
562
  "defaultSendTo": "normalizeMarketSelection",
631
563
  "manual": false,
632
564
  "multiple": true,
633
- "showAllValues": true,
634
565
  "noTranslation": true,
635
566
  "jsonData": "{\"markets\":${JSON.stringify(globalData.markets || [])},\"value\":${JSON.stringify(data.availableMarkets == null ? '' : data.availableMarkets)}}",
636
567
  "title": "ui.items.productstab.items.products.items.4.title",
@@ -740,7 +671,6 @@
740
671
  "defaultSendTo": "normalizeMarketSelection",
741
672
  "manual": false,
742
673
  "multiple": true,
743
- "showAllValues": true,
744
674
  "noTranslation": true,
745
675
  "jsonData": "{\"markets\":${JSON.stringify(globalData.markets || [])},\"value\":${JSON.stringify(data.availableMarkets == null ? '' : data.availableMarkets)}}",
746
676
  "title": "ui.items.productstab.items.products.items.4.title",
@@ -858,18 +788,18 @@
858
788
  "uk": "Загальні",
859
789
  "zh-cn": "常规"
860
790
  },
861
- "ui.items.general.items.betawarning.text": {
862
- "en": "Safety notice: Start with Dry Run enabled. Normal shopping items are still sorted only by redistributing their visible texts. If market headings are enabled, ShoppingRoute creates and deletes only its own ---- MARKET ---- heading entries through Alexa2.",
863
- "de": "Sicherheitshinweis: Zuerst mit Dry-Run testen. Normale Einkaufsartikel werden weiterhin nur durch Umverteilen ihrer sichtbaren Texte sortiert. Bei aktivierten Marktüberschriften legt und löscht ShoppingRoute über Alexa2 ausschließlich eigene Einträge im Format ---- MARKT ----.",
864
- "ru": "Примечание по безопасности: сначала используйте пробный режим. Обычные товары по-прежнему сортируются только перераспределением видимых текстов. При включённых заголовках ShoppingRoute через Alexa2 создаёт и удаляет только собственные строки ---- МАГАЗИН ----.",
865
- "pt": "Aviso de segurança: comece com o modo de simulação. Os itens normais continuam sendo ordenados apenas redistribuindo seus textos visíveis. Com cabeçalhos ativados, o ShoppingRoute cria e exclui via Alexa2 apenas suas próprias entradas ---- MERCADO ----.",
866
- "nl": "Veiligheidsadvies: begin met de proefmodus. Normale boodschappen worden nog steeds alleen gesorteerd door zichtbare teksten te herverdelen. Met winkelkoppen ingeschakeld maakt en verwijdert ShoppingRoute via Alexa2 uitsluitend eigen ---- WINKEL ---- regels.",
867
- "fr": "Consigne de sécurité : commencez en mode simulation. Les articles normaux restent triés uniquement par redistribution de leurs textes visibles. Si les en-têtes sont activés, ShoppingRoute crée et supprime via Alexa2 uniquement ses propres entrées ---- MAGASIN ----.",
868
- "it": "Avviso di sicurezza: iniziare con Dry Run. Gli articoli normali vengono ancora ordinati solo ridistribuendo i testi visibili. Con le intestazioni attive, ShoppingRoute crea ed elimina tramite Alexa2 esclusivamente le proprie voci ---- NEGOZIO ----.",
869
- "es": "Aviso de seguridad: comience con Dry Run. Los artículos normales siguen ordenándose solo redistribuyendo sus textos visibles. Con encabezados activados, ShoppingRoute crea y elimina mediante Alexa2 únicamente sus propias entradas ---- TIENDA ----.",
870
- "pl": "Informacja bezpieczeństwa: zacznij od trybu testowego. Zwykłe artykuły nadal są sortowane wyłącznie przez rozdzielanie widocznych tekstów. Po włączeniu nagłówków ShoppingRoute przez Alexa2 tworzy i usuwa wyłącznie własne wpisy ---- SKLEP ----.",
871
- "uk": "Примітка з безпеки: спочатку використовуйте Dry Run. Звичайні товари й надалі сортуються лише перерозподілом видимих текстів. Якщо заголовки ввімкнено, ShoppingRoute через Alexa2 створює та видаляє лише власні записи ---- МАГАЗИН ----.",
872
- "zh-cn": "安全提示:请先使用试运行。普通购物项仍只通过重新分配可见文本来排序。启用商店标题后,ShoppingRoute 仅通过 Alexa2 创建和删除自己的 ---- 商店 ---- 标题条目。"
791
+ "ui.items.general.items.safetywarning.text": {
792
+ "en": "Safety notice: Start with Dry Run enabled. Normal shopping items are still sorted only by redistributing their visible texts. If market headings are enabled, ShoppingRoute creates and deletes only its own ═════ MARKET ═════ heading entries through Alexa2.",
793
+ "de": "Sicherheitshinweis: Zuerst mit Dry-Run testen. Normale Einkaufsartikel werden weiterhin nur durch Umverteilen ihrer sichtbaren Texte sortiert. Bei aktivierten Marktüberschriften legt und löscht ShoppingRoute über Alexa2 ausschließlich eigene Einträge im Format ═════ MARKT ═════.",
794
+ "ru": "Примечание по безопасности: сначала используйте пробный режим. Обычные товары по-прежнему сортируются только перераспределением видимых текстов. При включённых заголовках ShoppingRoute через Alexa2 создаёт и удаляет только собственные строки ═════ МАГАЗИН ═════.",
795
+ "pt": "Aviso de segurança: comece com o modo de simulação. Os itens normais continuam sendo ordenados apenas redistribuindo seus textos visíveis. Com cabeçalhos ativados, o ShoppingRoute cria e exclui via Alexa2 apenas suas próprias entradas ═════ MERCADO ═════.",
796
+ "nl": "Veiligheidsadvies: begin met de proefmodus. Normale boodschappen worden nog steeds alleen gesorteerd door zichtbare teksten te herverdelen. Met winkelkoppen ingeschakeld maakt en verwijdert ShoppingRoute via Alexa2 uitsluitend eigen ═════ WINKEL ═════ regels.",
797
+ "fr": "Consigne de sécurité : commencez en mode simulation. Les articles normaux restent triés uniquement par redistribution de leurs textes visibles. Si les en-têtes sont activés, ShoppingRoute crée et supprime via Alexa2 uniquement ses propres entrées ═════ MAGASIN ═════.",
798
+ "it": "Avviso di sicurezza: iniziare con Dry Run. Gli articoli normali vengono ancora ordinati solo ridistribuendo i testi visibili. Con le intestazioni attive, ShoppingRoute crea ed elimina tramite Alexa2 esclusivamente le proprie voci ═════ NEGOZIO ═════.",
799
+ "es": "Aviso de seguridad: comience con Dry Run. Los artículos normales siguen ordenándose solo redistribuyendo sus textos visibles. Con encabezados activados, ShoppingRoute crea y elimina mediante Alexa2 únicamente sus propias entradas ═════ TIENDA ═════.",
800
+ "pl": "Informacja bezpieczeństwa: zacznij od trybu testowego. Zwykłe artykuły nadal są sortowane wyłącznie przez rozdzielanie widocznych tekstów. Po włączeniu nagłówków ShoppingRoute przez Alexa2 tworzy i usuwa wyłącznie własne wpisy ═════ SKLEP ═════.",
801
+ "uk": "Примітка з безпеки: спочатку використовуйте Dry Run. Звичайні товари й надалі сортуються лише перерозподілом видимих текстів. Якщо заголовки ввімкнено, ShoppingRoute через Alexa2 створює та видаляє лише власні записи ═════ МАГАЗИН ═════.",
802
+ "zh-cn": "安全提示:请先使用试运行。普通购物项仍只通过重新分配可见文本来排序。启用商店标题后,ShoppingRoute 仅通过 Alexa2 创建和删除自己的 ═════ 商店 ═════ 标题条目。"
873
803
  },
874
804
  "ui.items.general.items.basicsectiontitle.text": {
875
805
  "en": "Basic settings",
@@ -897,19 +827,6 @@
897
827
  "uk": "Призначення магазинів",
898
828
  "zh-cn": "商店分配"
899
829
  },
900
- "ui.items.general.items.timingsectiontitle.text": {
901
- "en": "Processing timing",
902
- "de": "Verarbeitungszeiten",
903
- "ru": "Временные параметры обработки",
904
- "pt": "Tempos de processamento",
905
- "nl": "Verwerkingstijden",
906
- "fr": "Temporisation du traitement",
907
- "it": "Tempi di elaborazione",
908
- "es": "Tiempos de procesamiento",
909
- "pl": "Czasy przetwarzania",
910
- "uk": "Часові параметри обробки",
911
- "zh-cn": "处理时序"
912
- },
913
830
  "ui.items.general.items.alexainstance.label": {
914
831
  "en": "Alexa2 instance",
915
832
  "de": "Alexa2-Instanz",
@@ -1014,6 +931,19 @@
1014
931
  "uk": "Автоматично пропонувати псевдоніми",
1015
932
  "zh-cn": "自动建议别名"
1016
933
  },
934
+ "ui.items.general.items.logsortsummary.label": {
935
+ "en": "Show completion message after a sorting run in the log",
936
+ "de": "Abschlussmeldung nach Sortierlauf im Log anzeigen",
937
+ "ru": "Показывать в журнале сообщение о завершении сортировки",
938
+ "pt": "Mostrar no log a mensagem de conclusão após uma ordenação",
939
+ "nl": "Voltooiingsmelding na een sorteerrun in het logboek tonen",
940
+ "fr": "Afficher dans le journal le message de fin après un tri",
941
+ "it": "Mostra nel log il messaggio di completamento dopo un ordinamento",
942
+ "es": "Mostrar en el registro el mensaje de finalización tras una ordenación",
943
+ "pl": "Pokazuj w dzienniku komunikat o zakończeniu sortowania",
944
+ "uk": "Показувати в журналі повідомлення про завершення сортування",
945
+ "zh-cn": "排序运行后在日志中显示完成消息"
946
+ },
1017
947
  "ui.items.general.items.fallbackmarket.label": {
1018
948
  "en": "Fallback market",
1019
949
  "de": "Fallback-Markt",
@@ -1079,32 +1009,6 @@
1079
1009
  "uk": "Магазин для поточної покупки",
1080
1010
  "zh-cn": "当前购物商店"
1081
1011
  },
1082
- "ui.items.general.items.debouncems.label": {
1083
- "en": "Collect list changes for (ms)",
1084
- "de": "Listenänderungen sammeln für (ms)",
1085
- "ru": "Собирать изменения списка в течение (мс)",
1086
- "pt": "Agrupar alterações da lista por (ms)",
1087
- "nl": "Lijstwijzigingen verzamelen gedurende (ms)",
1088
- "fr": "Regrouper les modifications de liste pendant (ms)",
1089
- "it": "Raccogli le modifiche della lista per (ms)",
1090
- "es": "Agrupar cambios de la lista durante (ms)",
1091
- "pl": "Zbieraj zmiany listy przez (ms)",
1092
- "uk": "Збирати зміни списку протягом (мс)",
1093
- "zh-cn": "收集列表更改时长(毫秒)"
1094
- },
1095
- "ui.items.general.items.writepausems.label": {
1096
- "en": "Pause between Alexa value writes (ms)",
1097
- "de": "Pause zwischen Alexa-value-Schreibzugriffen (ms)",
1098
- "ru": "Пауза между записями значений Alexa (мс)",
1099
- "pt": "Pausa entre gravações de valores Alexa (ms)",
1100
- "nl": "Pauze tussen Alexa-value-schrijfbewerkingen (ms)",
1101
- "fr": "Pause entre les écritures de valeurs Alexa (ms)",
1102
- "it": "Pausa tra le scritture dei valori Alexa (ms)",
1103
- "es": "Pausa entre escrituras de valores de Alexa (ms)",
1104
- "pl": "Przerwa między zapisami wartości Alexa (ms)",
1105
- "uk": "Пауза між записами значень Alexa (мс)",
1106
- "zh-cn": "Alexa 值写入之间的暂停(毫秒)"
1107
- },
1108
1012
  "ui.items.general.items.apisectiontitle.text": {
1109
1013
  "en": "API protection",
1110
1014
  "de": "API-Schutz",
@@ -1118,18 +1022,31 @@
1118
1022
  "uk": "Захист API",
1119
1023
  "zh-cn": "API 保护"
1120
1024
  },
1025
+ "ui.items.general.items.apiwarning.text": {
1026
+ "en": "Only change these settings if you know what you are doing.",
1027
+ "de": "Änderungen nur vornehmen, wenn Sie wissen, was Sie tun.",
1028
+ "ru": "Изменяйте эти настройки только в том случае, если понимаете последствия.",
1029
+ "pt": "Altere estas configurações apenas se souber o que está fazendo.",
1030
+ "nl": "Wijzig deze instellingen alleen als u weet wat u doet.",
1031
+ "fr": "Ne modifiez ces paramètres que si vous savez ce que vous faites.",
1032
+ "it": "Modificare queste impostazioni solo se si sa cosa si sta facendo.",
1033
+ "es": "Cambie estos ajustes únicamente si sabe lo que está haciendo.",
1034
+ "pl": "Zmieniaj te ustawienia tylko wtedy, gdy wiesz, co robisz.",
1035
+ "uk": "Змінюйте ці налаштування лише тоді, коли розумієте наслідки.",
1036
+ "zh-cn": "仅在您清楚自己所做操作时更改这些设置。"
1037
+ },
1121
1038
  "ui.items.general.items.apihelp.text": {
1122
- "en": "API Safe Mode limits Alexa write frequency, groups large sorts into batches and retries temporary write errors with exponential backoff. It protects against unnecessary bursts; it does not poll Amazon.",
1123
- "de": "Der API-Schonmodus begrenzt Alexa-Schreibzugriffe, teilt große Sortierungen in Blöcke und wiederholt vorübergehende Schreibfehler mit wachsender Pause. Er schützt vor unnötigen Zugriffsspitzen; ShoppingRoute pollt Amazon nicht.",
1124
- "ru": "Безопасный режим API ограничивает частоту записей Alexa, разбивает большие сортировки на пакеты и повторяет временно неудачные записи с экспоненциальной задержкой. Он защищает от ненужных всплесков запросов; ShoppingRoute не опрашивает Amazon.",
1125
- "pt": "O Modo Seguro da API limita a frequência de gravações na Alexa, divide grandes ordenações em lotes e repete erros temporários de gravação com espera exponencial. Ele protege contra picos desnecessários; o ShoppingRoute não faz polling da Amazon.",
1126
- "nl": "De veilige API-modus beperkt de frequentie van Alexa-schrijfbewerkingen, verdeelt grote sorteringen in batches en probeert tijdelijke schrijffouten opnieuw met exponentiële vertraging. Dit voorkomt onnodige pieken; ShoppingRoute pollt Amazon niet.",
1127
- "fr": "Le mode sécurisé de l’API limite la fréquence des écritures Alexa, répartit les gros tris en lots et réessaie les erreurs d’écriture temporaires avec un délai exponentiel. Il évite les pics inutiles ; ShoppingRoute n’interroge pas Amazon en continu.",
1128
- "it": "La modalità sicura API limita la frequenza delle scritture Alexa, divide gli ordinamenti grandi in blocchi e riprova gli errori di scrittura temporanei con attesa esponenziale. Protegge da picchi inutili; ShoppingRoute non effettua polling di Amazon.",
1129
- "es": "El modo seguro de la API limita la frecuencia de escrituras en Alexa, divide las ordenaciones grandes en lotes y reintenta errores temporales de escritura con espera exponencial. Protege frente a picos innecesarios; ShoppingRoute no sondea Amazon.",
1130
- "pl": "Tryb bezpieczny API ogranicza częstotliwość zapisów Alexa, dzieli duże sortowania na partie i ponawia tymczasowe błędy zapisu z rosnącym opóźnieniem. Chroni przed niepotrzebnymi skokami ruchu; ShoppingRoute nie odpytuje Amazon.",
1131
- "uk": "Безпечний режим API обмежує частоту записів Alexa, ділить великі сортування на пакети та повторює тимчасово невдалі записи з експоненційною затримкою. Він захищає від зайвих сплесків запитів; ShoppingRoute не опитує Amazon.",
1132
- "zh-cn": "API 安全模式会限制 Alexa 写入频率,将大型排序分批处理,并对临时写入错误采用指数退避重试。它可避免不必要的突发请求;ShoppingRoute 不会轮询 Amazon。"
1039
+ "en": "API Safe Mode limits direct Alexa write frequency to avoid unnecessary request bursts. ShoppingRoute does not poll Amazon.",
1040
+ "de": "Der API-Schonmodus begrenzt direkte Alexa-Schreibzugriffe, um unnötige Zugriffsspitzen zu vermeiden. ShoppingRoute pollt Amazon nicht.",
1041
+ "ru": "Безопасный режим API ограничивает частоту прямых записей Alexa, чтобы избежать ненужных всплесков запросов. ShoppingRoute не опрашивает Amazon.",
1042
+ "pt": "O Modo Seguro da API limita a frequência de gravações diretas na Alexa para evitar picos desnecessários de solicitações. O ShoppingRoute não consulta a Amazon continuamente.",
1043
+ "nl": "De veilige API-modus beperkt de frequentie van directe Alexa-schrijfbewerkingen om onnodige verzoekpieken te voorkomen. ShoppingRoute pollt Amazon niet.",
1044
+ "fr": "Le mode sécurisé de l’API limite la fréquence des écritures directes Alexa afin d’éviter les pics de requêtes inutiles. ShoppingRoute n’interroge pas Amazon en continu.",
1045
+ "it": "La modalità sicura API limita la frequenza delle scritture dirette Alexa per evitare picchi di richieste non necessari. ShoppingRoute non effettua polling di Amazon.",
1046
+ "es": "El modo seguro de la API limita la frecuencia de escrituras directas en Alexa para evitar picos de solicitudes innecesarios. ShoppingRoute no sondea Amazon.",
1047
+ "pl": "Tryb bezpieczny API ogranicza częstotliwość bezpośrednich zapisów Alexa, aby uniknąć niepotrzebnych skoków liczby żądań. ShoppingRoute nie odpytuje Amazon.",
1048
+ "uk": "Безпечний режим API обмежує частоту прямих записів Alexa, щоб уникнути зайвих сплесків запитів. ShoppingRoute не опитує Amazon.",
1049
+ "zh-cn": "API 安全模式会限制 Alexa 直接写入频率,以避免不必要的请求峰值。ShoppingRoute 不会轮询 Amazon。"
1133
1050
  },
1134
1051
  "ui.items.general.items.apisafemode.label": {
1135
1052
  "en": "Enable API Safe Mode",
@@ -1157,58 +1074,6 @@
1157
1074
  "uk": "Максимум записів за хвилину",
1158
1075
  "zh-cn": "每分钟最大写入次数"
1159
1076
  },
1160
- "ui.items.general.items.batchsize.label": {
1161
- "en": "Writes per batch",
1162
- "de": "Schreibzugriffe pro Block",
1163
- "ru": "Записей в пакете",
1164
- "pt": "Gravações por lote",
1165
- "nl": "Schrijfbewerkingen per batch",
1166
- "fr": "Écritures par lot",
1167
- "it": "Scritture per blocco",
1168
- "es": "Escrituras por lote",
1169
- "pl": "Liczba zapisów w partii",
1170
- "uk": "Записів у пакеті",
1171
- "zh-cn": "每批写入次数"
1172
- },
1173
- "ui.items.general.items.batchpausems.label": {
1174
- "en": "Pause between batches (ms)",
1175
- "de": "Pause zwischen Blöcken (ms)",
1176
- "ru": "Пауза между пакетами (мс)",
1177
- "pt": "Pausa entre lotes (ms)",
1178
- "nl": "Pauze tussen batches (ms)",
1179
- "fr": "Pause entre les lots (ms)",
1180
- "it": "Pausa tra i blocchi (ms)",
1181
- "es": "Pausa entre lotes (ms)",
1182
- "pl": "Przerwa między partiami (ms)",
1183
- "uk": "Пауза між пакетами (мс)",
1184
- "zh-cn": "批次之间的暂停(毫秒)"
1185
- },
1186
- "ui.items.general.items.maxwriteretries.label": {
1187
- "en": "Maximum retries",
1188
- "de": "Maximale Wiederholungen",
1189
- "ru": "Максимум повторных попыток",
1190
- "pt": "Máximo de tentativas",
1191
- "nl": "Maximaal aantal nieuwe pogingen",
1192
- "fr": "Nombre maximal de nouvelles tentatives",
1193
- "it": "Numero massimo di tentativi",
1194
- "es": "Máximo de reintentos",
1195
- "pl": "Maksymalna liczba ponowień",
1196
- "uk": "Максимум повторних спроб",
1197
- "zh-cn": "最大重试次数"
1198
- },
1199
- "ui.items.general.items.retrybasems.label": {
1200
- "en": "Retry base delay (ms)",
1201
- "de": "Grundpause für Wiederholungen (ms)",
1202
- "ru": "Базовая задержка повтора (мс)",
1203
- "pt": "Atraso base para nova tentativa (ms)",
1204
- "nl": "Basisvertraging voor nieuwe poging (ms)",
1205
- "fr": "Délai de base avant nouvelle tentative (ms)",
1206
- "it": "Ritardo base per i tentativi (ms)",
1207
- "es": "Retardo base para reintentos (ms)",
1208
- "pl": "Bazowe opóźnienie ponowienia (ms)",
1209
- "uk": "Базова затримка повтору (мс)",
1210
- "zh-cn": "重试基础延迟(毫秒)"
1211
- },
1212
1077
  "ui.items.liststab.label": {
1213
1078
  "en": "Lists",
1214
1079
  "de": "Listen",
@@ -1691,17 +1556,17 @@
1691
1556
  "zh-cn": "Alexa 列表中的商店标题"
1692
1557
  },
1693
1558
  "ui.items.general.items.marketheaders.help": {
1694
- "en": "Adds entries such as ---- ALDI ----. A heading remains active while at least one real item for that market is open and is deleted completely when the market is no longer needed.",
1695
- "de": "Fügt Einträge wie ---- ALDI ---- ein. Eine Überschrift bleibt aktiv, solange mindestens ein echter Artikel dieses Marktes offen ist, und wird vollständig gelöscht, sobald der Markt nicht mehr benötigt wird.",
1696
- "ru": "Добавляет строки вида ---- ALDI ----. Заголовок остаётся активным, пока открыт хотя бы один настоящий товар этого магазина, и полностью удаляется, когда магазин больше не нужен.",
1697
- "pt": "Adiciona entradas como ---- ALDI ----. O cabeçalho permanece ativo enquanto houver pelo menos um item real aberto nesse mercado e é excluído por completo quando o mercado deixa de ser necessário.",
1698
- "nl": "Voegt regels zoals ---- ALDI ---- toe. De kop blijft actief zolang minstens één echt artikel voor die winkel openstaat en wordt volledig verwijderd zodra de winkel niet meer nodig is.",
1699
- "fr": "Ajoute des entrées comme ---- ALDI ----. L’en-tête reste actif tant qu’au moins un article réel de ce magasin est ouvert et est entièrement supprimé lorsque le magasin n’est plus nécessaire.",
1700
- "it": "Aggiunge voci come ---- ALDI ----. L’intestazione resta attiva finché almeno un articolo reale del negozio è aperto e viene eliminata completamente quando il negozio non serve più.",
1701
- "es": "Añade entradas como ---- ALDI ----. El encabezado permanece activo mientras quede al menos un artículo real abierto de esa tienda y se elimina por completo cuando la tienda ya no es necesaria.",
1702
- "pl": "Dodaje wpisy takie jak ---- ALDI ----. Nagłówek pozostaje aktywny, dopóki co najmniej jeden rzeczywisty artykuł tego sklepu jest otwarty, a gdy sklep nie jest już potrzebny, zostaje całkowicie usunięty.",
1703
- "uk": "Додає записи на кшталт ---- ALDI ----. Заголовок залишається активним, доки відкритий хоча б один справжній товар цього магазину, і повністю видаляється, коли магазин більше не потрібен.",
1704
- "zh-cn": "添加类似 ---- ALDI ---- 的条目。只要该商店还有至少一个真实商品未完成,标题就保持有效;不再需要该商店时,标题会被彻底删除。"
1559
+ "en": "Adds entries such as ═════ ALDI ═════. A heading remains active while at least one real item for that market is open and is deleted completely when the market is no longer needed.",
1560
+ "de": "Fügt Einträge wie ═════ ALDI ═════ ein. Eine Überschrift bleibt aktiv, solange mindestens ein echter Artikel dieses Marktes offen ist, und wird vollständig gelöscht, sobald der Markt nicht mehr benötigt wird.",
1561
+ "ru": "Добавляет строки вида ═════ ALDI ═════. Заголовок остаётся активным, пока открыт хотя бы один настоящий товар этого магазина, и полностью удаляется, когда магазин больше не нужен.",
1562
+ "pt": "Adiciona entradas como ═════ ALDI ═════. O cabeçalho permanece ativo enquanto houver pelo menos um item real aberto nesse mercado e é excluído por completo quando o mercado deixa de ser necessário.",
1563
+ "nl": "Voegt regels zoals ═════ ALDI ═════ toe. De kop blijft actief zolang minstens één echt artikel voor die winkel openstaat en wordt volledig verwijderd zodra de winkel niet meer nodig is.",
1564
+ "fr": "Ajoute des entrées comme ═════ ALDI ═════. L’en-tête reste actif tant qu’au moins un article réel de ce magasin est ouvert et est entièrement supprimé lorsque le magasin n’est plus nécessaire.",
1565
+ "it": "Aggiunge voci come ═════ ALDI ═════. L’intestazione resta attiva finché almeno un articolo reale del negozio è aperto e viene eliminata completamente quando il negozio non serve più.",
1566
+ "es": "Añade entradas como ═════ ALDI ═════. El encabezado permanece activo mientras quede al menos un artículo real abierto de esa tienda y se elimina por completo cuando la tienda ya no es necesaria.",
1567
+ "pl": "Dodaje wpisy takie jak ═════ ALDI ═════. Nagłówek pozostaje aktywny, dopóki co najmniej jeden rzeczywisty artykuł tego sklepu jest otwarty, a gdy sklep nie jest już potrzebny, zostaje całkowicie usunięty.",
1568
+ "uk": "Додає записи на кшталт ═════ ALDI ═════. Заголовок залишається активним, доки відкритий хоча б один справжній товар цього магазину, і повністю видаляється, коли магазин більше не потрібен.",
1569
+ "zh-cn": "添加类似 ═════ ALDI ═════ 的条目。只要该商店还有至少一个真实商品未完成,标题就保持有效;不再需要该商店时,标题会被彻底删除。"
1705
1570
  },
1706
1571
  "ui.items.general.items.minitemspermarket.label": {
1707
1572
  "en": "Minimum items per additional market",