i18n(scanner): translate the scoped-scan strings

The scoped-scan feature left exactly 6 [TODO: Translate] keys behind, so this
is the whole pending set for all 9 locales. Renderings reuse the established
nouns (folder: zh-CN 文件夹 / ja フォルダ / ru папка / he תיקייה; "model" counts
from sidebar.deleteFolderModal) and introduce one new term, "Offline" for a
configured root that cannot be read right now:

  scopeSection        zh-CN 只扫描一个文件夹 · ja フォルダを 1 つだけスキャン
                      fr Analyser un seul dossier · ru Сканировать только одну папку
  rootOffline         zh-CN 离线 · ja オフライン · fr Hors ligne · ru Недоступен
  rootModels          zh-CN {count} 个模型 · ko 모델 {count}개 · he {count} מודלים
  refreshCompleteScoped / refreshKeptUnreachable / scanRootUnreachable
                      (counts and {scope}/{paths} stay verbatim)

Every placeholder set matches en.json, fr keeps the typographic apostrophe, and
the three CJK locales keep full-width punctuation while ko uses ASCII like the
rest of that file. docs/i18n-translation-guidelines.md gains the
"Scoped scan and root availability" terminology table plus the updated status
note, so the "no remaining placeholders" claim holds again.

Verified: python scripts/sync_translation_keys.py --dry-run reports no pending
changes, pytest tests/i18n 20 passed, and grep -c "TODO: Translate"
locales/*.json is 0 everywhere.
This commit is contained in:
Will Miao
2026-10-07 15:04:16 +08:00
parent 470d85cca6
commit bd184559bf
10 changed files with 77 additions and 56 deletions
+6 -6
View File
@@ -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.",
+6 -6
View File
@@ -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.",
+6 -6
View File
@@ -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.",
+6 -6
View File
@@ -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.",
+6 -6
View File
@@ -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プロバイダーで有効にしてください。",
+6 -6
View File
@@ -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 제공자에서 활성화하세요.",
+6 -6
View File
@@ -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": "Поставщик ИИ не настроен. Включите его в Настройки → Поставщик ИИ.",
+6 -6
View File
@@ -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 提供商 中进行配置。",
+6 -6
View File
@@ -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 提供者 中進行設定。",