在 Blazor 服务器端应用程序中,本地化通常涉及将语言首选项存储在 cookie 中。但是,有时您可能希望不使用 cookie,并且在单个页面加载时根据用户显式选择的语言更改界面文本。
要在 Blazor Server Side 应用程序中实现此类本地化,请按以下步骤操作:
1.创建共享语言服务(LanguageService)类,用于存储和更改当前的语言设置:
public class LanguageService
{
public string CurrentLanguage { get; set; }
public event Action OnLanguageChanged;
public void SetLanguage(string language)
{
CurrentLanguage = language;
OnLanguageChanged?.Invoke();
}
}
2.在应用程序的 Startup.cs 文件中注入 LanguageService:
services.AddSingleton();
3.在组件中使用 LanguageService:
@page "/"
@inject LanguageService languageService
@GetLocalized("Hello world!")
@code {
private void SetLanguage(string language)
{
languageService.SetLanguage(language);
}
private static string GetLocalized(string key)
{
//根据当前语言选择正确的文本
switch (languageService.CurrentLanguage)
{
case "fr":
return "Bonjour le monde!";
case "es":
return "Hola Mundo!";
default:
return key;
}
}
}
在这个示例中,LanguageService 负责存储当前的语言设置(CurrentLanguage),并包含用于更改设置的方法(SetLanguage)。组件中的 GetLocalized 方法根据当前语言设置返回正确的文本。
使用按钮(每个按钮都有 SetLanguage 方法的单击事件处理程序)来更改语言设置。
这种方法可以避免使用 cookie,并支持语言选择更改。尽管需要为每个文本段提供本地化代码,但它适用于更小的项目或具有有限且易于管理的文本集合的项目。