From bcfed4b874183f8b453776090b318969ddb61b96 Mon Sep 17 00:00:00 2001 From: Will Miao Date: Fri, 15 May 2026 20:55:02 +0800 Subject: [PATCH] feat(ui): use recipes terminology in bulk delete confirmation for recipes page The bulk delete confirmation modal always displayed "models" in its text (title, message, countMessage) regardless of the current page type. On the recipes page this is misleading since users are managing recipes, not models. - Add bulkDeleteRecipes i18n keys to all 10 locale files - Update showBulkDeleteModal() to detect currentPageType and use recipes-specific wording when on the recipes page --- locales/de.json | 8 +++++++- locales/en.json | 6 ++++++ locales/es.json | 8 +++++++- locales/fr.json | 8 +++++++- locales/he.json | 8 +++++++- locales/ja.json | 8 +++++++- locales/ko.json | 8 +++++++- locales/ru.json | 8 +++++++- locales/zh-CN.json | 8 +++++++- locales/zh-TW.json | 8 +++++++- static/js/managers/BulkManager.js | 20 +++++++++++++++++--- 11 files changed, 86 insertions(+), 12 deletions(-) diff --git a/locales/de.json b/locales/de.json index d92107fc..37761e48 100644 --- a/locales/de.json +++ b/locales/de.json @@ -1085,6 +1085,12 @@ "countMessage": "Modelle werden dauerhaft gelöscht.", "action": "Alle löschen" }, + "bulkDeleteRecipes": { + "title": "Mehrere Rezepte löschen", + "message": "Sind Sie sicher, dass Sie alle ausgewählten Rezepte und ihre zugehörigen Dateien löschen möchten?", + "countMessage": "Rezepte werden dauerhaft gelöscht.", + "action": "Alle löschen" + }, "checkUpdates": { "title": "Alle {typePlural} auf Updates prüfen?", "message": "Damit werden alle {typePlural} in deiner Bibliothek auf Updates geprüft. Bei großen Sammlungen kann das etwas länger dauern.", @@ -1957,4 +1963,4 @@ "retry": "Wiederholen" } } -} \ No newline at end of file +} diff --git a/locales/en.json b/locales/en.json index 1a8bf247..578fe089 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1085,6 +1085,12 @@ "countMessage": "models will be permanently deleted.", "action": "Delete All" }, + "bulkDeleteRecipes": { + "title": "Delete Multiple Recipes", + "message": "Are you sure you want to delete all selected recipes and their associated files?", + "countMessage": "recipes will be permanently deleted.", + "action": "Delete All" + }, "checkUpdates": { "title": "Check updates for all {typePlural}?", "message": "This checks every {typePlural} in your library for updates. Large collections may take a little longer.", diff --git a/locales/es.json b/locales/es.json index c4413d31..38194a4f 100644 --- a/locales/es.json +++ b/locales/es.json @@ -1085,6 +1085,12 @@ "countMessage": "modelos serán eliminados permanentemente.", "action": "Eliminar todo" }, + "bulkDeleteRecipes": { + "title": "Eliminar múltiples recetas", + "message": "¿Estás seguro de que quieres eliminar todas las recetas seleccionadas y sus archivos asociados?", + "countMessage": "recetas serán eliminadas permanentemente.", + "action": "Eliminar todo" + }, "checkUpdates": { "title": "¿Comprobar actualizaciones para todos los {typePlural}?", "message": "Esto comprobará las actualizaciones de todos los {typePlural} de tu biblioteca. En colecciones grandes puede tardar un poco más.", @@ -1957,4 +1963,4 @@ "retry": "Reintentar" } } -} \ No newline at end of file +} diff --git a/locales/fr.json b/locales/fr.json index ddeee420..38ef9c57 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -1085,6 +1085,12 @@ "countMessage": "modèles seront définitivement supprimés.", "action": "Tout supprimer" }, + "bulkDeleteRecipes": { + "title": "Supprimer plusieurs recipes", + "message": "Êtes-vous sûr de vouloir supprimer toutes les recipes sélectionnées et leurs fichiers associés ?", + "countMessage": "recipes seront définitivement supprimées.", + "action": "Tout supprimer" + }, "checkUpdates": { "title": "Vérifier les mises à jour pour tous les {typePlural} ?", "message": "Cette action vérifie les mises à jour pour tous les {typePlural} de votre bibliothèque. Les grandes collections peuvent prendre un peu plus de temps.", @@ -1957,4 +1963,4 @@ "retry": "Réessayer" } } -} \ No newline at end of file +} diff --git a/locales/he.json b/locales/he.json index 2c061bfa..43e5ba17 100644 --- a/locales/he.json +++ b/locales/he.json @@ -1085,6 +1085,12 @@ "countMessage": "מודלים יימחקו לצמיתות.", "action": "מחק הכל" }, + "bulkDeleteRecipes": { + "title": "מחק מספר מתכונים", + "message": "האם אתה בטוח שברצונך למחוק את כל המתכונים שנבחרו ואת הקבצים הנלווים אליהם?", + "countMessage": "מתכונים יימחקו לצמיתות.", + "action": "מחק הכל" + }, "checkUpdates": { "title": "לבדוק עדכונים לכל ה-{typePlural}?", "message": "הפעולה תבדוק עדכונים עבור כל ה-{typePlural} בספרייה שלך. באוספים גדולים זה עלול לקחת מעט יותר זמן.", @@ -1957,4 +1963,4 @@ "retry": "נסה שוב" } } -} \ No newline at end of file +} diff --git a/locales/ja.json b/locales/ja.json index 00bed147..e156d23f 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -1085,6 +1085,12 @@ "countMessage": "モデルが完全に削除されます。", "action": "すべて削除" }, + "bulkDeleteRecipes": { + "title": "複数のレシピを削除", + "message": "選択したすべてのレシピと関連ファイルを削除してもよろしいですか?", + "countMessage": "レシピが完全に削除されます。", + "action": "すべて削除" + }, "checkUpdates": { "title": "すべての{type}の更新を確認しますか?", "message": "ライブラリ内のすべての{type}で更新を確認します。コレクションが大きい場合は時間がかかることがあります。", @@ -1957,4 +1963,4 @@ "retry": "再試行" } } -} \ No newline at end of file +} diff --git a/locales/ko.json b/locales/ko.json index 2ef6cbb2..1fffcc68 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -1085,6 +1085,12 @@ "countMessage": "개의 모델이 영구적으로 삭제됩니다.", "action": "모두 삭제" }, + "bulkDeleteRecipes": { + "title": "여러 레시피 삭제", + "message": "선택된 모든 레시피와 관련 파일을 삭제하시겠습니까?", + "countMessage": "개의 레시피가 영구적으로 삭제됩니다.", + "action": "모두 삭제" + }, "checkUpdates": { "title": "{type} 전체 업데이트를 확인할까요?", "message": "라이브러리에 있는 모든 {type}의 업데이트를 확인합니다. 컬렉션이 클수록 시간이 조금 더 걸릴 수 있습니다.", @@ -1957,4 +1963,4 @@ "retry": "다시 시도" } } -} \ No newline at end of file +} diff --git a/locales/ru.json b/locales/ru.json index a795c421..8a6f9ebe 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -1085,6 +1085,12 @@ "countMessage": "моделей будут удалены навсегда.", "action": "Удалить все" }, + "bulkDeleteRecipes": { + "title": "Удалить несколько рецептов", + "message": "Вы уверены, что хотите удалить все выбранные рецепты и связанные с ними файлы?", + "countMessage": "рецептов будут удалены навсегда.", + "action": "Удалить все" + }, "checkUpdates": { "title": "Проверить обновления для всех {typePlural}?", "message": "Будут проверены обновления для всех {typePlural} в вашей библиотеке. Для больших коллекций это может занять немного больше времени.", @@ -1957,4 +1963,4 @@ "retry": "Повторить" } } -} \ No newline at end of file +} diff --git a/locales/zh-CN.json b/locales/zh-CN.json index 4987740c..19db9752 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -1085,6 +1085,12 @@ "countMessage": "模型将被永久删除。", "action": "全部删除" }, + "bulkDeleteRecipes": { + "title": "删除多个配方", + "message": "你确定要删除所有选中的配方及其相关文件吗?", + "countMessage": "配方将被永久删除。", + "action": "全部删除" + }, "checkUpdates": { "title": "检查所有 {type} 的更新?", "message": "这会为库中的每个 {type} 检查更新,大型集合可能需要一些时间。", @@ -1957,4 +1963,4 @@ "retry": "重试" } } -} \ No newline at end of file +} diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 4f4356c4..cf8c9a8f 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -1085,6 +1085,12 @@ "countMessage": "模型將被永久刪除。", "action": "全部刪除" }, + "bulkDeleteRecipes": { + "title": "刪除多個配方", + "message": "您確定要刪除所有選取的配方及其相關檔案嗎?", + "countMessage": "配方將被永久刪除。", + "action": "全部刪除" + }, "checkUpdates": { "title": "要檢查所有 {type} 的更新嗎?", "message": "這會為資料庫中的每個 {type} 檢查更新,大型收藏可能會花上一些時間。", @@ -1957,4 +1963,4 @@ "retry": "重試" } } -} \ No newline at end of file +} diff --git a/static/js/managers/BulkManager.js b/static/js/managers/BulkManager.js index 93c3ed42..52e95524 100644 --- a/static/js/managers/BulkManager.js +++ b/static/js/managers/BulkManager.js @@ -546,9 +546,23 @@ export class BulkManager { return; } - const countElement = document.getElementById('bulkDeleteCount'); - if (countElement) { - countElement.textContent = state.selectedModels.size; + const count = state.selectedModels.size; + const isRecipes = state.currentPageType === 'recipes'; + const keyPrefix = isRecipes ? 'modals.bulkDeleteRecipes' : 'modals.bulkDelete'; + + const titleEl = document.querySelector('#bulkDeleteModal h2'); + if (titleEl) { + titleEl.textContent = translate(`${keyPrefix}.title`); + } + + const messageEl = document.querySelector('#bulkDeleteModal .delete-message'); + if (messageEl) { + messageEl.textContent = translate(`${keyPrefix}.message`); + } + + const countInfoEl = document.querySelector('#bulkDeleteModal .delete-model-info p'); + if (countInfoEl) { + countInfoEl.innerHTML = `${count} ${translate(`${keyPrefix}.countMessage`)}`; } modalManager.showModal('bulkDeleteModal');