设计时的 UWP 资源字符串 (.resw)

Posted

技术标签:

【中文标题】设计时的 UWP 资源字符串 (.resw)【英文标题】:UWP resource strings at design time (.resw) 【发布时间】:2018-01-25 04:00:15 【问题描述】:

我按照https://docs.microsoft.com/en-us/windows/uwp/globalizing/put-ui-strings-into-resources 的说明创建了一个.resw 文件。虽然本地化在运行时运行良好,但在设计时不显示任何文本。

目前唯一提出的解决方案似乎只适用于 Windows 8.1 应用程序:Windows store app ResourceLoader at design time

【问题讨论】:

【参考方案1】:

您提到的解决方案New Method 也适用于UWP。并且更推荐在设计时使用Data Binding。

以下类的工作方式类似于 .resw 文件 reader。如果您发送 key 参数,它将返回 key 的值。

public class LocalizedStrings

    public string this[string key]
    
        get
        
            return ResourceLoader.GetForViewIndependentUse().GetString(key);
        
    

在使用绑定之前,需要在 App.xaml 文件中实例化reader

<Application.Resources>
        <ResourceDictionary>
            <local:LocalizedStrings x:Key="Localized"/>
        </ResourceDictionary>
</Application.Resources>

Resources.resw

<data name="Title" xml:space="preserve">
  <value>ResTitleTest</value>
</data>

用法

<TextBlock Text="Binding Source=StaticResource Localized, Path=[Title]" />

注意:只有在构建完成后,Textblock 的内容才会显示在设计器的位置。

【讨论】:

这对我有用,谢谢!我应该使用Binding 方法还是x:Uid?我宁愿不使用两者来不指定所有内容两次(因为这似乎是一个很好的错误来源)。另外,我发现在运行时ResourceLoader 仍然从Binding 调用,即使Text 属性随后被x:Uid 机制覆盖。 如果你想在设计时使用资源字符串,你最好使用像上面这样的Binding方法。 对我来说,这会导致显示“项目”而不是实际值。这比根本不显示文本要好,但是由于智能感知对路径属性没有帮助,因此很容易发生拼写错误,我希望在设计时看到这一点。有解决办法吗?

以上是关于设计时的 UWP 资源字符串 (.resw)的主要内容,如果未能解决你的问题,请参考以下文章

win10 uwp 读取resw资源文件

[UWP]本地化入门

[UWP]本地化入门

在 UWP 中本地化 XAML UI 中的字符串

设计时的 Windows 应用商店应用 ResourceLoader

UWP:语言的资源文件未正确部署