在XAML中的WPF本地化,什么是简单,容易和优雅的方法?

cunj1qz1  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(127)

我有一个很普通的问题。在WPF应用程序中进行本地化的最佳方法是什么?我也在SO和Binged上搜索了很多。但是我找不到任何简单而优雅的指针。
假设我必须在UI中显示如下内容:
英文名:Orgnanization - Beoing
法语:Bazzazione- Beoing

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

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

rm5edbpk

rm5edbpk1#

创建项目WpfApplication 1
创建文件夹“本地化”
在“localization\”中添加一个资源文件(Strings.resx),并添加字符串“localization Text”和值“Organisation”
编译时,将生成designer.cs文件。不幸的是,这个文件中的所有方法都是内部的,我们需要公共访问来启用来自wpf的字符串引用。为此,请将.resx“custom tool”替换为“PublicResXFileCodeGenerator”(>= vs 2008)并再次构建。在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>

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

szqfcxe2

szqfcxe22#

我把所有的标签等。在我的应用程序中,我使用一个对象来显示不同的语言。我将所有字符串存储在数据库中,并根据用户选择的语言检索正确的字符串。这具有在运行时即时更新的优点。这样,用户就不需要像您选择使窗口“可本地化”那样重新启动应用程序。

lh80um4z

lh80um4z3#

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

7lrncoxx

7lrncoxx4#

我做了一个完整的本地化解决方案(包括。翻译编辑器),它还通过许多MarkupExtensions支持XAML翻译。它使用一个字典,其中包含所有翻译的文本(包括单数/复数形式),可以通过XAML的MarkupExtensions或其他代码的常规方法访问。MarkupExtensions还支持在运行时更改语言,甚至在修改底层字典文件时进行更新。
其他功能是本地化的日期/时间和数字格式以及排版帮助。
我在一些应用程序中成功地使用了这个库,并计划在未来将其应用于更多的应用程序中。
http://dev.unclassified.de/source/txlib

p5fdfcr1

p5fdfcr15#

请阅读本文并下载示例:https://www.codeproject.com/Articles/249369/Advanced-WPF-Localization?msg=5715971#xx5715971xx
所有工作都已完成。你只是按照文档和示例项目来实现。很少的工作。

lzfw57am

lzfw57am6#

我在自己的WPF应用程序中遇到了同样的问题,于是决定编写一个轻量级的本地化库。它允许翻译xaml资源字典文件,并在运行时在支持的语言之间切换。
您可以查看Armat.Localization GitHub存储库以获取更多详细信息,并参考WPF应用程序中的“armat.localization.wpf”NuGet包。使用适当的演示应用程序克隆/构建源代码将使您给予对 Armat.Localization 库如何工作的足够理解。
主要思想如下:

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

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

相关问题