website/THEME_LANG_FEATURES.md
dark: 前缀的类名app/
├── lib/
│ └── theme.ts # 主题管理工具
├── contexts/
│ └── AppContext.tsx # 应用上下文
├── components/
│ └── ThemeToggle.tsx # 主题切换组件
└── globals.css # 全局样式和主题变量
import { useApp } from '../contexts/AppContext';
function MyComponent() {
const { theme, setTheme } = useApp();
return (
<div className="bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100">
<button onClick={() => setTheme('dark')}>
切换到暗色主题
</button>
</div>
);
}
t() 函数获取翻译app/
├── lib/
│ ├── language.ts # 语言管理工具
│ └── translations.ts # 翻译文件
├── contexts/
│ └── AppContext.tsx # 应用上下文
└── components/
└── LanguageToggle.tsx # 语言切换组件
import { useApp } from '../contexts/AppContext';
function MyComponent() {
const { t, language, setLanguage } = useApp();
return (
<div>
<h1>{t('title')}</h1>
<p>{t('description')}</p>
<button onClick={() => setLanguage('en')}>
切换到英文
</button>
</div>
);
}
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
/* 更多变量... */
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--primary: 217.2 91.2% 59.8%;
/* 更多变量... */
}
module.exports = {
darkMode: 'class',
theme: {
extend: {
colors: {
background: 'hsl(var(--background))',
foreground: 'hsl(var(--foreground))',
// 更多颜色...
}
}
}
}
suppressHydrationWarning 防止水合警告useCallback 优化函数引用useMemo 缓存计算结果访问 http://localhost:3000/test-theme-lang 可以测试:
确保生产环境支持:
NEXT_PUBLIC_ 前缀的环境变量app/lib/theme.ts 中添加新主题配置app/globals.css 中添加对应的 CSS 变量app/components/ThemeToggle.tsx 中添加新主题选项app/lib/language.ts 中添加新语言配置app/lib/translations.ts 中添加新语言翻译app/components/LanguageToggle.tsx 中添加新语言选项app/lib/translations.ts 的 Translations 接口中添加新键t('newKey') 获取翻译主题和语言切换功能已经成功集成到网站中,提供了:
✅ 完整的主题系统: 支持亮色、暗色、跟随系统三种模式 ✅ 多语言支持: 支持中文和英文切换 ✅ 持久化存储: 用户选择会保存到本地 ✅ 响应式设计: 完美适配各种设备 ✅ 无障碍支持: 支持键盘导航和屏幕阅读器 ✅ 性能优化: 流畅的切换体验 ✅ 易于扩展: 可以轻松添加新主题和语言
用户现在可以: