当前位置: 首页 > news >正文

oops-framework框架 之 多语言设置文本、精灵和骨骼动画

引擎: CocosCreator 3.8.0

环境: Mac

Gitee: oops-plugin-excel-to-json

注: 作者dgflashoops-framework框架QQ群: 628575875


简介


作者dgflashoops-framework的框架中提供了多语言,主要用于对文本、图片、骨骼动画的支持。

不同国家内容的展示,会进行分门别类的标记,比如:

  • zh 代表中文
  • en 代表英语

框架提供了两种方式用于配置多语言内容:

  • …/resources/language 配置json、spine、texture等不同文件目录,设置不同语言的具体信息
    请添加图片描述

  • excel/Language.xlsx 配置多语言的文本内容
    请添加图片描述

注: 针对于excel的使用可参考博客: oops-framework框架 之 Excel转Json

在CocosCreator中使用多语言只需要在属性检查器 中增加对应的多语言组件即可。
请添加图片描述

文本设置如下:
请添加图片描述

精灵设置如下:
请添加图片描述

骨骼动画的设置如下:
请添加图片描述

注: 设置文本、精灵、骨骼动画的关键字段均为Data ID

在添加对应的多语言组件后,如果语种变换,框架会自动下载对应的语言包内容,并进行页面更新。


Language


作者dgflash提供的oops-framework框架中, 多语言的主要入口是:

// ../oops-plugin-framework/assets/core/Oops.ts
export class oops {/** 多语言模块 */static language: LanguageManager;
}

多语言的初始化主要在项目启动加载必备资源中执行的,主要代码如下:

