【问题标题】:Plugin-Localization in WPFWPF 中的插件本地化
【发布时间】:2020-07-26 12:04:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf plugins localization


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2018-11-10
      • 2016-09-25
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      相关资源
      最近更新 更多