refactor(i18n): route remaining Obsidian UI text through the message catalogue

Continues the source-key migration inside the application boundary introduced
in 1.0.0, where LiveSync owns its catalogue and consumes Commonlib as a
published package.

- Replace hardcoded user-visible strings in the Obsidian UI (Setup Wizard
  dialogues, P2P panes, Customisation Sync panes, Global History, the JSON
  conflict pane and the remote-configuration menu) with `$msg` calls, keeping
  the English source string as the key.
- Wire up strings whose translations already existed in the catalogue but were
  still rendered as literals, for example the whole Intro dialogue.
- Add the new entries to `src/common/messagesYAML/en.yaml` and `es.yaml`, then
  regenerate `messagesJson/` and `combinedMessages.prod.ts` through the
  documented `i18n:bake` pipeline.
- No Commonlib gitlink or catalogue is involved; every change is
  LiveSync-owned.

Regenerating the catalogue also normalises three pre-existing entries each in
`ko.json` and `zh.json`, where the committed JSON kept a trailing space before
a newline that YAML cannot represent.

Verified with tsc-check, tsc-check:apps, svelte-check and lint.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zeedif
2026-07-30 18:59:19 -06:00
co-authored by Claude Opus 5
parent c385bd7ce7
commit b6746be73e
37 changed files with 3624 additions and 499 deletions
@@ -23,7 +23,11 @@
detectedIssues = fixResults;
} catch (e) {
Logger(e, LOG_LEVEL_VERBOSE, "setup-couchdb-check");
detectedIssues.push({ message: `Error during testAndFixSettings: ${e}`, result: "error", classes: [] });
detectedIssues.push({
message: translateMessage("Error during testAndFixSettings: ${reason}", { reason: `${e}` }),
result: "error",
classes: [],
});
}
}
function isErrorResult(result: ConfigCheckResult): result is ResultError<unknown> | ResultErrorMessage {
@@ -71,7 +75,9 @@
</div>
{#if isFixableError(issue)}
<div class="operations">
<button onclick={() => fixIssue(issue)} class="mod-cta" disabled={processing}>Fix</button>
<button onclick={() => fixIssue(issue)} class="mod-cta" disabled={processing}
>{translateMessage("Fix")}</button
>
</div>
{/if}
</div>
@@ -83,15 +89,15 @@
<details open={!isAllSuccess}>
<summary>
{#if detectedIssues.length === 0}
No checks have been performed yet.
{translateMessage("No checks have been performed yet.")}
{:else if isAllSuccess}
All checks passed successfully!
{translateMessage("All checks passed successfully!")}
{:else}
{errorIssueCount} issue(s) detected!
{translateMessage("${count} issue(s) detected!", { count: `${errorIssueCount}` })}
{/if}
</summary>
{#if detectedIssues.length > 0}
<h3>Issue detection log:</h3>
<h3>{translateMessage("Issue detection log:")}</h3>
{#each detectedIssues as issue}
{@render result(issue)}
{/each}