Skip to content

Commit 0b20cbc

Browse files
committed
feat(多语言): 添加基于地理位置和浏览器语言的自动检测功能
新增 detectLanguageByLocation 函数,根据用户时区和浏览器语言首选项自动选择显示语言。优先使用本地存储中的用户选择,未设置时自动检测
1 parent 5710297 commit 0b20cbc

File tree

1 file changed

+59
-4
lines changed

1 file changed

+59
-4
lines changed

index.html

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<html lang="zh-CN">
2+
<html>
33
<head>
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
@@ -2604,6 +2604,50 @@ <h3 class="contact-subtitle">
26042604
<script>
26052605
let currentLang = "zh";
26062606

2607+
function detectLanguageByLocation() {
2608+
return new Promise((resolve) => {
2609+
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
2610+
2611+
if (
2612+
timezone.includes("Asia/Shanghai") ||
2613+
timezone.includes("Asia/Beijing") ||
2614+
timezone.includes("Asia/Chongqing") ||
2615+
timezone.includes("Asia/Harbin") ||
2616+
timezone.includes("Asia/Kashgar") ||
2617+
timezone.includes("Asia/Urumqi")
2618+
) {
2619+
resolve("zh");
2620+
return;
2621+
}
2622+
2623+
// 日本时区
2624+
if (timezone.includes("Asia/Tokyo")) {
2625+
resolve("ja");
2626+
return;
2627+
}
2628+
2629+
// 韩国时区
2630+
if (timezone.includes("Asia/Seoul")) {
2631+
resolve("ja");
2632+
return;
2633+
}
2634+
2635+
// 尝试通过浏览器语言检测
2636+
const browserLang = navigator.language || navigator.languages[0];
2637+
2638+
if (browserLang.startsWith("zh")) {
2639+
resolve("zh");
2640+
} else if (
2641+
browserLang.startsWith("ja") ||
2642+
browserLang.startsWith("ko")
2643+
) {
2644+
resolve("ja");
2645+
} else {
2646+
resolve("en");
2647+
}
2648+
});
2649+
}
2650+
26072651
function toggleLanguageSwitcher() {
26082652
const switcher = document.getElementById("languageSwitcher");
26092653
switcher.classList.toggle("show");
@@ -2654,9 +2698,20 @@ <h3 class="contact-subtitle">
26542698
localStorage.setItem("rushdb-language", lang);
26552699
}
26562700

2657-
document.addEventListener("DOMContentLoaded", function () {
2658-
const savedLang = localStorage.getItem("rushdb-language") || "zh";
2659-
switchLanguage(savedLang);
2701+
document.addEventListener("DOMContentLoaded", async function () {
2702+
// 检查是否已有保存的语言设置
2703+
const savedLang = localStorage.getItem("rushdb-language");
2704+
2705+
let selectedLang;
2706+
if (savedLang) {
2707+
// 如果用户之前已经选择过语言,使用保存的设置
2708+
selectedLang = savedLang;
2709+
} else {
2710+
// 如果是首次访问,根据地理位置自动选择语言
2711+
selectedLang = await detectLanguageByLocation();
2712+
}
2713+
2714+
switchLanguage(selectedLang);
26602715

26612716
document.addEventListener("click", function (event) {
26622717
const switcher = document.getElementById("languageSwitcher");

0 commit comments

Comments
 (0)