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() 将平面文件显式加载到资源字典中。这意味着您的应用程序可以使用服务来下载希腊语、法语或任何资源词典。将其保存到用户的本地应用程序数据中。每次用户启动应用程序时,该文件都会被合并,他们会看到相应的语言文本。
目前,我正在开发一个可扩展的 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() 将平面文件显式加载到资源字典中。这意味着您的应用程序可以使用服务来下载希腊语、法语或任何资源词典。将其保存到用户的本地应用程序数据中。每次用户启动应用程序时,该文件都会被合并,他们会看到相应的语言文本。