您需要使用 Cookie 来存储所选的文化。请参阅微软文档。https://learn.microsoft.com/en-us/aspnet/core/blazor/globalization-localization?view=aspnetcore-5.0#cookies https://learn.microsoft.com/en-us/aspnet/core/blazor/globalization-localization?view=aspnetcore-5.0#cookies
从文档中:
Blazor服务器
Blazor 服务器应用程序使用本地化中间件进行本地化。中间件为从应用程序请求资源的用户选择适当的区域性。
可以使用以下方法之一设置区域性:
饼干
提供UI来选择文化
有关更多信息和示例,请参阅 ASP.NET Core 中的全球化和本地化。
饼干
本地化文化 cookie 可以保留用户的文化。本地化中间件在后续请求中读取 cookie 以设置用户的文化。
使用 cookie 可确保 WebSocket 连接可以正确传播区域性。如果本地化方案基于 URL 路径或查询字符串,则该方案可能无法与 WebSocket 一起使用,从而无法保留区域性。因此,建议使用本地化文化 cookie。
如果文化保留在本地化 cookie 中,则可以使用任何技术来分配文化。如果应用程序已经为服务器端 ASP.NET Core 建立了本地化方案,请继续使用应用程序现有的本地化基础结构,并在应用程序的方案中设置本地化文化 cookie。
以下示例演示如何在本地化中间件可以读取的 cookie 中设置当前区域性。在 Pages/_Host.cshtml 文件中紧邻开始标记内创建 Razor 表达式:
CSHTML
Copy
@using System.Globalization
@using Microsoft.AspNetCore.Localization
...
<body>
@{
this.HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(
CultureInfo.CurrentCulture,
CultureInfo.CurrentUICulture)));
}
...
</body>
应用程序按以下事件顺序处理本地化:
浏览器向应用程序发送初始 HTTP 请求。
区域性由本地化中间件分配。
_Host 页面 (_Host.cshtml) 中的 Razor 表达式将区域性保留在 cookie 中作为响应的一部分。
浏览器打开 WebSocket 连接以创建交互式 Blazor 服务器会话。
本地化中间件读取 cookie 并分配区域性。
Blazor 服务器会话以正确的区域性开始。
使用 RazorPage 时,请使用 Context 属性:
razor
Copy
@{
this.Context.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(
CultureInfo.CurrentCulture,
CultureInfo.CurrentUICulture)));
}
提供UI来选择文化
为了提供 UI 来允许用户选择区域性,建议使用基于重定向的方法。该过程类似于用户尝试访问安全资源时 Web 应用程序中发生的情况。用户被重定向到登录页面,然后重定向回原始资源。
该应用程序通过重定向到控制器来保留用户选择的文化。控制器将用户选择的区域性设置到 cookie 中,并将用户重定向回原始 URI。
在服务器上建立 HTTP 端点,以在 cookie 中设置用户选择的区域性,并执行重定向回原始 URI:
C#
Copy
[Route("[controller]/[action]")]
public class CultureController : Controller
{
public IActionResult SetCulture(string culture, string redirectUri)
{
if (culture != null)
{
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(culture)));
}
return LocalRedirect(redirectUri);
}
}