XAML 中的 WPF 本地化,简单、轻松、优雅的实现方式是什么?

问题描述 投票:0回答:6

我有一个非常常见的问题。在 WPF 应用程序中进行本地化的最佳方法是什么? 嗯,我也在 SO 和 Binged 中搜索了很多。但我找不到任何真正简单而优雅的指针。

假设我必须在 UI 中显示类似以下内容:

英文:组织 - Beoing

法语:Organizzazione - Beoing

    <StackPanel Orientation="Horizontal">
        <TextBlock Text="Organization -"></TextBlock>
        <TextBlock Text="{Binding Path=OrganizationName}">
        </TextBlock>
    </StackPanel>

基本上,我需要将本地化文本分配给组织标签文本块。 我应该将连字符与“组织 -”分开并将其放在单独的标签中吗?

我该怎么做?

.net wpf xaml localization
6个回答
12
投票

创建项目WpfApplication1

创建文件夹“本地化”

在“localization\”中添加资源文件 (Strings.resx),并添加字符串“OrganizationText”和值“Organization”

编译时,会生成一个designer.cs文件。不幸的是,该文件中的所有方法都是内部方法,我们需要公共访问权限才能启用 wpf 的字符串引用。为此,请将 .resx“自定义工具”替换为“PublicResXFileCodeGenerator”(>=vs2008),然后再次构建。 在 MainWindow.xaml 中使用此 xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:localization="clr-namespace:WpfApplication1.Localization"
        Title="MainWindow" Height="350" Width="525">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{x:Static localization:Strings.OrganizationText}"/>
        </StackPanel>
</Window>

要添加“-”,您必须使用多重绑定(请参阅此处


2
投票

我将应用程序中的所有标签等绑定到用于显示不同语言的对象。我将所有字符串存储在数据库中,然后根据用户选择的语言检索正确的字符串。这样做的优点是可以在运行时立即更新。这样,用户不需要像选择使窗口“可本地化”那样重新启动应用程序。


1
投票

我们有一个应用程序可以在运行时切换 UI 语言,并且能够通过将适当的资源复制到某个目录来使用新的 UI 语言。 为此使用某种编译资源在分发等方面太不灵活。因此,我们将语言资源作为 System:Strings 放在 ResourceDictionary 中 - 每种语言的单独 XAML 文件中都有一个 ResourceDictionary。 XAML 文件在 VS 中标记为 Content 并复制。您可以将它们用作 XAML 中的 DynamicResources 或通过 C# 中的 Localizer 实例。 事实证明,这个概念在我们的应用中非常有用。


1
投票

我制作了一个完整的本地化解决方案(包括翻译编辑器),它还通过许多 MarkupExtensions 支持 XAML 翻译。它使用包含所有翻译文本(包括单数/复数形式)的字典,可以通过 XAML 中的 MarkupExtensions 或其他代码中的常规方法来访问这些文本。 MarkupExtensions 还支持在运行时更改语言,甚至在修改底层字典文件时进行更新。

其他功能包括本地化日期/时间和数字格式以及排版助手。

我在一些应用程序中成功使用了这个库,并计划将来在更多应用程序中使用它。

http://dev.unclassified.de/source/txlib


1
投票

请阅读本文并下载示例: https://www.codeproject.com/Articles/249369/Advanced-WPF-Localization?msg=5715971#xx5715971xx

所有工作已经完成。您刚刚实施了文档和示例项目。工作量很少。


0
投票

我对自己的 WPF 应用程序也有同样的问题,并决定编写一个轻量级本地化库。它允许翻译 xaml 资源字典文件并在运行时在支持的语言之间切换。

您可以查看 Armat.Localization GitHub 存储库了解更多详细信息,并参考 WPF 应用程序中的“armat.localization.wpf”NuGet 包。使用适当的演示应用程序克隆/构建源代码将使您充分了解 Armat.Localization 库的工作原理。

主要思想如下:

  • 将 WPF 控件中的所有可本地化内容提取到 WPF 资源字典文件中
  • 通过将根 xaml 元素更改为“Armat.Localization.Wpf.LocalizedResourceDictionary”来使资源字典可本地化
  • 使用本地化设计器(来自同一存储库)为所有支持的语言创建翻译文件
  • 在 WPF 应用程序中提供语言选择器,用于在支持的语言之间切换

Localization.CoreLocalization.Wpf 项目中的Markdown 文件将指导您完成一般使用模式,Localization.Demo 应用程序将为您提供可本地化的 WPF 项目示例。

© www.soinside.com 2019 - 2024. All rights reserved.