mirror of
https://gh-proxy.org/https://github.com/klinsmaya/multica.git
synced 2026-11-09 01:46:46 +08:00
* feat(i18n): add French locale
Adds `fr` as a supported UI locale for web and desktop.
- 25 translated resource files under `packages/views/locales/fr/`, at full
parity with the English source (`locales/parity.test.ts` passes).
- Registers the locale in `SUPPORTED_LOCALES`, the views resource bundle, the
settings language picker, and the `HTML_LANG` maps for web and desktop.
- Translates the celestial workspace name list. Proper nouns with no
established French form are left unchanged.
- Landing page: adds the `FR` label but leaves the public `locales` array at
four, since the marketing copy is not translated.
- Onboarding templates map `fr` to English content, matching the existing
fallback for locales without authored templates.
- `pick-locale.test.ts` used `fr` as its example of an unsupported locale;
those assertions now use `es`, plus a new case asserting `fr-FR` resolves
to `fr`.
Terminology follows the glossary in
`apps/docs/content/docs/developers/conventions.mdx`. The UI uses the formal
register (vouvoiement) consistently.
* fix(i18n): translate the backlog status label in French
The French locale translated six of the seven issue statuses and left
`backlog` as "Backlog". The other locales translate all seven — `待规划`,
`백로그`, `バックログ` — so the odd one out was an oversight, not a choice.
`conventions.mdx` does say role and status enums stay in lowercase English,
but that rule is about surfacing the identifier inside prose ("switched to
`in_progress`"), not about the `status` display block, which every shipped
locale translates.
"À planifier" reads as a pair with "À faire" for `todo`, and matches what
`待规划` conveys: the issue exists but is not scheduled yet.
* fix(i18n): realign the French locale with main
Rebasing on main surfaced two drifts that the parity test caught:
- `settings.json` gained `shortcuts.fixed.open_settings` upstream; added
the French string.
- `search.json` lost its `pages.*` block in #7054, which now generates the
command palette's Pages group from the nav registry. Dropped the eight
French keys that no longer have an English counterpart.
* fix(i18n): resync the French locale with main
157 English keys had no French translation and 97 French keys no longer had an
English counterpart. The parity suite caught all of them.
Added: custom issue statuses (76 keys), the Telegram integration (55), issue
revision conflicts and the status catalogue (20), plugin panels and hook
activity (24), revoked agent access in chat (4), autopilot run quota and the
worktree execution mode (2).
Removed: 97 keys upstream has dropped or renamed, most of them under plugins.*.
Two shape changes worth naming, because a key count does not show them:
- plugins.install used to be the string "Install" and is now an object with
title/description/placeholder/review. A locale that keeps the old shape does
not have a missing key, it has a key of the wrong TYPE, and parity alone
stays silent about it — only writing to it fails.
- telegram_bind mirrors slack_bind key for key, so it is derived from the
existing translation with the service name substituted rather than written
again. Two texts that say the same thing drift when they are typed twice.
Register: vouvoiement throughout, consistent with the rest of the locale.
* fix(i18n): complete French locale integration and refresh translations
Co-authored-by: multica-agent <[email protected]>
---------
Co-authored-by: Lambda <[email protected]>
Co-authored-by: multica-agent <[email protected]>
13 lines
431 B
TypeScript
13 lines
431 B
TypeScript
import type { SupportedLocale } from "@multica/core/i18n";
|
|
|
|
// HTML lang uses BCP-47 region tags widely recognized by screen readers and
|
|
// font stacks. i18next keeps zh-Hans internally because that is the resource
|
|
// key, while the document uses zh-CN for accessibility and CJK fallback.
|
|
export const HTML_LANG: Record<SupportedLocale, string> = {
|
|
en: "en",
|
|
"zh-Hans": "zh-CN",
|
|
ko: "ko-KR",
|
|
ja: "ja-JP",
|
|
fr: "fr-FR",
|
|
};
|