SuperAPI AI 工具集

dotnet-localization

编程与开发

查看项目

更新于 10-16 01:14

技能介绍

用途:为 .NET 应用提供跨框架的国际化与本地化方案,涵盖资源格式、资源查找、格式化、RTL 与复数规则。基线为 .NET 8.0+,IStringLocalizer 自 .NET Core 1.0 稳定,本地化 API 自 .NET 5 稳定,.NET 9+ 特性会明确标注。

主要能力:.resx 资源文件与附属程序集,按 sr-Cyrl-RS → sr-Cyrl → sr → 默认资源 的文化回退链解析;默认 .resx 为唯一事实来源,翻译文件不得含默认文件之外的键。项目需设置 NeutralLanguage 并用 EmbeddedResource 引入各文化资源。可通过生成的强类型类或 ResourceManager 访问。

现代替代方案:JSON 资源(如 Senlin.Mo.Localization、Embedded.Json.Localization)适合轻量或配置密集项目,但缺少 .resx 的设计器与附属程序集工具支持;Native AOT 与裁剪场景建议用源生成器(ResXGenerator、VocaDb.ResXFileCodeGenerator)在编译期生成强类型访问器,避免运行时反射。

IStringLocalizer:通过 AddLocalization 注册,配合 UseRequestLocalization 配置支持的文化。IStringLocalizer<T> 可用于服务、控制器、Blazor 组件;IViewLocalizer 与 IHtmlLocalizer 仅限 MVC,Blazor 不支持。查找失败时可用 RootNamespaceAttribute 修正命名空间。

格式化与 RTL:CultureInfo.CurrentCulture 控制日期、数字、货币格式,CurrentUICulture 控制资源查找;服务端建议 useUserOverride: false。RTL 可用 TextInfo.IsRightToLeft 判断,Blazor 通过 CSS dir 属性,MAUI 用 FlowDirection,Uno 与 WPF 用 FlowDirection 属性。

复数处理:简单插值无法覆盖多语言复数规则,可用 MessageFormat.NET(CLDR 兼容)或 SmartFormat.NET。

框架集成:Blazor 仅支持 IStringLocalizer,WASM 需 BlazorWebAssemblyLoadAllGlobalizationData;MAUI 用 .resx 与 x:Static 绑定,需配置平台本地化清单;Uno 用 .resw 与 x:Uid,但 x:Uid 绑定需重启应用才切换文化;WPF 推荐 .resx 加 DynamicResource,避免 LocBaml。

限制:各框架深度实现模式需参考对应专项技能;源生成器编写(Roslyn API)不在范围内。