From 412f1e62a183f75e02a7af4ccd24e4f79d77a8ee Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Wed, 15 Oct 2025 10:23:39 +0800 Subject: [PATCH] feat(i18n): add model name display option and improve localization, fixes #440 - Add new model name display setting with options to show model name or file name - Implement helper function to determine display name based on user preference - Update model card footer to use dynamic display name - Include model name display setting in settings modal and state management - Remove redundant labels from display density descriptions in multiple locales - Simplify card info display descriptions by removing duplicate text The changes provide cleaner UI text and add flexibility for users to choose between displaying model names or file names in card footers. --- locales/de.json | 20 ++++++++++++----- locales/en.json | 20 ++++++++++++----- locales/es.json | 20 ++++++++++++----- locales/fr.json | 20 ++++++++++++----- locales/he.json | 20 ++++++++++++----- locales/ja.json | 20 ++++++++++++----- locales/ko.json | 20 ++++++++++++----- locales/ru.json | 20 ++++++++++++----- locales/zh-CN.json | 20 ++++++++++++----- locales/zh-TW.json | 20 ++++++++++++----- py/routes/handlers/misc_handlers.py | 1 + py/services/settings_manager.py | 1 + static/js/components/shared/ModelCard.js | 13 ++++++++++- static/js/managers/SettingsManager.js | 10 +++++++++ static/js/state/index.js | 1 + .../components/modals/settings_modal.html | 22 +++++++++++++++++++ 16 files changed, 197 insertions(+), 51 deletions(-) diff --git a/locales/de.json b/locales/de.json index a19e7047..e92069fc 100644 --- a/locales/de.json +++ b/locales/de.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "Wählen Sie, wie viele Karten pro Zeile angezeigt werden sollen:", "displayDensityDetails": { - "default": "Standard: 5 (1080p), 6 (2K), 8 (4K)", - "medium": "Mittel: 6 (1080p), 7 (2K), 9 (4K)", - "compact": "Kompakt: 7 (1080p), 8 (2K), 10 (4K)" + "default": "5 (1080p), 6 (2K), 8 (4K)", + "medium": "6 (1080p), 7 (2K), 9 (4K)", + "compact": "7 (1080p), 8 (2K), 10 (4K)" }, "displayDensityWarning": "Warnung: Höhere Dichten können bei Systemen mit begrenzten Ressourcen zu Performance-Problemen führen.", "cardInfoDisplay": "Karten-Info-Anzeige", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "Wählen Sie, wann Modellinformationen und Aktionsschaltflächen angezeigt werden sollen:", "cardInfoDisplayDetails": { - "always": "Immer sichtbar: Kopf- und Fußzeilen sind immer sichtbar", - "hover": "Bei Hover anzeigen: Kopf- und Fußzeilen erscheinen nur beim Darüberfahren mit der Maus" + "always": "Kopf- und Fußzeilen sind immer sichtbar", + "hover": "Kopf- und Fußzeilen erscheinen nur beim Darüberfahren mit der Maus" + }, + "modelNameDisplay": "Anzeige des Modellnamens", + "modelNameDisplayOptions": { + "modelName": "Modellname", + "fileName": "Dateiname" + }, + "modelNameDisplayHelp": "Wählen Sie aus, was in der Fußzeile der Modellkarte angezeigt werden soll:", + "modelNameDisplayDetails": { + "modelName": "Den beschreibenden Namen des Modells anzeigen", + "fileName": "Den tatsächlichen Dateinamen auf der Festplatte anzeigen" } }, "folderSettings": { diff --git a/locales/en.json b/locales/en.json index 3785588d..23580ab5 100644 --- a/locales/en.json +++ b/locales/en.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "Choose how many cards to display per row:", "displayDensityDetails": { - "default": "Default: 5 (1080p), 6 (2K), 8 (4K)", - "medium": "Medium: 6 (1080p), 7 (2K), 9 (4K)", - "compact": "Compact: 7 (1080p), 8 (2K), 10 (4K)" + "default": "5 (1080p), 6 (2K), 8 (4K)", + "medium": "6 (1080p), 7 (2K), 9 (4K)", + "compact": "7 (1080p), 8 (2K), 10 (4K)" }, "displayDensityWarning": "Warning: Higher densities may cause performance issues on systems with limited resources.", "cardInfoDisplay": "Card Info Display", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "Choose when to display model information and action buttons:", "cardInfoDisplayDetails": { - "always": "Always Visible: Headers and footers are always visible", - "hover": "Reveal on Hover: Headers and footers only appear when hovering over a card" + "always": "Headers and footers are always visible", + "hover": "Headers and footers only appear when hovering over a card" + }, + "modelNameDisplay": "Model Name Display", + "modelNameDisplayOptions": { + "modelName": "Model Name", + "fileName": "File Name" + }, + "modelNameDisplayHelp": "Choose what to display in the model card footer:", + "modelNameDisplayDetails": { + "modelName": "Display the model's descriptive name", + "fileName": "Display the actual file name on disk" } }, "folderSettings": { diff --git a/locales/es.json b/locales/es.json index a47d171e..0fade06f 100644 --- a/locales/es.json +++ b/locales/es.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "Elige cuántas tarjetas mostrar por fila:", "displayDensityDetails": { - "default": "Predeterminado: 5 (1080p), 6 (2K), 8 (4K)", - "medium": "Medio: 6 (1080p), 7 (2K), 9 (4K)", - "compact": "Compacto: 7 (1080p), 8 (2K), 10 (4K)" + "default": "5 (1080p), 6 (2K), 8 (4K)", + "medium": "6 (1080p), 7 (2K), 9 (4K)", + "compact": "7 (1080p), 8 (2K), 10 (4K)" }, "displayDensityWarning": "Advertencia: Densidades más altas pueden causar problemas de rendimiento en sistemas con recursos limitados.", "cardInfoDisplay": "Visualización de información de tarjeta", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "Elige cuándo mostrar información del modelo y botones de acción:", "cardInfoDisplayDetails": { - "always": "Siempre visible: Los encabezados y pies de página siempre son visibles", - "hover": "Mostrar al pasar el ratón: Los encabezados y pies de página solo aparecen al pasar el ratón sobre una tarjeta" + "always": "Los encabezados y pies de página siempre son visibles", + "hover": "Los encabezados y pies de página solo aparecen al pasar el ratón sobre una tarjeta" + }, + "modelNameDisplay": "Visualización del nombre del modelo", + "modelNameDisplayOptions": { + "modelName": "Nombre del modelo", + "fileName": "Nombre del archivo" + }, + "modelNameDisplayHelp": "Elige qué mostrar en el pie de la tarjeta del modelo:", + "modelNameDisplayDetails": { + "modelName": "Mostrar el nombre descriptivo del modelo", + "fileName": "Mostrar el nombre real del archivo en el disco" } }, "folderSettings": { diff --git a/locales/fr.json b/locales/fr.json index 93556d9f..0d0976e1 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "Choisissez combien de cartes afficher par ligne :", "displayDensityDetails": { - "default": "Par défaut : 5 (1080p), 6 (2K), 8 (4K)", - "medium": "Moyen : 6 (1080p), 7 (2K), 9 (4K)", - "compact": "Compact : 7 (1080p), 8 (2K), 10 (4K)" + "default": "5 (1080p), 6 (2K), 8 (4K)", + "medium": "6 (1080p), 7 (2K), 9 (4K)", + "compact": "7 (1080p), 8 (2K), 10 (4K)" }, "displayDensityWarning": "Attention : Des densités plus élevées peuvent causer des problèmes de performance sur les systèmes avec des ressources limitées.", "cardInfoDisplay": "Affichage des informations de carte", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "Choisissez quand afficher les informations du modèle et les boutons d'action :", "cardInfoDisplayDetails": { - "always": "Toujours visible : Les en-têtes et pieds de page sont toujours visibles", - "hover": "Révéler au survol : Les en-têtes et pieds de page n'apparaissent qu'au survol d'une carte" + "always": "Les en-têtes et pieds de page sont toujours visibles", + "hover": "Les en-têtes et pieds de page n'apparaissent qu'au survol d'une carte" + }, + "modelNameDisplay": "Affichage du nom du modèle", + "modelNameDisplayOptions": { + "modelName": "Nom du modèle", + "fileName": "Nom du fichier" + }, + "modelNameDisplayHelp": "Choisissez ce qui doit être affiché dans le pied de page de la carte du modèle :", + "modelNameDisplayDetails": { + "modelName": "Afficher le nom descriptif du modèle", + "fileName": "Afficher le nom réel du fichier sur le disque" } }, "folderSettings": { diff --git a/locales/he.json b/locales/he.json index 79fdd7e9..e4a14d81 100644 --- a/locales/he.json +++ b/locales/he.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "בחר כמה כרטיסים להציג בכל שורה:", "displayDensityDetails": { - "default": "ברירת מחדל: 5 (1080p), 6 (2K), 8 (4K)", - "medium": "בינוני: 6 (1080p), 7 (2K), 9 (4K)", - "compact": "קומפקטי: 7 (1080p), 8 (2K), 10 (4K)" + "default": "5 (1080p), 6 (2K), 8 (4K)", + "medium": "6 (1080p), 7 (2K), 9 (4K)", + "compact": "7 (1080p), 8 (2K), 10 (4K)" }, "displayDensityWarning": "אזהרה: צפיפויות גבוהות יותר עלולות לגרום לבעיות ביצועים במערכות עם משאבים מוגבלים.", "cardInfoDisplay": "תצוגת מידע בכרטיס", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "בחר מתי להציג מידע על המודל וכפתורי פעולה:", "cardInfoDisplayDetails": { - "always": "תמיד גלוי: כותרות עליונות ותחתונות תמיד גלויות", - "hover": "חשוף בריחוף: כותרות עליונות ותחתונות מופיעות רק בעת ריחוף מעל כרטיס" + "always": "כותרות עליונות ותחתונות תמיד גלויות", + "hover": "כותרות עליונות ותחתונות מופיעות רק בעת ריחוף מעל כרטיס" + }, + "modelNameDisplay": "תצוגת שם מודל", + "modelNameDisplayOptions": { + "modelName": "שם מודל", + "fileName": "שם קובץ" + }, + "modelNameDisplayHelp": "בחר מה להציג בכותרת התחתונה של כרטיס המודל:", + "modelNameDisplayDetails": { + "modelName": "הצג את השם התיאורי של המודל", + "fileName": "הצג את שם הקובץ בפועל בדיסק" } }, "folderSettings": { diff --git a/locales/ja.json b/locales/ja.json index d39fccaa..96c5f967 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "1行に表示するカード数を選択:", "displayDensityDetails": { - "default": "デフォルト:5(1080p)、6(2K)、8(4K)", - "medium": "中:6(1080p)、7(2K)、9(4K)", - "compact": "コンパクト:7(1080p)、8(2K)、10(4K)" + "default": "5(1080p)、6(2K)、8(4K)", + "medium": "6(1080p)、7(2K)、9(4K)", + "compact": "7(1080p)、8(2K)、10(4K)" }, "displayDensityWarning": "警告:高密度設定は、リソースが限られたシステムでパフォーマンスの問題を引き起こす可能性があります。", "cardInfoDisplay": "カード情報表示", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "モデル情報とアクションボタンの表示タイミングを選択:", "cardInfoDisplayDetails": { - "always": "常に表示:ヘッダーとフッターが常に表示されます", - "hover": "ホバー時に表示:カードにホバーしたときのみヘッダーとフッターが表示されます" + "always": "ヘッダーとフッターが常に表示されます", + "hover": "カードにホバーしたときのみヘッダーとフッターが表示されます" + }, + "modelNameDisplay": "モデル名表示", + "modelNameDisplayOptions": { + "modelName": "モデル名", + "fileName": "ファイル名" + }, + "modelNameDisplayHelp": "モデルカードのフッターに表示する内容を選択:", + "modelNameDisplayDetails": { + "modelName": "モデルの説明的な名前を表示", + "fileName": "ディスク上の実際のファイル名を表示" } }, "folderSettings": { diff --git a/locales/ko.json b/locales/ko.json index a6565c10..584a75e9 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "한 줄에 표시할 카드 수를 선택하세요:", "displayDensityDetails": { - "default": "기본: 5개 (1080p), 6개 (2K), 8개 (4K)", - "medium": "중간: 6개 (1080p), 7개 (2K), 9개 (4K)", - "compact": "조밀: 7개 (1080p), 8개 (2K), 10개 (4K)" + "default": "5개 (1080p), 6개 (2K), 8개 (4K)", + "medium": "6개 (1080p), 7개 (2K), 9개 (4K)", + "compact": "7개 (1080p), 8개 (2K), 10개 (4K)" }, "displayDensityWarning": "경고: 높은 밀도는 리소스가 제한된 시스템에서 성능 문제를 일으킬 수 있습니다.", "cardInfoDisplay": "카드 정보 표시", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "모델 정보 및 액션 버튼을 언제 표시할지 선택하세요:", "cardInfoDisplayDetails": { - "always": "항상 표시: 헤더와 푸터가 항상 보입니다", - "hover": "호버 시 표시: 카드에 마우스를 올렸을 때만 헤더와 푸터가 나타납니다" + "always": "헤더와 푸터가 항상 보입니다", + "hover": "카드에 마우스를 올렸을 때만 헤더와 푸터가 나타납니다" + }, + "modelNameDisplay": "모델명 표시", + "modelNameDisplayOptions": { + "modelName": "모델명", + "fileName": "파일명" + }, + "modelNameDisplayHelp": "모델 카드 하단에 표시할 내용을 선택하세요:", + "modelNameDisplayDetails": { + "modelName": "모델의 설명적 이름 표시", + "fileName": "디스크의 실제 파일명 표시" } }, "folderSettings": { diff --git a/locales/ru.json b/locales/ru.json index 5a3b496e..7197a0ae 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "Выберите количество карточек для отображения в ряду:", "displayDensityDetails": { - "default": "По умолчанию: 5 (1080p), 6 (2K), 8 (4K)", - "medium": "Средняя: 6 (1080p), 7 (2K), 9 (4K)", - "compact": "Компактная: 7 (1080p), 8 (2K), 10 (4K)" + "default": "5 (1080p), 6 (2K), 8 (4K)", + "medium": "6 (1080p), 7 (2K), 9 (4K)", + "compact": "7 (1080p), 8 (2K), 10 (4K)" }, "displayDensityWarning": "Предупреждение: Высокая плотность может вызвать проблемы с производительностью на системах с ограниченными ресурсами.", "cardInfoDisplay": "Отображение информации карточки", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "Выберите когда отображать информацию о модели и кнопки действий:", "cardInfoDisplayDetails": { - "always": "Всегда видимо: Заголовки и подписи всегда видны", - "hover": "Показать при наведении: Заголовки и подписи появляются только при наведении на карточку" + "always": "Заголовки и подписи всегда видны", + "hover": "Заголовки и подписи появляются только при наведении на карточку" + }, + "modelNameDisplay": "Отображение названия модели", + "modelNameDisplayOptions": { + "modelName": "Название модели", + "fileName": "Имя файла" + }, + "modelNameDisplayHelp": "Выберите, что отображать в нижней части карточки модели:", + "modelNameDisplayDetails": { + "modelName": "Отображать описательное название модели", + "fileName": "Отображать фактическое имя файла на диске" } }, "folderSettings": { diff --git a/locales/zh-CN.json b/locales/zh-CN.json index 474b61ca..6b79753e 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "选择每行显示卡片数量:", "displayDensityDetails": { - "default": "默认:5(1080p),6(2K),8(4K)", - "medium": "中等:6(1080p),7(2K),9(4K)", - "compact": "紧凑:7(1080p),8(2K),10(4K)" + "default": "5(1080p),6(2K),8(4K)", + "medium": "6(1080p),7(2K),9(4K)", + "compact": "7(1080p),8(2K),10(4K)" }, "displayDensityWarning": "警告:高密度可能导致资源有限的系统性能下降。", "cardInfoDisplay": "卡片信息显示", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "选择何时显示模型信息和操作按钮:", "cardInfoDisplayDetails": { - "always": "始终可见:标题和底部始终显示", - "hover": "悬停时显示:仅在悬停卡片时显示标题和底部" + "always": "标题和底部始终显示", + "hover": "仅在悬停卡片时显示标题和底部" + }, + "modelNameDisplay": "模型名称显示", + "modelNameDisplayOptions": { + "modelName": "模型名称", + "fileName": "文件名" + }, + "modelNameDisplayHelp": "选择在模型卡片底部显示的内容:", + "modelNameDisplayDetails": { + "modelName": "显示模型的描述性名称", + "fileName": "显示磁盘上的实际文件名" } }, "folderSettings": { diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 9e1385fd..631617d1 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -225,9 +225,9 @@ }, "displayDensityHelp": "選擇每行顯示卡片數量:", "displayDensityDetails": { - "default": "預設:5(1080p)、6(2K)、8(4K)", - "medium": "中等:6(1080p)、7(2K)、9(4K)", - "compact": "緊湊:7(1080p)、8(2K)、10(4K)" + "default": "5(1080p)、6(2K)、8(4K)", + "medium": "6(1080p)、7(2K)、9(4K)", + "compact": "7(1080p)、8(2K)、10(4K)" }, "displayDensityWarning": "警告:較高密度可能導致資源有限的系統效能下降。", "cardInfoDisplay": "卡片資訊顯示", @@ -237,8 +237,18 @@ }, "cardInfoDisplayHelp": "選擇何時顯示模型資訊與操作按鈕:", "cardInfoDisplayDetails": { - "always": "永遠顯示:標題與頁腳始終可見", - "hover": "滑鼠懸停顯示:標題與頁腳僅在滑鼠懸停時顯示" + "always": "標題與頁腳始終可見", + "hover": "標題與頁腳僅在滑鼠懸停時顯示" + }, + "modelNameDisplay": "模型名稱顯示", + "modelNameDisplayOptions": { + "modelName": "模型名稱", + "fileName": "檔案名稱" + }, + "modelNameDisplayHelp": "選擇在模型卡片底部顯示的內容:", + "modelNameDisplayDetails": { + "modelName": "顯示模型的描述性名稱", + "fileName": "顯示磁碟上的實際檔案名稱" } }, "folderSettings": { diff --git a/py/routes/handlers/misc_handlers.py b/py/routes/handlers/misc_handlers.py index 30443149..c4473ca9 100644 --- a/py/routes/handlers/misc_handlers.py +++ b/py/routes/handlers/misc_handlers.py @@ -163,6 +163,7 @@ class SettingsHandler: "show_only_sfw", "compact_mode", "priority_tags", + "model_name_display", ) _PROXY_KEYS = {"proxy_enabled", "proxy_host", "proxy_port", "proxy_username", "proxy_password", "proxy_type"} diff --git a/py/services/settings_manager.py b/py/services/settings_manager.py index 62f67169..13d6ea0a 100644 --- a/py/services/settings_manager.py +++ b/py/services/settings_manager.py @@ -44,6 +44,7 @@ DEFAULT_SETTINGS: Dict[str, Any] = { "include_trigger_words": False, "compact_mode": False, "priority_tags": DEFAULT_PRIORITY_TAG_CONFIG.copy(), + "model_name_display": "model_name", } diff --git a/static/js/components/shared/ModelCard.js b/static/js/components/shared/ModelCard.js index 55977d63..9d425f9e 100644 --- a/static/js/components/shared/ModelCard.js +++ b/static/js/components/shared/ModelCard.js @@ -11,6 +11,17 @@ import { showDeleteModal } from '../../utils/modalUtils.js'; import { translate } from '../../utils/i18nHelpers.js'; import { eventManager } from '../../utils/EventManager.js'; +// Helper function to get display name based on settings +function getDisplayName(model) { + const displayNameSetting = state.global.settings.model_name_display || 'model_name'; + + if (displayNameSetting === 'file_name') { + return model.file_name || model.model_name || 'Unknown Model'; + } + + return model.model_name || model.file_name || 'Unknown Model'; +} + // Add global event delegation handlers using event manager export function setupModelCardEventDelegation(modelType) { // Remove any existing handler first @@ -510,7 +521,7 @@ export function createModelCard(model, modelType) { ` : ''} + +
+
+
+ +
+
+ +
+
+
+ {{ t('settings.layoutSettings.modelNameDisplayHelp') }} + +
+
+