Skip to content

Commit 9421301

Browse files
committed
init
1 parent ad8c68a commit 9421301

3 files changed

Lines changed: 41 additions & 5 deletions

File tree

src/components/Header.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import FluxMQLogo from "./FluxMQLogo";
99
const Header = () => {
1010
const [isMenuOpen, setIsMenuOpen] = useState(false);
1111
const [isDark, setIsDark] = useState(false);
12+
const [currentLanguage, setCurrentLanguage] = useState('en');
1213
const { t, i18n } = useTranslation();
1314

1415
useEffect(() => {
@@ -27,12 +28,35 @@ const Header = () => {
2728
return () => mediaQuery.removeEventListener('change', checkDarkMode);
2829
}, []);
2930

31+
// 监听语言变化,确保状态同步
32+
useEffect(() => {
33+
const handleLanguageChange = (lng: string) => {
34+
setCurrentLanguage(lng);
35+
};
36+
37+
// 设置初始语言状态
38+
setCurrentLanguage(i18n.language);
39+
40+
// 监听语言变化
41+
i18n.on('languageChanged', handleLanguageChange);
42+
43+
return () => {
44+
i18n.off('languageChanged', handleLanguageChange);
45+
};
46+
}, [i18n]);
47+
3048
const changeLanguage = (lng: string) => {
31-
i18n.changeLanguage(lng);
49+
// 防止重复切换
50+
if (i18n.language === lng) return;
51+
52+
// 平滑切换语言,避免页面晃动
53+
i18n.changeLanguage(lng).then(() => {
54+
setCurrentLanguage(lng);
55+
});
3256
};
3357

3458
const getCurrentLanguage = () => {
35-
return i18n.language === 'zh' ? '中文' : 'English';
59+
return currentLanguage === 'zh' ? '中文' : 'English';
3660
};
3761

3862
return (
@@ -133,14 +157,14 @@ const Header = () => {
133157
</div>
134158
<div className="flex space-x-2">
135159
<Button
136-
variant={i18n.language === 'en' ? 'default' : 'ghost'}
160+
variant={currentLanguage === 'en' ? 'default' : 'ghost'}
137161
size="sm"
138162
onClick={() => changeLanguage('en')}
139163
>
140164
English
141165
</Button>
142166
<Button
143-
variant={i18n.language === 'zh' ? 'default' : 'ghost'}
167+
variant={currentLanguage === 'zh' ? 'default' : 'ghost'}
144168
size="sm"
145169
onClick={() => changeLanguage('zh')}
146170
>

src/index.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@
99
/* Dark theme for tech/developer tool aesthetic */
1010
--background: 222 47% 4%;
1111
--foreground: 210 40% 98%;
12+
13+
/* 防止语言切换时页面晃动 */
14+
html {
15+
scroll-behavior: smooth;
16+
}
17+
18+
body {
19+
transition: none !important;
20+
}
1221

1322
--card: 222 47% 6%;
1423
--card-foreground: 210 40% 98%;

src/lib/i18n.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -985,13 +985,16 @@ i18n
985985
.init({
986986
resources,
987987
fallbackLng: 'en',
988+
lng: 'en', // 设置默认语言为英文
988989
debug: false,
989990
interpolation: {
990991
escapeValue: false
991992
},
992993
detection: {
993994
order: ['localStorage', 'navigator', 'htmlTag'],
994-
caches: ['localStorage']
995+
caches: ['localStorage'],
996+
lookupLocalStorage: 'i18nextLng',
997+
checkWhitelist: true
995998
}
996999
});
9971000

0 commit comments

Comments
 (0)