Skip to content

i18n: full European language coverage (36 locales) + parity gate - #99

Merged
rubenvdlinde merged 5 commits into
developmentfrom
reapply/i18n-full-parity
Jul 31, 2026
Merged

i18n: full European language coverage (36 locales) + parity gate#99
rubenvdlinde merged 5 commits into
developmentfrom
reapply/i18n-full-parity

Conversation

@MWest2020

Copy link
Copy Markdown
Member

Heropend na de migratie van Codeberg naar GitHub (2026-07-14).
Origineel, met review-historie: https://codeberg.org/Conduction/nextcloud-app-template/pulls/18

rubenvdlinde and others added 5 commits July 6, 2026 07:06
… — ADR-049 chain link 4' (#12) from feat/zero-custom-widgets into main
# Conflicts:
#	package-lock.json
#	package.json
…eferences to launchpad' (#10) from chore/rename-mydash-to-launchpad into main
Reapplied onto current main (the original work was stranded on a local
branch ~20 commits behind). Adds 36 European-language locale files plus
Russian/Turkish and a .forgejo l10n-parity CI gate
(tests/l10n/check-l10n-parity.js) asserting every required locale is 100%
complete against l10n/en.json.

Forward-ported to the current source string set: the three
app-availability.* keys added to main since the work was authored are
translated in nl (primary locale) and carried as English-fallback values
elsewhere — which the parity gate explicitly permits (values identical to
English are allowed for cognates/proper nouns/pending translation). Native
review can refine those three strings per language later.

Gate verified locally: 36 required locales, full parity, no missing keys or
empty values.
The parity workflow originally pinned codeberg-small + code.forgejo.org/oci/
ci-node:22, which returns manifest-unknown on Conduction's Codeberg and fails
the job before the check runs. Switch to the proven-working runner/image pair
from the central Conduction/.github .forgejo workflows. Content unchanged;
the parity check passes (verified in a clean node:24-bookworm container).
@rubenvdlinde
rubenvdlinde changed the base branch from main to development July 31, 2026 13:08
@rubenvdlinde
rubenvdlinde merged commit 9a65b54 into development Jul 31, 2026
rubenvdlinde added a commit that referenced this pull request Jul 31, 2026
`npm run lint` only ran `eslint src`, so nothing under tests/ was ever
checked. The eslint config's node-CLI override was also an explicit FILE
LIST, so tests/l10n/check-l10n-parity.js (added by #99) fell outside it and
would have failed the moment anyone widened the glob.

  - lint script -> `eslint src tests --max-warnings 0`
  - node-CLI override: explicit file list -> `tests/**/*.js` glob
  - `n/no-unpublished-import` off for tests/ (devDependencies by definition)
  - filled in the JSDoc the autofix stubbed out rather than leaving bare
    `@param name` lines

Two real findings, not style:
  - tests/validate-json-strict.js declared `reviverPathStack` for a
    reviver-based approach that was never built. Dead binding, removed.
  - tests/validate-register.js kept `lifecycleStates()` alive with a
    `void lifecycleStates` suppression and never called it. The inline
    check it was meant to replace only inspected `t.to`, and only when
    `states{}` was present — an undeclared `from` state, or an array
    `from`, was silently unreported. Now wired up properly: pass it just
    the transitions block so it yields the REFERENCED states (passing the
    whole lifecycle would fold the declared states in and make the
    comparison vacuous). validate-register still reports 0 warnings on the
    template's own register.

Result: 0 errors and 0 warnings across src/ and tests/.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants