本地化

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 本地化相关推荐

  1. ABP入门系列(6)——定义导航菜单

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 完成了增删改查以及页面展示,这一节我们来为任务清单添加[导航菜单]. 在以往的项目中,大家可能会手 ...

  2. ABP入门系列(5)——展现层实现增删改查

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终 ...

  3. ABP入门系列(4)——创建应用服务

    ABP入门系列目录--学习Abp框架之实操演练 1. 解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行 ...

  4. ABP入门系列(7)——分页实现

    ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...

  5. ABP入门系列(14)——应用BootstrapTable表格插件

    1. 引言 之前的文章ABP入门系列(7)--分页实现讲解了如何进行分页展示,但其分页展示仅适用于前台web分页,在后台管理系统中并不适用.后台管理系统中的数据展示一般都是使用一些表格插件来完成的.这 ...

  6. ABP入门系列(12)——如何升级Abp并调试源码

    1. 升级Abp 本系列教程是基于Abp V1.0版本,现在Abp版本已经升级至V1.4.2,其中新增了New Feature,并对Abp做了相应的Enhancements,以及Bug fixs.现在 ...

  7. ABP入门系列(8)——Json格式化

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 讲完了分页功能,这一节我们先不急着实现新的功能.来简要介绍下Abp中Json的用法.为什么要在这一 ...

  8. abp.ajax get,ABP入门系列之Json格式化

    讲完了分页功能,这一节我们先不急着实现新的功能.来简要介绍下Abp中Json的用法.为什么要在这一节讲呢?当然是做铺垫啊,后面的系列文章会经常和Json这个东西打交道. 一.Json是干什么的 JSO ...

  9. ABP入门系列(7)——分页实现_0

    ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...

  10. [置顶]ABP入门系列目录——学习Abp框架之实操演练

    本系列文章主要是基于ABP模板开发Mpa(多页面)『任务清单』项目. 由于是入门系列,不会用到代码生成器,每一行代码都是手动敲入. 源码已上传至Github-LearningMpaAbp,可自行参考. ...

最新文章

  1. unity3d中旋转
  2. 在一个数组中实现两个堆栈
  3. dellr320故障_dell r320服务器,idrac问题
  4. 只有mdf文件的恢复技术
  5. #周分享#骨架屏[Skeleton Screen]
  6. 第12章[12.3] Ext JSGrid中的超链接列及其功能实现
  7. Atitit.实现继承的原理and方法java javascript .net c# php ...
  8. wget 下载 设置cookie
  9. docker安装mysql后无法执行mysql命令
  10. (简历来自拉勾)H5前端工程师:
  11. 【Android实习】20场面试斩获大厂offer,我学会了什么
  12. React Native组件(三)Text组件解析
  13. linux与windows双系统windows无法连网问题的解决
  14. GeForce和TITAN产品 显卡计算能力
  15. 计算机教学word,计算机教学中word软件教学方法探究
  16. 实用分屏软件 Acer GridVista
  17. layui 表格操作列按钮动态显示变换
  18. 天猫店群访客多,转化低如何解决?规避4大因素,运营3大技巧
  19. 手把手教你安装虚拟机(官网下载VMware)
  20. Ops School Curriculum:巨细靡遗的运维小百科

热门文章

  1. Excel成神之道-005-用countif统计客人第几次进店
  2. linux ps 主进程,Linux ps 查看进程
  3. Cts框架解析(19)-设备状态的分类以及恢复模式的分类
  4. 20155307 2016-2017-2《Java程序设计》课程总结
  5. 将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
  6. 微信小程序授权登陆源码
  7. 中文维基百科数据处理
  8. “小case”在英语中的10种说法
  9. ∀x(P(x) → Q(x))和∀xP(x) → ∀xQ(x) 的区别
  10. 解决jinjia2 for循环变量作用域问题