cocos3.x终极多语言解决方案(h5)

对于常用的文本、图片、骨骼动画、预制件,进行多语言处理
h5自适应和国际化.zip (3.9 MB)
打包后预制件加载资源未处理。。。

目前对预制件的开发语言无法做到不加载,打包后prefab结构发生变化,无法解析所绑定的所有节点uuid,只能在编辑器开发时做到不加载,大佬们有好的解决方案吗

assetsOverrides

有示例吗大佬,我在整理我写的代码,等下打包传这里面

https://forum.cocos.org/t/topic/157793

这个看了,多语言部分太过于复杂,对于预制件的资源还是全加载了

预制体本身该什么语言还什么语言,加载后一行代码就可以切换语言了

预制件的资源也按照多语言进行加载,比如开发使用英语,在使用时是什么语言就加载什么语言,但是开发使用的英语必须是使用英语才进行加载,默认不进行加载这些开发使用的资源

两个方案
1、预制体里多语言的差异也在图片、文字、spine这些素材,直接对这些东西做多语言切换就行了,没必要做不同的预制体来对应不同语言
2、参考demo里解决spine多语言的方法,让预制体也能跟着配置文件自动切换多语言

h5自适应和国际化.zip (3.9 MB)
不是不同语言对应不同的预制件,而是预制件不要加载开发的素材(图片、骨骼动画),你看这个代码,编辑器启动已经满足这个需求,打包后还是加载了。。。

打包后只是在你包里面,你不load这个bundle,编辑器里又没有任何用到这个bundle资源的地方,就不会加载。
把所有用到这个bundle里资源的地方统统置空,进游戏后才读取bundle,然后自己用代码来给Sprite和Spine的data赋值

你可以看network,应该按多语言进行请求才对,而不是没用到的资源也请求过来,包括开发时预制件中的资源

哦,我看懂你意思了,那游戏中要秒切语言,不是每次都要重新从服务端拉一下么,谁想出来的操作。。。

会有一种需求是这样,做h5小游戏,语言是外部传入的,比如index.html?lang=zh,那我进入加载资源的页面只会加载中文的资源,但是我开发的时候使用的是英语的,不能加载开发资源,因为这样如果预制件使用了很多图,进入后会加载双倍资源(开发资源+用户传入语言资源)。。。

加个不含任何语言元素的启动场景能否解决问题?
因为我在我的游戏逻辑中,第一步就是确定要使用哪种语言,然后加载对应语言的string.json,其他资源如图片预制体之类的,本身就是用到时根据语言环境按需加载的。

资源自始至终只有一份,你要做的是一键切换
比如label的string,就用配置里的新语言内容替换
sprite和spine,就用新语言的资源给data赋值

目前的问题就是预制件如何根据语言加载不同的资源(不加载预制件中默认的使用资源!)

你说的没问题,现在的问题是预制件的默认资源不需要加载,只加载指定语言的资源,你可以下载我传的demo看看,开发阶段没问题,打包后就不行,看network请求的图片资源就明显的看出来,预制件默认资源加载的问题

额,两个方案:

  1. 预制件区分语言环境,prefab_zh里使用中文资源,prefab_en里使用英文;
  2. 开发的时候拖入资源,开发完把资源置空 :rofl:

1、目前实现了替换,但是默认的会进行加载,所以除了默认语言,选其他语言时会加载双倍资源(预制件默认资源+用户选择语言资源),我的想法是看看有没有大佬已经处理过这个问题,基于这个方案来优化资源加载
2、如果置空我需要在代码中对资源赋值,这样增加了工作量,一个预制件使用了很多资源就很头痛,除非一开始就不使用预制件,直接用代码实现整个布局(也就是不使用编辑器直接拖拽)