ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Humanizer 日期人性化资源键机制解析:ResourceKeys.DateHumanize 类深入指南

Humanizer 日期人性化资源键机制解析:ResourceKeys.DateHumanize 类深入指南 开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载导读ResourceKeys.DateHumanize是 Humanizer 本地化体系中的一个核心工具类它按照既定命名约定为DateTime.Humanize日期人性化输出生成资源键。理解这一机制你就能明白 Humanizer 如何把3 分钟前2 天后这样的相对时间短语翻译成 100 多种语言的文案也能够在自定义 Formatter 或调试本地化问题时直接利用这些键。本文围绕该类展开结合仓库源码与测试梳理其字段、方法约定、调用链和自定义实践。类概览静态的键约定封装在 version-2.14.1 API 文档 中该类型被定义为public static class ResourceKeys.DateHumanize它是一个public static class不继承任何业务基类继承链仅为System.Object。类的职责正如其 XML 注释所述Encapsulates the logic required to get the resource keys for DateTime.Humanize——即封装为日期人性化获取资源键所需的一切逻辑。从整体架构看它位于 Humanizer 本地化Localisation子系统的键生成层消费方DefaultFormatter等 IFormatter 实现它们把资源键与具体本地化文本关联生成方ResourceKeys.DateHumanize提供约定式的键字符串数据源各个 Locale 的 YAML 短语表见 src/Humanizer/Locales。字段两个固定的常量资源键该类暴露两个public const string字段它们对应日期人性化中最特殊的两种状态——从未发生与此时此刻字段常量值语义ResourceKeys.DateHumanize.NeverDateHumanize_Never表示事件从未发生如null日期的文案键ResourceKeys.DateHumanize.NowDateHumanize_Now表示当前时刻的文案键两者的字段类型都是System.String。这两个键在 Humanizer 中形成了稳定的公共契约IFormatter接口就定义了对应的两个方法DateHumanize_Never()与DateHumanize_Now()见 IFormatter.csDefaultFormatter则在 DefaultFormatter.cs 中实现public virtual string DateHumanize_Now() phraseTable.DateNow ?? now; public virtual string DateHumanize_Never() phraseTable.DateNever ?? never;也就是说键名DateHumanize_Now/DateHumanize_Never与IFormatter的方法名一一对应这正是约定的体现。当某个 Locale 的短语表中缺少对应短语时DefaultFormatter会回退到英文默认值now与never多语言实现则由生成的 Locale 短语表提供例如日语短语表中DateHumanize_Now对应 今、泰米尔语对应 இப்போது、斯瓦希里语对应 ugbu a见 GeneratedFormatterRuntimeTests.cs。方法GetResourceKey 的约定生成规则GetResourceKey是类的核心方法原型为public static string GetResourceKey( Humanizer.Localisation.TimeUnit timeUnit, Humanizer.Localisation.Tense timeUnitTense, int count 1);三个参数的语义timeUnitTimeUnit时间单位枚举包含Millisecond、Second、Minute、Hour、Day、Week、Month、Year八个取值timeUnitTenseTense时态枚举Future表示未来如 in 2 daysPast表示过去如 2 days agocount单位数量int类型默认值为 1文档中注明 default is One。返回值的命名约定方法返回形如DateHumanize_SingleMinuteAgo的资源键。将返回值反推即可还原出完整的命名规则DateHumanize_ 单复数前缀 时间单位 时态后缀其中单复数前缀count为 1 时使用Single大于 1 时使用复数形式如Multiple时间单位取自TimeUnit枚举名如Minute、Hour、Day时态后缀Tense.Past对应AgoTense.Future对应FromNow。例如GetResourceKey(TimeUnit.Minute, Tense.Past, 1)生成DateHumanize_SingleMinuteAgoGetResourceKey(TimeUnit.Day, Tense.Future, 5)则会生成类似DateHumanize_MultipleDaysFromNow的键。这种命名约定让每个相对时间短语都拥有稳定、可预测、可调试的标识符也使得本地化短语表如 en.yml中的条目能够按键名自动映射。在 Humanize 调用链中的位置要理解ResourceKeys.DateHumanize的价值需要看清整条相对时间生成链路。以DateTime.Humanize()为例入口是 DateHumanizeExtensions.cs计算对比基准默认DateTime.UtcNow交由Configurator.DateTimeHumanizeStrategy处理策略层如 DefaultDateTimeHumanizeStrategy调用 DateTimeHumanizeAlgorithms.cs 中的算法把时间差换算成单位 时态算法最终调用formatter.DateHumanize(timeUnit, tense, count)见 DateTimeHumanizeAlgorithms.cs由DefaultFormatter从短语表取词渲染DefaultFormatter.cs短语表条目即由GetResourceKey这类约定键进行组织与查找。特殊情况下null的DateTime?会走DateHumanize_Never()返回 never 类文案DateHumanizeExtensions.cs这正是Never字段对应的场景当时间差不足 500ms 时算法直接以TimeUnit.Millisecond渲染此刻语义DateTimeHumanizeAlgorithms.cs对应Now字段的场景。测试与公共 API 契约该类型作为公共 API 被 PublicApiApprovalTest 锁定在多个目标框架的 verified 文件中如 DotNet10_0.verified.txt 中的DateHumanize_Never()与DateHumanize_Now()方法签名任何签名变更都会在 CI 中被捕获。此外GeneratedFormatterRuntimeTests.cs 和 CoverageGapTests.cs 会逐一验证各 Locale 的DateHumanize_Now/DateHumanize_Never输出以及英文回退值now、never确保键 → 多语言文案映射不会出现缺口。实践要点调试本地化缺失当某个语言缺少相对时间短语时DefaultFormatter会抛出InvalidOperationException其中包含 Culture 名与单位信息DefaultFormatter.cs。此时可利用GetResourceKey生成期望的键再到 src/Humanizer/Locales 对应 yml 中核对条目是否存在。扩展自定义 Formatter若继承DefaultFormatter实现自定义本地化应遵循DateHumanize_*键名约定命名短语条目保证与IFormatter接口方法及短语表解析逻辑兼容。了解回退行为缺少短语时默认回退英文 now/never因此对外呈现永远有兜底文案不会返回空字符串。小结ResourceKeys.DateHumanize用两个常量字段与一个静态方法把DateTime.Humanize的资源键约定固化成了可复用的公共 APINever/Now覆盖两种特殊状态GetResourceKey则按单复数 单位 时态的统一约定为常规相对时间生成键。它与IFormatter、DefaultFormatter及 Locale 短语表共同构成了 Humanizer 日期人性化本地化的完整链路是阅读和扩展该模块时最值得优先理解的入口之一。赞分享开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载相关推荐Humanizer 日期人性化资源键深入解析ResourceKeys.DateHumanize 的命名约定、生成逻辑与本地化机制Humanizer 日期人性化资源键深入解析ResourceKeys.DateHumanize 的命名约定、生成逻辑与本地化机制 ResourceKeys.D开发工具Humanizer 本地化资源键详解理解 ResourceKeys.DateHumanize 及其在日期人性化中的核心作用Humanizer 本地化资源键详解理解 ResourceKeys.DateHumanize 及其在日期人性化中的核心作用 本文围绕 Humanizer 中开发工具Humanizer 本地化资源键机制解析ResourceKeys.TimeSpanHumanize 与 GetResourceKey 深入指南Humanizer 本地化资源键机制解析ResourceKeys.TimeSpanHumanize 与 GetResourceKey 深入指南 Resourc开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表