* fix(admin): use ISO 639-1 da for Danish admin locale
Rename admin translation bundles from dk to da, normalize legacy dk in
app config, custom translation keys, localStorage, and stored user language.
Closes#25761
* fix(admin): add dk json fallback and admin user language migration
Register internal migration admin::migrate-prefered-language-dk-to-da to
rewrite admin_users.prefered_language from dk to da.
Export importLocaleJsonWithLegacyDkFallback from strapi-admin and use it in
core loadAdminTrads plus every bundled plugin registerTrads so third-party
plugins that still ship only dk.json keep loading when the UI locale is da.
Add @strapi/admin devDependency where the helper is imported from JS or
packages that did not already list it.
Refs #26322
* fix(types): add importLocaleJson to strapi-admin registerTrads typing
* fix(admin): expand plugin locale list and merge under canonical codes
Moves legacy dk handling into StrapiApp.loadTrads (flatMap + uniq + normalize merge) so registerTrads keeps a stable API without importLocaleJson. Core admin bundles use try/catch dynamic imports per locale code.
* fix(admin): route plugin translations through importLocaleJson
Pass StrapiApp.importLocaleJson into registerTrads so core and third-party plugins share legacy locale JSON fallback (da -> dk) and one-shot deprecation warnings. Relax admin test console.warn filter for those messages. Refs #26322.
* fix(admin): keep plugin locale fallback internal
---------
Co-authored-by: Bassel Kanso <basselkanso82@gmail.com>
* chore(eslint): migrate .eslintrc + .eslintignore to .eslintrc.cjs
Consolidates the per-package ESLint setup into a single typed
`.eslintrc.cjs` file across the monorepo (177 files touched).
Why
- `.eslintignore` is removed in ESLint v9/v10. Folding ignore patterns
into `ignorePatterns` inside the rc file is the supported migration
path and unblocks future ESLint upgrades (which will likely be needed
alongside the in-flight TypeScript 6 migration).
- `.cjs` extension is explicit about module format, so the configs keep
working if any package later adopts `"type": "module"` (no CJS/ESM
surprises).
- Wrapping each config in `// @ts-check` + a `Linter.Config`-typed
`const config` block gives editor autocomplete and catches typos.
Surfaced two real duplicates in
`eslint-config-custom/back/typescript.js`
(`node/no-unsupported-features/es-syntax`,
`node/no-missing-import`), now deduplicated.
- `extends` references switched from the `custom/*` shorthand to the
explicit `eslint-config-custom/*` package name. ESLint resolves both,
but the explicit form makes the source unambiguous.
- Added `coverage/` to `ignorePatterns` so coverage output produced
inside a workspace is not linted.
Misc
- `examples/kitchensink` had ESLint configured but no `lint` script;
added one so the config actually runs.
- `nx.json` hash inputs updated:
- removed `.eslintignore` (no longer exists)
- replaced `{projectRoot}/.eslintrc.js` with
`{projectRoot}/**/.eslintrc.cjs` so nested package configs are also
part of the cache key (the previous glob missed them).
- `packages/utils/upgrade/tsconfig.eslint.json` include path updated
from `.eslintrc.js` to `.eslintrc.cjs`.
Verification
- `eslint --print-config` resolves cleanly on sampled back/front
packages (admin, users-permissions, upload).
- Full `pnpm -r lint` is clean.
* chore(eslint): set tsconfigRootDir for vscode-eslint typed linting
CLI lint resolved tsconfig paths via cwd, but vscode-eslint runs from
the workspace root and could not locate per-package tsconfigs. Set
parserOptions.tsconfigRootDir to __dirname in each package's
.eslintrc.cjs so the editor resolves typed-lint configs correctly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore(eslint): self-ignore configs, scope coverage to jest packages
- Replace `env: { es6: true }` workaround with `.eslintrc.cjs` in
ignorePatterns so eslint never lints the config file itself
(root cause of the "const is not a keyword" parse error in es5)
- Add `.eslintrc.cjs` to ignorePatterns across all configs that
were missing it
- Restrict `coverage/` ignorePatterns to workspace roots that
actually run jest; drop from non-test packages and admin/server
subdir configs (tests run from the workspace root)
* fix(pack-up): ensure we pass the tsconfig file name, not a path to it
fix(admin): annotate return type on createBuildContext
fix(admin): ensure shared is a the base folder not importing from server
chore(pack-up): PRINT MOREEEE
fix(ctb): export required type
chore: refactor tsconfigs
* chore: pr amends
Deleting plugin name and description strings
Make translation more accurate
Update and improve russian
Added missing strings
More accurate style
Added plugin name
Correction of JSON style
Delete empty file
Added plugin name
Delete empty file
Added plugin name
Delete empty file
Added plugin name
Delete empty file
Added Russian
Delete empty file
Delete empty file
Added plugin name
Delete empty file
Delete empty file
Added plugin name
Delete empty file
Delete empty file
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Delete empty file
Delete empty file
Delete empty file
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Delete empty file
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Added plugin name
Added Russian
Added plugin name
Correction of terminology
JWT is acronym.
Correction of terminology
JWT is acronym.
Correction of terminology
Correction of terminology
JWT is acronym.
Swagger UI — the correct version.
Correction of terminology
Correction of terminology
JWT is acronym.
Swagger UI — the correct version.
Correction of terminology
JWT is acronym.
Correction of terminology
Correction of terminology
Correction of terminology
JWT is acronym.
Swagger UI — the correct version.
Correction of terminology
Correction of terminology
Correction of terminology
JWT is acronym.
Swagger UI — the correct version.
Correction of terminology
JWT is acronym.
Correction of terminology
JWT is acronym.
Correction of terminology
JWT is acronym.
Swagger UI — the correct version.
Correction of terminology
JWT is acronym.
Correction of terminology
JWT is acronym.
Correction of terminology
JWT is acronym.
Correction of terminology
Correction of terminology
Correction of terminology
JWT is acronym.
Updated Russian