feat: Support i18n

This commit is contained in:
2026-02-05 13:59:13 +08:00
parent ff0a7dc1a8
commit 2f53e14a26
87 changed files with 4290 additions and 358 deletions

View File

@@ -1,4 +1,5 @@
import { useState, useRef, lazy, Suspense, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { Navbar } from '@/components/Navbar'
import { Card, CardContent, CardHeader } from '@/components/ui/card'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
@@ -15,6 +16,7 @@ const VoiceDesignForm = lazy(() => import('@/components/tts/VoiceDesignForm'))
const VoiceCloneForm = lazy(() => import('@/components/tts/VoiceCloneForm'))
function Home() {
const { t } = useTranslation('nav')
const [currentTab, setCurrentTab] = useState('custom-voice')
const [sidebarOpen, setSidebarOpen] = useState(false)
const [showOnboarding, setShowOnboarding] = useState(false)
@@ -52,15 +54,15 @@ function Home() {
<TabsList className="grid w-full grid-cols-3 h-9">
<TabsTrigger value="custom-voice" variant="default">
<User className="h-4 w-4 md:mr-2" />
<span className="hidden md:inline"></span>
<span className="hidden md:inline">{t('customVoiceTab')}</span>
</TabsTrigger>
<TabsTrigger value="voice-design" variant="secondary">
<Palette className="h-4 w-4 md:mr-2" />
<span className="hidden md:inline"></span>
<span className="hidden md:inline">{t('voiceDesignTab')}</span>
</TabsTrigger>
<TabsTrigger value="voice-clone" variant="outline">
<Copy className="h-4 w-4 md:mr-2" />
<span className="hidden md:inline"></span>
<span className="hidden md:inline">{t('voiceCloneTab')}</span>
</TabsTrigger>
</TabsList>
</Tabs>