first commit
This commit is contained in:
246
FGUIProject/plugins/nbc-puerts-plugins/LanguageSettings.js
Normal file
246
FGUIProject/plugins/nbc-puerts-plugins/LanguageSettings.js
Normal file
@@ -0,0 +1,246 @@
|
||||
"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();
|
||||
Reference in New Issue
Block a user