新闻详情

新闻详情

首页 / 资讯中心 / 详情

Humanizer 中 ResourceKeys.TimeUnitSymbol:TimeUnit.ToSymbol 资源键生成机制解析

发布时间:2026/9/29 2:54:54来源:尧图网络
Humanizer 中 ResourceKeys.TimeUnitSymbol:TimeUnit.ToSymbol 资源键生成机制解析
开发工具【免费下载链接】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.TimeUnitSymbol是 Humanizer 库中一个专门的静态类负责为TimeUnit.ToSymbol场景封装资源键Resource Key的生成逻辑。理解它可以帮你掌握时间单位TimeUnit如何通过约定式命名映射到本地化资源键、ToSymbol()扩展方法背后的格式化链路以及符号symbol资源在LocalePhraseTable中如何按文化解析与回退。读完本文你将能够准确使用TimeUnit.ToSymbol()并了解如何按约定扩展自定义文化的单位符号资源。ResourceKeys.TimeUnitSymbol 是什么按 Humanizer.ResourceKeys.TimeUnitSymbol.md 的定义该类的职责是Encapsulates the logic required to get the resource keys for TimeUnit.ToSymbol即封装获取TimeUnit.ToSymbol所需资源键的逻辑。它的类型声明如下public static class ResourceKeys.TimeUnitSymbol继承关系为System.Object→TimeUnitSymbol。整个类只有一个静态方法逻辑非常聚焦public static string GetResourceKey(Humanizer.TimeUnit unit);方法签名与行为成员说明方法名GetResourceKey(TimeUnit unit)可见性public static参数unit时间单位类型为 TimeUnit取值包括Millisecond、Second、Minute、Hour、Day、Week、Month、Year返回值System.String即资源键例如TimeSpanHumanize_SingleMinute按约定生成的资源键示例为TimeUnit_Minute、TimeUnit_Hour即以TimeUnit_为前缀拼接枚举名形成稳定的、可预测的键名。说明文档给出的返回示例同时提到了TimeSpanHumanize_SingleMinute这表明 TimeUnitSymbol 与时间跨度TimeSpan本地化共用同一套键的约定 按单位索引的解析模型下文源码分析会展示这一点。TimeUnit 枚举与 ToSymbol 的调用链TimeUnit 枚举定义TimeUnit定义在 TimeUnit.cs包含 8 个成员按索引顺序Millisecond, Second, Minute, Hour, Day, Week, Month, Year这个顺序至关重要LocalePhraseTable中所有单位相关数组都是按(int)unit索引的例如 LocalePhraseTable.cs 中的TryGetTimeUnitPhrase直接使用timeUnits[(int)unit]查找短语/符号。ToSymbol 扩展方法ToSymbol是 TimeUnitToSymbolExtensions.cs 中定义的扩展方法public static string ToSymbol(this TimeUnit unit, CultureInfo? culture null) Configurator.GetFormatter(culture).TimeUnitHumanize(unit);调用链为Configurator.GetFormatter(culture)获取当前文化对应的IFormatter未指定 culture 时使用当前线程文化调用IFormatter.TimeUnitHumanize(unit)接口定义见 IFormatter.csDefaultFormatter.TimeUnitHumanize从LocalePhraseTable中读取该单位的符号。DefaultFormatter 中的符号解析DefaultFormatter.TimeUnitHumanize见 DefaultFormatter.cspublic virtual string TimeUnitHumanize(TimeUnit timeUnit) { if (phraseTable.TryGetTimeUnitPhrase(timeUnit, out var generatedPhrase) generatedPhrase.Symbol is { } generatedSymbol) { return generatedSymbol; } throw new InvalidOperationException( $Missing generated time-unit phrase for {Culture.Name} and unit {timeUnit}.); }即优先返回LocalizedUnitPhrase.Symbol若缺失则抛异常提示该文化缺少生成的时间单位短语。LocalePhraseTable符号数据从哪来短语表的数据结构LocalePhraseTable见 LocalePhraseTable.cs中时间单位使用LocalizedUnitPhrase表示readonly record struct LocalizedUnitPhrase( LocalizedPhraseForms? Forms null, string? Symbol null, PhraseTemplate? Template null);Symbol字段即TimeUnitHumanize返回的符号文本。查找方法public string? GetTimeUnitSymbol(TimeUnit unit) GetTimeUnit(unit)?.Symbol;文化解析与回退机制LocalePhraseTableCatalog.ResolveLocalePhraseTable.cs按如下顺序查找短语表从指定文化开始沿culture.Parent链向上遍历如zh-CN→zh→ 不变文化找到第一个可解析的表即返回全部未命中则回退到enResolveCore(en)。因此ToSymbol在不同文化下会自动回退到父文化最终回退到英语。这也意味着资源键的约定式命名TimeUnit_*只是数据来源的一种形式化描述实际符号值由各文化的 yml 语言包经 SourceGenerator 生成。符号的实际输出测试验证ToSymbol在英语文化下的输出由测试用例固定下来见 TimeUnitToSymbolTests.cs[Theory] [InlineData(TimeUnit.Millisecond, ms)] [InlineData(TimeUnit.Second, s)] [InlineData(TimeUnit.Minute, min)] [InlineData(TimeUnit.Hour, h)] [InlineData(TimeUnit.Day, d)] [InlineData(TimeUnit.Week, week)] [InlineData(TimeUnit.Month, mo)] [InlineData(TimeUnit.Year, y)] public void ToSymbol(TimeUnit unit, string expected) Assert.Equal(expected, unit.ToSymbol());可见默认英语环境下的符号映射为ms、s、min、h、d、week、mo、y。这与ResourceKeys.TimeUnitSymbol的约定式键名 文化数据解析的设计目标一致键名负责定位符号文本负责展示。如何在实际项目中使用基本用法using Humanizer; // 默认当前线程文化 var symbol TimeUnit.Day.ToSymbol(); // den-US 等英语文化 // 指定文化 var deSymbol TimeUnit.Day.ToSymbol(new CultureInfo(de)); // T 等德语符号结合数量输出在 TimeSpanHumanizeExtensions.cs 中符号被拼接到数量之后string.Concat(amount.ToString(culture ?? CultureInfo.CurrentCulture), cultureFormatter.TimeUnitHumanize(timeUnit))这是TimeSpanHumanize以符号模式symbol 模式输出时的典型用法例如5 min之类的结果符号部分正是经由TimeUnitHumanize获取。扩展自定义文化符号仓库中所有文化的单位符号数据均来自 Locales/ 下的 yml 语言包由 Humanizer.SourceGenerators 编译期生成短语表。若需为某文化补充或修正符号应修改对应语言包中的时间单位symbol项后重新构建生成的LocalePhraseTableCatalog.ResolveCore(localeCode)会自动包含新数据。注意ResourceKeys.TimeUnitSymbol.GetResourceKey返回的是键名如TimeUnit_Minute而非符号文本本身实际展示文本由TimeUnit.ToSymbol()经 formatter 与短语表解析得出两者是约定定位 数据解析的关系。小结关注点结论类职责按约定生成TimeUnit.ToSymbol的资源键TimeUnit_*前缀唯一 APIGetResourceKey(TimeUnit unit)返回字符串键名底层数据LocalePhraseTable的LocalizedUnitPhrase.Symbol按(int)unit索引文化回退沿父文化链查找最终回退en默认英文符号ms/s/min/h/d/week/mo/y关联文件TimeUnit.cs、TimeUnitToSymbolExtensions.cs、DefaultFormatter.cs、TimeUnitToSymbolTests.cs对 Humanizer 而言ResourceKeys.TimeUnitSymbol代表的是一套约定命名 文化短语表解析的资源定位模式理解它就能快速定位任何语言的时间单位符号数据并准确使用ToSymbol()在界面或日志中输出紧凑的时间单位缩写。赞分享开发工具【免费下载链接】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.DateHumanizeDateTime.Humanize 资源键生成机制解析Humanizer 的 ResourceKeys.DateHumanizeDateTime.Humanize 资源键生成机制解析 本文围绕 Humanizer开发工具Humanizer 中 ResourceKeys.TimeSpanHumanize 的资源键机制TimeSpan.Humanize 本地化字符串的生成原理Humanizer 中 ResourceKeys.TimeSpanHumanize 的资源键机制TimeSpan.Humanize 本地化字符串的生成原理 导开发工具Humanizer 资源键ResourceKeys机制解析TimeSpan.Humanize 本地化资源定位原理Humanizer 资源键ResourceKeys机制解析TimeSpan.Humanize 本地化资源定位原理 导读 Humanizer 的 TimeS开发工具上一篇免费激活脚本MAS 一键激活 Win11 与 Office下一篇旧设备升级终极指南使用OpenCore Legacy Patcher实现系统支持完整方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

