怎么实现不同语言用不同的字体风格

实现字体风格之间切换,一个个去改label的话太麻烦了,有没有全局的更改字体格式的。

写一个类继承Label,拓展一个更换全局字体的接口

简单改下LanguageData 就行了

import * as i18n from './LanguageData';

import { _decorator, Component, Label, RichText, Font } from 'cc';
const { ccclass, property, executeInEditMode } = _decorator;

@ccclass('LocalizedLabel')
@executeInEditMode
export class LocalizedLabel extends Component {
    label: Label | RichText | null = null;

    @property
    key: string = '';

    @property
    refreshOnEnable: boolean = true;

    onLoad() {
        if (!i18n.ready) {
            i18n.init('zh');
        }
        this.fetchRender();
    }

    onEnable() {
        if (this.refreshOnEnable) {
            this.fetchRender();
        }
    }

    fetchRender() {
        let label: Label | RichText = this.getComponent(Label);
        if (!label) {
            label = this.getComponent(RichText);
        }
        if (label) {
             this.label = label;
             this.updateLabel();
            return;
        }
    }

    updateLabel() {

         this.label && (this.label.string = i18n.t(this.key));
         let font = i18n.getFontName();
        if (!font || font.length < 1) return;
         globalThis.gameManager.resMgr.loadFont("textures/font/" + font, (e, font: Font) => {
            if (e) return;
                try {
                this.label.font = font;
            } catch {

            }

        })
    }
}

然后是在需要用到的地方调用这个接口是吗

i18n上有这个getFontName()方法吗

没,自己写一下

不是很懂具体实现过程,刚上手cocos,请问你项目中有用到吗,可以看看实现过程吗。

这个东西思路其实很简单,就是使用cocos自己的i18组件,在i18组件在赋值时加一个字体设置,getFontName 是获取当前语言的字体,我写在了LanguageData文件中.修改的代码上边给你了.

这个已经很清楚了,如果还不清楚,可以不要着急去改代码,先把i18 的代码看懂,看懂i18的那几个ts文件都有什么用,再去看怎么改的就很简单了.

export function getFontName() {

    const win: any = window;

    let data = win.languages[_language];

    return data["FONT"];

}

好的,谢谢你