mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-15 06:52:04 +00:00
Register `ko` in the locale list, language names, and labels, and ship messages/ko.json so the whole UI — dashboard, settings, share views, clinician PDF, notifications, and AI prompts — renders in Korean. Extend the locale-parity, English-leak, plural-completeness, and copy guard tests to cover the new locale, and update README/CONTRIBUTING to list Korean among the supported languages.
60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
export const locales = ["de", "en", "fr", "es", "it", "pl", "ko"] as const;
|
|
export type Locale = (typeof locales)[number];
|
|
|
|
export const defaultLocale: Locale = "en";
|
|
|
|
/**
|
|
* Narrow an arbitrary stored / request-supplied string to a shipped locale,
|
|
* falling back to the app default.
|
|
*
|
|
* Background paths (the reminder worker, the Coach completion) historically
|
|
* hand-rolled this as `locale === "en" || locale === "de" ? locale : default`,
|
|
* which silently collapsed es / fr / it / pl to English even though their
|
|
* bundles were complete. Route every such coercion through here so adding a
|
|
* locale to `locales` is the only edit a new language needs.
|
|
*/
|
|
export function coerceLocale(locale: string | null | undefined): Locale {
|
|
return locales.includes(locale as Locale)
|
|
? (locale as Locale)
|
|
: defaultLocale;
|
|
}
|
|
|
|
/**
|
|
* English name of each shipped language, for model-facing directives ("reply
|
|
* in French"). Distinct from `localeLabels`, which is the endonym shown in the
|
|
* language picker — a prompt directive has to be written in the prompt's own
|
|
* language to be reliably followed.
|
|
*/
|
|
export const localeLanguageNames: Record<Locale, string> = {
|
|
de: "German",
|
|
en: "English",
|
|
fr: "French",
|
|
es: "Spanish",
|
|
it: "Italian",
|
|
pl: "Polish",
|
|
ko: "Korean",
|
|
};
|
|
|
|
export const localeLabels: Record<Locale, string> = {
|
|
de: "Deutsch",
|
|
en: "English",
|
|
fr: "Français",
|
|
es: "Español",
|
|
it: "Italiano",
|
|
pl: "Polski",
|
|
ko: "한국어",
|
|
};
|
|
|
|
/**
|
|
* v1.4.25 W9e — locales actively maintained by the project owner.
|
|
* Locales outside this set are AI-initial translations and surface a
|
|
* <MaintainershipBanner> notice at the top of the auth shell so users
|
|
* know to expect rough edges and where to contribute fixes. Promoting
|
|
* a locale here turns the banner off.
|
|
*/
|
|
const MAINTAINED_LOCALES: ReadonlySet<Locale> = new Set(["de", "en"]);
|
|
|
|
export function isMaintainedLocale(locale: Locale): boolean {
|
|
return MAINTAINED_LOCALES.has(locale);
|
|
}
|