跳转到内容

XiHan.Framework.Localization

国际化:JSON 资源文件加载、动态文化切换、枚举本地化的具体实现。

  • NuGetXiHan.Framework.Localization
  • 模块类XiHanLocalizationModule
  • 所在层:基础设施层

这是什么

XiHan.Framework.Localization 是国际化抽象层的具体实现。它以 JSON 资源文件为主、ResourceManager(.resx)为回退,加载多语言文本;通过请求中间件按请求头动态切换当前文化;并提供枚举字段级的本地化服务。资源经由虚拟文件系统加载,支持物理路径与嵌入式资源。

何时使用

  • 应用需要多语言支持,用 JSON 文件维护各语言文案。
  • 需要按请求头(默认 X-Language)或 Accept-Language 动态切换语言,并支持父文化/默认文化回退。
  • 需要把枚举值本地化为带标签、描述等元数据的展示项。

安装

bash
dotnet add package XiHan.Framework.Localization

启用

csharp
[DependsOn(typeof(XiHanLocalizationModule))]
public class MyModule : XiHanModule { }

模块在 ConfigureServices 中调用 AddXiHanLocalization(config),从配置节 XiHan:Localization 绑定 XiHanLocalizationOptions,并注册 JSON 优先的 IStringLocalizerFactory 与枚举本地化服务。文化切换由请求中间件在运行时完成。

核心能力

  • JSON 资源加载:基于虚拟文件系统动态加载 JSON 资源,从路径或元数据解析资源名与文化码,支持磁盘与嵌入式资源。
  • JSON 优先、ResourceManager 回退XiHanStringLocalizerFactory 优先查 JSON,miss 时回退 .resx;无 backing 程序集时用 NullStringLocalizer 兜底避免崩溃。
  • 动态文化切换XiHanRequestCultureMiddleware 按请求头 → Accept-Language → 默认文化解析并设置当前文化,支持父文化与默认文化回退。
  • 枚举本地化EnumLocalizationService 按类型查询枚举,返回含 Label、Description 等元数据的 LocalizedEnumDefinition
  • 动态资源重载:监听虚拟文件系统变化自动重载资源,可通过 EnableDynamicJsonReload 开关。

主要类型

类型说明
XiHanLocalizationModule模块入口类
XiHanStringLocalizerFactoryIStringLocalizerFactory 实现(JSON 优先)
XiHanJsonStringLocalizerIStringLocalizer 实现(JSON + 回退)
JsonLocalizationResourceStoreJSON 资源存储与加载器
EnumLocalizationServiceIEnumLocalizationService 实现
XiHanRequestCultureMiddleware请求文化解析中间件
XiHanLocalizationOptions本地化配置选项(配置节 XiHan:Localization

快速示例

csharp
// 通过依赖注入使用标准本地化接口
public class MyService(IStringLocalizer<MyService> localizer)
{
    public string Hello() => localizer["HelloWorld"];
}

依赖模块

相关模块

Released under The MIT License.