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

【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"
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值