汉化
This commit is contained in:
@@ -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
57
src/lib/i18n.ts
Normal 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;
|
Reference in New Issue
Block a user