Merge branch 'develop'
Some checks failed
Stable Release / stable (push) Failing after 33s

This commit is contained in:
Augustin
2026-04-23 21:30:02 +02:00

View File

@@ -471,6 +471,10 @@ function PanelUpdates({ updates, checking, updating, needsUpdateCount, installed
} }
function PanelLocale({ language, keyboard, layouts, api, t }) { function PanelLocale({ language, keyboard, layouts, api, t }) {
const { setLanguage, setKeyboard } = useI18n()
const [editLocale, setEditLocale] = useState(false)
const [draftLang, setDraftLang] = useState(language)
const [draftKbd, setDraftKbd] = useState(keyboard)
const [saving, setSaving] = useState(false) const [saving, setSaving] = useState(false)
const [toast, setToast] = useState(null) const [toast, setToast] = useState(null)
@@ -482,7 +486,10 @@ function PanelLocale({ language, keyboard, layouts, api, t }) {
const handleSave = async () => { const handleSave = async () => {
setSaving(true) setSaving(true)
try { try {
await api.savePreferences({ language, keyboard_layout: keyboard }) await api.savePreferences({ language: draftLang, keyboard_layout: draftKbd })
setLanguage(draftLang)
setKeyboard(draftKbd)
setEditLocale(false)
showToast(t('config.saved')) showToast(t('config.saved'))
} catch (err) { } catch (err) {
showToast(`${t('config.error')}: ${err.message}`) showToast(`${t('config.error')}: ${err.message}`)
@@ -490,41 +497,67 @@ function PanelLocale({ language, keyboard, layouts, api, t }) {
setSaving(false) setSaving(false)
} }
const currentLang = LANGUAGES.find(l => l.id === language)
const currentKbd = layouts.find(l => l.id === keyboard)
return ( return (
<div className="config-card"> <div className="config-profile-center">
{toast && <div className="config-toast">{toast}</div>} {toast && <div className="config-toast">{toast}</div>}
<div className="config-card-group"> <div className="config-card">
<span className="config-card-group-label">{t('config.language')}</span> <div className="config-card-row">
<div className="chip-row"> <span className="config-card-label">{t('config.language')}</span>
{LANGUAGES.map(lang => ( <span className="config-card-value">{currentLang?.name || language}</span>
<div </div>
key={lang.id} <div className="config-card-row">
className={`chip ${language === lang.id ? 'active' : ''}`} <span className="config-card-label">{t('config.keyboardLayout')}</span>
onClick={() => setLanguage(lang.id)} <span className="config-card-value">{currentKbd?.name || keyboard}</span>
>
{lang.name}
</div>
))}
</div> </div>
</div> </div>
<div className="config-card-group"> {editLocale && (
<span className="config-card-group-label">{t('config.keyboardLayout')}</span> <div className="config-card">
<div className="chip-row"> <div className="config-card-group">
{layouts.map(l => ( <span className="config-card-group-label">{t('config.language')}</span>
<div <div className="chip-row">
key={l.id} {LANGUAGES.map(lang => (
className={`chip ${keyboard === l.id ? 'active' : ''}`} <div
onClick={() => setKeyboard(l.id)} key={lang.id}
> className={`chip ${draftLang === lang.id ? 'active' : ''}`}
{l.name} onClick={() => setDraftLang(lang.id)}
>
{lang.name}
</div>
))}
</div> </div>
))} </div>
<div className="config-card-group">
<span className="config-card-group-label">{t('config.keyboardLayout')}</span>
<div className="chip-row">
{layouts.map(l => (
<div
key={l.id}
className={`chip ${draftKbd === l.id ? 'active' : ''}`}
onClick={() => setDraftKbd(l.id)}
>
{l.name}
</div>
))}
</div>
</div>
</div>
)}
<div className="config-card">
<div className="config-card-actions" style={{ justifyContent: 'center' }}>
{editLocale ? (
<>
<button className="primary sm" onClick={handleSave} disabled={saving}>
{saving ? t('config.saving') : t('config.save')}
</button>
<button className="ghost sm" onClick={() => setEditLocale(false)}>{t('config.cancel')}</button>
</>
) : (
<button className="primary sm" onClick={() => { setDraftLang(language); setDraftKbd(keyboard); setEditLocale(true) }}>{t('config.editProfile')}</button>
)}
</div> </div>
</div>
<div className="config-card-actions">
<button className="primary sm" onClick={handleSave} disabled={saving}>
{saving ? t('config.saving') : t('config.save')}
</button>
</div> </div>
</div> </div>
) )