優化 WebGUI 預設語系會根據 env TEMPLATES_USE 設定改變
This commit is contained in:
siage 2025-05-23 16:49:33 +08:00
parent 16913ad692
commit 51436bb487
3 changed files with 25 additions and 12 deletions

View File

@ -9,8 +9,9 @@
DATA_DIR=
# Set Templates
# Specifies the template set to use for prompts.
# Specifies the template set to use for prompts and WebGUI language.
# Default is 'en'. Currently available options are 'en' and 'zh'.
# When using custom templates, WebGUI will default to English interface.
# To use custom templates, copy the 'src/prompts/templates_en' directory
# to the location specified by DATA_DIR, rename the copied directory
# (e.g., to 'my_templates'), and set TEMPLATES_USE to the new directory name (e.g., 'my_templates').

View File

@ -147,9 +147,19 @@ async function main() {
} catch (watchError) {}
});
// 將 URL 寫入 ebGUI.md
// 將 URL 寫入 WebGUI.md
try {
const websiteUrl = `[Task Manager UI](http://localhost:${port})`;
// 讀取 TEMPLATES_USE 環境變數並轉換為語言代碼
const templatesUse = process.env.TEMPLATES_USE || "en";
const getLanguageFromTemplate = (template: string): string => {
if (template === "zh") return "zh-TW";
if (template === "en") return "en";
// 自訂範本預設使用英文
return "en";
};
const language = getLanguageFromTemplate(templatesUse);
const websiteUrl = `[Task Manager UI](http://localhost:${port}?lang=${language})`;
const websiteFilePath = path.join(DATA_DIR, "WebGUI.md");
await fsPromises.writeFile(websiteFilePath, websiteUrl, "utf-8");
} catch (error) {}

View File

@ -69,21 +69,25 @@ document.addEventListener("DOMContentLoaded", () => {
});
// 新增i18n 核心函數
// 1. 語言檢測 (localStorage > navigator.language > 'en')
// 1. 語言檢測 (URL 參數 > navigator.language > 'en')
function detectLanguage() {
const savedLang = localStorage.getItem("lang");
if (savedLang && ["en", "zh-TW"].includes(savedLang)) {
// 確保保存的是有效語言
return savedLang;
// 1. 優先從 URL 參數讀取
const urlParams = new URLSearchParams(window.location.search);
const urlLang = urlParams.get("lang");
if (urlLang && ["en", "zh-TW"].includes(urlLang)) {
return urlLang;
}
// 檢查瀏覽器語言
// 2. 檢查瀏覽器語言(移除 localStorage 檢查)
const browserLang = navigator.language || navigator.userLanguage;
if (browserLang) {
if (browserLang.toLowerCase().startsWith("zh-tw")) return "zh-TW";
if (browserLang.toLowerCase().startsWith("zh")) return "zh-TW"; // 簡體也先 fallback 到繁體
if (browserLang.toLowerCase().startsWith("en")) return "en";
}
return "en"; // 預設
// 3. 預設值
return "en";
}
// 2. 異步加載翻譯文件
@ -152,7 +156,6 @@ function applyTranslations() {
async function initI18n() {
currentLang = detectLanguage();
console.log(`Initializing i18n with language: ${currentLang}`);
localStorage.setItem("lang", currentLang); // 確保 lang 被保存
// << 新增:設置切換器的初始值 >>
if (langSwitcher) {
langSwitcher.value = currentLang;
@ -169,7 +172,6 @@ function changeLanguage(lang) {
lang = "en";
}
currentLang = lang;
localStorage.setItem("lang", lang);
console.log(`Changing language to: ${currentLang}`);
loadTranslations(currentLang)
.then(() => {