新闻详情

新闻详情

首页 / 资讯中心 / 详情

Humanizer 的 ResourceKeys.DateHumanize:DateTime.Humanize 资源键生成机制解析

发布时间:2026/9/29 2:18:25来源:尧图网络
Humanizer 的 ResourceKeys.DateHumanize:DateTime.Humanize 资源键生成机制解析
开发工具【免费下载链接】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静态类展开说明它如何为DateTime.Humanize()相对时间文案生成标准化的资源键Resource Key包括两个常量字段、一个按约定拼接键名的核心方法以及它在本地化 Formatter 链路中的实际调用位置与在 3.x 版本中的迁移边界。读完本文你将掌握DateHumanize_Never、DateHumanize_Now两个资源键的语义与用途GetResourceKey(TimeUnit, Tense, int)的签名、参数取值与返回约定该 API 与 DateHumanizeExtensions、DateTimeHumanizeAlgorithms、DefaultFormatter 之间的调用关系以及它在 Humanizer 3.0.10 中的兼容性状态属于稳定版保留 API移除是未来 4.0 的迁移边界。一、类定位为 DateTime.Humanize 生成资源键的静态工具类ResourceKeys.DateHumanize是一个public static class其职责概括为封装获取DateTime.Humanize所需资源键的逻辑。它不负责产出具体文案而是产出文案的键供本地化资源层按文化culture查找对应的翻译字符串。从继承关系看它直接继承System.Object即普通静态类无基类层级类签名如下public static class ResourceKeys.DateHumanize该类位于Humanizer.ResourceKeys命名空间下3.x 版本已将原先的Humanizer.Localisation.ResourceKeys命名空间迁移为Humanizer.ResourceKeys下文第五节详述。1.1 为什么要资源键而不直接返回文案从当前仓库源码可以确认Humanizer 3.x 的本地化实现已经演进为生成式短语表generated phrase table模式语言短语由 Humanizer.SourceGenerators 从 Locales 目录下的 YAML 数据 编译期生成DefaultFormatter通过LocalePhraseTableCatalog.Resolve(culture)解析对应文化的短语表见 DefaultFormatter.cs。在此体系下资源键是旧版基于.resx资源文件定位文案时代的核心约定在 3.0.10 中该类作为稳定兼容 API 保留同时短语表已逐步承担实际文案解析工作。二、常量字段Now 与 Never 两个特殊资源键类中定义了两个public const string字段均表示不需要数量词的特殊相对时间文案字段值语义NeverDateHumanize_Never表示从不/永不用于 null 日期NowDateHumanize_Now表示现在/刚刚用于时间差趋近于零public const string Never DateHumanize_Never; public const string Now DateHumanize_Now;字段类型均为System.String。这两个常量作为资源键时对应IFormatter接口中的DateHumanize_Never()与DateHumanize_Now()两个方法见 IFormatter.csNever 的典型调用点在 DateHumanizeExtensions.cs 中所有可空日期类型DateTime?、DateTimeOffset?、DateOnly?、TimeOnly?的Humanize()重载在输入为null时都会调用Configurator.GetFormatter(culture).DateHumanize_Never()返回never之类的文案见 DateHumanizeExtensions.cs。Now 的典型调用点DateTimeHumanizeAlgorithms在计算出的秒数、分钟数均为 0即时间差小于 1 秒时以TimeUnit.MillisecondTense.Pastcount 0调用 Formatter见 DateTimeHumanizeAlgorithms.cs命中 DefaultFormatter.cs 中的DateHumanize_Now()/DateHumanize_Today()分支输出now/today。三、核心方法GetResourceKey(TimeUnit, Tense, int)这是本类唯一的实例逻辑方法静态类中的静态方法负责按命名约定生成资源键public static string GetResourceKey(Humanizer.TimeUnit timeUnit, Humanizer.Tense timeUnitTense, int count 1);3.1 参数说明参数类型说明取值范围timeUnitTimeUnit时间单位Millisecond、Second、Minute、Hour、Day、Week、Month、YeartimeUnitTenseTense该时间单位是未来还是过去Future如 in 2 days、Past如 2 days agocountSystem.Int32单位数量默认值为 1即 One整数含 0表示零/接近零3.2 返回值约定方法返回形如DateHumanize_SingleMinuteAgo的资源键字符串即按以下约定拼装前缀固定为DateHumanize_中间部分根据count是否为 1 取Single或Multiple单数/复数形态结尾部分由TimeUnit名称 方向过去Ago/ 未来FromNow组合而成。由此可知键名所指向的资源值通常是一段带{0}占位符的模板文案例如DateHumanize_MultipleMinutesAgo对应{0} minutes ago由 Formatter 在渲染时把具体数量填入占位符。3.3 与 TimeUnit、Tense 枚举的对应关系GetResourceKey的两个枚举参数直接来自 Humanizer 的相对时间模型TimeUnit.cs 定义 8 个时间单位从毫秒到年Tense.cs 定义Future/Past两个方向。在 DateTimeHumanizeAlgorithms.cs 中可以看到完整的换算链路算法从大到小依次计算年、月、日、小时、分钟、秒的差值然后调用formatter.DateHumanize(timeUnit, tense, count)—— 这正是资源键约定的三个维度单位、方向、数量。因此GetResourceKey可以视为这条调用链上键生成约定的显式表达而 Formatter 的实际实现DefaultFormatter.DateHumanize则直接查询生成式短语表见 DefaultFormatter.cs。四、在 Humanize 调用链中的位置将上文梳理的调用关系汇总如下用户调用dateTime.Humanize()扩展方法见 DateHumanizeExtensions.cs交由Configurator.DateTimeHumanizeStrategy.Humanize(input, comparisonBase, culture)处理策略内部由 DateTimeHumanizeAlgorithms 计算时间差并选择TimeUnit、Tense、count调用formatter.DateHumanize(timeUnit, tense, count)产出本地化文案在旧版.resx资源体系下ResourceKeys.DateHumanize.GetResourceKey(...)就是第 4 步中定位资源条目所用的键名生成器在 3.0.10 的短语表体系中同一约定仍体现在键的命名结构DateHumanize_前缀 单位 方向上。因此ResourceKeys.DateHumanize是理解 Humanizer 相对时间本地化键命名约定的最佳切入点也是自定义IFormatter实现实现 IFormatter.cs 接口时可供参考的键约定依据。五、版本与迁移边界3.x → 4.x本 API 文档对应Humanizer 3.0.10版本。根据仓库内 version-3-migration.mdx 的明确说明Resources或ResourceKeys在 Humanizer 3 的稳定版本直至3.0.10中保留其移除是未来Humanizer 4的迁移边界。也就是说在 3.0.10 中ResourceKeys.DateHumanize以及ResourceKeys.TimeSpanHumanize、ResourceKeys.TimeUnitSymbol等同族类型仍是公开 API可从代码中直接引用命名空间方面从 2.x 的Humanizer.Localisation.ResourceKeys.DateHumanize迁移为 3.x 的Humanizer.ResourceKeys.DateHumanize计划迁移到 4.x 的代码应避免继续依赖ResourceKeys系列类型转而使用IFormatter/DefaultFormatter提供的短语表驱动接口。如果你在仓库中搜索DateHumanize_Never或GetResourceKey(可以看到该约定在 DefaultFormatter.cs、DateHumanizeExtensions.cs 以及tests/Humanizer.Tests/ApiApprover/下的公共 API 快照文件如PublicApiApprovalTest.Approve_Public_Api.DotNet10_0.verified.txt中均有对应痕迹后者通过 API 批准测试锁定了该 API 的公开签名。六、小结ResourceKeys.DateHumanize虽然只是 Humanizer 中一个很小的静态工具类但它承载着相对时间本地化的核心命名约定两个常量Never、Now对应无需数量词的特殊文案键一个方法GetResourceKey(TimeUnit, Tense, int)把时间单位 时态方向 数量三要素按约定编码为资源键字符串它是DateTime.Humanize()全链路扩展方法 → 策略算法 → Formatter → 资源/短语表中连接语义参数与文案键的桥梁在 3.0.10 中仍属稳定 API但已被标记为 4.0 的迁移移除边界新代码应优先面向IFormatter接口编程。相关源码与测试可继续阅读扩展方法入口DateHumanizeExtensions.cs时间差算法DateTimeHumanizeAlgorithms.csFormatter 接口与默认实现IFormatter.cs、DefaultFormatter.cs时间单位与时态枚举TimeUnit.cs、Tense.cs语言数据源Locales 目录赞分享开发工具【免费下载链接】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.TimeSpanHumanize 的资源键机制TimeSpan.Humanize 本地化字符串的生成原理Humanizer 中 ResourceKeys.TimeSpanHumanize 的资源键机制TimeSpan.Humanize 本地化字符串的生成原理 导开发工具Humanizer 资源键机制解析TimeUnitSymbol 与 TimeUnit.ToSymbol 的本地化原理Humanizer 资源键机制解析TimeUnitSymbol 与 TimeUnit.ToSymbol 的本地化原理 ResourceKeys.TimeUni开发工具Humanizer 资源键ResourceKeys机制解析TimeSpan.Humanize 本地化资源定位原理Humanizer 资源键ResourceKeys机制解析TimeSpan.Humanize 本地化资源定位原理 导读 Humanizer 的 TimeS开发工具上一篇**快速入门quick-lint-jsJavaScript代码检查工具实战指南**下一篇从零开始3小时掌握Kohya_SS AI绘画模型训练创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

fabio 动态 Gzip 压缩配置指南:用 proxy.gzip.contenttype 按 Content-Type 实现 HTTP 响应压缩 2026/9/29 5:12:04

fabio 动态 Gzip 压缩配置指南:用 proxy.gzip.contenttype 按 Content-Type 实现 HTTP 响应压缩

后端API网关微服务 【免费下载链接】fabio Consul Load-Balancing made simple 项目地址: https://gitcode.com/gh_mirrors/fa/fabio 点击查看 免费下载 fabio(Consul Load-Balancing made simple)自 1.3.4 版本起内置了基于内容类型&#x…

阅读更多 →
[x-cmd] Codex 0.105.0 语音转文字与子代理配置:TaoToken 统一 Key 接入 settings.json 骨架 2026/9/29 5:12:04

[x-cmd] Codex 0.105.0 语音转文字与子代理配置:TaoToken 统一 Key 接入 settings.json 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
用MFC开发迷宫游戏:从消息循环到GDI双缓冲的完整实践 2026/9/29 5:12:03

用MFC开发迷宫游戏:从消息循环到GDI双缓冲的完整实践

简介:一份基于MFC框架编写的简单迷宫游戏完整源码工程,面向C与Windows程序设计初学者,帮助理解MFC窗口应用与经典寻路算法的结合。工程包共45个文件,压缩后约2.13MB,以Visual C 6.0项目为主,包含7个.h与6个…

阅读更多 →
Claude Code 工具系统拆解:运行时流水线与并发调度配置实战 2026/9/29 5:11:57

Claude Code 工具系统拆解:运行时流水线与并发调度配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
IDC综合布线施工工艺要求全解:从设计选型到验收取证 2026/9/29 5:11:57

IDC综合布线施工工艺要求全解:从设计选型到验收取证

简介:数据中心综合布线施工及工艺要求是一份面向数据中心建设与运维人员的PPT教程,重点解决综合布线工程中设备安装、线路敷设与端接工艺的执行标准问题。内容涵盖中心机架、配线架、信息面板等核心设备认知,T568B双绞线线序与25对大对数电缆…

阅读更多 →
状态转移矩阵四大求法:从矩阵指数到工程实战 2026/9/29 5:11:51

状态转移矩阵四大求法:从矩阵指数到工程实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