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

3

我在针对.NET 4.5的可移植类库中访问本地化字符串资源方面遇到了麻烦。

我允许用户在第一页上选择语言,并在后续页面上提供本地化体验。我试图通过使用代码获取资源来实现这一目标。

MyTextBloxk.Text = PasswordResetMethod_Page.Title;

PasswordResetMethod_Page是从.resx自动生成的类

在WP 8.1模拟器上一切正常,但是当我尝试部署到实际设备时,我遇到了以下错误:

错误: DEP6810: MdilXapCompile.exe失败,错误代码1004。更多细节请参阅日志文件'C:\Projects\WP81-ResourceBug\ResourceBugRepro.WP81\obj\Debug\MDIL\MDILXapCompileLog.txt'

错误:编译筛选器指定了不存在的文件:C:\Projects\WP81-ResourceBug\ResourceBugRepro.WP81\obj\Debug\MSIL\ar\ResourceLib.resources.dll

无效的参数

复现步骤:

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

在模拟器上可以正常工作,但在实际设备上部署时无法工作。

1个回答

3
很遗憾,Phil Hoff博客上描述的解决方法对我并没有起到很好的作用。我已经开发了自己的解决方法。原来,如果您只使用.resx文件存储字符串值,则可以轻松将其转换为.resw。

所以我正在自动将所有来自PCL的.resx文件转换并放置在Windows Phone 8.1项目中的本地结构化文件夹中,并使用我编写的此工具在每个构建中刷新它们。

https://github.com/konradbartecki/ResxHell

然后,我可以像这样轻松地从代码中访问我的字符串资源。

var resourceLoader = new ResourceLoader();
var localizedText = resourceLoader.GetString("MyCustomReswFile/MyCustom");

为了实现良好的绑定,我最终创建了ValueConventer和小型本地化辅助类,请查看此代码片段:从.resw文件中进行绑定示例

使用它,您可以在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"); 该代码用于从指定的自定义资源文件中获取本地化字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接