当前位置:网站首页>【ZeloEngine】本地化流程/ImGui中文化

【ZeloEngine】本地化流程/ImGui中文化

2022-06-13 03:43:00 zoloypzuo

【ZeloEngine】本地化流程/ImGui中文化

在这里插入图片描述

结论

填了中文化和icon的坑(2021/12/19开的坑)

  1. ImGui编辑器界面中文化
  2. 一个所见即可译的完全自动化翻译流程
  3. 【坑】中文字符集范围
  4. 【坑】icon font和id机制
  5. 【坑】屏蔽节点

本地化流程

先做了一版标准流程v1,然后做一下优化v2

v1本地化流程

【ZeloEngine】本地化流程/ImGui中文化_哔哩哔哩_bilibili

v1的标准流程是:

  1. 我打开游戏,看到“Open all”是英文,没有翻译
  2. 我去代码里搜"Open all",找到字符串,用gettext函数包一下,转换成中文
  3. 去.pot添加"Open all",然后翻译.po
  4. 游戏中显示中文

v2本地化流程

Q:本地化是什么?
A:所有用户可以看到的文本都应该是中文的

所以我们可以去监听ImGui里所有会显示出来的文本参数,在ImGui实现上包一下gettext,并且输出运行时所有遇到/看到的文本,自动更新翻译模板文件.pot

直接修改imgui.cpp风险还是太大了,imgui仍然在更新中

好在我们有Lua的脚本绑定层,算是一层封装,且所有imgui逻辑都是在Lua写的,在这里改就好了

v2的流程是:

  1. 我打开游戏,看到"Open all"
  2. 关闭游戏,自动刷新.pot,新增"Open all"
  3. 翻译.po
  4. 游戏中显示中文

优化掉了

  • 观察哪个文本没有翻译
  • 去代码里搜索key并改代码
  • 在.pot里添加key

完全自动化的美好愿景,往往会被各种corner case打破,让自动化变成一个处理各种奇怪情况的黑盒

v1标准流程并非完全不好,实现简单,没有BUG,完全可控

中文字符集范围

GetGlyphRangesChineseSimplifiedCommon is misleading · Issue #2882 · ocornut/imgui

imgui里的两个范围Common和Full都有问题

  1. Common太小,很多字都是乱码
  2. Full太大,实测额外消耗300MB内存

issue里的那一套,实测100MB,也没有乱码,先用着吧

label ID & icon font

直接用ImGui的接口gettext的问题是,imgui有类似my_name##1的ID机制

icon font是个好东西,一般的icon做法是小图片,icon font是把icon当作字来画的,类似emoji

但是一个串里面有icon就很麻烦,需要做一个简单的parse,识别开头的icon和结尾的id,把正文裁剪出来,翻译好再拼回去

"%icon% my name ##1"
=> "%icon%" gettext("my name") "##1"
原网站

版权声明
本文为[zoloypzuo]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zolo_mario/article/details/125248992