// ../initialize/bll/InitRes.ts
entityEnter(e: Initialize): void {var queue: AsyncQueue = new AsyncQueue();// 加载自定义资源this.loadCustom(queue);// 加载多语言包this.loadLanguage(queue);// ...queue.play();
}// 主要用于加载多语言对应的字体文件,比如ttf等
private loadCustom(queue: AsyncQueue) {queue.push(async (next: NextFunction, params: any, args: any) => {oops.res.load("language/font/" + oops.language.current, next);});
}// 主要用于下载对应语种资源
private loadLanguage(queue: AsyncQueue) {queue.push((next: NextFunction, params: any, args: any) => {// 从本地存储中获取语言,如果为空则默认中文let lan = oops.storage.get("language");if (lan == null || lan == "") {lan = "zh";oops.storage.set("language", lan);}// 设置语言包路径oops.language.pack.json = oops.config.game.languagePathJson;oops.language.pack.texture = oops.config.game.languagePathTexture;// 加载语言包资源oops.language.setLanguage(lan, next);});
}

框架很好的为我们提供了多语言的初始化及资源的下载相关。

oops.language的主要实现是LanguageManager,它对外提供的主要参数或接口:

参数或接口说明
languages设置或获取支持的语言列表,比如: [“zh”, “en”]等
default设置默认语言
current获取当前语言
pack获取当前语言包,主要包括Json、texture、spine等资源目录相关
isExist()检测指定语种是否存在
setLanguage()设置当前语言,语言包下载结束后,会有回调,true表示成功; false表示失败
getNextLang()获取下一个语言
getLangByID()获取langId获取语言的内容,用于文本
loadLanguageAssets()下载指定语言的资源,包括Json、texture、spine等
releaseLanguageAssets()释放不需要的语言包资源

该管理类,主要管理的文件有:

  • LanguageData 用于根据languageId 获取文本对应语种的内容
  • LanguagePack 用于下载或释放对应语种的纹理、动画、Json、Excel表内容
  • LanguageLabel/LanguageSpine/LanguageSprite 多语言文本、骨骼动画、精灵组件,既然能在属性检查器中加载,他们都继承于Component

LanguageData主要用于根据文本设置的多语言字段获取内容,主要实现代码如下:

export class LanguageData {/** 当前语言 */static current: string = "";/** 语言JSON配置数据 */static json: any = {}/** 语言EXCEL中的配置数据 */static excel: any = null!;/*通过多语言关键字获取语言文本,注意:1、先获取language/json中的配置数据,如果没有则获取config/game/Language配置表中的多语言数据2、config/game/Language配置表可选使用,不用时不创建同名配置表即可3、config/game/Language配置表使用oops-plugin-excel-to-json插件生成*/public static getLangByID(labId: string): string {var text = this.json[labId];if (text) {return text;}if (this.excel) {var record = this.excel[labId];if (record) {return record[this.current];}}return labId;}
}

注:可爱的作者dgflash已经告知获取内容的方式,因此看个人习惯,配置Excel表或Json格式都支持


使用示例


作者dgflash针对于多语言已经在oops-framework框架中做了有效的处理。在项目中我们可能需要做的事情就是:

  1. 通过配置,设置项目支持的语言列表
  2. 切换语言,并移除不需要的语言

针对于第一个问题,需要打开: resources/config.json, 新增数据:

{"config": {"version": "1.0.5","package": "com.oops.game","localDataKey": "oops","localDataIv": "framework","httpServer": "http://192.168.0.150/main/","httpTimeout": 10000,"frameRate": 60},"languageList": ["zh", "en", "tw"],   //   "language": {"type": ["zh","en"],"path": {"json": "language/json","texture": "language/texture"}}
}

主要代码如下:

// 通过config.json自定义配置语言列表
let languageList = oops.config.game.data.languageList;
if (languageList && languageList.length > 0) {oops.language.languages = languageList;
}// 改变语种
let curLanguage = oops.language.current;
if (curLanguage !== "zh") {oops.language.setLanguage("zh", (sucess) => {if (sucess) {oops.language.releaseLanguageAssets("en");}})
}

注:如果想学习i18n的多语言,可参考博客: cocosCreator 之 i18n多语言插件的使用

再次感谢作者dgflash的分享,作者CSDN博客: dgflash CSDN

最后,祝大家学习和生活愉快!

相关文章:

oops-framework框架 之 多语言设置文本、精灵和骨骼动画

引擎: CocosCreator 3.8.0 环境: Mac Gitee: oops-plugin-excel-to-json 注: 作者dgflash的oops-framework框架QQ群: 628575875 简介 作者dgflash在oops-framework的框架中提供了多语言,主要用于对文本、图片、骨骼动…...

阿里云SLB的使用总结

一、什么是SLB 实现k8s的服务service的一种推荐方式,也是服务上云后,替代LVS的一个必选产品。 那么它有什么作用呢? 1、负载均衡,是它与生俱来的。可以配置多个服务器组:包括虚拟服务器组、默认服务器组、主备服务器…...

Python-pdf工具自制(合并、拆分、删除)

pdf工具,之前写的合并工具有点麻烦,使用PyQt5库重写合并拆分和删除指定页面的程序 实现如图: 代码: import sysimport osfrom PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QFileDia…...

23.12.9 《CLR via C#》 笔记7

第九章 参数 可选参数和命名参数 可选参数:在方法声明中为参数指定默认值,在调用方法时,如果不提供相应可选参数的值,将会使用默认值命名参数:在调用方法时通过指定参数名称来传递参数值,而不是按照参数在方…...

input、el-input输入框输入规则

一、input 只能输入框只能输入正整数&#xff0c;输入同时禁止了以0开始的数字输入&#xff0c;防止被转化为其他进制的数值。 <!-- 不能输入零时--> <input typetext οninput"valuevalue.replace(/^(0)|[^\d]/g,)"><!-- 能输入零时--> <inp…...

Qt优秀开源项目之十九:跨平台记事本Notes

官网&#xff1a;https://www.get-notes.com github&#xff1a;https://github.com/nuttyartist/notes 一.特性 1.完全基于Qt和C 2.完全开源和跨平台&#xff08;Linux、macOS、Windows&#xff09; 3.运行速度快&#xff0c;界面美如画 4.支持Markdown 5.支持使用嵌套文件夹…...

[足式机器人]Part4 南科大高等机器人控制课 Ch03 Operator View of Rigid-Body Transformation

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 南科大高等机器人控制课 Ch03 Operator View of Rigid-Body Transformation 1. Rotation Operation via Differential Equation1.1 Skew Symmetr…...

SpringBoot项目静态资源默认访问目录

SpringBoot项目&#xff1a;静态资源默认访问目录 参考博客&#xff1a;https://blog.csdn.net/weixin_43808717/article/details/118281904...

xtu oj 1255 勾股数

题目描述 勾股数是指满足a2b2c2的正整数&#xff0c;比如最有名的“勾三股四弦五”。 现在给你两个正整数,请问是否存在另外一个正整数&#xff0c;使其成为“勾股数”&#xff1f; 输入 第一行是一个整数K&#xff0c;表示样例的个数。 以后每行一个样例&#xff0c;为两个…...

【ArcGIS Pro微课1000例】0051:创建数据最小几何边界范围(点、线、面数据均可)

本实例为专栏系统文章:创建点数据最小几何边界(范围),配套案例数据,持续同步更新! 文章目录 一、工具介绍二、实战演练三、注意事项一、工具介绍 创建包含若干面的要素类,用以表示封闭单个输入要素或成组的输入要素指定的最小边界几何。 工具界面及参数如下所示: 核心…...

Oracle 怎樣修改DB_NAME

DBNEWID 是一个数据库实用程序&#xff0c;用于更改 Oracle 数据库的 DBNAME 和 DBID。可以更改 DBID 或 DBNAME 或两者。 DBNAME 是在创建数据库时指定的数据库名称&#xff0c;DBID 是创建数据库时分配给数据库的唯一编号。 以下步骤演示如何使用 DBNEWID 实用程序更改 Oracl…...

git标签的管理与思考

git 标签管理 git 如何打标签呢&#xff1f; 标签是什么? 标签 相当于一个 版本管理的一个贴纸&#xff0c;随时 可以通过标签 切换到 这个版本的状态 &#xff0c; 有人可能有疑问 git commit 就可以知道 代码的改动了&#xff0c; 为啥还需要标签来管理呢&#xff1f; …...

ESP32网络编程-OTA方式升级固件(基于Arduino IDE)

OTA方式升级固件(基于Arduino IDE) 文章目录 OTA方式升级固件(基于Arduino IDE)1、ESP32的OTA介绍2、OTA升级固件方式3、软件准备4、硬件准备5、代码实现ESP32吸引人的编程方式之一就是通过OTA方式升级固件。本文将详细介绍在Arduino IDE中升级固件。 1、ESP32的OTA介绍 O…...

力扣-151. 反转字符串中的单词

文章目录 看下去&#xff0c;你一定可以理解此题&#xff0c;写的简单易懂力扣题目解题思路函数构成1.反转函数2.消除掉多余空格函数 整体函数 看下去&#xff0c;你一定可以理解此题&#xff0c;写的简单易懂 力扣题目 给你一个字符串 s &#xff0c;请你反转字符串中 单词 …...

VSCode Keil Assintant 联合开发STM32

文章目录 VSCodeKeil AssistantUV5&#x1f947;软件下载&#x1f947;配置环境&#x1f947;插件安装&#x1f948;C/C Extension Pack&#x1f949;C/C Extension Pack介绍&#x1f949;插件安装 &#x1f948;Keil Assistant&#x1f949;Keil Assistant介绍&#x1f949;插…...

华为交换机基本配置

一、配置时间 sys ntp-service unicast-server 192.168.1.1 ntp-service unicast-server 192.168.1.2 clock timezone UTC add 8 clock timezone CST add 08:00:00 undo ntp-service disable q手动设置一个时间 clock datetime 13:43:00 2023-10-10save ysys保存&#xff01;保…...

每天一个Linux命令 -- (7)more命令

欢迎阅读《每天一个Linux命令》系列&#xff01;在本篇文章中&#xff0c;将介绍Linux系统下的more命令&#xff0c;它用于逐屏显示文件的内容。 概念 more命令是Linux系统下的文件逐屏显示命令&#xff0c;用于逐屏显示文件的内容。 命令操作 more命令的语法如下&#xff1…...

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…...

【前端设计模式】之适配器模式

适配器模式是一种常见的设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口。在前端开发中&#xff0c;适配器模式可以帮助我们解决不同框架或库之间的兼容性问题&#xff0c;提高代码的复用性和可维护性。 适配器模式特性 适配器类&#xff1a;适配器类…...

【数据结构】循环队列

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f38f;队列顺序存储的不足 &#x1f38f;循环队列的定义 &#x1f38f;设计循环队列 结语 &#x1f38f;队列顺序存储的不足 我们假设用一个可以存放为n个数据…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...