openai-cli-unofficial
Version:
A powerful OpenAI CLI Coding Agent built with TypeScript
108 lines • 3.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.languageService = exports.LanguageService = void 0;
const locales_1 = require("../locales");
const language_1 = require("../types/language");
const storage_1 = require("./storage");
/**
* 语言管理服务
* 使用单例模式统一管理应用的语言状态
*/
class LanguageService {
constructor() {
this.callbacks = new Set();
// 尝试从存储中读取保存的语言设置,如果没有则使用默认语言
const savedLanguage = storage_1.StorageService.getSavedLanguage();
this.currentLanguage = savedLanguage || 'en';
}
/**
* 获取语言服务单例实例
*/
static getInstance() {
if (!LanguageService.instance) {
LanguageService.instance = new LanguageService();
}
return LanguageService.instance;
}
/**
* 获取当前语言
*/
getCurrentLanguage() {
return this.currentLanguage;
}
/**
* 设置当前语言
*/
setLanguage(language) {
if (language !== this.currentLanguage) {
this.currentLanguage = language;
// 保存到存储中
storage_1.StorageService.saveLanguage(language);
this.notifyLanguageChange();
}
}
/**
* 获取当前语言的消息
*/
getMessages() {
return (0, locales_1.getCurrentMessages)(this.currentLanguage);
}
/**
* 获取可用的语言列表
*/
getAvailableLanguages() {
return (0, locales_1.getAvailableLanguages)();
}
/**
* 获取语言配置信息
*/
getLanguageConfig(language) {
return language_1.LANGUAGES[language];
}
/**
* 获取所有语言配置
*/
getAllLanguageConfigs() {
return language_1.LANGUAGES;
}
/**
* 注册语言变化回调
*/
onLanguageChange(callback) {
this.callbacks.add(callback);
// 返回取消注册的函数
return () => {
this.callbacks.delete(callback);
};
}
/**
* 通知所有监听者语言已变化
*/
notifyLanguageChange() {
this.callbacks.forEach(callback => {
try {
callback(this.currentLanguage);
}
catch (error) {
console.error('Error in language change callback:', error);
}
});
}
/**
* 创建语言选择菜单的选项
*/
createLanguageMenuChoices() {
return this.getAvailableLanguages().map(code => {
const config = this.getLanguageConfig(code);
return {
name: config.nativeName,
value: code,
description: config.name
};
});
}
}
exports.LanguageService = LanguageService;
// 导出单例实例以便直接使用
exports.languageService = LanguageService.getInstance();
//# sourceMappingURL=language.js.map