v3.12.0
Highlights
-
@byline/i18n— the admin interface now ships in seven languages. Added fullbyline-admintranslation bundles for Spanish, German, Italian, Simplified Chinese, and Korean, joining English and French. Hosts opt in per locale by listing the codes in their interface-locale set and passing them toadminTranslations({ locales }); the language switcher and the per-userpreferred_localecascade pick them up automatically. The CJK bundles use CLDR-correct plural handling (Chinese and Korean collapse to a singleotherform) and dual-particle forms for runtime-interpolated nouns in Korean. Every bundle is parity-checked against English at build time, so a missing key fails loudly rather than rendering a raw key. (zh-CN and ko remain pending a native-speaker review pass.) -
@byline/admin— added a colour-theme switch to the self-service account page. A new Appearance card carries an inline Light / Dark / System segmented control: "System" clears the stored override and follows the OSprefers-color-scheme, while an explicit choice persists and applies to the live document immediately. The switch reads and writes the host theme contract directly (thelocalStorage['theme']+.dark/.light-on-<html>convention the host's early-theme script already honours), so no host wiring is required. The same change decluttered the account cards — the redundant in-card "Edit Profile / Change Language / Change Password" buttons were removed in favour of the pencil edit affordance already in each card header.
Bug Fixes
-
@byline/admin— the account Preferences (interface-language) drawer rendered hardcoded English: its label, help text, "Use browser default" option, Save/Cancel/Close buttons, and saved/error feedback stayed English regardless of the active admin locale. Every visible string now routes through the translation layer, so the drawer is fully localised in all seven languages. -
@byline/i18n— fixed the German dashboard collection description, which wrapped the collection name in quotation marks the source string doesn't have (rendering e.g.Sammlung „Documents"). Removed the stray quotes and normalised German's typographic quote pairs to straight quotes, matching the source and the other locales.
Chores
@byline/i18n— moved theLanguageMenucomponent off Tailwind utility classes onto a co-located CSS Module, aligning it with the convention that package components use CSS / CSS Modules rather than Tailwind. This enabled CSS-module emission in the package build (mirroring@byline/ui) and let the menu inherit the shared dropdown's token-driven theming instead of hardcoded colours. Behaviour is unchanged.
All other @byline/* packages bumped to 3.12.0 in lockstep with no behavioural changes this cycle.