import { _decorator, Component, Label } from 'cc'; import { I18nManager } from '../manager/I18nManager'; const { ccclass, property, executeInEditMode } = _decorator; @ccclass('LocalizedLabel') @executeInEditMode export class LocalizedLabel extends Component { private label: Label | null = null; @property({ visible: false }) private _key: string = ''; @property({ displayName: 'Key', tooltip: '多语言翻译键值' }) get key() { return this._key; } set key(value: string) { this._key = value; this.updateLabel(); } onLoad() { // 确保 I18nManager 已初始化 if (I18nManager.instance.ready) { this.fetchRender(); } } /** * 获取Label组件并更新文本 */ fetchRender() { if (!this.label) { this.label = this.getComponent(Label); } if (this.label) { this.updateLabel(); } else { console.warn(`LocalizedLabel: No Label component found on node ${this.node.name}`); } } /** * 更新标签文本 */ public updateLabel() { if (!this.label || !this._key) return; const i18nManager = I18nManager.instance; const translatedText = i18nManager.t(this._key); if (this.label.string !== translatedText) { this.label.string = translatedText; } } /** * 手动设置翻译键值并更新文本 */ public setKey(key: string) { if (this._key !== key) { this._key = key; this.updateLabel(); } } }