多语言模块扩展支持添加其它自定义多语言组件

This commit is contained in:
dgflash
2024-11-06 18:25:18 +08:00
parent 03237c6ef9
commit 55ca68c968
5 changed files with 38 additions and 38 deletions

View File

@@ -53,7 +53,7 @@ export class LanguageManager {
* @param language 语言名
* @param callback 多语言资源数据加载完成回调
*/
setLanguage(language: string, callback: (success: boolean) => void) {
setLanguage(language: string, callback?: (success: boolean) => void) {
if (language == null || language == "") {
language = this._defaultLanguage;
}
@@ -68,7 +68,7 @@ export class LanguageManager {
}
if (language === LanguageData.current) {
callback(false);
callback && callback(false);
return;
}
@@ -78,7 +78,7 @@ export class LanguageManager {
LanguageData.current = language;
this._languagePack.updateLanguage(language);
this._languagePack.releaseLanguageAssets(oldLanguage);
callback(true);
callback && callback(true);
});
}

View File

@@ -6,6 +6,7 @@ import { TTFFont } from "cc";
* @LastEditors: dgflash
* @LastEditTime: 2023-08-22 16:37:40
*/
export class LanguageData {
/** JSON资源目录 */
static path_json: string = "language/json";
@@ -49,4 +50,10 @@ export class LanguageData {
return labId;
}
}
}
export const LanguageType = [
'LanguageLabel',
'LanguageSprite',
'LanguageSpine'
]

View File

@@ -28,7 +28,9 @@ export class LanguageLabel extends Component {
})
set params(value: Array<LangLabelParamsItem>) {
this._params = value;
if (!EDITOR) this.enabled = true;
if (!EDITOR) {
this._needUpdate = true;
}
}
get params(): Array<LangLabelParamsItem> {
return this._params || [];
@@ -42,7 +44,9 @@ export class LanguageLabel extends Component {
}
set dataID(value: string) {
this._dataID = value;
if (!EDITOR) this.enabled = true;
if (!EDITOR) {
this._needUpdate = true;
}
}
get string(): string {
@@ -59,11 +63,16 @@ export class LanguageLabel extends Component {
return _string;
}
/** 更新语言 */
language() {
this._needUpdate = true;
}
/** 初始字体尺寸 */
initFontSize: number = 0;
onLoad() {
this.enabled = true;
this._needUpdate = true;
}
/**
@@ -86,16 +95,15 @@ export class LanguageLabel extends Component {
ii.value = value;
this._params.push(ii);
}
this.enabled = true;
}
language() {
this.enabled = true;
this._needUpdate = true;
}
private _needUpdate: boolean = false;
update() {
this.updateContent();
this.enabled = false;
if (this._needUpdate) {
this.updateContent();
this._needUpdate = false;
}
}
updateContent() {
@@ -114,7 +122,6 @@ export class LanguageLabel extends Component {
if (font) {
richtext.font = font;
}
this.initFontSize = richtext.fontSize;
richtext.string = this.string;
this.initFontSize = richtext.fontSize;
}

View File

@@ -8,10 +8,7 @@ import { director, error, JsonAsset, TTFFont } from "cc";
import { resLoader } from "../../../core/common/loader/ResLoader";
import { Logger } from "../../../core/common/log/Logger";
import { JsonUtil } from "../../../core/utils/JsonUtil";
import { LanguageData } from "./LanguageData";
import { LanguageLabel } from "./LanguageLabel";
import { LanguageSpine } from "./LanguageSpine";
import { LanguageSprite } from "./LanguageSprite";
import { LanguageData, LanguageType } from "./LanguageData";
export class LanguagePack {
/**
@@ -21,23 +18,12 @@ export class LanguagePack {
updateLanguage(lang: string) {
let rootNodes = director.getScene()!.children;
for (let i = 0; i < rootNodes.length; ++i) {
// 更新所有的LanguageLabel节点
let labels = rootNodes[i].getComponentsInChildren(LanguageLabel);
for (let j = 0; j < labels.length; j++) {
labels[j].language();
}
// 更新所有的LanguageSprite节点
let sprites = rootNodes[i].getComponentsInChildren(LanguageSprite);
for (let j = 0; j < sprites.length; j++) {
sprites[j].language();
}
// 更新所有的LanguageSpine节点
let spines = rootNodes[i].getComponentsInChildren(LanguageSpine);
for (let j = 0; j < spines.length; j++) {
spines[j].language();
}
LanguageType.forEach(type => {
let comps: any[] = rootNodes[i].getComponentsInChildren(type);
for (let j = 0; j < comps.length; j++) {
comps[j].language();
}
})
}
}

View File

@@ -38,7 +38,7 @@ export default class VMLabel extends VMBase {
@property({
readonly: true
})
private labelType: string = LABEL_TYPE.CC_LABEL;
protected labelType: string = LABEL_TYPE.CC_LABEL;
@property({
type: [CCString],
@@ -57,7 +57,7 @@ export default class VMLabel extends VMBase {
private templateFormatArr: string[] = [];
/** 源字符串 */
private originText: string | null = null;
protected originText: string | null = null;
onRestore() {
this.checkLabel();