一:Abp本地化概览
1:查照程序入口
参考官方文档:Abp Localization
[DependsOn(typeof(AbpLocalizationModule))]
public class MyModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
// "YourRootNameSpace" 是项目的根命名空间名字. 如果你的项目的根命名空间名字为空,则无需传递此参数.
options.FileSets.AddEmbedded<MyModule>("YourRootNameSpace");
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<TestResource>("en")
.AddVirtualJson("/Localization/Resources/Test");
});
}
}
可以看到关键配置为:
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<TestResource>("en")
.AddVirtualJson("/Localization/Resources/Test");
});
在这个例子中;
- 添加了一个新的本地化资源, 使用"en"(英语)作为默认的本地化.
- 用JSON文件存储本地化字符串.
- 使用虚拟文件系统 将JSON文件嵌入到程序集中.
具体资源格式请参考官方文档。
2:服务端使用
根据官方文档可以看到使用的是微软的本地化接口,说明abp是扩展增强了微软的本地化。
public class MyService
{
private readonly IStringLocalizer<TestResource> _localizer;
public MyService(IStringLocalizer<TestResource> localizer)
{
_localizer = localizer;
}
public void Foo()
{
var str = _localizer["HelloWorld"];
}
}
二:简单了解.net的本地化
参考:https://github.com/zjc-china/aspnetcore/tree/main/src/Localization
简易结构如下图:
三:abp对.net本地化的扩展
如图:abp中扩展和实现了.net中重要的几个接口
在 AbpLocalizationModule的初始化中将.net的原生实现替换为了abp的实现
public class AbpLocalizationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{//services.Replace(ServiceDescriptor.Singleton<IStringLocalizerFactory, AbpStringLocalizerFactory>());
AbpStringLocalizerFactory.Replace(context.Services);
}....
}
关于具体实现,后面再一一整理。