diff --git a/docs/i18n-translation-guidelines.md b/docs/i18n-translation-guidelines.md index 3d64dc28..50a364f4 100644 --- a/docs/i18n-translation-guidelines.md +++ b/docs/i18n-translation-guidelines.md @@ -151,6 +151,14 @@ Locales: `en`, `zh-CN`, `zh-TW`, `ja`, `ko`, `fr`, `de`, `es`, `ru`, `he` (RTL). > nothing is tracked for alerts). Register follows each file's existing norm: 你 (zh-CN), > 您 (zh-TW), Sie (de), tú (es), вы (ru). No remaining `[TODO: Translate]` placeholders. +> **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 +> an ETA) and splits the progress bar into walk (0-50 %) and new-file (50-99 %) phases, which +> added the single `common.scanProgress.walkFiles` fragment. All 9 locales are translated +> (renderings in §2, "Scan progress (walk phase)"), so the "no remaining placeholders" claim +> holds again. The same pass scoped the client-side ETA to the current stage in +> `static/js/api/baseModelApi.js`; no other locale string changed. + --- ## 1. Hard rules (do not violate) @@ -669,6 +677,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 תצוגת גלריה / תצוגת רשימה | +### Scan progress (walk phase) + +The manual Refresh dialog renders its status line from `common.scanProgress.*`. During the +reconcile walk the backend does not know the real file count yet (counting *is* the walk), so +the client shows the roots being walked plus a running count instead of a `processed/total` +ratio: `Checking for changes... G:, Y: (12,345 files) | ~3 min remaining`. The bar covers +0-50 % for the walk and 50-99 % for the new-file pass. + +| Term | Rendering | +|---|---| +| `walkFiles` ("{count} files") | zh-CN {count} 个文件 · zh-TW {count} 個檔案 · ja {count} 件のファイル · ko 파일 {count}개 · fr {count} fichiers · de {count} Dateien · es {count} archivos · ru {count} файл(ов) · he {count} קבצים | + +`walkFiles` is a **fragment, not a sentence**: the root labels, the `(` `)`, the ` | ` before +the ETA and the ETA text itself all come from `static/js/api/baseModelApi.js`, so no locale +carries punctuation here (the ASCII parentheses match the sibling `stages.process_models` +count, `(5/10)`). `{count}` is substituted with an already-formatted number +(`toLocaleString()`), so no locale adds its own digit grouping. "files" means the **model +files the walk looked at**, not every file on disk — the noun mirrors each locale's +`stages.count_models` rendering, and `ru` uses the `файл(ов)` form because the count ticks +live and can be any number (`notEmptyMessageCount` precedent). + --- ## 3. Cross-cutting confusion hot-spots (must-fix list) diff --git a/locales/de.json b/locales/de.json index f7aee277..317c17b9 100644 --- a/locales/de.json +++ b/locales/de.json @@ -74,7 +74,7 @@ "minutes": "~{minutes} Min. verbleibend", "hours": "~{hours} Std. {minutes} Min. verbleibend" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} Dateien" } }, "onboarding": { diff --git a/locales/es.json b/locales/es.json index 0a0b2ba4..b7338d42 100644 --- a/locales/es.json +++ b/locales/es.json @@ -74,7 +74,7 @@ "minutes": "Quedan ~{minutes} min", "hours": "Quedan ~{hours} h {minutes} min" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} archivos" } }, "onboarding": { diff --git a/locales/fr.json b/locales/fr.json index e5e6b251..21473b93 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -74,7 +74,7 @@ "minutes": "~{minutes} min restantes", "hours": "~{hours} h {minutes} min restantes" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} fichiers" } }, "onboarding": { diff --git a/locales/he.json b/locales/he.json index 7813caea..4446f414 100644 --- a/locales/he.json +++ b/locales/he.json @@ -74,7 +74,7 @@ "minutes": "נותרו ~{minutes} דקות", "hours": "נותרו ~{hours} שעות ו-{minutes} דקות" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} קבצים" } }, "onboarding": { diff --git a/locales/ja.json b/locales/ja.json index 85d45581..7a924b10 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -74,7 +74,7 @@ "minutes": "残り約 {minutes} 分", "hours": "残り約 {hours} 時間 {minutes} 分" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} 件のファイル" } }, "onboarding": { diff --git a/locales/ko.json b/locales/ko.json index 04a226a9..a90be678 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -74,7 +74,7 @@ "minutes": "약 {minutes}분 남음", "hours": "약 {hours}시간 {minutes}분 남음" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "파일 {count}개" } }, "onboarding": { diff --git a/locales/ru.json b/locales/ru.json index 5537bff4..8a70d6eb 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -74,7 +74,7 @@ "minutes": "Осталось ~{minutes} мин", "hours": "Осталось ~{hours} ч {minutes} мин" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} файл(ов)" } }, "onboarding": { diff --git a/locales/zh-CN.json b/locales/zh-CN.json index f76dbc12..2ceb6f17 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -74,7 +74,7 @@ "minutes": "剩余约 {minutes} 分钟", "hours": "剩余约 {hours} 小时 {minutes} 分钟" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} 个文件" } }, "onboarding": { diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 8aee04d7..a04a4a60 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -74,7 +74,7 @@ "minutes": "剩餘約 {minutes} 分鐘", "hours": "剩餘約 {hours} 小時 {minutes} 分鐘" }, - "walkFiles": "[TODO: Translate] {count} files" + "walkFiles": "{count} 個檔案" } }, "onboarding": {