mirror of
https://github.com/cjo4m06/mcp-shrimp-task-manager.git
synced 2025-07-26 07:52:25 +08:00
parent
16913ad692
commit
51436bb487
@ -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').
|
||||
|
14
src/index.ts
14
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) {}
|
||||
|
@ -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(() => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user