Public Access
feat: add language selection feature to settings and update translations
This commit is contained in:
1 parent
83bb412b35
commit
92c1de650a
4 files changed
+40
-21
No files matched your search
+1
-18
@@ -48,7 +48,7 @@ const withNotes = (state: ExamState): ExamState => ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function AppInner() {
|
function AppInner() {
|
||||||
const { t, i18n } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { user, loading: authLoading, needsSetup, refreshUser, logout } = useAuth();
|
const { user, loading: authLoading, needsSetup, refreshUser, logout } = useAuth();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { pathname } = useLocation();
|
const { pathname } = useLocation();
|
||||||
@@ -392,23 +392,6 @@ function AppInner() {
|
|||||||
⚙
|
⚙
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div style={{ display: 'flex', gap: 4, marginLeft: 8, alignItems: 'center' }}>
|
|
||||||
<button
|
|
||||||
className="btn btn-ghost btn-sm"
|
|
||||||
onClick={() => i18n.changeLanguage('en')}
|
|
||||||
style={{ fontWeight: i18n.language === 'en' ? 700 : 400, fontSize: 12 }}
|
|
||||||
>
|
|
||||||
EN
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
className="btn btn-ghost btn-sm"
|
|
||||||
onClick={() => i18n.changeLanguage('nl')}
|
|
||||||
style={{ fontWeight: i18n.language === 'nl' ? 700 : 400, fontSize: 12 }}
|
|
||||||
>
|
|
||||||
NL
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{!authLoading && !user && (
|
{!authLoading && !user && (
|
||||||
<button
|
<button
|
||||||
className="btn btn-primary btn-sm"
|
className="btn btn-primary btn-sm"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { useAuth } from '../contexts/AuthContext'
|
|||||||
import * as authApi from '../api/authApi'
|
import * as authApi from '../api/authApi'
|
||||||
|
|
||||||
export default function Settings() {
|
export default function Settings() {
|
||||||
const { t } = useTranslation()
|
const { t, i18n } = useTranslation()
|
||||||
const { user, refreshUser } = useAuth()
|
const { user, refreshUser } = useAuth()
|
||||||
const [displayName, setDisplayName] = useState(user?.displayName ?? '')
|
const [displayName, setDisplayName] = useState(user?.displayName ?? '')
|
||||||
const [savingName, setSavingName] = useState(false)
|
const [savingName, setSavingName] = useState(false)
|
||||||
@@ -174,6 +174,36 @@ export default function Settings() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className="workspace-panel">
|
||||||
|
<div className="workspace-panel-header">
|
||||||
|
<h3>{t('workspace.language')}</h3>
|
||||||
|
</div>
|
||||||
|
<div className="workspace-panel-body workspace-settings-form">
|
||||||
|
<div className="workspace-setting-row">
|
||||||
|
<label className="workspace-setting-label">
|
||||||
|
<span className="workspace-setting-title">{t('workspace.languageLabel')}</span>
|
||||||
|
<span className="workspace-setting-desc">{t('workspace.languageDesc')}</span>
|
||||||
|
</label>
|
||||||
|
<div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
|
||||||
|
<button
|
||||||
|
className="btn btn-ghost btn-sm"
|
||||||
|
onClick={() => i18n.changeLanguage('en')}
|
||||||
|
style={{ fontWeight: i18n.language === 'en' ? 700 : 400, fontSize: 13 }}
|
||||||
|
>
|
||||||
|
English
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
className="btn btn-ghost btn-sm"
|
||||||
|
onClick={() => i18n.changeLanguage('nl')}
|
||||||
|
style={{ fontWeight: i18n.language === 'nl' ? 700 : 400, fontSize: 13 }}
|
||||||
|
>
|
||||||
|
Nederlands
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -172,7 +172,10 @@
|
|||||||
"changing": "Changing…",
|
"changing": "Changing…",
|
||||||
"passwordChanged": "Password changed successfully",
|
"passwordChanged": "Password changed successfully",
|
||||||
"passwordMinLength": "New password must be at least 8 characters",
|
"passwordMinLength": "New password must be at least 8 characters",
|
||||||
"passwordsDoNotMatch": "Passwords do not match"
|
"passwordsDoNotMatch": "Passwords do not match",
|
||||||
|
"language": "Language",
|
||||||
|
"languageLabel": "Language",
|
||||||
|
"languageDesc": "Select your preferred display language"
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
"administration": "Administration",
|
"administration": "Administration",
|
||||||
|
|||||||
@@ -172,7 +172,10 @@
|
|||||||
"changing": "Wijzigen…",
|
"changing": "Wijzigen…",
|
||||||
"passwordChanged": "Wachtwoord succesvol gewijzigd",
|
"passwordChanged": "Wachtwoord succesvol gewijzigd",
|
||||||
"passwordMinLength": "Nieuw wachtwoord moet minimaal 8 tekens bevatten",
|
"passwordMinLength": "Nieuw wachtwoord moet minimaal 8 tekens bevatten",
|
||||||
"passwordsDoNotMatch": "Wachtwoorden komen niet overeen"
|
"passwordsDoNotMatch": "Wachtwoorden komen niet overeen",
|
||||||
|
"language": "Taal",
|
||||||
|
"languageLabel": "Taal",
|
||||||
|
"languageDesc": "Selecteer je voorkeurstaal voor de interface"
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
"administration": "Beheer",
|
"administration": "Beheer",
|
||||||
|
|||||||
Reference in new issue
Block a user