我在访问。net 4.5便携式类库中的本地化字符串资源时遇到了问题。
我允许用户在第一页上选择语言,并在其他页面上具有本地化经验。我正试图通过获取资源与代码
来实现这一点MyTextBloxk.Text = PasswordResetMethod_Page.Title;
PasswordResetMethod_Page是从。resx
中自动生成的类。在WP 8.1模拟器上一切正常,但当我试图将其部署到实际设备时,我得到
错误:DEP6810: MdilXapCompile.exe失败,错误代码1004。看到日志文件项目"C: WP81-ResourceBug ResourceBugRepro.WP81 obj 调试 MDIL MDILXapCompileLog.txt"查看详细信息。
错误:编译过滤器参数指定不存在的文件:C: 项目WP81-ResourceBug ResourceBugRepro.WP81 obj 调试 MSIL ar ResourceLib.resources.dll
无效参数
复制:
- 克隆库https://github.com/konradbartecki/WP81-ResourceBug
- 设置WP8.1为启动项目
- 部署到设备
在模拟器上工作正常,但在部署到真实设备时不起作用
不幸的是,Phil Hoff博客上描述的解决方法对我来说并不太有效。我已经开发了自己的解决方案。事实证明,如果您使用.resx文件仅存储字符串值,那么您可以轻松地将它们转换为.resw。
所以我正在做的是自动转换所有的。resx文件从PCL和把它放在本地结构化文件夹在我的Windows Phone 8.1项目和刷新他们每次构建使用这个工具,我写的。
https://github.com/konradbartecki/ResxHell然后我可以很容易地从代码访问我的字符串资源,像这样
var resourceLoader = new ResourceLoader();
var localizedText = resourceLoader.GetString("MyCustomReswFile/MyCustom");
为了更好的绑定,我最终创建了ValueConventer和一个小的本地化助手类,看看这个要点:
使用它,您可以在xaml页面中执行以下操作:
//For resource in file Page.Login.resw and string ID "NotUserYet"
<TextBlock Text="{Binding ConverterParameter=Page.Login/NotUserYet, Converter={StaticResource ResString}, Mode=OneWay, Source={StaticResource ResString}}"/>
或string localizedtext = LocalizationHelper.GetString("MyCustomReswFile", "MyStringId");