如何通过WPF LocalizeExtension引用其他项目中的.resx本地化文件?
跨项目使用WPF LocalizeExtension集中管理本地化完全可行!
当然可行!我之前也在多项目WPF方案里用WPF LocalizeExtension做过集中本地化,你遇到的问题大概率是配置写法没搞对,我给你捋捋正确的步骤:
1. 先确认共享本地化项目的基础设置
首先要保证你的Localisation项目里的Resx文件配置正确,这是前提:
- 找到
Strings.resx(以及对应的语言版本如Strings.en-US.resx),右键属性:- 生成操作设置为
Embedded Resource - 访问修饰符设置为
Public(必须是Public,否则XAML无法访问到Resx里的资源)
- 生成操作设置为
- 确认Resx的命名空间:如果Resx在
Localisation项目的Properties文件夹下,它的命名空间应该是Localisation.Properties(可以在Resx设计器的右上角查看)
2. 正确配置XAML里的LocalizeExtension
你之前的写法问题出在DefaultAssembly和DefaultDictionary的取值上,正确的配置应该是这样:
首先在XAML根节点引入lex命名空间(如果还没加):
xmlns:lex="http://wpflocalizeextension.codeplex.com"
然后设置全局默认的Assembly和Dictionary:
lex:ResxLocalizationProvider.DefaultAssembly="Localisation" lex:ResxLocalizationProvider.DefaultDictionary="Localisation.Properties.Strings"
关键解释:
DefaultAssembly填的是共享项目编译后的程序集名称(就是你Localisation项目的名称,一般和项目名一致,不是带clr-namespace的格式)DefaultDictionary填的是Resx文件的完整命名空间+文件名(不带.resx后缀),比如你的Resx在Localisation.Properties下,文件名是Strings,所以就是Localisation.Properties.Strings
3. 验证基础引用和缓存问题
- 确保你的主项目(比如Project1)已经添加了对
Localisation项目的项目引用(不是直接引用DLL,项目引用更可靠) - 先在后台代码测试能不能访问
Localisation.Properties.Strings.YourResourceKey,如果能正常获取到值,说明程序集引用和Resx的访问权限没问题 - 清理整个解决方案,然后重新编译,有时候VS的缓存会导致配置不生效
4. 排查时的备用写法
如果全局配置还是有问题,可以尝试在单个绑定里指定完整路径,来验证是否能找到资源:
<TextBlock Text="{lex:Resx Localisation.Properties.Strings.WelcomeText, Assembly=Localisation}" />
如果这个写法能正常显示,说明全局的DefaultAssembly或DefaultDictionary配置有误,再回头检查步骤2的配置。
按照这些步骤调整后,XAML里应该就能正常引用跨项目的Resx资源了,集中管理本地化的场景完全支持~
内容的提问来源于stack exchange,提问作者aegsomweb
相关产品推荐
相关产品推荐

