入门系列- ABP 本地化
本地化
ABP的本地化系统与Microsoft.Extensions.Localization
无缝集成,并与AspnetCore的本地化文档兼容. 它添加了一些实用功能和增强功能, 使其更易于在实际开发中应用.
Volo.Abp.Localization Package
启动模板默认已经安装了此nuget包, 所以在大多数情况下, 你不需要手动安装它.
Volo.Abp.Localization是本地化系统的核心包. 使用程序包管理器控制台 (PMC) 将其安装到项目中:
Install-Package Volo.Abp.Localization
然后, 你可以将 AbpLocalizationModule 依赖项添加到模块:
using Volo.Abp.Modularity;
using Volo.Abp.Localization;namespace MyCompany.MyProject
{[DependsOn(typeof(AbpLocalizationModule))]public class MyModule : AbpModule{//...}
}
创建本地化资源
本地化资源用于将相关的本地化字符串组合在一起,并将它们与应用程序的其他本地化字符串分开.通常一个模块会定义自己的本地化资源. 本地化资源就是一个普通的类. 例如:
public class TestResource
{
}
然后应该使用 AbpLocalizationOptions
添加如下所示:
[DependsOn(typeof(AbpLocalizationModule))]
public class MyModule : AbpModule
{public override void ConfigureServices(ServiceConfigurationContext context){Configure<VirtualFileSystemOptions>(options =>{// "YourRootNameSpace" 是项目的根命名空间名字. 如果你的项目的根命名空间名字为空,则无需传递此参数.options.FileSets.AddEmbedded<MyModule>("YourRootNameSpace");});Configure<AbpLocalizationOptions>(options =>{options.Resources.Add<TestResource>("en").AddVirtualJson("/Localization/Resources/Test");});}
}
在这个例子中;
- 添加了一个新的本地化资源, 使用"en"(英语)作为默认的本地化.
- 用JSON文件存储本地化字符串.
- 使用虚拟文件系统 将JSON文件嵌入到程序集中.
本地化文件内容如下所示:
{"culture": "en","texts": {"HelloWorld": "Hello World!"}
}
- 每个本地化文件都需要定义
culture
(文化) 代码 (例如 "en" 或 "en-US"). texts
部分只包含本地化字符串的键值集合 (键也可能有空格).
简短的本地化资源名称
本地化资源也可以在客户端(JavaScript)使用. 因此, 为本地化资源设置一个简短的名称可以更方便的本地化文本. 例如:
[LocalizationResourceName("Test")]
public class TestResource
{
}
请参阅下面的获取本地化资源Test中客户端部分.
继承其他资源
资源可以从其他资源继承,这使得可以在不引用现有资源的情况下重用现有的本地化字符串. 例如:
[InheritResource(typeof(AbpValidationResource))]
public class TestResource
{
}
也可以通过 AbpLocalizationOptions
配置:
services.Configure<AbpLocalizationOptions>(options =>
{options.Resources.Add<TestResource>("en") //Define the resource by "en" default culture.AddVirtualJson("/Localization/Resources/Test") //Add strings from virtual json files.AddBaseTypes(typeof(AbpValidationResource)); //Inherit from an existing resource
});
- 资源可以从多个资源继承.
- 如果新的本地化资源定义了相同的本地化字符串, 那么它会覆盖该字符串
扩展现有资源
继承资源可以创建新的资源, 无需修改现有的资源. 但是在某些情况下, 你可能不想创建新资源,而是直接扩展现有资源. 例如:
services.Configure<AbpLocalizationOptions>(options =>
{options.Resources.Get<TestResource>().AddVirtualJson("/Localization/Resources/Test/Extensions");
});
- 如果扩展文件定义了相同的本地化字符串, 那么它会覆盖该字符串.
获取本地化文本
服务器端
在服务端获取本地化文本的用法是非常标准的(它与AspNetCore提供的获取本地化资源方式无缝集成).
在类中简单的用法
public class MyService
{private readonly IStringLocalizer<TestResource> _localizer;public MyService(IStringLocalizer<TestResource> localizer){_localizer = localizer;}public void Foo(){var str = _localizer["HelloWorld"];}
}
在Razor视图/Page中简单的用法
@inject IHtmlLocalizer<TestResource> Localizer<h1>@Localizer["HelloWorld"]</h1>
有关在服务器端使用本地化的详细使用方法, 请参阅AspNetCore的本地化文档
客户端
ABP提供了JavaScript服务, 可以在客户端使用相同的本地化文本.
获取本地化资源:
var testResource = abp.localization.getResource('Test');
本地化字符串:
var str = testResource('HelloWorld');
入门系列- ABP 本地化相关推荐
- ABP入门系列(6)——定义导航菜单
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 完成了增删改查以及页面展示,这一节我们来为任务清单添加[导航菜单]. 在以往的项目中,大家可能会手 ...
- ABP入门系列(5)——展现层实现增删改查
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终 ...
- ABP入门系列(4)——创建应用服务
ABP入门系列目录--学习Abp框架之实操演练 1. 解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行 ...
- ABP入门系列(7)——分页实现
ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...
- ABP入门系列(14)——应用BootstrapTable表格插件
1. 引言 之前的文章ABP入门系列(7)--分页实现讲解了如何进行分页展示,但其分页展示仅适用于前台web分页,在后台管理系统中并不适用.后台管理系统中的数据展示一般都是使用一些表格插件来完成的.这 ...
- ABP入门系列(12)——如何升级Abp并调试源码
1. 升级Abp 本系列教程是基于Abp V1.0版本,现在Abp版本已经升级至V1.4.2,其中新增了New Feature,并对Abp做了相应的Enhancements,以及Bug fixs.现在 ...
- ABP入门系列(8)——Json格式化
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 讲完了分页功能,这一节我们先不急着实现新的功能.来简要介绍下Abp中Json的用法.为什么要在这一 ...
- abp.ajax get,ABP入门系列之Json格式化
讲完了分页功能,这一节我们先不急着实现新的功能.来简要介绍下Abp中Json的用法.为什么要在这一节讲呢?当然是做铺垫啊,后面的系列文章会经常和Json这个东西打交道. 一.Json是干什么的 JSO ...
- ABP入门系列(7)——分页实现_0
ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...
- [置顶]ABP入门系列目录——学习Abp框架之实操演练
本系列文章主要是基于ABP模板开发Mpa(多页面)『任务清单』项目. 由于是入门系列,不会用到代码生成器,每一行代码都是手动敲入. 源码已上传至Github-LearningMpaAbp,可自行参考. ...
最新文章
- unity3d中旋转
- 在一个数组中实现两个堆栈
- dellr320故障_dell r320服务器,idrac问题
- 只有mdf文件的恢复技术
- #周分享#骨架屏[Skeleton Screen]
- 第12章[12.3] Ext JSGrid中的超链接列及其功能实现
- Atitit.实现继承的原理and方法java javascript .net c# php ...
- wget 下载 设置cookie
- docker安装mysql后无法执行mysql命令
- (简历来自拉勾)H5前端工程师:
- 【Android实习】20场面试斩获大厂offer,我学会了什么
- React Native组件(三)Text组件解析
- linux与windows双系统windows无法连网问题的解决
- GeForce和TITAN产品 显卡计算能力
- 计算机教学word,计算机教学中word软件教学方法探究
- 实用分屏软件 Acer GridVista
- layui 表格操作列按钮动态显示变换
- 天猫店群访客多,转化低如何解决?规避4大因素,运营3大技巧
- 手把手教你安装虚拟机(官网下载VMware)
- Ops School Curriculum:巨细靡遗的运维小百科
热门文章
- Excel成神之道-005-用countif统计客人第几次进店
- linux ps 主进程,Linux ps 查看进程
- Cts框架解析(19)-设备状态的分类以及恢复模式的分类
- 20155307 2016-2017-2《Java程序设计》课程总结
- 将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
- 微信小程序授权登陆源码
- 中文维基百科数据处理
- “小case”在英语中的10种说法
- ∀x(P(x) → Q(x))和∀xP(x) → ∀xQ(x) 的区别
- 解决jinjia2 for循环变量作用域问题