如何用RESX本地化WPF.net核心应用程序



我想用.resx文件本地化.Net Core应用程序。有人能给我一个完整的分步解决方案吗?我是WPF和.Net Core的新手。当我改变代码中的当前文化时,什么都不会发生。这是我的代码:

<ToolBar>
<Button Content="{x:Static strings:Resource.NewCustomer}" Command="{Binding NewCustomerDelegateCommand}"/>
</ToolBar>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-DE");
base.OnStartup(e);
}
}

在本地化WPF应用程序时,您有多种选择。

  1. 使用本机WPF的方法(使用UID(,请参阅:MSDN。这种方法的缺点在文章中有更详细的解释,但一般来说:

    • 它没有使用resx(这对大多数开发人员来说是很自然的(
    • 不支持在运行时更改语言
  2. 使用PublicResXFileCodeGenerator/ResXFileCodeGenerator生成的resx的强类型资源类。

    (请参阅VS中resx文件的属性窗口中的自定义工具;PS:第二个生成器创建内部类,因此请记住,它只能在存在本地化的xaml的同一程序集中使用,并且只能使用WPF绑定,而不能使用静态标记扩展(

    这种方法类似于您尝试应用的方法,这意味着在xaml中,您使用Binding(或x:Static(来绑定生成的强类型资源类的属性。这种方法的缺点是,每当区域性/语言发生更改时,生成的强类型资源类都不会提供任何通知。换句话说,您可以提供字符串、标签等,但它们将在解析/加载xaml时解析。之后它变成固定内容:

    • 不支持在运行时更改语言
  3. 您可以在市场上找到使用resx文件本地化WPF应用程序的现有解决方案,例如:https://www.qube7.com/guides/localization.html

    • 它支持在运行时更改语言(当您设置Culture.Current时,UI会自动刷新(
    • 该解决方案提供了VS设计器中支持的本地化xaml的方法
    • 本地化xaml的方法类似于本地化asp.net:您可能拥有本地资源(每个xaml视图的resx(+您可能拥有全局资源(拥有共享资源的resx
    • 该解决方案还为您提供了本地化视图模型的方法(这也是常见的(

    您可以在此处找到资源标记扩展的完整源代码:Resource.cs

我使用此解决方案解决了类似的问题:https://stackoverflow.com/a/63731647/660753

  1. 创建了一个新的Resource.resx。(使用"添加>新项…>资源文件.resx">
  2. 复制新文件中第一个文件的所有内容(复制所有三列(
  3. 删除旧文件
  4. 将新文件重命名为预期名称。6.不要忘记将resx文件的访问修饰符更改为";"公共">

此外,您还可以使用此ASP.NET解决方案https://developpaper.com/dotnetcore3-1-multi-language-implementation-of-wpf/

最新更新