This commit is contained in:
2025-08-06 11:32:29 +08:00
parent 90afd6e520
commit 351a79d54c
21 changed files with 915 additions and 16 deletions

View File

@@ -1879,5 +1879,49 @@ export const api = {
console.error("Failed to delete slash command:", error);
throw error;
}
},
// ================================
// Language Settings
// ================================
/**
* Gets the current language setting
* @returns Promise resolving to the current language locale
*/
async getCurrentLanguage(): Promise<string> {
try {
return await invoke<string>("get_current_language");
} catch (error) {
console.error("Failed to get current language:", error);
throw error;
}
},
/**
* Sets the language setting
* @param locale - Language locale to set (e.g., 'en-US', 'zh-CN')
* @returns Promise resolving when language is set
*/
async setLanguage(locale: string): Promise<void> {
try {
await invoke<void>("set_language", { locale });
} catch (error) {
console.error("Failed to set language:", error);
throw error;
}
},
/**
* Gets the list of supported languages
* @returns Promise resolving to array of supported language locales
*/
async getSupportedLanguages(): Promise<string[]> {
try {
return await invoke<string[]>("get_supported_languages");
} catch (error) {
console.error("Failed to get supported languages:", error);
throw error;
}
}
};

57
src/lib/i18n.ts Normal file
View File

@@ -0,0 +1,57 @@
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
// 引入语言资源文件
import en from '@/locales/en/common.json';
import zh from '@/locales/zh/common.json';
// 配置语言检测器
const languageDetectorOptions = {
// 检测顺序
order: ['localStorage', 'navigator', 'htmlTag'],
// 缓存语言到localStorage
caches: ['localStorage'],
// 检查所有可用语言
checkWhitelist: true,
};
i18n
.use(LanguageDetector)
.use(initReactI18next)
.init({
// 回退语言
fallbackLng: 'en',
// 调试模式(开发环境)
debug: process.env.NODE_ENV === 'development',
// 语言资源
resources: {
en: {
common: en,
},
zh: {
common: zh,
},
},
// 命名空间配置
defaultNS: 'common',
ns: ['common'],
// 语言检测选项
detection: languageDetectorOptions,
// 插值配置
interpolation: {
escapeValue: false, // React 已经默认防止XSS
},
// 白名单支持的语言
supportedLngs: ['en', 'zh'],
// 非显式支持的语言回退到en
nonExplicitSupportedLngs: true,
});
export default i18n;