我有一个 blazor-server 应用程序,并且正在寻找一种能够根据连接到该应用程序的每个客户端的偏好设置默认语言的方法。
我目前有这段代码,Startup.Configure()
它通过调用成功地为每个用户设置了默认语言user.GetPreferences().language
,它从数据库中获取了他们的首选语言。但是,由于此代码仅在服务器启动时运行一次(对吗?),如果用户更改了他们的首选项然后从另一台机器登录,则DefaultRequestCulture = new RequestCulture()
仍然包含旧的首选项。因此,它会使用他们的旧语言偏好加载应用程序。
...
var options = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(user.GetPreferences().language),
SupportedCultures = SupportedCultures,
SupportedUICultures = SupportedCultures,
RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
}
}
...
我还尝试在我CurrentCulture
的. 这样做可以解决问题并从不同的机器连接为每个客户端设置正确的默认语言。但似乎在 ui 加载后设置了文化。这意味着用户必须手动刷新页面才能更改语言。CurrentUiCulture
OnInitializedAsync()
MainLayout.razor
protected override async Task OnInitializedAsync()
{
await LoadUser();
...
}
...
private async Task LoadUser()
{
CultureInfo.CurrentCulture = new CultureInfo(user.GetPreferences().language);
CultureInfo.CurrentUICulture = new CultureInfo(user.GetPreferences().language);
}
每次客户端通过从数据库查询连接时,是否有一种有效的方法来设置默认语言?
谢谢