cocos creator教程:框架 - 多语言

【muzzik 教程】:框架 - 多语言

此处仅谈思想,代码后续会发布

多语言需要解决的问题

  • 文本、图片不同语言之间的动态切换

  • 多状态节点(不同语言间节点属性可能不同、如位置、缩放、layout 排版等...)

  • http 远程配置

  • 缺少配置可由动态翻译替换

  • 可导出表格方便翻译人员配置

语言配置

# 配置文件类型

一般分为 json 和 ts 两种类型,为了类型提示及加载方式这里选择为 ts 文件,ts 文件应该提供多语言键的提示,避免动态使用时多语言键错误 vscode 无提示

# 语言配置单位

  • 项目

以项目配置的多语言可以轻松的实现 热更、远程配置、导表
但是灵活性不足,如果模块删除后其内使用的配置很难清理,容易形成配置垃圾

  • bundle

和项目配置一致

  • 模块

远程配置、导表都被分割为了单个模块,不能一起配置,比较麻烦
但灵活性较好,不易形成配置垃圾

这里我选择的配置实现方式是模块类型,因为我自己当前项目使用的是 bundle 类型,中小项目,但也感觉堆积了很多配置垃圾,无从清理...

使用方式

  1. 顶层配置应该由 全局配置、bundle配置 组成,这两种配置都可以作为公共配置使用
  2. 模块使用的配置最好都由自己包含,不要去依赖除公共配置外的模块配置、否则依赖配置的变更会影响到当前模块

功能讲解

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` + 尾字符;
posted @   Muzzik  阅读(467)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起