尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

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

发布时间:2026/9/29 2:54:54

资讯中心
01
ARTICLE

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

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),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。