diff --git a/CHANGELOG.md b/CHANGELOG.md index 199b010..d76abe7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,21 @@ Changelog ist die Upgrade-Anleitung für die Tools. ## [Unreleased] +### @basicbar/ui (→ wird `ui/v0.3.1`) + +**Globaler Sprach-Umschalter** (modulierbar#99): Der schwebende +Übersetzungs-Block zeigt jetzt einen kompakten DE/EN-Umschalter, der mit +einem Klick **alle** gemounteten `TranslatableField` auf eine Sprache stellt +(über den bestehenden `forced`-Mechanismus, ohne zu übersetzen) — praktisch, +um einen Datensatz Feld für Feld in einer Sprache zu befüllen. Sichtbar, +sobald mehrsprachige Felder auf dem Bildschirm sind (unabhängig von der +Maschinenübersetzung); der „Alle Felder übersetzen"-Button bleibt daran +gekoppelt. + +Migration: keine — rein additiv. Neue UI-Strings `"Show all fields in one +language"` und `"Show all fields in {{language}}"` (Tools ergänzen ihre +Übersetzungen). + ### basicbar-integrations (→ wird `integrations/v0.2.0`) und @basicbar/ui (→ wird `ui/v0.3.0`) **Veraltete Übersetzungen markieren** (modulierbar#31, generisch für alle diff --git a/packages/ui/package.json b/packages/ui/package.json index 4877a98..48fb2d0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@basicbar/ui", - "version": "0.3.0", + "version": "0.3.1", "description": "Design-System-Basis der virtUOS -bar-Tools: Tailwind-Preset, Basis-Styles, Theme (Dark Mode), i18n-Bootstrap, contentLang", "license": "Apache-2.0", "author": "Universität Osnabrück (virtUOS)", diff --git a/packages/ui/src/TranslationForm.tsx b/packages/ui/src/TranslationForm.tsx index 911fefc..3e0ab22 100644 --- a/packages/ui/src/TranslationForm.tsx +++ b/packages/ui/src/TranslationForm.tsx @@ -147,7 +147,16 @@ export function TranslationFormProvider({ setBusy(false); } - const showButton = isTranslationEnabled() && count > 0 && targets.length > 0; + /** Switch every mounted field to `lang` in one click (no translation), so a + * whole record can be filled/reviewed in one language at a time. */ + const forceLang = (lang: string) => + setForced((f) => ({ lang, nonce: f.nonce + 1 })); + + // The floating control is useful whenever there are multilingual fields on + // screen — the language switcher needs no translation backend; only the + // "translate all" button is gated on it. + const showControls = count > 0 && SUPPORTED_LANGUAGES.length > 1; + const showTranslate = isTranslationEnabled() && targets.length > 0; const contextValue = useMemo( () => ({ register, unregister, forced, translate }), @@ -157,22 +166,54 @@ export function TranslationFormProvider({ return ( {children} - {showButton && ( + {showControls && (
{error && ( {error} )} - + {/* One combined control: the per-language switch and, if machine + translation is available, the "translate all" action share a + single pill so the corner stays uncluttered. */} +
+
+
+ {showTranslate && ( + <> +
)}