本地化框架问题记录&如何使用.md 30 KB

本地化框架问题记录&如何使用

文本本地化相关(2.8)

1.脚本公开字段中文文本

UITipsDialogController提示文本

Copyable提示文本

局内角色 ,可交互对象触发提示文本

...

2.脚本内中文tips文本

3.保存引用Text组件Format文本

4.嵌套prefab(内容跟源prefab不一致)

未开启定位服务,位置权限或附近没有其他玩家

未开启位置权限或附近没有其他玩家

5.当文字未设置水平溢出或垂直溢出导致文本显示不全

6.树形中文文本导致其他国家语言显示异常

音频本地化相关(2.8)

目前游戏内需要本地化的音频类型有两种:1.引导 2.角色旁白

但是他们播放的方式却不相同

1.局内新手引导

音频资源配置在数据表里 局内动态加载音频资源进行播放(IngameNewbieDirection.csv)

处理方式:

统一接口 支持多种方式传参 也是以后播放语言音频的接口

2.剧情新手引导

脚本持有音频资源引用进行播放

处理方式:

挂载本地化组件 代码获取本地化组件下面的key去播放(IsAutoPlay选项要勾掉)

3.普通角色旁白(角色出场)

音频资源持有在角色动作事件上面 通过触发事件的方式进行播放

处理方式:

通过音频名字去播放音频(需要手动填写)

4.高级角色旁白(角色出场,表情动作)

音频资源配置在空的Prefab上面 通过角色挂件的方式 持有在数据表里 动态加载播放(IngameEmotion)

处理方式:

挂载本地化组件(默认勾选IsAutoPlay) 并且把AudioSource组件PlayOnAwake属性取消勾选

导入导出(文本)相关(2.8)

1.Live2DDesc表一些颜文字未识别

2.DropItemTable表括号不规范

3.两个以上中文空格(给到的翻译要不没空格 要不只有一个空格 导致全词匹配不进来)

4.部分套装翻译不一致

5.特殊未识别unicode编码(\uF075,\uF0B2,\uF06E等)

本地化组件释义(2.8)

1.LocalizedText:本地化Text组件

TextKey:文本key

IsUpdateValue:控制本地化组件是否生效(多用于动态文本)(不影响字体)

编辑器按钮:

切换中文(英文,泰文等):在有相关翻译的情况下 辅助查看文本是否超框等(编辑完一定要切换到中文)

生成文本key:随机一个文本key且不会跟文本表key值冲突

添加key到文本表:把当前key及对应文本添加到文本表(key必须符合规范才可添加)(多用于嵌套预设)

更新文本表文本:更新文本表当前key值对应的文本

生成文本key并且添加到文本表:字面意思 一键操作且自动分割单张文本表

2.LocalizedAudioClip:本地化音频组件

AudioClip:当前本地化的音频(需要手动拖拽赋值)

LoadPathKey:默认音频名字(自动识别当前音频无需手动填写)

IsAutoPlay:是否自动播放音频(默认自动播放)(去掉勾选多用于脚本获取当前组件 通过key去播放)

3.LocalizedRawImage:本地化RawImage组件

LoadPathKey:默认图片名字(自动识别当前图片无需手动填写)

4.LocalizedImage:本地化Image组件

LoadPathKey:默认图片名字(自动识别当前图片无需手动填写)

5.LocalizedMeshRenderer:本地化MeshRenderer组件(本地化材质球上的贴图)

LoadPathKey:默认材质球贴图名字(自动识别当前贴图无需手动填写)

Index:需要本地化的材质球Index(可能有多个材质球 默认第一个材质球)

6.LocalizedSpriteRenderer:本地化SpriteRenderer组件

LoadPathKey:默认图片名字(自动识别当前图片无需手动填写)

7.LocalizedParticleRenderer:本地化ParticleSystem组件(本地化Renderer属性材质球上的贴图)

LoadPathKey:默认材质球贴图名字(自动识别当前贴图无需手动填写)

8.LocalizedUIStateImage:本地化UIStateImage组件

