无法从Windows Phone 8.1访问.net 4.5 PCL中的本地化资源

本文关键字:PCL 资源 本地化 net 访问 Windows Phone | 更新日期: 2023-09-27 18:18:37

我在访问。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

无效参数

复制:

  1. 克隆库https://github.com/konradbartecki/WP81-ResourceBug
  2. 设置WP8.1为启动项目
  3. 部署到设备

在模拟器上工作正常,但在部署到真实设备时不起作用

无法从Windows Phone 8.1访问.net 4.5 PCL中的本地化资源

不幸的是,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");