cocos creator教程:框架 - 多语言
【muzzik 教程】:框架 - 多语言
此处仅谈思想,代码后续会发布
多语言需要解决的问题
-
文本、图片不同语言之间的动态切换
-
多状态节点(不同语言间节点属性可能不同、如位置、缩放、layout 排版等...)
-
http 远程配置
-
缺少配置可由动态翻译替换
-
可导出表格方便翻译人员配置
语言配置
# 配置文件类型
一般分为 json 和 ts 两种类型,为了类型提示及加载方式这里选择为 ts 文件,ts 文件应该提供多语言键的提示,避免动态使用时多语言键错误 vscode 无提示
# 语言配置单位
- 项目
以项目配置的多语言可以轻松的实现 热更、远程配置、导表,
但是灵活性不足,如果模块删除后其内使用的配置很难清理,容易形成配置垃圾
- bundle
和项目配置一致
- 模块
远程配置、导表都被分割为了单个模块,不能一起配置,比较麻烦
但灵活性较好,不易形成配置垃圾
这里我选择的配置实现方式是模块类型,因为我自己当前项目使用的是 bundle 类型,中小项目,但也感觉堆积了很多配置垃圾,无从清理...
使用方式
- 顶层配置应该由 全局配置、bundle配置 组成,这两种配置都可以作为公共配置使用
- 模块使用的配置最好都由自己包含,不要去依赖除公共配置外的模块配置、否则依赖配置的变更会影响到当前模块
功能讲解
1. 文本、图片不同语言之间的动态切换
分为两个配置,文本和图片多语言组件
- 管理类:language_manage
- 文本:language_label
- 图片:language_texture
- 基类:language_base
language_label 和 language_texture 都继承于 language_base
# 职责
language_manage
多语言配置的添加、删除、获取
提供语言切换接口并发送事件
language_base
- 提供配置类型选择
配置类型也就是模块类型配置的标识,可以用模块名来实现,但是必须 保证不能重复
考虑到模块众多、所以必须提供模糊搜索功能
- 提供多语言键的选择
多语言文本、图片的键
language_label
提供文本参数的配置,多语言文本参数必须确保的信息有:参数下标(不同语言的语序可能不同)、标记(用于识别参数范围),例如
{0}、$0
,{}
和$
为标记,0 则为参数下标动态翻译:不存在对应语言键的数据时使用,国内可以使用百度、有道,国外可以使用谷歌、必应
内容更新:语言切换事件、onLoad(初始化)、配置类型变更、多语言键变更
language_texture
- 内容更新:语言切换事件、onLoad(初始化)、配置类型变更、多语言键变更
2. 多状态节点
不同的语言间,美术效果图上多语言的展示位置、顺序可能会不一致,所以需要多状态节点用于展示
# 实现方式
我们需要尽可能的实现兼容、避免一次版本升级导致故障、所以保存属性数据的方式直接排除、直接使用节点树存在的节点数据、这意味着 n 个状态需要 n 个节点
# 职责
language_node
提供属性面板节点列表,列表项需要包含语言类型、节点两个属性
内容更新:语言切换事件、onLoad(初始化)
提供公共属性 state_node (状态节点)用于外部使用
3. 配置更新
配置一般通过热更完成、但也可通过 http 远程添加配置来实现
# 导表方式
使用插件使用,下面是功能描述
- 导出单张表,所有配置合并
- 导出模块表,每个配置单元(module)生成一张表
- 导入单张表、模块表
本地化语序适配
不同国家语言的语序可能并不一致,如果是从右往左的语序,我们直接使用 str.replace 方式替换参数后会导致语序错误
可以使用 Unicode 双向通用格式 解决
例如从右往左的语序,只需要在前后拼接 \u202B
Unicode 码就可防止语序错误,例:
let str = 头字符 + `\u202B 你好 \u202B` + 尾字符;
本文来自博客园,作者:Muzzik,转载请注明原文链接:https://www.cnblogs.com/muzzik/p/17020877.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步