LoadPathKeys:默认图片名字(自动识别当前元素无需手动填写)

刷新:当有元素变更时需要手动刷新一下(可优化)

9.LocalizedUIStateRawImage:本地化UIStateRawImage组件(同LocalizedUIStateImage组件)

本地化窗口释义

默认常用功能向展开状态 一共7个功能块

1.导出图片(查找路径未配置)

导出图片:配置路径即可导出目录下所有图片(导出位置自己选择)

2.导出音频(查找路径未配置)

导出音频:配置路径即可导出目录下所有音频(导出位置自己选择)

3.导出文本

导出预制体Text文本:导出目录下所有预制体UIText组件文本

导出场景Text文本:导出场景下所有UIText组件文本

导出数据表文本:导出所有数据表文本

导出数据表&动态文本:导出数据表+动态文本表文本

一键导出预制体,场景,数据表,动态文本:导出预制体UIText+场景UIText+数据表+动态文本表文本

4.导出文本并且添加本地化组件(系统key)(用于第一次导出)(输出文本表)

导出预制体文本并且添加本地化组件

导出场景文本并且添加本地化组件

一键导出预制体,场景,数据表文本并且添加本地化组件

5.添加本地化组件(自定义key)(根据现有key生成不同的key)(自动添加新文本到文本表)(不导出文本表)

添加预制体文本本地化组件

添加场景文本本地化组件

添加场景&预制体文本本地化组件

一键添加本地化组件并且更新数据表

6.功能向

1.全局查找属性变更的嵌套Prefab:查找跟源预设不一样的嵌套预设

输出:PreabPropertyModifications.csv

2.全局查找预设上挂载脚本公开出来的string字段

输出:预设上脚本字段中文文本.csv

3.全局查找含有中文文本的脚本

输出:脚本上有中文的文本.csv

4.全局查找脚本内的Format字段

输出:脚本上有XXFormat字段文本.csv

5.全局查找挂载多个LocalizedText组件的预设对象

6.全局查找挂载多个LocalizedText组件的场景对象

7.删除文本总表里预制体文本上没有用到的key

8.删除文本总表里场景文本上没有用到的key

9.删除文本总表里预制体和场景文本上没有用到的key

10.根据规则动态翻译一些文本:主要是DropItemTable表文本

现有规则:

主要是限时道具文本

当有多种语言的时候需要代码里手动添加相对应的限时翻译

7.常用功能向

1.从文本表生成未翻译文本表:从文本表生成没有被翻译的文本表(输出:NoMatchText.csv)

2.从未翻译的文本表里提取需要翻译的文本:默认一份不翻译的文本(不翻译文本.csv)(输出:需要翻译文本)

3.往中英文字典表里添加新的翻译词汇(新翻译词汇表:新增已经翻译文本.csv)

4.从文本表里往英语翻译字典表里添加新的词汇

5.刷新中英文字典表翻译(重新翻译的文本表:重新翻译的文本.csv)

6.更新数据表文本(含动态文本):重新生成文本表数据表文本

7.更新动态文本:重新生成文本表动态文本

8.更新翻译变更文本

9.生成单个语言文本表:从文本总表生成各个语言分表

Assets菜单下本地化功能

1.添加_cn标识:对象重命名添加cn后缀(支持单个文件 单个文件夹)

2.添加_en标识:对象重命名添加en后缀(支持单个文件 单个文件夹)

3.添加图片到文本表:添加图片到文本表(目前只支持key+路径)(支持单个文件 单个文件夹)(待完善)

4.添加图片到文本表(覆盖添加):覆盖添加的意思是不会考虑key值冲突(覆盖当前key的内容)

5.添加音频到文本表

6.添加音频到文本表(覆盖添加)

7.添加场景或预设LocalizationText组件:给单个场景或预设添加本地化组件

8.删除场景或预设没有用到的key:删除单个场景或预设没有用到的key

操作流程

1.一个未添加任何本地化组件的空工程

目标:

给所有的UIText组件添加本地化组件 找出所有文字图片 找出所有音频文件

