feat(i18n): integrate i18n into main.tsx, routes and settings page

This commit is contained in:
ZhenYi 2026-04-27 18:19:42 +08:00
parent d05a13d7fc
commit 368b10d4e0
3 changed files with 13 additions and 1 deletions

View File

@ -88,6 +88,7 @@ import {AcceptWorkspaceInvitePage} from '@/app/auth/accept-workspace-invite-page
import {WorkspaceRedirect} from '@/app/workspace/redirect'; import {WorkspaceRedirect} from '@/app/workspace/redirect';
import {InitWorkspace} from '@/app/init/workspace'; import {InitWorkspace} from '@/app/init/workspace';
import HomePage from '@/app/homepage/page'; import HomePage from '@/app/homepage/page';
import I18nDemo from '@/app/i18n-demo/page';
function App() { function App() {
return ( return (
@ -123,6 +124,7 @@ function App() {
<Route element={<ProtectedRoute/>}> <Route element={<ProtectedRoute/>}>
<Route path="/homepage" element={<HomePage/>}/> <Route path="/homepage" element={<HomePage/>}/>
<Route path="/i18n-demo" element={<I18nDemo/>}/>
<Route path="/search" element={<SearchPage/>}/> <Route path="/search" element={<SearchPage/>}/>
<Route path="/init"> <Route path="/init">

View File

@ -11,6 +11,7 @@ import { Separator } from '@/components/ui/separator';
import { Switch } from '@/components/ui/switch'; import { Switch } from '@/components/ui/switch';
import { apiUserChangePassword, apiEmailChange, apiEmailGet, getPreferences, updatePreferences } from '@/client'; import { apiUserChangePassword, apiEmailChange, apiEmailGet, getPreferences, updatePreferences } from '@/client';
import {getApiErrorMessage} from '@/lib/api-error'; import {getApiErrorMessage} from '@/lib/api-error';
import i18n from '@/lib/i18n';
const LANGUAGES = [ const LANGUAGES = [
{ value: 'en', label: 'English' }, { value: 'en', label: 'English' },
@ -388,7 +389,12 @@ export function SettingsAccount() {
<Select <Select
key={`language-${language}`} key={`language-${language}`}
value={language} value={language}
onValueChange={(value) => value && setLanguage(value)} onValueChange={(value) => {
if (value) {
setLanguage(value);
i18n.changeLanguage(value);
}
}}
> >
<SelectTrigger id="language" className="w-full"> <SelectTrigger id="language" className="w-full">
<SelectValue /> <SelectValue />

View File

@ -4,8 +4,10 @@ import {BrowserRouter} from 'react-router-dom';
import {Toaster} from 'sonner'; import {Toaster} from 'sonner';
import {UserProvider} from '@/contexts'; import {UserProvider} from '@/contexts';
import {ThemeProvider} from '@/contexts/theme-context'; import {ThemeProvider} from '@/contexts/theme-context';
import {LanguageProvider} from '@/lib/language-provider';
import './index.css'; import './index.css';
import App from './App.tsx'; import App from './App.tsx';
import '@/lib/i18n';
import {CommandPalette} from '@/components/shared/CommandPalette'; import {CommandPalette} from '@/components/shared/CommandPalette';
import {KeyboardShortcutsSheet} from '@/components/shared/KeyboardShortcutsSheet'; import {KeyboardShortcutsSheet} from '@/components/shared/KeyboardShortcutsSheet';
import {GlobalNavigationShortcuts} from '@/components/shared/GlobalNavigationShortcuts'; import {GlobalNavigationShortcuts} from '@/components/shared/GlobalNavigationShortcuts';
@ -31,6 +33,7 @@ createRoot(document.getElementById('root')!).render(
<QueryClientProvider client={queryClient}> <QueryClientProvider client={queryClient}>
<BrowserRouter> <BrowserRouter>
<UserProvider> <UserProvider>
<LanguageProvider>
<ThemeProvider> <ThemeProvider>
<App/> <App/>
<CommandPalette/> <CommandPalette/>
@ -38,6 +41,7 @@ createRoot(document.getElementById('root')!).render(
<GlobalNavigationShortcuts/> <GlobalNavigationShortcuts/>
<Toaster richColors position="bottom-right"/> <Toaster richColors position="bottom-right"/>
</ThemeProvider> </ThemeProvider>
</LanguageProvider>
</UserProvider> </UserProvider>
</BrowserRouter> </BrowserRouter>
</QueryClientProvider> </QueryClientProvider>