'use client'; import type { RefObject } from 'react'; import { useMemo } from 'react'; import { useTranslation } from '../../../i18n/useTranslation'; type LanguageEntry = { code: string; name: string; }; type Props = { headerRef: RefObject; totalKeys: number; onScan: () => void; isScanning: boolean; isAutoFixing: boolean; onBackToAdmin: () => void; isDirty: boolean; onSave: () => void; saved: boolean; saveError: string; allLanguages: LanguageEntry[]; activeLang: string; setActiveLang: (code: string) => void; isBuiltin: (code: string) => boolean; onDeleteLanguageRequest: (code: string) => void; onOpenAddLanguage: () => void; allTabStats: { total: number; translated: number; missing: number }; translationProgressPercent: number; wizardMissingKeysCount: number; onOpenTranslationWizard: () => void; }; export default function LanguageManagementTopSection({ headerRef, totalKeys, onScan, isScanning, isAutoFixing, onBackToAdmin, isDirty, onSave, saved, saveError, allLanguages, activeLang, setActiveLang, isBuiltin, onDeleteLanguageRequest, onOpenAddLanguage, allTabStats, translationProgressPercent, wizardMissingKeysCount, onOpenTranslationWizard, }: Props) { const { t } = useTranslation(); const prioritizedLanguages = useMemo(() => { const byCode = new Map(allLanguages.map((lang) => [lang.code, lang])); const english = byCode.get('en'); const german = byCode.get('de'); const rest = allLanguages .filter((lang) => lang.code !== 'en' && lang.code !== 'de') .sort((a, b) => a.name.localeCompare(b.name)); return [english, german, ...rest].filter((lang): lang is LanguageEntry => Boolean(lang)); }, [allLanguages]); const englishLanguage = prioritizedLanguages.find((lang) => lang.code === 'en'); const germanLanguage = prioritizedLanguages.find((lang) => lang.code === 'de'); const otherLanguages = prioritizedLanguages.filter((lang) => lang.code !== 'en' && lang.code !== 'de'); const renderLanguageButton = (lang: LanguageEntry) => ( )} ); return ( <>

{t('autofix.k346a2c64')}

Manage UI translations. All {totalKeys} keys scanned from the English source file.

{isDirty && ( )} {saved && !isDirty && ( Saved )}
{saveError && (
{saveError}
)}
{englishLanguage && renderLanguageButton(englishLanguage)} {germanLanguage && renderLanguageButton(germanLanguage)} {otherLanguages.map((lang) => renderLanguageButton(lang))}
{activeLang !== 'en' && (
{t('autofix.kb8f33873')} {allTabStats.translated} / {allTabStats.total} keys translated
{translationProgressPercent}%
)} {activeLang !== 'en' && allTabStats.missing > 0 && wizardMissingKeysCount > 0 && (

{t('autofix.k5e5e8744')}

{allLanguages.find((l) => l.code === activeLang)?.name ?? activeLang} still has {wizardMissingKeysCount} missing keys. Start the wizard to fill them step by step.

)} ); }