Microsoft.Extensions.Localization 是 .NET Core 中的一个类库,它提供了本地化支持,允许开发者为应用程序添加多语言支持 。 可以根据用户的区域设置(culture)动态地选择和加载相应的本地化资源(如字符串)。 全球化(globalization)和本地化(localization)
本地化使用
添加本地化支持,指定资源文件存放的位置。
在 Configure 方法中使用中间件来确定每个请求的区域设置。
注入IStringLocalizer,并使用它来获取本地化的字符串。
_localizer["WelcomeMessage"] 将根据当前区域设置查找并返回相应的本地化字符串。
//ResourcesPath 指定了资源文件存放的位置
services.AddLocalization(options => options.ResourcesPath = "Resources");
app.UseRequestLocalization(new RequestLocalizationOptions
{
// 设置支持的文化和 UI 文化
SupportedCultures = new List<CultureInfo> { new CultureInfo("en-US"), new CultureInfo("fr-FR") },
SupportedUICultures = new List<CultureInfo> { new CultureInfo("en-US"), new CultureInfo("fr-FR") }
});
public class HomeController : Controller
{
private readonly IStringLocalizer<HomeController> _localizer;
public HomeController(IStringLocalizer<HomeController> localizer)
{
_localizer = localizer;
}
public IActionResult Index()
{
// 使用 _localizer 获取本地化字符串
var welcomeMessage = _localizer["WelcomeMessage"];
return View();
}
}
ABP 增强了这个功能
ABP 的本地化
AbpLocalizationModule 依赖项添加到模块:
可以为本地化资源设置一个简短名称,可以继承其他资源
本地化资源可以有格式化参数,传进去
资源类,它包含了本地化字符串的键和值。 用于存储特定语言的本地化字符串
[DependsOn(typeof(AbpLocalizationModule))]
public class MyModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
//使用虚拟文件系统 将JSON文件嵌入到程序集中
// "YourRootNameSpace" 是项目的根命名空间名字. 如果你的项目的根命名空间名字为空,则无需传递此参数.
options.FileSets.AddEmbedded<MyModule>("YourRootNameSpace");
});
Configure<AbpLocalizationOptions>(options =>
{
//默认资源
options.DefaultResourceType = typeof(TestResource);
//添加了一个新的本地化资源, 使用"en"(英语)作为默认的本地化
options.Resources
.Add<TestResource>("en")
//用JSON文件存储本地化字符串
.AddVirtualJson("/Localization/Resources/Test")
//集成其他资源
.AddBaseTypes(typeof(AbpValidationResource));
});
}
}
//创建本地化资源类
[LocalizationResourceName("Test")]
[InheritResource(typeof(AbpValidationResource))]
public class TestResource
{
}
_localizer["HelloMessage", "John"].
{
"culture": "en",
"texts": { //本地化字符串的键值集合
"HelloWorld": "Hello World!"
}
}