入门系列- ABP 本地化

摘要:
本地化ABP的本地化系统与Microsoft.Extensions.Localization无缝集成,并与AspnetCore的本地化文档兼容.它添加了一些实用功能和增强功能,使其更易于在实际开发中应用.Volo.Abp.LocalizationPackage启动模板默认已经安装了此nuget包,所以在大多数情况下,你不需要手动安装它.Volo.Abp.Localization是本地化系统的核心包

本地化

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 本地化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java线上内存溢出问题排查步骤Lucas定理(卢卡斯定理)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

把ABP框架部署到Docker中

本文旨在将Abp项目部署到Docker容器中,借助Gitee存储,Jenkins持续构建,利用Docker Compose生成镜像、启动镜像,在官网给定的Abp项目中,虽然用到了Dockerfile、Docker Compose,但是没有资料指明该如何使用这两个文件,借此我通过改造这两个文件来完成Abp部署任务。 一、前期准备工作 1、把从Abp官网下载下...

ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十三节--RBAC模式及ABP权限管理(附赠福利)

ABP+AdminLTE+Bootstrap Table权限管理系统一期Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate-Project-CMS 角色访问控制(RBAC) 角色访问控制(RBAC)应该是目前用得最多也是关注最多的权限管理模型了。 权限(Permission)与角色(...

ABP+AdminLTE+Bootstrap Table权限管理系统第六节--abp控制器扩展及json封装以及6种处理时间格式化的方法

返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期   一,控制器AbpController    说完了Swagger ui 我们再来说一下abp对控制器的处理和json的封装.    首先我们定义一个控制器,在新增控制器的时候,控制器会自动继承自AbpController,AbpController对ASP.NET M...

浅入 ABP 系列(7):对象映射

目录 基础 DTO和实体 麻烦的映射 AutoMapper 集成 IObjectMapper/ObjectMapper 对象拓展 写博客的过程中,发现很多基础理论太薄弱,因此很多专业词汇可能会解释错误或者不准确,建议读者多参考官方文档或者其它书籍。 本篇主要讲解 ABP 中如何配置、使用对象映射,其中大部分跟 AutoMapper 这个框架有...

ABP+AdminLTE+Bootstrap Table权限管理系统一期

       初衷    学而时习之,不亦说乎,温顾温知新,可以为师矣.           看懂远不如动手去做,动手做才能发现很多自己不懂的问题,不断的反思和总结,“乐于分享是一种境界的突破”。" 分享是很有意思,也是可以锻炼人的。 分享意味着自我的不断净化提升,不给自己后退的余地。为什么这么说呢?因为:一,分享的就是你所知道的,你所知道的是你投资时间...

基于Abp VNext框架设计

abp 通过IDistributedEventBus接口集成自IEventBus实现分布式事件消息的发布订阅。 IEventBus在什么时机触发PublishAsync? 当前UnitOfWork完成时,触发IEventBus的PublishAsync 在没有事务环境下,同步调用IEventBus的PublishAsync abp 默认实现基于Ra...