"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LanguageSettings = exports.LanguagePackageData = exports.LanguageComponentChildData = void 0; var FairyEditor = CS.FairyEditor; var System = CS.System; const App = FairyEditor.App; const File = System.IO.File; const Directory = System.IO.Directory; class LanguageComponentChildData { id; key; useable; } exports.LanguageComponentChildData = LanguageComponentChildData; // class LanguageComponentData { // url: string; // childs: object = {}; // } class LanguagePackageData { name; components = {}; } exports.LanguagePackageData = LanguagePackageData; class LanguageSettings { static instance; static getInstance() { if (!this.instance) { this.instance = new LanguageSettings(); } return this.instance; } componentsSettingBasePath = ""; _languageMap = new Map(); _languageKeyValues = {}; constructor() { this.init(); // this._languageKeyValues['k1'] = "hahha1" // this._languageKeyValues['k2'] = "hahha2" // this._languageKeyValues['k3'] = "hahha3" //'CustomProperties' let path = App.project.settingsPath + "/CustomProperties.json"; if (File.Exists(path)) { let jsonStr = File.ReadAllText(path); let settings = JSON.parse(jsonStr); if (settings.hasOwnProperty("languagePath")) { let languagePath = App.project.basePath + "/" + settings['languagePath']; console.log("多语言路径=", languagePath); if (File.Exists(languagePath)) { let languageStr = File.ReadAllText(languagePath); let datas = JSON.parse(languageStr); if (datas != null && datas.length > 0) { for (const data of datas) { this._languageKeyValues[data['key']] = data['value']; } } } } } } init() { console.log("初始化加载多语言配置==="); this.componentsSettingBasePath = App.project.settingsPath + "/whootLanguage"; if (!System.IO.Directory.Exists(this.componentsSettingBasePath)) { console.log("whoot配置文件目录不存在,创建"); System.IO.Directory.CreateDirectory(this.componentsSettingBasePath); } this.readAll(); } /** * 清理无效的配置 */ clearFailureConfig() { // App.d } getLanguage(key) { let value = this._languageKeyValues[key]; if (value == null) { return key; } return value; } /** * 获取所有多语言包配置 * @returns */ getAllPackage() { return this._languageMap; } /** * 获取一个多语言配置 * @param packageName * @param docUrl * @param componentId */ get(packageName, docUrl, componentId) { let pack = this._languageMap.get(packageName); if (pack != null) { let doc = pack.components[docUrl]; if (doc != null) { let child = doc[componentId]; return child; } } return null; } /** * 获取一个组件的多语言配置 * @param packageName * @param docUrl * @returns */ getDoc(packageName, docUrl) { let pack = this._languageMap.get(packageName); if (pack != null) { let doc = pack.components[docUrl]; if (doc != null) { return doc; } } return null; } /** * 获取一个包的多语言配置 * @param packageName */ getPackage(packageName) { let pack = this._languageMap.get(packageName); if (pack) { return pack.components; } return {}; } /** * 更新一个多语言配置 * @param packageName * @param docUrl * @param componentId * @param languageKey * @param useable 是否可用的 */ update(packageName, docUrl, componentId, languageKey, useable = true) { let chang = false; let pack = this._languageMap.get(packageName); if (pack == null) { pack = new LanguagePackageData(); pack.name = packageName; this._languageMap.set(packageName, pack); chang = true; } let doc = pack.components[docUrl]; if (doc == null) { doc = {}; pack.components[docUrl] = doc; //.set(docUrl, doc) chang = true; } let child = doc[componentId]; if (child == null) { child = new LanguageComponentChildData(); child.id = componentId; doc[componentId] = child; //.set(componentId, child) } let u = useable ? 1 : 0; if (child.key != languageKey || child.useable != u) { child.key = languageKey; child.useable = u; chang = true; } if (chang) { //有数据变化,变更文件 this.saveFile(packageName); } return chang; } //region 工具方法 updateItemTitle(obj, key) { // console.log("obj类型=", obj.GetType()) if (obj instanceof FairyEditor.FTextInput) { let textInput = obj; textInput.promptText = this.getLanguage(key); } else if (obj instanceof FairyEditor.FButton) { let button = obj; button.title = this.getLanguage(key); } else if (obj instanceof FairyEditor.FLabel) { let lable = obj; lable.title = this.getLanguage(key); } else { obj.text = this.getLanguage(key); } } //endregion //region file //获取所有的文件的路径 getAllDirector(path, list) { console.log("开始读取所有配置=", path); let files = Directory.GetFiles(path, "*.json"); for (let f = 0; f < files.Length; f++) { list.push(files.get_Item(f)); } } /** * 读取全部 */ readAll() { try { let list = []; this.getAllDirector(this.componentsSettingBasePath, list); this._languageMap.clear(); console.log("初始化所有多语言配置"); for (let index = 0; index < list.length; index++) { let p = list[index]; let jsonStr = File.ReadAllText(p); let data = JSON.parse(jsonStr); this._languageMap.set(data.name, data); } } catch { console.error("读取多语言配置文件失败"); } } /** * 将所有配置保存成配置文件 */ saveAllFile() { let keys = this._languageMap.keys(); for (const key of keys) { this.saveFile(key); } } /** * 保存json文件 * @param packageName */ saveFile(packageName) { let path = this.componentsSettingBasePath + "/" + packageName + ".json"; let data = this._languageMap.get(packageName); if (data != null) { let jsonStr = JSON.stringify(data); File.WriteAllText(path, jsonStr); } } } exports.LanguageSettings = LanguageSettings; exports.default = LanguageSettings.getInstance();