3.1 KiB
LOCALE_DESCRIPTORS, DEFAULT_LOCALES, DefaultLocale
Purpose
These three exports together define the built-in supported-locale
inventory for the Suaveplan i18n family. DEFAULT_LOCALES is the
ordered tuple of locale codes that ship in every bundle by default;
DefaultLocale is the string-literal union derived from that tuple
(consumers can use it as a strongly-typed parameter); and
LOCALE_DESCRIPTORS is the per-locale display-metadata table
(English name, locale-native nativeName, text direction). The
data lets a UI render a locale picker, a sitemap generator emit
<link hreflang> tags, and the locale detector resolve fallback
chains — all without round-tripping through external locale data.
Features
- 16 default locales:
en,es,fr,de,cy,zh,ar,ru,pl,ja,ko,pt,it,nl,he,fa - Cross-checked invariant — every
DEFAULT_LOCALESentry has a descriptor; every descriptor'sdirectionagrees with the locale's membership inRTL_LOCALES - Static, tree-shakeable, zero-dependency
Usage: Basic Example
import { LOCALE_DESCRIPTORS } from "@suaveplan/i18n-shared";
const meta = LOCALE_DESCRIPTORS["ar"];
console.log(meta.name); // "Arabic"
console.log(meta.nativeName); // "العربية"
console.log(meta.direction); // "rtl"
Usage: Advanced Example
import {
DEFAULT_LOCALES,
type DefaultLocale,
LOCALE_DESCRIPTORS,
} from "@suaveplan/i18n-shared/constants/locale-descriptors";
// Render a typed locale picker
function buildPicker(): Array<{ value: DefaultLocale; label: string }> {
return DEFAULT_LOCALES.map((code) => {
const descriptor = LOCALE_DESCRIPTORS[code];
return {
value: code,
label: `${descriptor?.nativeName ?? code} (${descriptor?.name ?? "?"})`,
};
});
}
// DefaultLocale narrows at the API boundary
function setLocale(locale: DefaultLocale): void {
document.documentElement.lang = locale;
const direction = LOCALE_DESCRIPTORS[locale]?.direction ?? "ltr";
document.documentElement.dir = direction;
}
API Reference
DEFAULT_LOCALES: readonly [...]
Ordered tuple of 16 ISO 639-1 codes. Iteration order is the canonical default order used when the locale detector exhausts its preference-list inputs.
DefaultLocale
Type alias equal to (typeof DEFAULT_LOCALES)[number]. Use as a
parameter type to constrain a function to the built-in locale set.
LOCALE_DESCRIPTORS: Record<string, { name; nativeName; direction }>
Per-locale display metadata. Lookup is O(1). Returns undefined for
unknown codes — consumers handle the miss.
Implementation Notes
- The table is keyed on the short ISO 639-1 code (NOT the canonical
BCP-47 tag) so consumers using
LOCALE_BCP47_MAPfor runtime formatting can still read the descriptor with the un-mapped key. nativeNamevalues use the script's actual code points (e.g."العربية","中文") — file encoding MUST be UTF-8.- The list is intentionally small — adding a locale is a deliberate
product decision, and the cross-file invariant test catches drift
with
RTL_LOCALES.