- Add the 18 catalogue entries added since the last zh update.
- Translate 68 zh entries that still held the English text
(setup, doctor, tweak-mismatch, P2P and replicator dialogues).
- Translate 80 commonlib messages and setting labels which reach the
LiveSync translator but were not in the catalogue, and add their
canonical English to en.yaml so other languages keep the English
fallback and the coverage report can see them.
- Add a space in the zh P2P sync title (Peer-to-Peer 同步).
Regenerated with npm run i18n:bake.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Use the published package for deleted Metadata reflection and retain the real
Obsidian deletion, rename, and final-check restoration regression coverage.
(src/serviceModules/FileSystemAdapters/pathAliasGuard.ts)
- Require every existing, unindexed path component to use a name listed by its parent directory.
- Accept case-only and Unicode-normalisation differences while caching positive directory listings briefly.
(src/serviceModules/FileSystemAdapters/ObsidianStorageAdapter.ts, src/serviceModules/FileSystemAdapters/ObsidianVaultAdapter.ts)
- Apply the alias boundary before text, binary, append, directory, removal, create, modify, rename, delete, and trash operations.
- Check both the source and destination of vault renames before calling the host API.
(src/serviceModules/FileSystemAdapters/pathAliasGuard.unit.spec.ts)
- Cover directory and file aliases across every mutating adapter route with synthetic host behaviour.
- Exercise real host filesystem aliases where the platform exposes them, including new files and directories below an aliased folder.
- Preserve listed names, case-only differences, indexed paths, and new-file behaviour.
(src/serviceModules/FileSystemAdapters/ObsidianStorageAdapter.unit.spec.ts, src/serviceModules/FileSystemAdapters/ObsidianVaultAdapter.unit.spec.ts)
- Extend existing adapter fixtures with the vault-index contract used by the guard.
Fill the 408 entries that were missing from the Simplified Chinese
catalogue, bringing coverage of en.json from 72.5% to 100%
(1073 -> 1481 entries; 1480/1480 English keys now translated).
Files updated, per docs/adding_translations.md ("Commit the edited YAML
and all regenerated JSON and TypeScript resources together"):
- src/common/messagesYAML/zh.yaml - source catalogue
- src/common/messagesJson/zh.json - npm run i18n:yaml2json
- src/common/messages/combinedMessages.prod.ts
- npm run i18n:bakejson
The TypeScript resource matters: the release workflow runs
`npm run build`, which is only `node esbuild.config.mjs production` and
does NOT re-run `i18n:bake`. Since src/common/translation.ts imports
combinedMessages.prod.ts directly, a catalogue change that omits this
file would not reach the shipped main.js.
Verification
- No existing translation was modified: every key already present in
zh.json is byte-identical (0 changed, 0 removed).
- Placeholders checked string-for-string against the English source.
15 new entries contain ${...} or {HERE}; all match.
- combinedMessages.prod.ts regenerated with _tools/bakei18n.ts and
formatted with the project's Prettier config. The diff against main is
408 added `zh:` lines plus the expected bookkeeping, and no other
language changes.
- Terminology follows the existing catalogue (Vault -> 库,
Passphrase -> 密码短语, Setup URI -> 设置 URI, chunk -> 块).
Technical identifiers (URL, JWT, CouchDB, S3, TURN, IDB, P2P) are
intentionally left in English, matching current practice.
Two unrelated upstream issues, not addressed here
1. `dialog.yourLanguageAvailable` defines its placeholder as
`%{Display language}` while `$msg()` substitutes on `${...}`, so the
placeholder is never expanded and the literal text is shown in every
language.
2. The committed YAML catalogues appear stale relative to the JSON ones
(e.g. `en.yaml` lacks entries that `en.json` already contains, and
its wrapping differs from current tool output). This affects every
language and probably deserves a separate change.