diff --git a/docs/i18n-translation-guidelines.md b/docs/i18n-translation-guidelines.md index 843a0a7a..d48ec875 100644 --- a/docs/i18n-translation-guidelines.md +++ b/docs/i18n-translation-guidelines.md @@ -154,8 +154,8 @@ Locales: `en`, `zh-CN`, `zh-TW`, `ja`, `ko`, `fr`, `de`, `es`, `ru`, `he` (RTL). > **Status (2026-10, scoped scan):** the Refresh dropdown gained a per-root scope section > (`loras.controls.refresh.scopeSection` / `.rootOffline` / `.rootModels`) and the scan result > toasts (`toast.api.refreshCompleteScoped`, `.refreshKeptUnreachable`, `.scanRootUnreachable`), -> 6 keys in total. They are `[TODO: Translate]` placeholders in the other 9 locales for now — -> the feature owner has not asked for this pass yet. +> 6 keys in total, translated in all 9 locales in the same pass (renderings in §2, "Scoped scan +> and root availability"), so the "no remaining placeholders" claim holds again. > **Status (2026-10, reconcile walk progress):** a regular Refresh now reports the reconcile > walk per model root (which roots are being checked, how many model files have been seen, and @@ -728,6 +728,27 @@ that form fits a tooltip (ru shortens both toggle labels to bare «Галере | gallery / vertical list (option labels) | zh-CN 画廊 / 纵向列表 · zh-TW 圖庫 / 垂直清單 · ja ギャラリー / 縦並びリスト · ko 갤러리 / 세로 목록 · fr Galerie / Liste verticale · de Galerie / Vertikale Liste · es Galería / Lista vertical · ru Галерея / Вертикальный список · he גלריה / רשימה אנכית | | gallery view / list view (toggle tooltips) | zh-CN 画廊视图 / 列表视图 · zh-TW 圖庫檢視 / 清單檢視 · ja ギャラリー表示 / リスト表示 · ko 갤러리 보기 / 목록 보기 · fr Vue galerie / Vue liste · de Galerieansicht / Listenansicht · es Vista de galería / Vista de lista · ru Галерея / Список · he תצוגת גלריה / תצוגת רשימה | +### Scoped scan and root availability + +A refresh can be restricted to one model root (the Refresh ▾ menu) or one folder (the sidebar +context menu). The menu labels a root and reports whether it can be read at all; the result +toasts report what the scan changed and what it deliberately left alone because a path could not +be read (an unreachable drive is no longer treated as deleted). + +| Term | Rendering | +|---|---| +| `scopeSection` ("Scan one folder") | zh-CN 只扫描一个文件夹 · zh-TW 只掃描一個資料夾 · ja フォルダを 1 つだけスキャン · ko 폴더 하나만 스캔 · fr Analyser un seul dossier · de Nur einen Ordner scannen · es Escanear solo una carpeta · ru Сканировать только одну папку · he סרוק תיקייה אחת בלבד | +| `rootOffline` ("Offline") | zh-CN 离线 · zh-TW 離線 · ja オフライン · ko 오프라인 · fr Hors ligne · de Offline · es Sin conexión · ru Недоступен · he לא זמין | +| `rootModels` ("{count} models") | zh-CN {count} 个模型 · zh-TW {count} 個模型 · ja {count} 個のモデル · ko 모델 {count}개 · fr {count} modèles · de {count} Modelle · es {count} modelos · ru {count} модел(ей) · he {count} מודלים | +| `refreshCompleteScoped` ("Scanned {scope}: {added} new, {removed} removed") | zh-CN 已扫描 {scope}:新增 {added},移除 {removed} · zh-TW 已掃描 {scope}:新增 {added},移除 {removed} · ja {scope} をスキャンしました:新規 {added} 件、削除 {removed} 件 · ko {scope} 스캔 완료: 새 모델 {added}개, 제거 {removed}개 · fr {scope} analysé : {added} nouveau(x), {removed} supprimé(s) · de {scope} gescannt: {added} neu, {removed} entfernt · es {scope} escaneado: {added} nuevo(s), {removed} eliminado(s) · ru {scope}: просканировано — новых {added}, удалено {removed} · he {scope} נסרק: {added} חדשים, {removed} הוסרו | +| `refreshKeptUnreachable` ("{count} models kept: {paths} not reachable") | zh-CN 已保留 {count} 个模型:{paths} 当前不可访问 · zh-TW 已保留 {count} 個模型:{paths} 目前無法存取 · ja {count} 個のモデルを保持しました:{paths} にアクセスできません · ko 모델 {count}개 유지됨: {paths}에 접근할 수 없음 · fr {count} modèles conservés : {paths} inaccessible(s) · de {count} Modelle beibehalten: {paths} nicht erreichbar · es {count} modelos conservados: {paths} no accesible(s) · ru Сохранено моделей: {count} — {paths} недоступны · he נשמרו {count} מודלים: {paths} אינם זמינים | +| `scanRootUnreachable` ("{scope} is not reachable right now. Nothing was changed.") | zh-CN {scope} 当前不可访问,未做任何改动。 · zh-TW {scope} 目前無法存取,未做任何變更。 · ja {scope} に現在アクセスできません。変更は行われていません。 · ko {scope}에 현재 접근할 수 없습니다. 변경된 내용은 없습니다. · fr {scope} est actuellement inaccessible. Aucune modification n’a été apportée. · de {scope} ist derzeit nicht erreichbar. Es wurde nichts geändert. · es {scope} no es accesible ahora mismo. No se ha cambiado nada. · ru {scope} сейчас недоступен. Изменений не внесено. · he {scope} אינו זמין כעת. לא בוצעו שינויים. | + +`{scope}` is a root label (`G: loras`) or a folder path, `{paths}` is a comma-joined list capped +at three entries, and both counts arrive pre-formatted. "Offline" describes a configured root +whose directory cannot be read right now (drive switched off, unmounted share) — it is a state of +the *root*, never a property of the models inside it, which stay in the library. + ### Scan progress (walk phase) The manual Refresh dialog renders its status line from `common.scanProgress.*`. During the diff --git a/locales/de.json b/locales/de.json index ae043631..7224c690 100644 --- a/locales/de.json +++ b/locales/de.json @@ -919,9 +919,9 @@ "title": "Modelliste aktualisieren", "full": "Cache neu aufbauen", "fullTooltip": "Alle Modelldetails aus Metadatendateien neu laden – nutzen, wenn die Bibliothek veraltet wirkt oder nach manuellen Änderungen.", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "Nur einen Ordner scannen", + "rootOffline": "Offline", + "rootModels": "{count} Modelle" }, "fetch": { "title": "Metadaten von CivitAI abrufen", @@ -2808,9 +2808,9 @@ "moveFailed": "Element konnte nicht verschoben werden: {message}", "copiedToClipboard": "In die Zwischenablage kopiert", "downloadStarted": "Download gestartet", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "{scope} gescannt: {added} neu, {removed} entfernt", + "refreshKeptUnreachable": "{count} Modelle beibehalten: {paths} nicht erreichbar", + "scanRootUnreachable": "{scope} ist derzeit nicht erreichbar. Es wurde nichts geändert." }, "agent": { "llmNotConfigured": "KI-Anbieter nicht konfiguriert. Aktivieren Sie ihn unter Einstellungen → KI-Anbieter.", diff --git a/locales/es.json b/locales/es.json index 42229a4b..91cf539c 100644 --- a/locales/es.json +++ b/locales/es.json @@ -919,9 +919,9 @@ "title": "Actualizar lista de modelos", "full": "Reconstruir caché", "fullTooltip": "Vuelve a cargar todos los detalles desde los archivos de metadatos; úsalo si la biblioteca parece desactualizada o tras ediciones manuales.", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "Escanear solo una carpeta", + "rootOffline": "Sin conexión", + "rootModels": "{count} modelos" }, "fetch": { "title": "Obtener metadatos de CivitAI", @@ -2808,9 +2808,9 @@ "moveFailed": "No se pudo mover el elemento: {message}", "copiedToClipboard": "Copiado al portapapeles", "downloadStarted": "Descarga iniciada", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "{scope} escaneado: {added} nuevo(s), {removed} eliminado(s)", + "refreshKeptUnreachable": "{count} modelos conservados: {paths} no accesible(s)", + "scanRootUnreachable": "{scope} no es accesible ahora mismo. No se ha cambiado nada." }, "agent": { "llmNotConfigured": "Proveedor de IA no configurado. Actívelo en Configuración → Proveedor de IA.", diff --git a/locales/fr.json b/locales/fr.json index 5aff7118..c455988f 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -919,9 +919,9 @@ "title": "Actualiser la liste des modèles", "full": "Reconstruire le cache", "fullTooltip": "Recharge tous les détails des modèles depuis les fichiers de métadonnées — à utiliser si la bibliothèque paraît obsolète ou après des modifications manuelles.", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "Analyser un seul dossier", + "rootOffline": "Hors ligne", + "rootModels": "{count} modèles" }, "fetch": { "title": "Récupérer les métadonnées depuis CivitAI", @@ -2808,9 +2808,9 @@ "moveFailed": "Échec du déplacement de l'élément : {message}", "copiedToClipboard": "Copié dans le presse-papiers", "downloadStarted": "Téléchargement démarré", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "{scope} analysé : {added} nouveau(x), {removed} supprimé(s)", + "refreshKeptUnreachable": "{count} modèles conservés : {paths} inaccessible(s)", + "scanRootUnreachable": "{scope} est actuellement inaccessible. Aucune modification n’a été apportée." }, "agent": { "llmNotConfigured": "Fournisseur d'IA non configuré. Activez-le dans Paramètres → Fournisseur d'IA.", diff --git a/locales/he.json b/locales/he.json index acd6452d..8108df3a 100644 --- a/locales/he.json +++ b/locales/he.json @@ -919,9 +919,9 @@ "title": "רענן רשימת מודלים", "full": "בניית מטמון מחדש", "fullTooltip": "טוען מחדש את כל פרטי המודלים מקבצי המטא-נתונים – לשימוש אם הספרייה נראית לא מעודכנת או לאחר עריכות ידניות.", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "סרוק תיקייה אחת בלבד", + "rootOffline": "לא זמין", + "rootModels": "{count} מודלים" }, "fetch": { "title": "אחזר מטא-נתונים מ-CivitAI", @@ -2808,9 +2808,9 @@ "moveFailed": "לא ניתן היה להעביר את הפריט: {message}", "copiedToClipboard": "הועתק ללוח", "downloadStarted": "ההורדה החלה", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "{scope} נסרק: {added} חדשים, {removed} הוסרו", + "refreshKeptUnreachable": "נשמרו {count} מודלים: {paths} אינם זמינים", + "scanRootUnreachable": "{scope} אינו זמין כעת. לא בוצעו שינויים." }, "agent": { "llmNotConfigured": "ספק AI לא הוגדר. הפעל אותו בהגדרות → ספק AI.", diff --git a/locales/ja.json b/locales/ja.json index f26122d0..a516818b 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -919,9 +919,9 @@ "title": "モデルリストを更新", "full": "キャッシュを再構築", "fullTooltip": "メタデータファイルから全モデル情報を再読み込みします。リストが古いと感じるときや手動編集後に使用してください。", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "フォルダを 1 つだけスキャン", + "rootOffline": "オフライン", + "rootModels": "{count} 個のモデル" }, "fetch": { "title": "CivitAIからメタデータを取得", @@ -2808,9 +2808,9 @@ "moveFailed": "アイテムを移動できませんでした: {message}", "copiedToClipboard": "クリップボードにコピーしました", "downloadStarted": "ダウンロードを開始しました", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "{scope} をスキャンしました:新規 {added} 件、削除 {removed} 件", + "refreshKeptUnreachable": "{count} 個のモデルを保持しました:{paths} にアクセスできません", + "scanRootUnreachable": "{scope} に現在アクセスできません。変更は行われていません。" }, "agent": { "llmNotConfigured": "AIプロバイダーが設定されていません。設定 → AIプロバイダーで有効にしてください。", diff --git a/locales/ko.json b/locales/ko.json index 5d325b20..feb94d68 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -919,9 +919,9 @@ "title": "모델 목록 새로고침", "full": "캐시 재구성", "fullTooltip": "메타데이터 파일에서 모든 모델 정보를 다시 불러옵니다. 라이브러리가 오래되어 보이거나 수동 수정 후에 사용하세요.", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "폴더 하나만 스캔", + "rootOffline": "오프라인", + "rootModels": "모델 {count}개" }, "fetch": { "title": "CivitAI에서 메타데이터 가져오기", @@ -2808,9 +2808,9 @@ "moveFailed": "항목을 이동하지 못했습니다: {message}", "copiedToClipboard": "클립보드에 복사됨", "downloadStarted": "다운로드 시작됨", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "{scope} 스캔 완료: 새 모델 {added}개, 제거 {removed}개", + "refreshKeptUnreachable": "모델 {count}개 유지됨: {paths}에 접근할 수 없음", + "scanRootUnreachable": "{scope}에 현재 접근할 수 없습니다. 변경된 내용은 없습니다." }, "agent": { "llmNotConfigured": "AI 제공자가 설정되지 않았습니다. 설정 → AI 제공자에서 활성화하세요.", diff --git a/locales/ru.json b/locales/ru.json index eb14ce66..cc8f97b8 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -919,9 +919,9 @@ "title": "Обновить список моделей", "full": "Перестроить кэш", "fullTooltip": "Перечитывает все данные моделей из файлов метаданных — используйте, если библиотека выглядит устаревшей или после ручных правок.", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "Сканировать только одну папку", + "rootOffline": "Недоступен", + "rootModels": "{count} модел(ей)" }, "fetch": { "title": "Получить метаданные с CivitAI", @@ -2808,9 +2808,9 @@ "moveFailed": "Не удалось переместить элемент: {message}", "copiedToClipboard": "Скопировано в буфер обмена", "downloadStarted": "Загрузка начата", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "{scope}: просканировано — новых {added}, удалено {removed}", + "refreshKeptUnreachable": "Сохранено моделей: {count} — {paths} недоступны", + "scanRootUnreachable": "{scope} сейчас недоступен. Изменений не внесено." }, "agent": { "llmNotConfigured": "Поставщик ИИ не настроен. Включите его в Настройки → Поставщик ИИ.", diff --git a/locales/zh-CN.json b/locales/zh-CN.json index 7fedcd22..195912e9 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -919,9 +919,9 @@ "title": "刷新模型列表", "full": "重建缓存", "fullTooltip": "从元数据文件重新加载所有模型信息;用于列表过时或手动编辑后。", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "只扫描一个文件夹", + "rootOffline": "离线", + "rootModels": "{count} 个模型" }, "fetch": { "title": "从 CivitAI 获取元数据", @@ -2808,9 +2808,9 @@ "moveFailed": "移动条目失败:{message}", "copiedToClipboard": "已复制到剪贴板", "downloadStarted": "下载已开始", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "已扫描 {scope}:新增 {added},移除 {removed}", + "refreshKeptUnreachable": "已保留 {count} 个模型:{paths} 当前不可访问", + "scanRootUnreachable": "{scope} 当前不可访问,未做任何改动。" }, "agent": { "llmNotConfigured": "AI 提供商未配置。请在 设置 → AI 提供商 中进行配置。", diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 1f92cd9e..12bc1297 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -919,9 +919,9 @@ "title": "重新整理模型列表", "full": "重建快取", "fullTooltip": "從中繼資料檔重新載入所有模型資訊;適用於清單過時或手動編輯後。", - "scopeSection": "[TODO: Translate] Scan one folder", - "rootOffline": "[TODO: Translate] Offline", - "rootModels": "[TODO: Translate] {count} models" + "scopeSection": "只掃描一個資料夾", + "rootOffline": "離線", + "rootModels": "{count} 個模型" }, "fetch": { "title": "從 CivitAI 取得 metadata", @@ -2808,9 +2808,9 @@ "moveFailed": "移動項目失敗:{message}", "copiedToClipboard": "已複製到剪貼簿", "downloadStarted": "下載已開始", - "refreshCompleteScoped": "[TODO: Translate] Scanned {scope}: {added} new, {removed} removed", - "refreshKeptUnreachable": "[TODO: Translate] {count} models kept: {paths} not reachable", - "scanRootUnreachable": "[TODO: Translate] {scope} is not reachable right now. Nothing was changed." + "refreshCompleteScoped": "已掃描 {scope}:新增 {added},移除 {removed}", + "refreshKeptUnreachable": "已保留 {count} 個模型:{paths} 目前無法存取", + "scanRootUnreachable": "{scope} 目前無法存取,未做任何變更。" }, "agent": { "llmNotConfigured": "AI 提供者尚未設定。請在 設定 → AI 提供者 中進行設定。",