【问题标题】:Unable to access localized resources in .NET 4.5 PCL from Windows Phone 8.1无法从 Windows Phone 8.1 访问 .NET 4.5 PCL 中的本地化资源
【发布时间】:2015-10-21 14:41:57
【问题描述】:

我无法访问面向 .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. 部署到设备

在模拟器上运行良好,部署到真机时无法运行

【问题讨论】:

    标签: c# localization windows-runtime windows-phone-8.1 portable-class-library


    【解决方案1】:

    不幸的是,on Phil Hoff blog 中描述的解决方法对我来说效果不佳。 我已经开发了自己的解决方法。事实证明,如果您使用 .resx 文件仅存储字符串值,那么您可以轻松地将它们转换为 .resw。

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

    https://github.com/konradbartecki/ResxHell

    然后我可以通过这样的代码轻松访问我的字符串资源

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

    为了更好的绑定,我最终创建了 ValueConventer 和小型本地化帮助器类,看看这个要点:Binding from .resw files example

    使用它,您可以在您的 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");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多