Files
HealthLog/src/lib/i18n/config.ts
T
Marc-André Bombeck fea1d1e0b5 chore: strip planning tags from comments and enable the rule
Output of `node scripts/strip-planning-tags.mjs --write`: 3,157 comment
lines in 1,308 files lose the work-item identifier at their head. Release
versions and issue references stay; nothing outside comment text
changes, which the script checks per file against a comment-free
printout. healthlog/no-planning-tags is enabled at error level with this
commit, so the tree it lands on is clean.
2026-10-20 09:08:40 +02:00

71 lines
2.0 KiB
TypeScript

export const locales = [
"de",
"en",
"fr",
"es",
"it",
"pl",
"ko",
"nl",
] 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",
nl: "Dutch",
};
export const localeLabels: Record<Locale, string> = {
de: "Deutsch",
en: "English",
fr: "Français",
es: "Español",
it: "Italiano",
pl: "Polski",
ko: "한국어",
nl: "Nederlands",
};
/**
* v1.4.25 — 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);
}