找不到任何有关 WPF 本地化的新指南和文档

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

所以,我想本地化我的应用程序,但我找不到任何新的指南或文档,通常是 2015 年编写的 .NET 框架的指南,或者使用 RESX 的指南,没有其他方法吗本地化应用程序,而不是使用 RESX 和

{x:Static}
绑定。我知道有RESW,但看起来只有UWP支持RESW。

.net wpf localization resources
1个回答
0
投票

我无法为您提供明确的指南,但这里有一种在 WPF 中本地化字符串和数字/日期格式的简单方法。这是我从这里的各种答案和其他网络搜索中拼凑而成的方法。

请注意,在此示例中,用户无法即时更改语言;更改语言后,必须重新启动应用程序。

假设您希望您的应用程序默认支持英语,例如法语和日语。您不仅希望将字符串翻译成当前的语言,还希望数字/日期格式遵循该文化。

  1. 将需要翻译的所有字符串放入 RESX 文件中,并在任何地方使用这些字符串资源。例如,调用 .RESX 文件

    MyStrings.resx
    该文件将包含所有英语字符串。它还具有将 RESX 文件添加到项目时通常会获得的 .CS 支持文件

  2. 为您想要支持的每种语言创建等效的 RESX 文件。 其中每个都将保存该语言的

    MyStrings.resx
    中每个字符串的翻译。使用名称中的 2 个字母区域性代码来命名该文件。对于法语,这意味着名称为“MyStrings.fr.resx”。如果语言是日语,则为“MyStrings.ja.resx”等。这些备用语言 .RESX 文件不需要支持
    .cs
    文件

  3. 如果您要从定义这些字符串的程序集外部访问这些字符串,请务必进入 .RESX 编辑器并在顶部的下拉框中将其“访问修饰符”更改为“公共”。

  4. 应用程序启动时,在执行任何其他操作之前,请(从系统)获取当前配置使用的语言的

    CultureInfo
    。用它来设置线程文化。您可以使用
    ResourceManager.GetResourceSet
    来获取各种文化。获得要使用的语言的 CultureInfo 后,以这种方式设置线程文化。

    System.Threading.Thread.CurrentThread.CurrentUICulture = languageCulture; CultureInfo.DefaultThreadCurrentUICulture = languageCulture;

上述内容为您带来的是根据您在启动时选择的语言文化从适当的 .RESX 文件中自动选择适当的字符串。因此,如果您的 C# 代码像这样引用 MyStrings.resx 中的字符串资源

var str = MyStrings.SomeStringResource

...或者如果您的 XAML 像这样引用它

<TextBlock Text="{x:Static res:MyStrings.SomeStringResource}"/>

所选字符串将从相应的 .RESX 文件中自动选择。如果您当前设置的语言是日语,则会从

MyStrings.ja.resx
中选择。如果是法语,则会从
MyStrings.fr.resx
中选择。如果是英语或者是您没有 .RESX 文件的某种文化,则会从
MyStrings.resx

中选择
  1. 您要处理的下一件事是格式,例如数字/日期格式。如果您希望 ValueConverters 作为参数的一部分以所选语言的正确区域性传递,那么您可以使用特定于语言的区域性覆盖

    FrameWorkElement.Language
    属性元数据,如下所示。假设
    languageCulture
    是当前配置语言的
    CultureInfo

    FrameworkElement.LanguageProperty.OverrideMetadata( 类型(框架元素), 新的框架属性元数据( XmlLanguage.GetLanguage(languageCulture.Name)));

完成此操作后,对

IValueConverter.Convert
IMultiValueConverter.Convert
的每次调用都将收到适合所配置语言的 CultureInfo,无论操作系统配置如何。

每次需要添加新语言时,您只需要一个新的 .RESX 文件。

我确信有更好的方法、更复杂的方法。但这符合我们的目的。

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