mirror of
https://github.com/cjo4m06/mcp-shrimp-task-manager.git
synced 2025-07-27 00:12:26 +08:00
parent
16913ad692
commit
51436bb487
@ -9,8 +9,9 @@
|
|||||||
DATA_DIR=
|
DATA_DIR=
|
||||||
|
|
||||||
# Set Templates
|
# 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'.
|
# 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 use custom templates, copy the 'src/prompts/templates_en' directory
|
||||||
# to the location specified by DATA_DIR, rename the copied 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').
|
# (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) {}
|
} catch (watchError) {}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 將 URL 寫入 ebGUI.md
|
// 將 URL 寫入 WebGUI.md
|
||||||
try {
|
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");
|
const websiteFilePath = path.join(DATA_DIR, "WebGUI.md");
|
||||||
await fsPromises.writeFile(websiteFilePath, websiteUrl, "utf-8");
|
await fsPromises.writeFile(websiteFilePath, websiteUrl, "utf-8");
|
||||||
} catch (error) {}
|
} catch (error) {}
|
||||||
|
@ -69,21 +69,25 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 新增:i18n 核心函數
|
// 新增:i18n 核心函數
|
||||||
// 1. 語言檢測 (localStorage > navigator.language > 'en')
|
// 1. 語言檢測 (URL 參數 > navigator.language > 'en')
|
||||||
function detectLanguage() {
|
function detectLanguage() {
|
||||||
const savedLang = localStorage.getItem("lang");
|
// 1. 優先從 URL 參數讀取
|
||||||
if (savedLang && ["en", "zh-TW"].includes(savedLang)) {
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
// 確保保存的是有效語言
|
const urlLang = urlParams.get("lang");
|
||||||
return savedLang;
|
if (urlLang && ["en", "zh-TW"].includes(urlLang)) {
|
||||||
|
return urlLang;
|
||||||
}
|
}
|
||||||
// 檢查瀏覽器語言
|
|
||||||
|
// 2. 檢查瀏覽器語言(移除 localStorage 檢查)
|
||||||
const browserLang = navigator.language || navigator.userLanguage;
|
const browserLang = navigator.language || navigator.userLanguage;
|
||||||
if (browserLang) {
|
if (browserLang) {
|
||||||
if (browserLang.toLowerCase().startsWith("zh-tw")) return "zh-TW";
|
if (browserLang.toLowerCase().startsWith("zh-tw")) return "zh-TW";
|
||||||
if (browserLang.toLowerCase().startsWith("zh")) return "zh-TW"; // 簡體也先 fallback 到繁體
|
if (browserLang.toLowerCase().startsWith("zh")) return "zh-TW"; // 簡體也先 fallback 到繁體
|
||||||
if (browserLang.toLowerCase().startsWith("en")) return "en";
|
if (browserLang.toLowerCase().startsWith("en")) return "en";
|
||||||
}
|
}
|
||||||
return "en"; // 預設
|
|
||||||
|
// 3. 預設值
|
||||||
|
return "en";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 異步加載翻譯文件
|
// 2. 異步加載翻譯文件
|
||||||
@ -152,7 +156,6 @@ function applyTranslations() {
|
|||||||
async function initI18n() {
|
async function initI18n() {
|
||||||
currentLang = detectLanguage();
|
currentLang = detectLanguage();
|
||||||
console.log(`Initializing i18n with language: ${currentLang}`);
|
console.log(`Initializing i18n with language: ${currentLang}`);
|
||||||
localStorage.setItem("lang", currentLang); // 確保 lang 被保存
|
|
||||||
// << 新增:設置切換器的初始值 >>
|
// << 新增:設置切換器的初始值 >>
|
||||||
if (langSwitcher) {
|
if (langSwitcher) {
|
||||||
langSwitcher.value = currentLang;
|
langSwitcher.value = currentLang;
|
||||||
@ -169,7 +172,6 @@ function changeLanguage(lang) {
|
|||||||
lang = "en";
|
lang = "en";
|
||||||
}
|
}
|
||||||
currentLang = lang;
|
currentLang = lang;
|
||||||
localStorage.setItem("lang", lang);
|
|
||||||
console.log(`Changing language to: ${currentLang}`);
|
console.log(`Changing language to: ${currentLang}`);
|
||||||
loadTranslations(currentLang)
|
loadTranslations(currentLang)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user