i18n: translate the chip reordering strings

The three `common.reorder.*` keys (grip tooltip and hint, the per-grip
aria label, and the aria-live announcement) are rendered in all 9
locales. They sit under `common` rather than in a feature namespace
because both the tag editor and the trigger-word editor render them, and
only `dragHandle` is visible copy — the other two are screen-reader text.

`Alt` and the `↑/↓` glyphs stay verbatim everywhere, the same precedent
as `Shift+Enter` in `modals.model.metadata.notesHint`, because they name
the keys rather than an action. "position X of Y" reuses each locale's
existing counting phrasing (ja `{total} 件中 … 番目`, ko
`총 {total}개 중 …번째`, fr `sur {total}`, ru `из {total}`), and
parentheses follow each file's own convention: full-width in zh-CN /
zh-TW / ja, ASCII in ko and the Latin/Cyrillic locales. No
`[TODO: Translate]` placeholder is left in any locale.

docs/i18n-translation-guidelines.md gains the matching §2 subsection and
status note so a later terminology sweep preserves these renderings; the
leaf-key count in its header is corrected to 2025 at the same time.
This commit is contained in:
Will Miao
2026-09-16 08:23:06 +08:00
parent 01137eed88
commit 779bd18e75
10 changed files with 58 additions and 28 deletions
+31 -1
View File
@@ -4,7 +4,7 @@ This document is the canonical set of conventions for translating LoRA Manager U
It applies to **human translators and AI agents** alike. Read it before editing anything in
`locales/`.
Source of truth: `locales/en.json` (10 locales, 2022 leaf keys; all locales share the exact
Source of truth: `locales/en.json` (10 locales, 2025 leaf keys; all locales share the exact
same key structure).
Locales: `en`, `zh-CN`, `zh-TW`, `ja`, `ko`, `fr`, `de`, `es`, `ru`, `he` (RTL).
@@ -49,6 +49,14 @@ Locales: `en`, `zh-CN`, `zh-TW`, `ja`, `ko`, `fr`, `de`, `es`, `ru`, `he` (RTL).
> placeholders left behind by the feature series, and all 35 are now translated in all 9
> locales, so the "no remaining placeholders" claim above holds again. Terminology in §2,
> "Folder sidebar feature".
>
> **Status (2026-09, chip reordering):** model tags and trigger words now share one drag/`⠿`
> grip reorder affordance with `Alt + ↑/↓` keyboard support, which added the 3
> `common.reorder.*` keys. They live under `common` (not a feature namespace) because both
> editors render them; all 9 locales are translated (renderings in §2, "Chip reordering").
> `Alt` and the `↑/↓` glyphs stay Latin/verbatim in every locale, the same precedent as
> `Shift+Enter` in `modals.model.metadata.notesHint`; zh-CN / zh-TW / ja use full-width
> parentheses and ko keeps this file's ASCII style.
---
@@ -355,6 +363,28 @@ clause (and its `—`) when the copy is edited. The `{name}` / `{count}` / `{mes
`sidebar.createFolderResult.*`, `sidebar.deleteFolderResult.*` and `sidebar.renameFolderResult.*`
are verbatim §1-R2 placeholders; `successWithFiles` is the only key carrying `{count}`.
### Chip reordering (model tags / trigger words)
Model tags and trigger-word chips share a single reorder affordance (drag the chip or its
`⠿` grip, or move it with `Alt + ↑/↓`), so the copy sits in `common.reorder.*` instead of a
feature namespace. `dragHandle` is both the grip tooltip and the hint shown in the edit
controls row; `ariaLabel` is the per-grip screen-reader label (`{item}` is the tag/word text);
`announcement` is the aria-live message after a keyboard move and deliberately has no
`{item}`. Keep `{item}` / `{position}` / `{total}` verbatim (§1-R2) — the caller supplies
exactly those.
`Alt` and the `↑/↓` glyphs stay Latin/verbatim in every locale (same precedent as
`Shift+Enter`), and `position X of Y` reuses each locale's established ordering phrasing
(ja `{total} 件中 … 番目`, ko `총 {total}개 중 …번째`, fr `sur {total}`, ru `из {total}`, …).
| Term | Rendering |
|---|---|
| drag to reorder | zh-CN 拖拽以调整顺序 · zh-TW 拖曳以調整順序 · ja ドラッグして並べ替え · ko 드래그하여 순서 변경 · fr Glisser pour réordonner · de Zum Neuordnen ziehen · es Arrastra para reordenar · ru Перетащите, чтобы изменить порядок · he גרור כדי לשנות סדר |
| position {position} of {total} | zh-CN 第 {position} 个,共 {total} 个 · zh-TW 第 {position} 個,共 {total} 個 · ja {total} 件中 {position} 番目 · ko 총 {total}개 중 {position}번째 · fr position {position} sur {total} · de Position {position} von {total} · es posición {position} de {total} · ru позиция {position} из {total} · he מיקום {position} מתוך {total} |
The grip/handle noun itself is never translated (it is an icon); the hint carries the whole
instruction, so no locale needs a separate "grip" term.
---
## 3. Cross-cutting confusion hot-spots (must-fix list)
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "Zum Neuordnen ziehen (Alt + ↑/↓)",
"ariaLabel": "{item} neu anordnen, Position {position} von {total}",
"announcement": "An Position {position} von {total} verschoben"
},
"actions": {
"save": "Speichern",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "Cancelar",
"confirm": "Confirmar",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "Arrastra para reordenar (Alt + ↑/↓)",
"ariaLabel": "Reordenar {item}, posición {position} de {total}",
"announcement": "Movido a la posición {position} de {total}"
},
"actions": {
"save": "Guardar",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "Annuler",
"confirm": "Confirmer",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "Glisser pour réordonner (Alt + ↑/↓)",
"ariaLabel": "Réordonner {item}, position {position} sur {total}",
"announcement": "Déplacé en position {position} sur {total}"
},
"actions": {
"save": "Enregistrer",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "ביטול",
"confirm": "אישור",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "גרור כדי לשנות סדר (Alt + ↑/↓)",
"ariaLabel": "סדר מחדש את {item}, מיקום {position} מתוך {total}",
"announcement": "הועבר למיקום {position} מתוך {total}"
},
"actions": {
"save": "שמירה",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "キャンセル",
"confirm": "確認",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "ドラッグして並べ替え(Alt + ↑/↓",
"ariaLabel": "{item} を並べ替え、{total} 件中 {position} 番目",
"announcement": "{total} 件中 {position} 番目に移動しました"
},
"actions": {
"save": "保存",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "취소",
"confirm": "확인",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "드래그하여 순서 변경 (Alt + ↑/↓)",
"ariaLabel": "{item} 순서 변경, 총 {total}개 중 {position}번째",
"announcement": "총 {total}개 중 {position}번째로 이동했습니다"
},
"actions": {
"save": "저장",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "Отмена",
"confirm": "Подтвердить",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "Перетащите, чтобы изменить порядок (Alt + ↑/↓)",
"ariaLabel": "Изменить порядок {item}, позиция {position} из {total}",
"announcement": "Перемещено на позицию {position} из {total}"
},
"actions": {
"save": "Сохранить",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "取消",
"confirm": "确认",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "拖拽以调整顺序(Alt + ↑/↓",
"ariaLabel": "调整 {item} 的顺序,第 {position} 个,共 {total}",
"announcement": "已移动到第 {position} 个,共 {total}"
},
"actions": {
"save": "保存",
+3 -3
View File
@@ -3,9 +3,9 @@
"cancel": "取消",
"confirm": "確認",
"reorder": {
"dragHandle": "[TODO: Translate] Drag to reorder (Alt + ↑/↓)",
"ariaLabel": "[TODO: Translate] Reorder {item}, position {position} of {total}",
"announcement": "[TODO: Translate] Moved to position {position} of {total}"
"dragHandle": "拖曳以調整順序(Alt + ↑/↓",
"ariaLabel": "調整 {item} 的順序,第 {position} 個,共 {total}",
"announcement": "已移動到第 {position} 個,共 {total}"
},
"actions": {
"save": "儲存",