如何使用 RESX 本地化 WPF .net-core 应用程序

McK*_*971 3 wpf localization .net-core

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

<ToolBar>
    <Button Content="{x:Static strings:Resource.NewCustomer}" Command="{Binding NewCustomerDelegateCommand}"/>
</ToolBar>
Run Code Online (Sandbox Code Playgroud)
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);
    }
}
Run Code Online (Sandbox Code Playgroud)

gor*_*kib 5

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

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

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

    \n

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

    \n

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

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

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

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

    \n
  6. \n
\n