⼊门系列-ABP本地化
本地化
ABP的本地化系统与Microsoft.Extensions.Localization⽆缝集成,并与兼容. 它添加了⼀些实⽤功能和增强功能, 使其更易于在实际开发中应⽤.
Volo.Abp.Localization Package
启动模板默认已经安装了此nuget包, 所以在⼤多数情况下, 你不需要⼿动安装它.
Volo.Abp.Localization是本地化系统的核⼼包. 使⽤程序包管理器控制台 (PMC) 将其安装到项⽬中:
Install-Package Volo.Abp.Localization
然后, 你可以将 AbpLocalizationModule 依赖项添加到模块:
1using Volo.Abp.Modularity;
2using Volo.Abp.Localization;
3
4namespace MyCompany.MyProject
5{
6 [DependsOn(typeof(AbpLocalizationModule))]
7 public class MyModule : AbpModule
8 {if i let you go
9 //...
10 }
11}
hor是什么意思创建本地化资源
本地化资源⽤于将相关的本地化字符串组合在⼀起,并将它们与应⽤程序的其他本地化字符串分开.通常⼀个模块会定义⾃⼰的本地化资源. 本地化资源就是⼀个普通的类. 例如:
1public class TestResource
2{
3}
然后应该使⽤ AbpLocalizationOptions 添加如下所⽰:
2public class MyModule : AbpModule
3{
英语外教上海4 public override void ConfigureServices(ServiceConfigurationContext context)
5 {
6 Configure<VirtualFileSystemOptions>(options =>
7 {
8 // "YourRootNameSpace" 是项⽬的根命名空间名字. 如果你的项⽬的根命名空间名字为空,则⽆需传递此参数.
赞美女人的词语9 options.FileSets.AddEmbedded<MyModule>("YourRootNameSpace");
10 });
11
12 Configure<AbpLocalizationOptions>(options =>
13 {
14 options.Resources
15 .Add<TestResource>("en")
16 .AddVirtualJson("/Localization/Resources/Test");
17 });
18 }
19}
在这个例⼦中;
添加了⼀个新的本地化资源, 使⽤"en"(英语)作为默认的本地化.
保税区英文
⽤JSON⽂件存储本地化字符串.
使⽤ 将JSON⽂件嵌⼊到程序集中.
本地化⽂件内容如下所⽰:
1{
a place in time2 "culture": "en",
3 "texts": {
4 "HelloWorld": "Hello World!"
5 }
6}
每个本地化⽂件都需要定义 culture (⽂化) 代码 (例如 "en" 或 "en-US").
texts 部分只包含本地化字符串的键值集合 (键也可能有空格).
简短的本地化资源名称
本地化资源也可以在客户端(JavaScript)使⽤. 因此, 为本地化资源设置⼀个简短的名称可以更⽅便的本地化⽂本. 例如:
1[LocalizationResourceName("Test")]
acknowledged2public class TestResource
3{
4}
请参阅下⾯的获取本地化资源Test中客户端部分.
继承其他资源
资源可以从其他资源继承,这使得可以在不引⽤现有资源的情况下重⽤现有的本地化字符串. 例如:
2public class TestResource
3{
4}
也可以通过 AbpLocalizationOptions 配置:
1rvices.Configure<AbpLocalizationOptions>(options =>
2{
3 options.Resources
4 .Add<TestResource>("en") //Define the resource by "en" default culture
5 .AddVirtualJson("/Localization/Resources/Test") //Add strings from virtual json files
duality6 .AddBaTypes(typeof(AbpValidationResource)); //Inherit from an existing resource
7});
资源可以从多个资源继承.
如果新的本地化资源定义了相同的本地化字符串, 那么它会覆盖该字符串
扩展现有资源
继承资源可以创建新的资源, ⽆需修改现有的资源. 但是在某些情况下, 你可能不想创建新资源,⽽是直接扩展现有资源. 例如:
1rvices.Configure<AbpLocalizationOptions>(options =>
2{
3 options.Resources
4 .Get<TestResource>()
5 .AddVirtualJson("/Localization/Resources/Test/Extensions");
6});
如果扩展⽂件定义了相同的本地化字符串, 那么它会覆盖该字符串.
获取本地化⽂本
2014上海高考数学
服务器端
在服务端获取本地化⽂本的⽤法是⾮常标准的(它与AspNetCore提供的获取本地化资源⽅式⽆缝集成).
在类中简单的⽤法
1public class MyService
2{
3 private readonly IStringLocalizer<TestResource> _localizer;
4
5 public MyService(IStringLocalizer<TestResource> localizer)
6 {
7 _localizer = localizer;
8 }
9spontaneously
10 public void Foo()
11 {
12 var str = _localizer["HelloWorld"];
13 }
14}
在Razor视图/Page中简单的⽤法
1@inject IHtmlLocalizer<TestResource> Localizer
2
3<h1>@Localizer["HelloWorld"]</h1>
有关在服务器端使⽤本地化的详细使⽤⽅法, 请参阅
客户端
ABP提供了JavaScript服务, 可以在客户端使⽤相同的本地化⽂本.获取本地化资源:
var testResource = Resource('Test');
本地化字符串:
var str = testResource('HelloWorld');