项目

语言管理模块(专业版)

需拥有 ABP团队版或更高授权 方可使用此模块。

该模块实现了应用程序的语言管理系统:

  • 管理系统中的语言
  • 翻译界面文本
  • 启用/禁用语言
  • 在界面中选择默认语言

模块功能概览请参阅模块介绍页面

安装方法

语言管理模块已预装在 启动模板 中,无需手动安装。

程序包

本模块遵循 模块开发最佳实践指南,包含多个NuGet和NPM程序包。如需了解各程序包及其关联关系,请查阅该指南。

可访问语言管理模块程序包列表页面查看相关程序包。

用户界面

菜单项

语言管理模块在"主菜单"的"管理"菜单项下添加以下内容:

  • 语言设置:语言管理页面
  • 语言文本:语言文本管理页面

菜单项名称常量定义于LanguageManagementMenuNames类中。

页面功能

语言设置

语言页面用于管理系统中的语言。

语言管理页面

在此页面可创建新语言或编辑现有语言:

语言编辑弹窗

  • 启用的语言可被选为系统语言

语言文本

语言文本页面用于管理不同语言的文本内容。

语言文本管理页面

在此页面可为特定语言翻译文本或编辑现有翻译。

语言文本编辑弹窗

数据种子

运行.DbMigrator应用程序时,本模块会向数据库添加初始数据(参见数据种子系统):

  • 创建通过AbpLocalizationOptions配置的语言记录

如需修改预置语言列表,请参阅本地化文档

内部实现

领域层

聚合体

本模块遵循实体最佳实践与规范

语言核心
  • Language(聚合根):代表系统中的语言
  • LanguageText(聚合根):代表系统中的语言文本
动态本地化
  • LocalizationResourceRecord(聚合根):代表系统中的本地化资源
  • LocalizationTextRecord(聚合根):代表本地化资源的所有文本内容

存储库

本模块遵循存储库最佳实践与规范

为此模块定义的自定义存储库:

  • ILanguageRepository
  • ILanguageTextRepository
  • ILocalizationResourceRecordRepository
  • ILocalizationTextRecordRepository

领域服务

本模块未定义任何领域服务。

设置管理

本模块未定义任何设置项。

应用层

应用服务

  • LanguageAppService(实现ILanguageAppService):实现语言管理界面的用例
  • LanguageTextAppService(实现ILanguageTextAppService):实现语言文本管理界面的用例

数据库支持

通用配置

表/集合前缀与架构

所有表/集合默认使用Abp前缀。如需修改表前缀或设置架构名(取决于数据库提供商支持),请设置LanguageManagementDbProperties类的静态属性。

连接字符串

本模块使用AbpLanguageManagement作为连接字符串名称。若未定义该名称的连接字符串,将回退至Default连接字符串。

详细信息请参阅连接字符串文档

Entity Framework Core

数据表
  • AbpLanguages
  • AbpLanguageTexts
  • AbpLocalizationResources
  • AbpLocalizationTexts

MongoDB

集合
  • AbpLanguages
  • AbpLanguageTexts
  • AbpLocalizationResources
  • AbpLocalizationTexts

权限控制

本模块定义的所有权限请参阅LanguageManagementPermissions类的成员。

Angular界面

安装配置

要配置应用使用语言管理模块,首先需要从@volo/abp.ng.language-management/config导入provideLanguageManagementConfig,然后将其加入appConfig数组。

// app.config.ts
import { provideLanguageManagementConfig } from '@volo/abp.ng.language-management/config';

export const appConfig: ApplicationConfig = {
  providers: [
    // ...
    provideLanguageManagementConfig()
  ],
};

语言管理模块需通过路由数组进行导入和懒加载。该模块提供静态方法createRoutes用于配置,可用选项如下所示。可从@volo/abp.ng.language-management导入。

// app.routes.ts

const APP_ROUTES: Routes = [
  // ...
  {
    path: 'language-management',
    loadChildren: () =>
      import('@volo/abp.ng.language-management').then(c => c.createRoutes(/* 此处填入配置选项 */)),
  },
];

若通过启动模板生成项目,则无需额外配置,因这两项配置均已预置实现。

配置选项

通过向createRoutes静态方法传递以下选项,可修改模块页面的外观和行为:

服务/模型

语言管理模块的服务和模型通过 ABP CLIgenerate-proxy 命令生成。如需模块代理,可在Angular项目目录运行:

abp generate-proxy --module languageManagement

可替换组件

eLanguageManagementComponents枚举提供所有可替换组件的键值,可从@volo/abp.ng.language-management导入。

详细信息请参阅组件替换文档

远程接口地址

语言管理模块的远程接口地址可在环境文件中配置:

export const environment = {
  // 其他配置项
  apis: {
    default: {
      url: '默认地址',
    },
    LanguageManagement: {
      url: '语言管理远程地址'
    }
    // 其他接口配置
  },
};

语言管理模块的远程地址配置为可选项。若未设置,将自动回退使用default.url

分布式事件

本模块定义以下事件传输对象(ETO),用于订阅模块实体的变更:

  • LanguageEto:在Language实体发生变更时发布
  • LanguageTextEto:在LanguageText实体发生变更时发布

示例:获取新租户创建通知

public class MyHandler :
    IDistributedEventHandler<EntityCreatedEto<LanguageEto>>,
    ITransientDependency
{
    public async Task HandleEventAsync(EntityCreatedEto<LanguageEto> eventData)
    {
        LanguageEto language = eventData.Entity;
        // 处理逻辑...
    }
}

LanguageEtoLanguageTextEto已配置为自动发布事件。其他事件需自行配置。预定义事件详情请参阅分布式事件总线文档

订阅分布式事件在分布式场景(如微服务架构)中特别有用。若正在开发单体应用或在运行租户管理模块的同一进程中监听事件,订阅本地事件可能更高效便捷。

在本文档中