一次 ArcGISPro Addin项本地化的排查实录

Posted on 2026-09-08 19:05  云起  阅读(9)  评论(0)    收藏  举报

引子

接了个任务,有用户在用英文版,工具要做适配。之前的工具是用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内容进行拷贝,再调用压缩执行,所以要保证需要打包的文件进入该目录。算是小坑了,不要乱改生成操作的类型。

参考

为 .NET 应用创建卫星程序集
ESRI指南,ProConcept-Localization
ESRI官方示例

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3