WPF 中的插件本地化

Plugin-Localization in WPF

目前,我正在开发一个可扩展的 WPF 应用程序。可扩展性是使用一个简单的插件系统实现的,其中每个插件都包含在它自己的项目中,还提供适当的 Viewmodel 和 View,公开为 DataTemplate。

我现在正在考虑使用 resx 文件(非常标准)进行本地化。这对主应用程序来说工作正常,但我想知道如何对插件也这样做。

考虑在插件中也包含本地化的 resx 文件并在插件视图中绑定到它们。这是一条可行的路线还是有任何最佳实践可以遵循?

WPF 有自己的资源系统,内置在基础中。

一种常见的 wpf 方法是使用资源字典而不是使用 resx。

您要替换的每个字符串都是基础资源字典中的一个条目。通常是英文。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WpfApp1"
                    xmlns:sys="clr-namespace:System;assembly=System.Runtime"
                    >
    <sys:String x:Key="Submit">Submit</sys:String>

然后用作动态资源

    <Button Content="{DynamicResource Submit}"

然后您为具有匹配 x:Keys 的每种其他语言构建资源词典。 当您将其中之一合并到 application.current.resources 时,将选取新值。

这提供了以相同方式替换几何图形、图片和颜色的选项。通常以上述方式“重叠”使用多层资源字典。这种方法可以同时处理品牌和本地化。

还有一个优点。

资源字典不必为了合并而编译。你可以有一个资源字典,它可以由超级用户编辑或由部门/组织替换。

您可以使用 xamlreader.load() 将平面文件显式加载到资源字典中。这意味着您的应用程序可以使用服务来下载希腊语、法语或任何资源词典。将其保存到用户的本地应用程序数据中。每次用户启动应用程序时,该文件都会被合并,他们会看到相应的语言文本。