如何将本地化添加到 WPF Blazor 应用程序?

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

我正在尝试将本地化添加到我的 WPF Blazor 应用程序,但它不起作用。即使我设置了不同的区域性,我用共享资源注入的 IStringLocalizer 始终返回默认的英语资源。

我之前制作过 WPF Blazor 应用程序

我正在尝试再次执行此操作,但这次我尝试添加本地化 根据 Microsoft 的文档其他

(除了不依赖本地存储,我依赖配置文件。我可以从配置加载区域性信息,并使用我想要的 CultureInfo 设置 DefaultThreadCurrentCulture 和 DefaultThreadCurrentUICulture)

这对于标准 Blazor WASM 应用程序来说效果很好,但似乎不适用于 WPF Blazor 应用程序

当我尝试获取本地化字符串时,它总是返回默认的英文资源。

我怀疑这与删除这条线有关

- await builder.Build().RunAsync();

更换

builder.Services.AddLocalization();

var host = builder.Build();

const string defaultCulture = "en-US";

var js = host.Services.GetRequiredService<IJSRuntime>();
var result = await js.InvokeAsync<string>("blazorCulture.get");
var culture = CultureInfo.GetCultureInfo(result ?? defaultCulture);

if (result == null)
{
    await js.InvokeVoidAsync("blazorCulture.set", defaultCulture);
}

CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;

await host.RunAsync();

但我不知道如何在主机构建之后、运行之前访问主机。使用 WPF Blazor 应用程序时,我可以为 Blazor 组件设置服务,如下所示

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var serviceCollection = new ServiceCollection();
        serviceCollection.AddWpfBlazorWebView();
        Resources.Add("services", serviceCollection.BuildServiceProvider());
    }
}

有谁知道如何在主机构建之后但运行之前访问主机?或者更优选地如何让本地化在 WPF Blazor 应用程序中工作?

巧了,有谁知道为什么必须在主机构建之后、运行之前设置文化?我不确定我是否完全理解它是如何工作的。

我也对此进行了调查,因为它可以访问主机,但我无法让 .NET 8 版本正常工作 https://github.com/DotNetExtension/BlazorDesktop

编辑:

也许我应该尝试使用Extensions.Hosting?这会有帮助吗?

啊哈

在本文中,您将学习如何使用 IStringLocalizer 和 IStringLocalizerFactory 实现。本文中的所有示例源代码都依赖于 Microsoft.Extensions.Localization 和 Microsoft.Extensions.Hosting NuGet 包。有关托管的更多信息,请参阅 .NET 通用主机。

也许会有帮助

c# wpf blazor-webassembly .net-8.0 asp.net-core-localization
1个回答
0
投票

在我的例子中,只需在项目的 MainWindlow.xaml.cs 下设置当前 UICulture 并为两者设置默认线程区域性(CultureInfo.DefaultThreadCurrentCulture、CultureInfo.DefaultThreadCurrentUICulture),就像设置具有本地化的 WPF 应用程序一样。

并进行所有其他 Blazor 本地化设置。 (添加 Microsoft.Extensions.Localization 并在 .razor 页面中调用 @localizer)

它对我有用。

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