当前位置: 首页 > news >正文

19 ABP Framework 本地化系统

ABP Framework 本地化系统

系统概述

ABP Framework 本地化系统基于 ASP.NET Core 本地化功能构建,提供模块化、可扩展的国际化和多语言支持基础设施,核心特点包括 JSON 格式资源文件、模块化资源组织及高级格式化功能。

系统架构

ABP 本地化系统由几个核心组件和代码实体组成,这些组件和实体负责管理资源的加载、存储和检索

  • LocalizationManager:用于检索本地化字符串的核心服务。
  • LocalizationResource:表示模块或域的一组翻译。
  • JsonResourceProvider:从 JSON 文件加载资源。
  • VirtualFileSystem:对文件访问进行抽象,允许资源嵌入或存储在磁盘上
Resource Files
abp_io/AbpIoLocalization
Used by
Used by
Used by
Reads
Reads
Reads
Reads
Commercial/Localization/Resources/en.json
Admin/Localization/Resources/en.json
Www/Localization/Resources/en.json
Base/Localization/Resources/en.json
VirtualFileSystem (class)
JsonResourceProvider (class)
LocalizationResource (class)
LocalizationManager (class)
Application Code
Razor Views
JavaScript Integration

资源文件与结构

  • 格式:采用 JSON 文件存储,每个文件对应特定文化
  • 结构示例
    {"culture": "en","texts": {"Menu:Organizations": "Organizations","Volo.AbpIo.Commercial:010003": "You are not the owner of this organization!","Welcome": "Welcome {0}"}
    }
    
  • 关键元素
    • culture:语言/文化代码(如 “en”、“zh-Hans”)
    • texts:本地化键值对字典
    • 支持参数化消息(如 {0})、分层命名空间键(如 Menu:Organizations)和错误代码键(如 Volo.AbpIo.Commercial:010003
Loaded by
Populates
Accessed by
en.json (file)
JsonResourceProvider (class)
LocalizationResource (class)
LocalizationManager (class)

模块化资源组织

Base Module
Www Module
Admin Module
Commercial Module
Base/en.json
Base/tr.json
Www/en.json
Www/tr.json
Admin/en.json
Admin/tr.json
Commercial/en.json
Commercial/tr.json
Commercial/zh-Hans.json
  • 每个模块(如 Commercial、Admin)管理自身的翻译资源
  • 模块可独立进行本地化和更新
  • 应用可按需包含所需模块和语言

多语言与文化支持

支持多种语言和文化,通过为每种文化代码提供资源文件实现,部分支持的语言及对应文化代码:

语言文化代码示例文件路径
英语enCommercial/Localization/Resources/en.json
土耳其语trCommercial/Localization/Resources/tr.json
简体中文zh-HansCommercial/Localization/Resources/zh-Hans.json
繁体中文zh-HantCommercial/Localization/Resources/zh-Hant.json
阿拉伯语arCommercial/Localization/Resources/ar.json
英式英语en-GBCommercial/Localization/Resources/en-GB.json

本地化键模式

模式类型示例键示例值/用法
简单键OrganizationManagementOrganization Management
分层键Menu:OrganizationsOrganizations
命名空间错误键Volo.AbpIo.Commercial:010003You are not the owner of this organization!
动态/参数化键{0}WillBeRemovedFromDevelopers{0} Will be removed from developers, do you confirm?

高级功能

  • 参数化消息:使用 {0}{1} 等占位符支持运行时替换,如 "LicenseExtendMessage": "Your license end date is extended to {0}"
  • HTML 字符串:本地化值可包含 HTML 标记用于 UI 渲染,如 "IndexPageHeroSection": "<span class=\"first-line\">A complete</span>..."
  • 复数形式:支持复数表达,如 "discountForYears": "{0}% discount for {1} year(s)"
  • 动态键:支持参数化键用于动态查找

应用集成

Uses
Uses
Uses
Resolved by
Uses
Backed by
Loads
UI Layer (Razor, Angular, Blazor)
IStringLocalizer (interface)
Application Layer
Domain Layer
LocalizationManager (class)
LocalizationResource (class)
JsonResourceProvider (class)
JSON Resource Files
  • 通过 IStringLocalizer 接口作为获取本地化字符串的主要入口
  • 所有层(UI、应用、领域)可通过统一方式访问本地化资源

最佳实践

  1. 按模块组织资源,保持模块化
  2. 使用一致的键命名约定
  3. 利用分层键( colon 分隔)处理具有自然层次的 UI 元素
  4. 对动态内容使用参数化消息,而非字符串拼接
  5. 对错误消息考虑使用命名空间错误代码以保持一致性
http://www.dtcms.com/a/331204.html

相关文章:

  • hashmap和concurrentHashmap是否允许null值和null健
  • PiscCode使用光流法计算漂浮物位移速度
  • 把 AI 推理塞进「 8 位 MCU 」——0.5 KB RAM 跑通关键词唤醒的魔幻之旅
  • 监控插件SkyWalking(一)原理
  • 嵌入式学习的第四十九天-时钟+EPIT+GPT定时器
  • 无人机探测器技术解析
  • 阿里巴巴 Qwen-Image:免费开源,还要挑战 GPT-4.1 和 Midjourney?
  • 恢复GPT-4o,增加付费配额:OpenAI的“补救措施”如何重塑用户金字塔
  • OpenCV ------图像基础处理(一)
  • 【OpenCV】Mat详解
  • 论,物联网日志系统架构如何设计?
  • AI增强SEO关键词表现
  • Postman 平替 技术解析:架构优势与实战指南
  • 审批流程系统设计与实现:状态驱动、灵活扩展的企业级解决方案
  • Java研学-RabbitMQ(八)
  • Rabbitmq+STS+discovery_k8s +localpv部署排坑详解
  • 队列的使用以及泛型思考[二叉树的层序遍历]
  • 【P27 4-8】OpenCV Python——Mat类、深拷贝(clone、copyTo、copy)、浅拷贝,原理讲解与示例代码
  • Horse3D游戏引擎研发笔记(五):在QtOpenGL环境下,仿three.js的BufferGeometry管理VAO和EBO绘制四边形
  • 算法训练营day51 图论② 岛屿数量深搜、广搜、最大面积
  • 图论(5)最小生成树算法
  • Claude Code 国内直接使用,原生支持 Windows 免WSL安装教程
  • Day56--图论--108. 冗余的边(卡码网),109. 冗余的边II(卡码网)
  • Day58--图论--117. 软件构建(卡码网),47. 参加科学大会(卡码网)
  • MySQL窗口函数与PyMySQL以及SQL注入
  • MySQLl中OFFSET 的使用方法
  • 中国AI生态加速迭代,AI硬件引领人机互动新范式
  • LeetCode 分类刷题:2302. 统计得分小于 K 的子数组数目
  • Gradle(四)Maven 项目迁移 Gradle 项目实践
  • 文件服务器:samba