引子
接了个任务,有用户在用英文版,工具要做适配。之前的工具是用ArcGISPro 的Addin来实现的插件,目标也就是这样了:
- 界面:中文 + 英文
- 切换方式:跟随Pro的语言切换,自动变换
动态库的多语言支持好说,用资源字典或者资源文件,都是可以的。为了少改代码,我选择了后者。
本以为抽取了UI和日志中的字符串资源,就OK了,不过测试的时候,发现Config.daml中也有一些字样,比如标题、描述。那这些要怎么做呢?
先说说Pro 的本地化的实现方式
对 ArcGIS Pro的Addin来说,本地化是两套独立通道:
通道 1 —— 代码和 XAML 里的字符串
走 .NET 的标准卫星程序集:
Properties/Resources.resx(英文中性)Properties/Resources.zh-CN.resx(中文卫星)- XAML 用
{x:Static prop:Resources.Key},C# 用Properties.Resources.Key - 运行时按
CurrentUICulture决定加载哪个zh-CN/geoscene.resources.dll
通道 2 —— DAML的引用机制
DAML 是 Pro 的声明式配置文件(XML)。它里面的 caption等属性,不能用 {x:Static} 绑定(社区里有人试过,确实不生效)。Esri 的官方做法是:给每种语言配一个 Config.<culture>.daml 文件,框架自己按区域加载,加载不到就回退 Config.daml。
我当时也建了 Config.zh-CN.daml,和英文 Config.daml 一一对应,caption 全翻译成了中文。看起来齐活了。
DAML 不切换
测试跑起来,但是没有达到预想的效果。界面UI跟着变了,但是daml设定的内容没切换。
看起来,没有预想的那么顺利。
排查
配置项和普通 dll 不一样。它不是散文件,而是打包成一个 .proConfigX。Pro自己的多语言包,是在对应的语言目录里,多一个daml,而打包的结构却不是这样。我决定直接看产物。
看 build 输出
bin/Debug/net10.0-windows7.0/x.proConfigX
bin/Debug/net10.0-windows7.0/zh-CN/x.resources.dll ← 中文包
这个结构是没什么问题的。
拆开瞧瞧
以zip形式查看.proConfigX :
Config.daml ← 英文(中性)
Install/zh-CN/x.resources.dll ← 中文 resx生成
没有 Config.zh-CN.daml。 估计问题就在这了。
5. 修复 + 验证
比对了一下和Config.daml的区别,它的生成操作是内容,我之前新建选的是资源。改了一下生成操作为内容,重新构建就OK了,Config.zh-CN.daml也进入了.proConfigX。
细究一下为什么会有这种差别。构建完成后,pro是依赖target任务来进行打包的。其中有一步操作,是将content内容进行拷贝,再调用压缩执行,所以要保证需要打包的文件进入该目录。算是小坑了,不要乱改生成操作的类型。
浙公网安备 33010602011771号