Zephyr BSP: 23-Zephyr 到底为什么会编译你的 SoC 代码? 2026/9/29 3:51:31

Zephyr BSP: 23-Zephyr 到底为什么会编译你的 SoC 代码?

Zephyr 启动流程摘要:本文从芯片真正开始执行指令的那一刻出发,追查 Zephyr 在 SoC 上电后的完整启动链路。核心结论是:Zephyr 并不存在一个所有架构统一的"第一行 C 代码",真正最早执行的是 ARCH-specific 的 reset/st…

阅读更多 →
原创丨什么人适合“养龙虾”——OpenClaw AI智能体时代的能力体检与避坑指南(TaoToken配置篇) 2026/9/29 3:51:30

原创丨什么人适合“养龙虾”——OpenClaw AI智能体时代的能力体检与避坑指南(TaoToken配置篇)

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

阅读更多 →
Claude Code 安装避坑指南:用 nvm 管好 Node,再配 TaoToken 统一 Key 2026/9/29 3:51:30

Claude Code 安装避坑指南:用 nvm 管好 Node,再配 TaoToken 统一 Key

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

阅读更多 →
C语言如何隐藏光标:TaoToken 统一 Key 接入终端工具链的配置骨架 2026/9/29 3:51:23

C语言如何隐藏光标:TaoToken 统一 Key 接入终端工具链的配置骨架

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

阅读更多 →
英国旅游签证行程单:可验证的旅行证据链构建指南 2026/9/29 3:51:10

英国旅游签证行程单:可验证的旅行证据链构建指南

简介:本资源是一份专为申请英国旅游签证设计的行程单模板文档,面向计划赴英短期旅行、需提交规范签证材料的申请人,解决行程单格式不标准、信息不完整、逻辑不合理等常见拒签风险。文档以Word(.doc)格式提供&#xff0…

阅读更多 →
在CodeArts里连通TaoToken:从AgentKernel到opencode.db的配置与验证 2026/9/29 3:51:10

在CodeArts里连通TaoToken:从AgentKernel到opencode.db的配置与验证

/* 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
📞 ✉