diff --git a/.env.example b/.env.example index a211b2a..2f636e0 100644 --- a/.env.example +++ b/.env.example @@ -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'). diff --git a/src/index.ts b/src/index.ts index ebf908c..bf37eb7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -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) {} diff --git a/src/public/script.js b/src/public/script.js index 4f4a90e..ec2b816 100644 --- a/src/public/script.js +++ b/src/public/script.js @@ -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(() => {