Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/development/language-packs.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This opt-in delivery layer serves the shared Lingui UI catalogues. Translation a

## Shipping decision

Published releases ship the bundled build (decided October 2026). With ten locales the bundled `main.js` is 4,264,038 bytes, under the 5,000,000-byte budget. The downloadable build is 3,612,122 bytes, so it would save about 0.65 MB. The cost would be a network dependency on first use of each language, an operated hosting and publication path, and mobile behaviour that hasn't been accepted on the current Lingui build. Keep the downloadable mode in the codebase for experimental builds, but don't enable it in releases. Revisit this if added locales push the bundled build towards the budget.
Published releases ship the bundled build (decided October 2026). With ten locales and published `@mdbase-dev/i18n@0.1.0-beta.147`, the bundled `main.js` measured on October 29, 2026 is 4,094,305 bytes, under the 5,000,000-byte budget. The downloadable build is 3,445,906 bytes, so it would save about 0.65 MB. The cost would be a network dependency on first use of each language, an operated hosting and publication path, and mobile behaviour that hasn't been accepted on the current Lingui build. Keep the downloadable mode in the codebase for experimental builds, but don't enable it in releases. Revisit this if added locales push the bundled build towards the budget.

## Build modes

Expand Down Expand Up @@ -43,7 +43,7 @@ The catalogues are JSON **data**, not remotely executable code. `tasknotes-lingu

Canonical serialization makes exports reproducible. Changing English or a target translation changes the catalogue version. Re-exporting identical inputs is idempotent. Existing immutable artifacts with different content are rejected. The manifest is written after all locale files.

English defines the authoritative generated-ID set. Export requires exactly all ten supported catalogues and a complete matching ID set in each. Ordinary export/build/test entry points first check extraction sync, authored POs and source guards, then compile; Lingui `--strict` alone is not sufficient because it permits fallback-filled translations. ICU validation preserves argument names/roles, fixed select and exact-number arms, offsets, numeric rich tags and pound bindings while allowing locale-specific plural/ordinal categories. Required plural/ordinal categories are those reached by integer counts 0–999 after the ICU offset; exact `=N` cases match the original count and satisfy a category only when they cover all its representatives in that range. Million-only `many` categories in fr/es/pt/it are optional; the follow-up removes all 90 mechanically added es/fr `many` arms. The plugin mirrors `mdbase-connect` kit `e61ab062`'s coverage rule locally: the kit exposes no standalone coverage helper, and the plugin retains stricter English-source coverage and scoped English-arm rejection. The Italian adoption pins kit `49bea0aa`; this plugin does not consume the shared UI package. There are no legacy suffix-parameter exemptions. Literal template/path/code examples remain protected data. PO is authoritative; use normal clean extraction after integration. The legacy converter and its refresh flags have been retired.
English defines the authoritative generated-ID set. Export requires exactly all ten supported catalogues and a complete matching ID set in each. Ordinary export/build/test entry points first check extraction sync, authored POs and source guards, then compile; Lingui `--strict` alone is not sufficient because it permits fallback-filled translations. ICU validation preserves argument names/roles, fixed select and exact-number arms, offsets, numeric rich tags and pound bindings while allowing locale-specific plural/ordinal categories. Required plural/ordinal categories are those reached by integer counts 0–999 after the ICU offset; exact `=N` cases match the original count and satisfy a category only when they cover all its representatives in that range. Million-only `many` categories in fr/es/pt/it are optional; the follow-up removes all 90 mechanically added es/fr `many` arms. The plugin mirrors `mdbase-connect` kit `e61ab062`'s coverage rule locally: the kit exposes no standalone coverage helper, and the plugin retains stricter English-source coverage and scoped English-arm rejection. The plugin pins the published `@mdbase-dev/i18n@0.1.0-beta.147` tooling from npm; it does not consume the shared UI package or the kit runtime. Its plugin-owned Lingui adapter retains literal-backslash protection. There are no legacy suffix-parameter exemptions. Literal template/path/code examples remain protected data. PO is authoritative; use normal clean extraction after integration. The legacy converter and its refresh flags have been retired.

## Local fixture

Expand Down
2 changes: 1 addition & 1 deletion docs/development/translations.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ Ordinary builds synchronously bundle all ten catalogues using compacted data mod

Italian (`it`, endonym **Italiano**) is the tenth UI locale. Regional system preferences such as `it-IT` and explicit `it_CH` choices normalize to `it`. The ordinary registry includes it synchronously; the downloadable build derives its picker and pinned publication manifest from the same ten-locale kit and emits `it.json`. Neither the pack format nor source-message IDs change.

This branch vendors kit `49bea0aa` (`sha256: 4b08df26d7474b26bd90492a1835716f938488b06a73cd3b55943414bc0cbd82`). The matching shared UI tarball was verified (`sha256: 1230707f2ba9545a041f2a9325ab5e2d25ed001885ebc0369d836e00b19d30f0`), but this Obsidian plugin does not consume `@mdbase-dev/ui` or compose any library catalogues: adding that unused dependency or a `--compose` path would be misleading. The shared strict check still validates composition of all configured plugin catalogue scopes. Replace the vendored kit with its published version at merge time.
The plugin pins the published `@mdbase-dev/i18n` tooling to exactly `0.1.0-beta.147` from npm. It does not consume `@mdbase-dev/ui` or compose any library catalogues: adding that unused dependency or a `--compose` path would be misleading. The shared strict check still validates composition of all configured plugin catalogue scopes. The plugin uses its own Lingui instances, not the kit runtime, so its literal-backslash protection remains in the plugin adapter.

The Italian identical-term exceptions cover protected interpolation/template syntax, example paths/IDs, numeric formats, symbols, proper product names and established Italian UI loanwords (File, Frontmatter, Pomodoro, Token, Webhook, Agenda). The expand-control symbol `▶` is preserved verbatim. No English sentences are allowlisted. The single scoped English-arm exception is `FBlWXu` / `noteCount:other`: Italian plural **note** (singular **nota**) legitimately matches English singular **note**. Calendar day/week/year abbreviations, unavailable-value text and the missing-key caption were translated rather than allowlisted. The official Obsidian Italian catalogue calls the core plugin **Base**; interface references use **Base**, including the starter note's enable-plugin instruction.

Expand Down
2 changes: 2 additions & 0 deletions docs/releases/unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ When a change has user-facing documentation, include a canonical tasknotes.dev l

## Changed

- Use the published shared translation tooling instead of bundled development tarballs; all ten interface languages remain available offline in ordinary builds.

- Calendar view settings now use fewer, task-focused sections, with less common controls under Advanced and clearer names for time-grid and event limits. Saved `.base` settings keep applying unchanged. See [Calendar Views](https://tasknotes.dev/views/calendar-views/#view-options).

- The Calendar view now uses TaskNotes' own calendar engine instead of FullCalendar. Existing calendar view settings in `.base` files keep working, including the saved view, custom day count, first day of week, time format, slot range and size, height mode, week numbers, weekends, all-day row, today column width, and event limits.
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
"@lingui/babel-plugin-lingui-macro": "6.9.0",
"@lingui/format-po": "6.9.0",
"@lingui/message-utils": "6.9.0",
"@mdbase-dev/i18n": "file:vendor/mdbase-dev-i18n-0.1.0-beta.141-49bea0aa.tgz",
"@mdbase-dev/i18n": "0.1.0-beta.147",
"@playwright/test": "^1.57.0",
"@types/jest": "^30.0.0",
"@types/node": "^24.3.0",
Expand Down
4 changes: 2 additions & 2 deletions scripts/lib/plural-contracts.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ function choices(tokens) {
* Coverage mirrors mdbase-connect e61ab062 packages/i18n/scripts/checks.mjs:
* require only categories reached by integer counts 0..999, after offset;
* exact arms match the original count and may exhaust a category's domain.
* The kit does not export coverage separately. Keep its existing tarball pin
* and mirror this small rule here, retaining strict English-source coverage
* The kit does not export coverage separately. Mirror this small rule here
* alongside the published kit, retaining strict English-source coverage
* and the plugin's scoped English-arm rejection (the newer kit only warns).
* This is deliberately conservative: it catches exact English branches, not every
* possible untranslated sentence. No heuristic can establish translation quality.
Expand Down
Binary file removed vendor/mdbase-dev-i18n-0.1.0-beta.141-49bea0aa.tgz
Binary file not shown.
Binary file removed vendor/mdbase-dev-i18n-0.1.0-beta.141-a36fa009.tgz
Binary file not shown.
Loading