From 9fa3fac973f90192ac5920b587e02c50d0b24aca Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Fri, 5 Sep 2025 08:43:01 +0800 Subject: [PATCH] feat(locales): add bulk tag management translations for multiple languages --- locales/de.json | 26 ++++++++++++++++++++++---- locales/es.json | 26 ++++++++++++++++++++++---- locales/fr.json | 26 ++++++++++++++++++++++---- locales/ja.json | 20 +++++++++++++++++++- locales/ko.json | 26 ++++++++++++++++++++++---- locales/ru.json | 26 ++++++++++++++++++++++---- locales/zh-CN.json | 20 +++++++++++++++++++- locales/zh-TW.json | 20 +++++++++++++++++++- 8 files changed, 167 insertions(+), 23 deletions(-) diff --git a/locales/de.json b/locales/de.json index 064b7306..394ebd6f 100644 --- a/locales/de.json +++ b/locales/de.json @@ -194,7 +194,7 @@ "displayDensity": "Anzeige-Dichte", "displayDensityOptions": { "default": "Standard", - "medium": "Mittel", + "medium": "Mittel", "compact": "Kompakt" }, "displayDensityHelp": "Wählen Sie, wie viele Karten pro Zeile angezeigt werden sollen:", @@ -231,7 +231,7 @@ "templateOptions": { "flatStructure": "Flache Struktur", "byBaseModel": "Nach Basis-Modell", - "byAuthor": "Nach Autor", + "byAuthor": "Nach Autor", "byFirstTag": "Nach erstem Tag", "baseModelFirstTag": "Basis-Modell + Erster Tag", "baseModelAuthor": "Basis-Modell + Autor", @@ -241,7 +241,7 @@ "customTemplatePlaceholder": "Benutzerdefinierte Vorlage eingeben (z.B. {base_model}/{author}/{first_tag})", "modelTypes": { "lora": "LoRA", - "checkpoint": "Checkpoint", + "checkpoint": "Checkpoint", "embedding": "Embedding" }, "baseModelPathMappings": "Basis-Modell-Pfad-Zuordnungen", @@ -319,6 +319,7 @@ "selected": "{count} ausgewählt", "selectedSuffix": "ausgewählt", "viewSelected": "Klicken Sie, um ausgewählte Elemente anzuzeigen", + "addTags": "Tags hinzufügen", "sendToWorkflow": "An Workflow senden", "copyAll": "Alle kopieren", "refreshAll": "Alle aktualisieren", @@ -572,6 +573,16 @@ "countMessage": "Modelle werden dauerhaft gelöscht.", "action": "Alle löschen" }, + "bulkAddTags": { + "title": "Tags zu mehreren Modellen hinzufügen", + "description": "Tags hinzufügen zu", + "models": "Modelle", + "tagsToAdd": "Hinzugefügte Tags", + "placeholder": "Tag eingeben und Enter drücken...", + "appendTags": "Tags anhängen", + "replaceTags": "Tags ersetzen", + "saveChanges": "Änderungen speichern" + }, "exampleAccess": { "title": "Lokale Beispielbilder", "message": "Keine lokalen Beispielbilder für dieses Modell gefunden. Ansichtsoptionen:", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "Diese Gruppe wurde bereits verifiziert", "verificationCompleteMismatch": "Verifikation abgeschlossen. {count} Datei(en) haben unterschiedliche tatsächliche Hashes.", "verificationCompleteSuccess": "Verifikation abgeschlossen. Alle Dateien sind bestätigte Duplikate.", - "verificationFailed": "Fehler beim Verifizieren der Hashes: {message}" + "verificationFailed": "Fehler beim Verifizieren der Hashes: {message}", + "noTagsToAdd": "Keine Tags zum Hinzufügen", + "tagsAddedSuccessfully": "Erfolgreich {tagCount} Tag(s) zu {count} {type}(s) hinzugefügt", + "tagsReplacedSuccessfully": "Tags für {count} {type}(s) erfolgreich durch {tagCount} Tag(s) ersetzt", + "tagsAddFailed": "Fehler beim Hinzufügen von Tags zu {count} Modell(en)", + "tagsReplaceFailed": "Fehler beim Ersetzen von Tags für {count} Modell(e)", + "bulkTagsAddFailed": "Fehler beim Hinzufügen von Tags zu Modellen", + "bulkTagsReplaceFailed": "Fehler beim Ersetzen von Tags für Modelle" }, "search": { "atLeastOneOption": "Mindestens eine Suchoption muss ausgewählt werden" diff --git a/locales/es.json b/locales/es.json index db682c59..b34b5ee0 100644 --- a/locales/es.json +++ b/locales/es.json @@ -194,7 +194,7 @@ "displayDensity": "Densidad de visualización", "displayDensityOptions": { "default": "Predeterminado", - "medium": "Medio", + "medium": "Medio", "compact": "Compacto" }, "displayDensityHelp": "Elige cuántas tarjetas mostrar por fila:", @@ -231,7 +231,7 @@ "templateOptions": { "flatStructure": "Estructura plana", "byBaseModel": "Por modelo base", - "byAuthor": "Por autor", + "byAuthor": "Por autor", "byFirstTag": "Por primera etiqueta", "baseModelFirstTag": "Modelo base + primera etiqueta", "baseModelAuthor": "Modelo base + autor", @@ -241,7 +241,7 @@ "customTemplatePlaceholder": "Introduce plantilla personalizada (ej., {base_model}/{author}/{first_tag})", "modelTypes": { "lora": "LoRA", - "checkpoint": "Checkpoint", + "checkpoint": "Checkpoint", "embedding": "Embedding" }, "baseModelPathMappings": "Mapeos de rutas de modelo base", @@ -319,6 +319,7 @@ "selected": "{count} seleccionados", "selectedSuffix": "seleccionados", "viewSelected": "Clic para ver elementos seleccionados", + "addTags": "Añadir etiquetas", "sendToWorkflow": "Enviar al flujo de trabajo", "copyAll": "Copiar todo", "refreshAll": "Actualizar todo", @@ -572,6 +573,16 @@ "countMessage": "modelos serán eliminados permanentemente.", "action": "Eliminar todo" }, + "bulkAddTags": { + "title": "Añadir etiquetas a múltiples modelos", + "description": "Añadir etiquetas a", + "models": "modelos", + "tagsToAdd": "Etiquetas a añadir", + "placeholder": "Introduce una etiqueta y presiona Enter...", + "appendTags": "Añadir etiquetas", + "replaceTags": "Reemplazar etiquetas", + "saveChanges": "Guardar cambios" + }, "exampleAccess": { "title": "Imágenes de ejemplo locales", "message": "No se encontraron imágenes de ejemplo locales para este modelo. Opciones de visualización:", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "Este grupo ya ha sido verificado", "verificationCompleteMismatch": "Verificación completa. {count} archivo(s) tienen hashes reales diferentes.", "verificationCompleteSuccess": "Verificación completa. Todos los archivos son confirmados duplicados.", - "verificationFailed": "Error al verificar hashes: {message}" + "verificationFailed": "Error al verificar hashes: {message}", + "noTagsToAdd": "No hay etiquetas para añadir", + "tagsAddedSuccessfully": "Se añadieron exitosamente {tagCount} etiqueta(s) a {count} {type}(s)", + "tagsReplacedSuccessfully": "Se reemplazaron exitosamente las etiquetas de {count} {type}(s) con {tagCount} etiqueta(s)", + "tagsAddFailed": "Error al añadir etiquetas a {count} modelo(s)", + "tagsReplaceFailed": "Error al reemplazar etiquetas para {count} modelo(s)", + "bulkTagsAddFailed": "Error al añadir etiquetas a los modelos", + "bulkTagsReplaceFailed": "Error al reemplazar etiquetas para los modelos" }, "search": { "atLeastOneOption": "Al menos una opción de búsqueda debe estar seleccionada" diff --git a/locales/fr.json b/locales/fr.json index 5739e7cf..8c0a6d94 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -194,7 +194,7 @@ "displayDensity": "Densité d'affichage", "displayDensityOptions": { "default": "Par défaut", - "medium": "Moyen", + "medium": "Moyen", "compact": "Compact" }, "displayDensityHelp": "Choisissez combien de cartes afficher par ligne :", @@ -231,7 +231,7 @@ "templateOptions": { "flatStructure": "Structure plate", "byBaseModel": "Par modèle de base", - "byAuthor": "Par auteur", + "byAuthor": "Par auteur", "byFirstTag": "Par premier tag", "baseModelFirstTag": "Modèle de base + Premier tag", "baseModelAuthor": "Modèle de base + Auteur", @@ -241,7 +241,7 @@ "customTemplatePlaceholder": "Entrez un modèle personnalisé (ex: {base_model}/{author}/{first_tag})", "modelTypes": { "lora": "LoRA", - "checkpoint": "Checkpoint", + "checkpoint": "Checkpoint", "embedding": "Embedding" }, "baseModelPathMappings": "Mappages de chemin de modèle de base", @@ -319,6 +319,7 @@ "selected": "{count} sélectionné(s)", "selectedSuffix": "sélectionné(s)", "viewSelected": "Cliquez pour voir les éléments sélectionnés", + "addTags": "Ajouter des tags", "sendToWorkflow": "Envoyer vers le workflow", "copyAll": "Tout copier", "refreshAll": "Tout actualiser", @@ -572,6 +573,16 @@ "countMessage": "modèles seront définitivement supprimés.", "action": "Tout supprimer" }, + "bulkAddTags": { + "title": "Ajouter des tags à plusieurs modèles", + "description": "Ajouter des tags à", + "models": "modèles", + "tagsToAdd": "Tags à ajouter", + "placeholder": "Entrez un tag et appuyez sur Entrée...", + "appendTags": "Ajouter les tags", + "replaceTags": "Remplacer les tags", + "saveChanges": "Enregistrer les modifications" + }, "exampleAccess": { "title": "Images d'exemple locales", "message": "Aucune image d'exemple locale trouvée pour ce modèle. Options d'affichage :", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "Ce groupe a déjà été vérifié", "verificationCompleteMismatch": "Vérification terminée. {count} fichier(s) ont des hash différents.", "verificationCompleteSuccess": "Vérification terminée. Tous les fichiers sont confirmés comme doublons.", - "verificationFailed": "Échec de la vérification des hash : {message}" + "verificationFailed": "Échec de la vérification des hash : {message}", + "noTagsToAdd": "Aucun tag à ajouter", + "tagsAddedSuccessfully": "{tagCount} tag(s) ajouté(s) avec succès à {count} {type}(s)", + "tagsReplacedSuccessfully": "Tags remplacés avec succès pour {count} {type}(s) avec {tagCount} tag(s)", + "tagsAddFailed": "Échec de l'ajout des tags à {count} modèle(s)", + "tagsReplaceFailed": "Échec du remplacement des tags pour {count} modèle(s)", + "bulkTagsAddFailed": "Échec de l'ajout des tags aux modèles", + "bulkTagsReplaceFailed": "Échec du remplacement des tags pour les modèles" }, "search": { "atLeastOneOption": "Au moins une option de recherche doit être sélectionnée" diff --git a/locales/ja.json b/locales/ja.json index d1fc6bd5..285af83b 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -319,6 +319,7 @@ "selected": "{count} 選択中", "selectedSuffix": "選択中", "viewSelected": "選択したアイテムを表示するにはクリック", + "addTags": "タグを追加", "sendToWorkflow": "ワークフローに送信", "copyAll": "すべてコピー", "refreshAll": "すべて更新", @@ -572,6 +573,16 @@ "countMessage": "モデルが完全に削除されます。", "action": "すべて削除" }, + "bulkAddTags": { + "title": "複数モデルにタグを追加", + "description": "タグを追加するモデル:", + "models": "モデル", + "tagsToAdd": "追加するタグ", + "placeholder": "タグを入力してEnterを押してください...", + "appendTags": "タグを追加", + "replaceTags": "タグを置換", + "saveChanges": "変更を保存" + }, "exampleAccess": { "title": "ローカル例画像", "message": "このモデルのローカル例画像が見つかりませんでした。表示オプション:", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "このグループは既に検証済みです", "verificationCompleteMismatch": "検証完了。{count} ファイルの実際のハッシュが異なります。", "verificationCompleteSuccess": "検証完了。すべてのファイルが重複であることが確認されました。", - "verificationFailed": "ハッシュの検証に失敗しました:{message}" + "verificationFailed": "ハッシュの検証に失敗しました:{message}", + "noTagsToAdd": "追加するタグがありません", + "tagsAddedSuccessfully": "{count} {type} に {tagCount} 個のタグを追加しました", + "tagsReplacedSuccessfully": "{count} {type} のタグを {tagCount} 個に置換しました", + "tagsAddFailed": "{count} モデルへのタグ追加に失敗しました", + "tagsReplaceFailed": "{count} モデルのタグ置換に失敗しました", + "bulkTagsAddFailed": "モデルへのタグ追加に失敗しました", + "bulkTagsReplaceFailed": "モデルのタグ置換に失敗しました" }, "search": { "atLeastOneOption": "少なくとも1つの検索オプションを選択する必要があります" diff --git a/locales/ko.json b/locales/ko.json index 5d1b5447..09c892af 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -194,7 +194,7 @@ "displayDensity": "표시 밀도", "displayDensityOptions": { "default": "기본", - "medium": "중간", + "medium": "중간", "compact": "조밀" }, "displayDensityHelp": "한 줄에 표시할 카드 수를 선택하세요:", @@ -231,7 +231,7 @@ "templateOptions": { "flatStructure": "플랫 구조", "byBaseModel": "베이스 모델별", - "byAuthor": "제작자별", + "byAuthor": "제작자별", "byFirstTag": "첫 번째 태그별", "baseModelFirstTag": "베이스 모델 + 첫 번째 태그", "baseModelAuthor": "베이스 모델 + 제작자", @@ -241,7 +241,7 @@ "customTemplatePlaceholder": "사용자 정의 템플릿 입력 (예: {base_model}/{author}/{first_tag})", "modelTypes": { "lora": "LoRA", - "checkpoint": "Checkpoint", + "checkpoint": "Checkpoint", "embedding": "Embedding" }, "baseModelPathMappings": "베이스 모델 경로 매핑", @@ -319,6 +319,7 @@ "selected": "{count}개 선택됨", "selectedSuffix": "개 선택됨", "viewSelected": "선택된 항목 보기", + "addTags": "태그 추가", "sendToWorkflow": "워크플로로 전송", "copyAll": "모두 복사", "refreshAll": "모두 새로고침", @@ -572,6 +573,16 @@ "countMessage": "개의 모델이 영구적으로 삭제됩니다.", "action": "모두 삭제" }, + "bulkAddTags": { + "title": "여러 모델에 태그 추가", + "description": "다음에 태그를 추가합니다:", + "models": "모델", + "tagsToAdd": "추가할 태그", + "placeholder": "태그를 입력하고 Enter를 누르세요...", + "appendTags": "태그 추가", + "replaceTags": "태그 교체", + "saveChanges": "변경사항 저장" + }, "exampleAccess": { "title": "로컬 예시 이미지", "message": "이 모델의 로컬 예시 이미지를 찾을 수 없습니다. 보기 옵션:", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "이 그룹은 이미 검증되었습니다", "verificationCompleteMismatch": "검증 완료. {count}개 파일의 실제 해시가 다릅니다.", "verificationCompleteSuccess": "검증 완료. 모든 파일이 중복임을 확인했습니다.", - "verificationFailed": "해시 검증 실패: {message}" + "verificationFailed": "해시 검증 실패: {message}", + "noTagsToAdd": "추가할 태그가 없습니다", + "tagsAddedSuccessfully": "{count}개의 {type}에 {tagCount}개의 태그가 성공적으로 추가되었습니다", + "tagsReplacedSuccessfully": "{count}개의 {type}의 태그가 {tagCount}개의 태그로 성공적으로 교체되었습니다", + "tagsAddFailed": "{count}개의 모델에 태그 추가에 실패했습니다", + "tagsReplaceFailed": "{count}개의 모델의 태그 교체에 실패했습니다", + "bulkTagsAddFailed": "모델에 태그 추가에 실패했습니다", + "bulkTagsReplaceFailed": "모델의 태그 교체에 실패했습니다" }, "search": { "atLeastOneOption": "최소 하나의 검색 옵션을 선택해야 합니다" diff --git a/locales/ru.json b/locales/ru.json index d3d13607..3fc92156 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -194,7 +194,7 @@ "displayDensity": "Плотность отображения", "displayDensityOptions": { "default": "По умолчанию", - "medium": "Средняя", + "medium": "Средняя", "compact": "Компактная" }, "displayDensityHelp": "Выберите количество карточек для отображения в ряду:", @@ -231,7 +231,7 @@ "templateOptions": { "flatStructure": "Плоская структура", "byBaseModel": "По базовой модели", - "byAuthor": "По автору", + "byAuthor": "По автору", "byFirstTag": "По первому тегу", "baseModelFirstTag": "Базовая модель + Первый тег", "baseModelAuthor": "Базовая модель + Автор", @@ -241,7 +241,7 @@ "customTemplatePlaceholder": "Введите пользовательский шаблон (например, {base_model}/{author}/{first_tag})", "modelTypes": { "lora": "LoRA", - "checkpoint": "Checkpoint", + "checkpoint": "Checkpoint", "embedding": "Embedding" }, "baseModelPathMappings": "Сопоставления путей базовых моделей", @@ -319,6 +319,7 @@ "selected": "Выбрано {count}", "selectedSuffix": "выбрано", "viewSelected": "Нажмите для просмотра выбранных элементов", + "addTags": "Добавить теги", "sendToWorkflow": "Отправить в Workflow", "copyAll": "Копировать все", "refreshAll": "Обновить все", @@ -572,6 +573,16 @@ "countMessage": "моделей будут удалены навсегда.", "action": "Удалить все" }, + "bulkAddTags": { + "title": "Добавить теги к нескольким моделям", + "description": "Добавить теги к", + "models": "моделям", + "tagsToAdd": "Теги для добавления", + "placeholder": "Введите тег и нажмите Enter...", + "appendTags": "Добавить теги", + "replaceTags": "Заменить теги", + "saveChanges": "Сохранить изменения" + }, "exampleAccess": { "title": "Локальные примеры изображений", "message": "Локальные примеры изображений для этой модели не найдены. Варианты просмотра:", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "Эта группа уже была проверена", "verificationCompleteMismatch": "Проверка завершена. {count} файл(ов) имеют разные фактические хеши.", "verificationCompleteSuccess": "Проверка завершена. Все файлы подтверждены как дубликаты.", - "verificationFailed": "Не удалось проверить хеши: {message}" + "verificationFailed": "Не удалось проверить хеши: {message}", + "noTagsToAdd": "Нет тегов для добавления", + "tagsAddedSuccessfully": "Успешно добавлено {tagCount} тег(ов) к {count} {type}(ам)", + "tagsReplacedSuccessfully": "Успешно заменены теги для {count} {type}(ов) на {tagCount} тег(ов)", + "tagsAddFailed": "Не удалось добавить теги к {count} модель(ям)", + "tagsReplaceFailed": "Не удалось заменить теги для {count} модель(ей)", + "bulkTagsAddFailed": "Не удалось добавить теги к моделям", + "bulkTagsReplaceFailed": "Не удалось заменить теги для моделей" }, "search": { "atLeastOneOption": "Должен быть выбран хотя бы один вариант поиска" diff --git a/locales/zh-CN.json b/locales/zh-CN.json index c843ed9d..c9182de6 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -319,6 +319,7 @@ "selected": "已选中 {count} 项", "selectedSuffix": "已选中", "viewSelected": "点击查看已选项目", + "addTags": "批量添加标签", "sendToWorkflow": "发送到工作流", "copyAll": "全部复制", "refreshAll": "全部刷新", @@ -572,6 +573,16 @@ "countMessage": "模型将被永久删除。", "action": "全部删除" }, + "bulkAddTags": { + "title": "批量添加标签", + "description": "为多个模型添加标签", + "models": "个模型", + "tagsToAdd": "要添加的标签", + "placeholder": "输入标签并按回车...", + "appendTags": "追加标签", + "replaceTags": "替换标签", + "saveChanges": "保存更改" + }, "exampleAccess": { "title": "本地示例图片", "message": "未找到此模型的本地示例图片。可选操作:", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "此组已验证过", "verificationCompleteMismatch": "验证完成。{count} 个文件实际哈希不同。", "verificationCompleteSuccess": "验证完成。所有文件均为重复项。", - "verificationFailed": "验证哈希失败:{message}" + "verificationFailed": "验证哈希失败:{message}", + "noTagsToAdd": "没有可添加的标签", + "tagsAddedSuccessfully": "已成功为 {count} 个 {type} 添加 {tagCount} 个标签", + "tagsReplacedSuccessfully": "已成功为 {count} 个 {type} 替换为 {tagCount} 个标签", + "tagsAddFailed": "为 {count} 个模型添加标签失败", + "tagsReplaceFailed": "为 {count} 个模型替换标签失败", + "bulkTagsAddFailed": "批量添加标签失败", + "bulkTagsReplaceFailed": "批量替换标签失败" }, "search": { "atLeastOneOption": "至少选择一个搜索选项" diff --git a/locales/zh-TW.json b/locales/zh-TW.json index c04f39ae..5b815135 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -319,6 +319,7 @@ "selected": "已選擇 {count} 項", "selectedSuffix": "已選擇", "viewSelected": "點擊檢視已選項目", + "addTags": "新增標籤", "sendToWorkflow": "傳送到工作流", "copyAll": "全部複製", "refreshAll": "全部刷新", @@ -572,6 +573,16 @@ "countMessage": "模型將被永久刪除。", "action": "全部刪除" }, + "bulkAddTags": { + "title": "新增標籤到多個模型", + "description": "新增標籤到", + "models": "個模型", + "tagsToAdd": "要新增的標籤", + "placeholder": "輸入標籤並按 Enter...", + "appendTags": "附加標籤", + "replaceTags": "取代標籤", + "saveChanges": "儲存變更" + }, "exampleAccess": { "title": "本機範例圖片", "message": "此模型未找到本機範例圖片。可選擇:", @@ -987,7 +998,14 @@ "verificationAlreadyDone": "此群組已驗證過", "verificationCompleteMismatch": "驗證完成。{count} 個檔案的實際雜湊不同。", "verificationCompleteSuccess": "驗證完成。所有檔案均確認為重複項。", - "verificationFailed": "驗證雜湊失敗:{message}" + "verificationFailed": "驗證雜湊失敗:{message}", + "noTagsToAdd": "沒有可新增的標籤", + "tagsAddedSuccessfully": "已成功將 {tagCount} 個標籤新增到 {count} 個 {type}", + "tagsReplacedSuccessfully": "已成功以 {tagCount} 個標籤取代 {count} 個 {type} 的標籤", + "tagsAddFailed": "新增標籤到 {count} 個模型失敗", + "tagsReplaceFailed": "取代 {count} 個模型的標籤失敗", + "bulkTagsAddFailed": "批量新增標籤到模型失敗", + "bulkTagsReplaceFailed": "批量取代模型標籤失敗" }, "search": { "atLeastOneOption": "至少需選擇一個搜尋選項"