实现:

执行【一键导出文本表并且添加本地化组件】(文本表导出位置自己选择)

结果:

场景,预制体UIText组件全部加上了本地化组件 且输出了一份游戏中文文本表

2.当工程里存在本地化组件且有游戏内中文文本表

目标:

给未添加本地化组件的场景或者预制体UIText组件添加本地化组件

实现:

1.当数据表或者动态文本表未发生任何变化时

执行【添加场景&预制体文本本地化组件】

2.当数据表或者动态文本表发生改动时

执行【一键添加本地化组件并且更新数据表】

结果:

场景,预制体UIText组件全部加上了本地化组件 并且新文本更新到了文本表(当翻译字典里有该文本的释义文本表里会自动补全翻译) 单张文本表也会自动分割好

需提交的内容:

1.添加了所有本地化组件的对象

2.文本总表,单张文本表

3.输出/输入翻译表

输出目标:

输出一份未翻译的文本表给到翻译人员

实现:

原理:基于最新的文本表里的未翻译的文本生成一份未翻译文本表

1.当文本表不是最新的情况下,同时又不知道新文本应用于哪些地方

执行【一键添加本地化组件并且更新数据表】来生成最新的文本表

2.当文本表不是最新的情况下,知道新文本应用于哪些地方

数据表不是最新的:执行【更新数据表文本(含动态文本)】

动态文本表不是最新的:执行【更新动态文本】

预制体文本不是最新的:执行【添加预制体文本本地化组件】

场景文本不是最新的:执行【添加场景文本本地化组件】

3.当文本表最新的情况下

1.执行【从文本表生成未翻译文本表】会得到一份完整的未翻译文本表(包含临时文本以及不用翻译文本)

2.执行【从未翻译的文本表提取需要翻译的文本表】原理是有一份包含临时文本以及不用翻译的文本表 从未翻译的文本表把这些文本剔除掉

注意点:

1.需要时刻关心未翻译表里有那些内容 是否真的可以不用翻译(最好的做法是全翻译掉 减少维护成本)

结果:

这个时候会输出一份未翻译的文本表

开发流程

1.无需添加一个UIText组件添加一个本地化组件

等预设整体拼接完成后,在Asset目录下,选中当前预设,执行【添加场景或预设LocalizationText组件】一键给当前预制体添加本地化组件(建议当有2个以上UIText组件需要添加本地化组件 使用一键添加)

当然也可以添加一个UIText组件添加一个本地化组件

可能遇到的问题:

1.当UIText组件文本发生变化时

需要执行【更新文本表文本】

结果:

同时刷新文本总表和单张表下当前key值的文本

2.当UIText组件被删除时

在Asset目录下选中当前预制体 执行【删除单个场景或预设没用到的key】

结果:

同时删除文本总表和单张表该预设下没用到的key加文本

2.当有需要本地化的图片字或者音频

在Asset目录下选中当前图片或者音频需执行【添加图片或音频到文本表】

结果:

当前图片或音频的路径会自动保存到文本表里留作标识 用于后面提翻译的时候方便查找

开发规范

1.不允许在脚本公开string字段上面直接赋值

2.不允许保存引用Text组件Format文本

3.不允许脚本内直接编写中文tips

4.不允许使用树形样式中文文本

5.不建议嵌套prefab内容跟源prefab不一致,尤其是文本内容

因为一键添加本地化组件只会给源prefab上面添加不会给嵌套prefab添加

当嵌套prefab内容跟源prefab文本内容不一致的情况下 就会默认读取源prefab文本内容

这个时候就需要手动给嵌套prefab的文本重新生成一个key

最好的做法是不一样的文本内容代码里根据不同场景动态赋值

6.建议Text至少设置一个overflow 防止其他国家文本显示不全

7.建议少用两个或多个空格文本

遗留内容

切换国内开发环境未设置语言

优化编辑器模式下读取总表文本 不读取分表文本

优化文本key值

单张表key值 转hash (重复key 优化)

prefab上不保存资源引用

分本总表一式两份