From 46eeab81007384aded2bcabd2e00d901fb33e16e Mon Sep 17 00:00:00 2001 From: sripwoud Date: Tue, 18 Aug 2026 21:59:34 +0200 Subject: [PATCH] fix(web): localize duplicates counter and hoist processed math duplicateCount existed only in en.json, so 17 locales fell back to English inside an otherwise localized panel. The processed count, percentage and progress bar computed success+failed+duplicates inline three times; hoist it once so the three can never disagree. --- web/src/features/import/index.tsx | 16 ++++++---------- web/src/locales/ar.json | 1 + web/src/locales/da.json | 1 + web/src/locales/de.json | 1 + web/src/locales/es.json | 1 + web/src/locales/fi.json | 1 + web/src/locales/fr.json | 1 + web/src/locales/it.json | 1 + web/src/locales/jp.json | 1 + web/src/locales/ko.json | 1 + web/src/locales/nl.json | 1 + web/src/locales/no.json | 1 + web/src/locales/pl.json | 1 + web/src/locales/pt.json | 1 + web/src/locales/ru.json | 1 + web/src/locales/sv.json | 1 + web/src/locales/zh-tw.json | 1 + web/src/locales/zh.json | 1 + 18 files changed, 23 insertions(+), 10 deletions(-) diff --git a/web/src/features/import/index.tsx b/web/src/features/import/index.tsx index 5cb5b63..972b7dc 100644 --- a/web/src/features/import/index.tsx +++ b/web/src/features/import/index.tsx @@ -119,6 +119,9 @@ export default function ImportPage() { const abortRef = useRef(null); + const processedCount = progress ? progress.success + progress.failed + progress.duplicates : 0; + const processedPct = progress && progress.total > 0 ? (processedCount / progress.total) * 100 : 0; + useEffect(() => { return () => { abortRef.current?.abort(); }; }, []); @@ -659,18 +662,11 @@ export default function ImportPage() {
- {t('import.processed', { current: progress.success + progress.failed + progress.duplicates, total: progress.total })} - - - {progress.total > 0 - ? Math.round(((progress.success + progress.failed + progress.duplicates) / progress.total) * 100) - : 0}% + {t('import.processed', { current: processedCount, total: progress.total })} + {Math.round(processedPct)}%
- 0 ? ((progress.success + progress.failed + progress.duplicates) / progress.total) * 100 : 0} - className="h-2" - /> +
)} diff --git a/web/src/locales/ar.json b/web/src/locales/ar.json index 4643154..ec9aa49 100644 --- a/web/src/locales/ar.json +++ b/web/src/locales/ar.json @@ -727,6 +727,7 @@ "detectedFolder": "مكتشف", "detectedFrom": "مكتشف من", "dropHere": "أفلت ملفات .eml / .mbox / .pst هنا", + "duplicateCount": "تم تخطي {{count}} من التكرارات", "failed": "فشل الاستيراد", "failedCount": "{{count}} فشل", "failedDetails": "العناصر الفاشلة", diff --git a/web/src/locales/da.json b/web/src/locales/da.json index e6b4271..f805094 100644 --- a/web/src/locales/da.json +++ b/web/src/locales/da.json @@ -727,6 +727,7 @@ "detectedFolder": "Registreret", "detectedFrom": "Registreret fra", "dropHere": "Slip .eml / .mbox / .pst-filer her", + "duplicateCount": "{{count}} dubletter sprunget over", "failed": "Import mislykkedes", "failedCount": "{{count}} fejlet", "failedDetails": "Fejlede elementer", diff --git a/web/src/locales/de.json b/web/src/locales/de.json index 0b2bd0b..dc2700e 100644 --- a/web/src/locales/de.json +++ b/web/src/locales/de.json @@ -727,6 +727,7 @@ "detectedFolder": "Erkannt", "detectedFrom": "Erkannt aus", "dropHere": ".eml / .mbox / .pst-Dateien hierher ziehen", + "duplicateCount": "{{count}} Duplikate übersprungen", "failed": "Import fehlgeschlagen", "failedCount": "{{count}} fehlgeschlagen", "failedDetails": "Fehlgeschlagene Elemente", diff --git a/web/src/locales/es.json b/web/src/locales/es.json index 86b87ad..c3210f2 100644 --- a/web/src/locales/es.json +++ b/web/src/locales/es.json @@ -727,6 +727,7 @@ "detectedFolder": "Detectado", "detectedFrom": "Detectado de", "dropHere": "Arrastre archivos .eml / .mbox / .pst aquí", + "duplicateCount": "{{count}} duplicados omitidos", "failed": "Error al importar", "failedCount": "{{count}} fallidos", "failedDetails": "Elementos fallidos", diff --git a/web/src/locales/fi.json b/web/src/locales/fi.json index e4bddca..bb00381 100644 --- a/web/src/locales/fi.json +++ b/web/src/locales/fi.json @@ -727,6 +727,7 @@ "detectedFolder": "Tunnistettu", "detectedFrom": "Tunnistettu lähteestä", "dropHere": "Pudota .eml / .mbox / .pst -tiedostot tähän", + "duplicateCount": "{{count}} kaksoiskappaletta ohitettu", "failed": "Tuonti epäonnistui", "failedCount": "{{count}} epäonnistui", "failedDetails": "Epäonnistuneet kohteet", diff --git a/web/src/locales/fr.json b/web/src/locales/fr.json index ffc4b99..ee3999c 100644 --- a/web/src/locales/fr.json +++ b/web/src/locales/fr.json @@ -727,6 +727,7 @@ "detectedFolder": "Détecté", "detectedFrom": "Détecté depuis", "dropHere": "Déposez les fichiers .eml / .mbox / .pst ici", + "duplicateCount": "{{count}} doublon(s) ignoré(s)", "failed": "Échec de l'importation", "failedCount": "{{count}} échoué(s)", "failedDetails": "Éléments en échec", diff --git a/web/src/locales/it.json b/web/src/locales/it.json index 49cde55..ef43272 100644 --- a/web/src/locales/it.json +++ b/web/src/locales/it.json @@ -727,6 +727,7 @@ "detectedFolder": "Rilevato", "detectedFrom": "Rilevato da", "dropHere": "Trascina i file .eml / .mbox / .pst qui", + "duplicateCount": "{{count}} duplicati saltati", "failed": "Importazione fallita", "failedCount": "{{count}} falliti", "failedDetails": "Elementi falliti", diff --git a/web/src/locales/jp.json b/web/src/locales/jp.json index 9d483b0..7723c5b 100644 --- a/web/src/locales/jp.json +++ b/web/src/locales/jp.json @@ -727,6 +727,7 @@ "detectedFolder": "放出演出", "detectedFrom": "検出元:", "dropHere": "ここに .eml / .mbox / .pst 文件をドロップ", + "duplicateCount": "{{count}} 件の重複をスキップ", "failed": "インポート失敗", "failedCount": "{{count}} 件の失敗", "failedDetails": "失敗したアイテム", diff --git a/web/src/locales/ko.json b/web/src/locales/ko.json index 8aa8cbc..878dcb8 100644 --- a/web/src/locales/ko.json +++ b/web/src/locales/ko.json @@ -727,6 +727,7 @@ "detectedFolder": "감지됨", "detectedFrom": "감지 대상:", "dropHere": "여기에 .eml / .mbox / .pst 파일 끌어놓기", + "duplicateCount": "{{count}}개 중복 건너뜀", "failed": "가져오기 실패", "failedCount": "{{count}}개 실패", "failedDetails": "실패한 항목", diff --git a/web/src/locales/nl.json b/web/src/locales/nl.json index f23dda6..affca80 100644 --- a/web/src/locales/nl.json +++ b/web/src/locales/nl.json @@ -727,6 +727,7 @@ "detectedFolder": "Gedetecteerd", "detectedFrom": "Gedetecteerd uit", "dropHere": "Sleep .eml / .mbox / .pst bestanden hierheen", + "duplicateCount": "{{count}} duplicaten overgeslagen", "failed": "Import mislukt", "failedCount": "{{count}} mislukt", "failedDetails": "Mislukte items", diff --git a/web/src/locales/no.json b/web/src/locales/no.json index 8d7c028..fd2d791 100644 --- a/web/src/locales/no.json +++ b/web/src/locales/no.json @@ -727,6 +727,7 @@ "detectedFolder": "Registrert", "detectedFrom": "Registrert fra", "dropHere": "Slipp .eml / .mbox / .pst-filer her", + "duplicateCount": "{{count}} duplikater hoppet over", "failed": "Import mislyktes", "failedCount": "{{count}} feilet", "failedDetails": "Feilede elementer", diff --git a/web/src/locales/pl.json b/web/src/locales/pl.json index 99ed857..8af76a8 100644 --- a/web/src/locales/pl.json +++ b/web/src/locales/pl.json @@ -727,6 +727,7 @@ "detectedFolder": "Wykryto", "detectedFrom": "Wykryto z", "dropHere": "Upuść pliki .eml / .mbox / .pst tutaj", + "duplicateCount": "Pominięto duplikatów: {{count}}", "failed": "Import nie powiódł się", "failedCount": "Niepowodzenie: {{count}}", "failedDetails": "Nieudane elementy", diff --git a/web/src/locales/pt.json b/web/src/locales/pt.json index dc466df..b58d289 100644 --- a/web/src/locales/pt.json +++ b/web/src/locales/pt.json @@ -727,6 +727,7 @@ "detectedFolder": "Detectado", "detectedFrom": "Detectado de", "dropHere": "Solte arquivos .eml / .mbox / .pst aqui", + "duplicateCount": "{{count}} duplicados ignorados", "failed": "Falha na importação", "failedCount": "{{count}} falharam", "failedDetails": "Itens com falha", diff --git a/web/src/locales/ru.json b/web/src/locales/ru.json index d927f18..fdfcb76 100644 --- a/web/src/locales/ru.json +++ b/web/src/locales/ru.json @@ -727,6 +727,7 @@ "detectedFolder": "Обнаружено", "detectedFrom": "Обнаружено из", "dropHere": "Перетащите файлы .eml / .mbox / .pst сюда", + "duplicateCount": "Пропущено дубликатов: {{count}}", "failed": "Ошибка импорта", "failedCount": "Ошибок: {{count}}", "failedDetails": "Неудачные элементы", diff --git a/web/src/locales/sv.json b/web/src/locales/sv.json index 955a32a..bb6fd4e 100644 --- a/web/src/locales/sv.json +++ b/web/src/locales/sv.json @@ -727,6 +727,7 @@ "detectedFolder": "Identifierad", "detectedFrom": "Identifierad från", "dropHere": "Släpp .eml / .mbox / .pst-filer här", + "duplicateCount": "{{count}} dubbletter hoppades över", "failed": "Import misslyckades", "failedCount": "{{count}} misslyckades", "failedDetails": "Misslyckade objekt", diff --git a/web/src/locales/zh-tw.json b/web/src/locales/zh-tw.json index 3cec973..4233c86 100644 --- a/web/src/locales/zh-tw.json +++ b/web/src/locales/zh-tw.json @@ -727,6 +727,7 @@ "detectedFolder": "已識別", "detectedFrom": "識別自", "dropHere": "將 .eml / .mbox / .pst 檔案拖曳到此處", + "duplicateCount": "已略過 {{count}} 個重複項", "failed": "匯入失敗", "failedCount": "{{count}} 個失敗", "failedDetails": "失敗詳情", diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json index e860dba..6f3cd87 100644 --- a/web/src/locales/zh.json +++ b/web/src/locales/zh.json @@ -737,6 +737,7 @@ "detectedFolder": "已识别", "detectedFrom": "识别自", "dropHere": "将 .eml / .mbox / .pst 文件拖拽到此处", + "duplicateCount": "已跳过 {{count}} 个重复项", "failed": "导入失败", "failedCount": "{{count}} 个失败", "failedDetails": "失败详情",