ARTICLE DETAIL

资讯详情

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

Humanizer GrammaticalGender 枚举详解:多语言数字与序数词性别变体实战指南

Humanizer GrammaticalGender 枚举详解:多语言数字与序数词性别变体实战指南 开发工具【免费下载链接】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 中的GrammaticalGender是一个用于指定输出词语语法性别的枚举它解决了数字转单词如基数词、序数词以及部分本地化格式化场景中同一个数字因修饰对象性别不同而词形不同的问题。本文以 Humanizer.GrammaticalGender 枚举文档 为主线结合仓库源码与测试用例讲解它的三个成员、底层调用链ToWords/ToOrdinalWords/Ordinalize等扩展方法、支持性别变体的语言范围以及实际项目中的选型与注意事项。GrammaticalGender 是什么GrammaticalGender是定义在Humanizer命名空间下的一个公开枚举位于 src/Humanizer/GrammaticalGender.cs其文档注释明确说明它的用途Options for specifying the desired grammatical gender for the output words即为输出的单词指定期望的语法性别选项。在英语这类无语法性别的语言中数字转单词输出与性别无关但在俄语、希伯来语、阿拉伯语、西班牙语、德语、波兰语、捷克语等语言中基数词、序数词甚至时间单位词会随修饰对象阳性/阴性/中性名词发生词形变化。GrammaticalGender正是 Humanizer 将这些语言能力统一暴露给调用方的入口。枚举声明与源码完全一致public enum GrammaticalGender { Masculine, // 阳性值为 0 Feminine, // 阴性值为 1 Neuter // 中性值为 2 }从源码看枚举成员没有显式赋值因此底层数值按声明顺序从 0 开始递增。三个成员的含义与使用边界Masculine阳性0表示阳性语法性别。在支持性别变体的语言中它是多数数字转换器的默认性别。从 src/Humanizer/Localisation/NumberToWords/GenderedNumberToWordsConverter.cs 的源码可见abstract class GenderedNumberToWordsConverter(GrammaticalGender defaultGender GrammaticalGender.Masculine) : INumberToWordsConverter基类默认以Masculine作为转换器的默认性别派生语言转换器未显式指定性别时Convert(number)、ConvertToOrdinal(number)等无性别重载都会回落到defaultGender。这意味着对同一语言不带性别参数调用与显式传Masculine调用结果通常一致。Feminine阴性1表示阴性语法性别。典型场景如俄语数字 11.ToWords(GrammaticalGender.Masculine)输出один而1.ToWords(GrammaticalGender.Feminine)输出одна希伯来语中同样表现为אחד与אחת。这些示例直接记录在 NumberToWordsExtension.cs 的扩展方法 XML 注释中。Neuter中性2表示中性语法性别。例如在 PhraseClockNotationConverter.cs 的时钟短语转换器中hourValue与minutes按GrammaticalGender.Feminine/Neuter/Masculine分支分别调用ToWords(gender, culture)斯洛伐克语序数词 1 的三种形式也在 NumberToWordsExtension.cs 的TryGetNativeFirstOrdinalWord中体现Masculine为prvý、Feminine为prvá、Neuter为prvé。性别在调用链中的流转方式GrammaticalGender通过两类扩展方法进入本地化管线数字转单词NumberToWordsExtension.csint/long上的ToWords(gender, culture)、ToWords(wordForm, gender, culture)最终调用Configurator.GetNumberToWordsConverter(culture).Convert(number, gender)由对应语言的INumberToWordsConverter实现完成词形选择。序数化OrdinalizeExtensions.csint/long/string上的Ordinalize(gender, culture)、Ordinalize(gender, wordForm, culture)等重载最终落到Configurator.Ordinalizers.ResolveForCulture(culture).Convert(...)。string重载内部先用当前区域设置的数字格式解析字符串ParseOrdinalNumber再交给 IOrdinalizer 处理。底层方面GenderedNumberToWordsConverter作为性别敏感语言数字转换器的抽象基类把无性别重载统一路由到带性别实现派生类型只需按语言实际情况覆写性别相关成员DefaultFormatter中也保留了GetTimeUnitGender这样的内部钩子见 src/Humanizer/Localisation/Formatters/DefaultFormatter.cs说明性别信息还会渗透到时间单位等更细粒度的本地化输出中。实战用法数字转单词以俄语ru为例性别会直接改变基数词的输出using Humanizer; using System.Globalization; var ru new CultureInfo(ru); // 阳性один一个苹果яблоко 为中性时另说这里仅演示词形 Console.WriteLine(1.ToWords(GrammaticalGender.Masculine, ru)); // один Console.WriteLine(1.ToWords(GrammaticalGender.Feminine, ru)); // одна西班牙语es则体现为词尾变化与词形WordForm的组合。ToWords同时支持WordForm与GrammaticalGender文档注释中给出的典型输出using Humanizer; using System.Globalization; var es new CultureInfo(es-ES); 21.ToWords(WordForm.Normal, GrammaticalGender.Masculine, es); // veintiuno 21.ToWords(WordForm.Abbreviation, GrammaticalGender.Masculine, es); // veintiún 21.ToWords(WordForm.Normal, GrammaticalGender.Feminine, es); // veintiuna如 veintiuna personas希伯来语he同样是性别敏感的典型语言1.ToWords(GrammaticalGender.Masculine)→אחד1.ToWords(GrammaticalGender.Feminine)→אחת。需要注意不携带性别参数调用ToWords(int, CultureInfo)时将使用转换器配置的默认性别通常为Masculine因此对性别敏感语言建议按修饰对象的实际语法性别显式传参。实战用法序数词性别敏感语言的序数词ToOrdinalWords与Ordinalize均提供带性别重载。以巴西葡萄牙语pt-BR为例文档与 OrdinalizeExtensions.cs 注释均给出using Humanizer; // 数字转序数单词pt-BR 1.ToOrdinalWords(GrammaticalGender.Masculine); // primeiro 1.ToOrdinalWords(GrammaticalGender.Feminine); // primeira // 字符串/数字序数化pt-BR 1.Ordinalize(GrammaticalGender.Masculine); // 1º 1.Ordinalize(GrammaticalGender.Feminine); // 1ª西班牙语序数词同时受性别与词形影响测试用例OrdinalizeTests.cs给出的断言包括// es-ES 1.Ordinalize(WordForm.Normal, GrammaticalGender.Masculine, new CultureInfo(es-ES)); // 1.º 1.Ordinalize(WordForm.Abbreviation, GrammaticalGender.Masculine, new CultureInfo(es-ES)); // 1.er 1.Ordinalize(WordForm.Normal, GrammaticalGender.Feminine, new CultureInfo(es-ES)); // 1.ª性别无关语言的幂等行为对英语en-US等性别无关语言性别参数不会改变输出测试断言1.Ordinalize(WordForm.Normal, GrammaticalGender.Masculine, en-US)与GrammaticalGender.Feminine的结果均为1st。德语de测试GermanGenderedOrdinalTests.cs也验证了这一点无论传Masculine、Feminine还是Neuter1.Ordinalize(gender, de)输出都是1.。也就是说在性别无关语言中传入任何性别值都是安全的不会产生错误输出。支持性别变体的语言全景从仓库测试目录tests/Humanizer.Tests/Localisation/可以系统梳理出带有性别化测试的语言包括但不限于斯拉夫语族俄语ru、乌克兰语uk、保加利亚语bg、塞尔维亚语sr / sr-Latn、克罗地亚语hr、斯洛文尼亚语sl、斯洛伐克语sk、捷克语cs、波兰语pl、马其顿语mk、白俄罗斯语be、波斯尼亚语bs日耳曼语族德语de、荷兰语nl、丹麦语da、挪威语nb、冰岛语is、卢森堡语lb罗曼语族西班牙语es、葡萄牙语pt / pt-BR、意大利语it、罗马尼亚语ro闪含语族阿拉伯语ar、希伯来语he波罗的语族立陶宛语lt、拉脱维亚语lv其他希腊语el、印地语hi、马拉地语mr、古吉拉特语gu、旁遮普语pa / pa-Arab、尼泊尔语ne、阿萨姆语as、乌尔都语ur、马耳他语mt等。测试文件命名也印证了这一点例如 GermanGenderedOrdinalTests.cs、PolishGenderedOrdinalTests.cs、ArabicGenderedOrdinalTests.cs、CzechGenderedOrdinalTests.cs 等。同时仓库中还提供了GenderlessNumberToWordsConvertersrc/Humanizer/Localisation/NumberToWords/GenderlessNumberToWordsConverter.cs与GenderedNumberToWordsConverter两条路线分别服务性别无关与性别敏感语言。调用注意事项与边界行为默认性别回落不带性别参数的重载如ToWords(int, CultureInfo)、ToOrdinalWords(int)在性别敏感语言中走转换器默认性别通常为Masculine。native 首序数词特例NumberToWordsExtension.cs 中的TryGetNativeFirstOrdinalWord为丹麦语、菲律宾语、印尼语、马来语、斯洛伐克语、祖鲁语等提供了 1 的本地化序数词快路径其中斯洛伐克语sk按Masculine/Feminine/Neuter分别返回prvý/prvá/prvé。这说明部分语言的性别差异仅体现在序数词上而基数词可能并不敏感。性别无关语言安全向英语、德语等语言传入任意性别值不会报错输出与不传性别一致测试已覆盖。64 位序数支持long的Ordinalize(gender, ...)重载会优先走ILongOrdinalizer否则在超范围时抛出NotSupportedException见 OrdinalizeExtensions.cs。API 契约该枚举属于公开 API其定义被 PublicApiApprovalTest 等多目标框架契约文件锁定任何成员调整都会触发 API 审批测试。小结GrammaticalGender是 Humanizer 本地化数字输出的关键枚举三个成员Masculine0、Feminine1、Neuter2通过ToWords、ToOrdinalWords、Ordinalize等扩展方法贯穿基数词、序数词甚至时钟短语的性别化渲染管线。对俄语、希伯来语、西班牙语、斯拉夫语族等性别敏感语言显式指定性别才能获得符合语法规则的输出而对英语、德语等性别无关语言任意性别值均安全。实际使用时建议结合目标语言与修饰对象的语法性别显式传参并优先查阅tests/Humanizer.Tests/Localisation/下对应语言的测试用例确认期望输出。赞分享开发工具【免费下载链接】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 语法性别GrammaticalGender枚举深度解析让多语言数字与序数输出更地道Humanizer 语法性别GrammaticalGender枚举深度解析让多语言数字与序数输出更地道 本篇技术指南围绕 Humanizer 的 Gram开发工具Humanizer 中 GrammaticalGender 枚举详解跨文化控制数字词性与序数词性形的机制Humanizer 中 GrammaticalGender 枚举详解跨文化控制数字词性与序数词性形的机制 本篇围绕 Humanizer 仓库文档 Humani开发工具Humanizer 的 GrammaticalGender 枚举让数字与序数输出符合目标语言的语法性别Humanizer 的 GrammaticalGender 枚举让数字与序数输出符合目标语言的语法性别 导读 GrammaticalGender 是 Huma开发工具上一篇GraphQL查询变量加密算法Yaak客户端安全选项配置下一篇3步快速配置海尔智能家居集成一站式自动化解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表