Files

136 lines
2.8 KiB
TypeScript
Raw Permalink Normal View History

2025-08-12 19:49:50 +08:00
import { _decorator, Component, Label, Node } from "cc";
import LanguageUtils, { LanguageType } from "./LanguageUtils";
2025-09-21 20:36:19 +08:00
import { logger } from "db://assets/Scripts/Main/Common/Logger";
2025-08-12 19:49:50 +08:00
const { ccclass, property, requireComponent } = _decorator;
@ccclass("LanguageLabel")
@requireComponent(Label)
export class LanguageLabel extends Component {
@property({
displayName: "Language Key",
tooltip: "多语言配置表中的key值",
})
private languageKey: string = "";
@property({
displayName: "Default Text",
tooltip: "如果找不到对应的翻译时显示的默认文本",
})
private defaultText: string = "";
@property({
displayName: "Auto Update",
tooltip: "是否自动监听语言变化并更新",
})
private autoUpdate: boolean = true;
private label: Label = null;
private params: { [key: string]: any } = null;
onLoad() {
this.label = this.getComponent(Label);
if (!this.label) {
2025-09-21 20:36:19 +08:00
logger.error("LanguageLabel: Label component not found!");
2025-08-12 19:49:50 +08:00
return;
}
this.updateText();
if (this.autoUpdate) {
LanguageUtils.onLanguageChanged(this.onLanguageChanged, this);
}
}
onDestroy() {
if (this.autoUpdate) {
LanguageUtils.offLanguageChanged(this.onLanguageChanged, this);
}
}
onEnable() {
this.updateText();
}
private onLanguageChanged(language: LanguageType) {
this.updateText();
}
private updateText() {
if (!this.label || !this.languageKey) {
return;
}
let text: string;
if (this.params && Object.keys(this.params).length > 0) {
text = LanguageUtils.getTextWithParams(
this.languageKey,
this.params,
this.defaultText
);
} else {
text = LanguageUtils.getText(this.languageKey, this.defaultText);
}
this.label.string = text;
}
/**
* 设置语言key
*/
public setLanguageKey(key: string) {
this.languageKey = key;
this.updateText();
}
/**
* 设置文本参数(用于替换文本中的占位符)
* @param params 参数对象,如 {name: "玩家", score: 100}
*/
public setParams(params: { [key: string]: any }) {
this.params = params;
this.updateText();
}
/**
* 添加或更新单个参数
*/
public setParam(key: string, value: any) {
if (!this.params) {
this.params = {};
}
this.params[key] = value;
this.updateText();
}
/**
* 清除所有参数
*/
public clearParams() {
this.params = null;
this.updateText();
}
/**
* 手动刷新文本
*/
public refresh() {
this.updateText();
}
/**
* 获取当前的语言key
*/
public getLanguageKey(): string {
return this.languageKey;
}
/**
* 设置默认文本
*/
public setDefaultText(text: string) {
this.defaultText = text;
this.updateText();
}
}