拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Humanizer 文化感知字符串转换:ICulturedStringTransformer 接口深度指南

Humanizer 文化感知字符串转换:ICulturedStringTransformer 接口深度指南 开发工具【免费下载链接】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点击查看免费下载导读ICulturedStringTransformer是 Humanizer 字符串转换体系中的核心接口之一它将字符串转换与区域文化CultureInfo绑定任何实现该接口的转换器都能在给定文化环境下完成大小写、标题化等文本处理。本文以该接口为主线完整讲解其定义、实现、与To门户类的配合方式并结合仓库源码与测试用例说明如何在 .NET 应用中实现文化感知的大小写转换与自定义转换器。接口定义在 IStringTransformer 之上增加文化维度ICulturedStringTransformer定义于 src/Humanizer/Transformer/ICulturedStringTransformer.cs其完整源码如下namespace Humanizer; /// summary /// Can transform a string with the given culture /// /summary public interface ICulturedStringTransformer : IStringTransformer { /// summary /// Transform the input /// /summary /// param nameinputString to be transformed/param string Transform(string input, CultureInfo culture); }它继承自基础接口 IStringTransformer定义于src/Humanizer/Transformer/IStringTransformer.cspublic interface IStringTransformer { string Transform(string input); }两个 Transform 重载的分工Transform(string input)由IStringTransformer声明是不带文化参数的基础转换入口Transform(string input, CultureInfo culture)由ICulturedStringTransformer新增接受System.Globalization.CultureInfo类型的culture参数用于以给定文化转换字符串文档原文描述为Can transform a string with the given culture。两个重载的返回值均为System.String转换后的字符串。参数语义input待转换的字符串culture决定大小写规则、排序规则等文本处理行为的区域文化对象。内置实现四个开箱即用的文化感知转换器仓库在 src/Humanizer/Transformer/ 目录下提供了四个实现ICulturedStringTransformer的内置转换器全部经由静态门户类To定义于 src/Humanizer/Transformer/To.cs以单例属性形式暴露属性类型实现类行为说明To.TitleCaseICulturedStringTransformerToTitleCase将字符串转为标题大小写Title CaseTo.LowerCaseICulturedStringTransformerToLowerCase将字符串全部转为小写To.UpperCaseICulturedStringTransformerToUpperCase将字符串全部转为大写To.SentenceCaseICulturedStringTransformerToSentenceCase仅将首字符大写其余不变对应源码片段src/Humanizer/Transformer/To.cspublic static ICulturedStringTransformer TitleCase { get; } new ToTitleCase(); public static ICulturedStringTransformer LowerCase { get; } new ToLowerCase(); public static ICulturedStringTransformer UpperCase { get; } new ToUpperCase(); public static ICulturedStringTransformer SentenceCase { get; } new ToSentenceCase();无文化参数的重载委托给当前文化每个实现类的Transform(string input)都会委托给Transform(input, CultureInfo.CurrentCulture)。以 ToLowerCase.cs 为例class ToLowerCase : ICulturedStringTransformer { public string Transform(string input) Transform(input, CultureInfo.CurrentCulture); public string Transform(string input, CultureInfo culture) { return culture.TextInfo.ToLower(input); } }ToUpperCase.cs 与之对称调用culture.TextInfo.ToUpper(input)。ToSentenceCase首字符大写规则ToSentenceCase.cs 的核心逻辑是若首字符已是大写则原样返回否则仅将首字符通过culture.TextInfo.ToUpper大写剩余字符保持不变public string Transform(string input, CultureInfo culture) { if (input.Length 1) { if (char.IsUpper(input[0])) { return input; } return StringHumanizeExtensions.Concat(culture.TextInfo.ToUpper(input[0]), input.AsSpan(1)); } return culture.TextInfo.ToUpper(input); }ToTitleCase标题大小写的完整算法ToTitleCase.cs 是四个实现中逻辑最复杂的其关键特征包括ASCII 快路径TryTransformAscii方法对纯 ASCII 输入走逐字符扫描路径避免正则表达式开销一旦遇到非 ASCII 字符则回退到TransformWithRegex的正则路径。单词边界识别正则模式(\w|[^\u0000-\u007F])?\w*用于识别单词支持撇号形式如apostrophes。在 .NET 7 上使用[GeneratedRegex]生成式正则其余目标框架使用RegexOptions.Compiled编译缓存见 ToTitleCase.cs。冠词/连词/介词不首字母大写当单词不是首词时a、an、as、at、by、if、in、of、on、or、so、to、up、and、but、for、nor、off、the、via、yet等词保持原样见IsArticleOrConjunctionOrPreposition方法ToTitleCase.cs因此the lord of the rings会得到The Lord of the Rings。全大写单词保留全大写的单词如NASA不会被降为仅首字母大写避免破坏专有缩写。文化敏感大小写UsesCultureSensitiveAsciiCasing对tr土耳其语和az阿塞拜疆语开头的文化启用TextInfo的大小写转换——这正是为了正确处理土耳其语中著名的无点 i 规则。实战调用To.Transform 扩展方法与链式组合ICulturedStringTransformer的典型使用方式是配合 To.cs 中的两个Transform扩展方法。使用当前文化无需显式传文化using Humanizer; // INvalid caSEs arE corrected - Invalid Cases Are Corrected var title INvalid caSEs arE corrected.Transform(To.TitleCase); // Sentence casing - sentence casing var lower Sentence casing.Transform(To.LowerCase); // lower case statement - LOWER CASE STATEMENT var upper lower case statement.Transform(To.UpperCase); // lower case statement - Lower case statement var sentence lower case statement.Transform(To.SentenceCase);显式指定文化核心场景当需要以指定文化处理文本时调用带CultureInfo参数的重载using System.Globalization; using Humanizer; // 土耳其语环境下istanbul 首字母应变为带点的 İ var turkish istanbul is in turkey.Transform(new CultureInfo(tr-TR), To.TitleCase); // 结果: İstanbul İs in Turkey // 希腊语环境下处理小写回退 var greek οΣΟΣ.Transform(new CultureInfo(el-GR), To.TitleCase); // 首字符经 TextInfo.ToUpper 转换其余字符经 TextInfo.ToLower 转换链式组合多个转换器To.Transform的params重载支持按顺序应用多个转换器转换按传入顺序依次执行public static string Transform(this string input, params IStringTransformer[] transformers) transformers.Aggregate(input, (current, stringTransformer) stringTransformer.Transform(current)); public static string Transform(this string input, CultureInfo culture, params ICulturedStringTransformer[] transformers) transformers.Aggregate(input, (current, stringTransformer) stringTransformer.Transform(current, culture));示例// 先去空白相关转换再统一转大写 var result hello world .Transform(To.LowerCase, To.UpperCase); // HELLO WORLD 测试用例验证行为即规范仓库的测试文件 tests/Humanizer.Tests/TransformersTests.cs 完整覆盖了这四个转换器的行为可直接作为行为规范参考Title CaseTransformToTitleCase涵盖大小写混合纠正、单字母词、空格保留、撇号单词apostrophes arent capitalized - Apostrophes Arent Capitalized、全大写缩写保留NASA and the fbi - NASA and the Fbi、冠词不首字母大写the lord of the rings - The Lord of the Rings、连字符与短横线rock-and-roll by night - Rock-and-Roll by Night、hello – world - Hello – World等场景土耳其语大小写TransformToTitleCaseUsesTurkishCasing标注[UseCulture(tr-TR)]验证istanbul is in turkey转为İstanbul İs in Turkey即文化敏感的 i/İ 转换文化敏感小写TransformToTitleCaseUsesCultureSensitiveLowercase用el-GR文化验证希腊字母的TextInfo.ToUpper/ToLower组合行为Lower Case / Upper Case / Sentence Case各自的输入输出对其中 Sentence Case 验证了空字符串、开头空格、数字开头123 hello不变、以及已全大写的专有缩写NASA and the FBI保持不变等边界条件指定文化TransformToSentenceCaseUsesSpecifiedCultureistanbul. izmir在tr-TR下转为İstanbul. izmirégoïste. déjà在fr-FR下转为Égoïste. déjà证明转换确实依赖传入的CultureInfo而非运行环境默认文化。这些测试同时印证带文化参数的重载Transform(input, culture)是实现文化感知的核心入口而无文化参数的版本只是以CultureInfo.CurrentCulture为默认值的便捷封装。自定义转换器实现 ICulturedStringTransformer当内置转换器无法满足需求时可以实现该接口并交给To.Transform使用。一个最小示例using System.Globalization; using Humanizer; public class TrimThenUpperTransformer : ICulturedStringTransformer { public string Transform(string input) Transform(input, CultureInfo.CurrentCulture); public string Transform(string input, CultureInfo culture) { // 示例先去空白再按文化转大写 return culture.TextInfo.ToUpper(input.Trim()); } } // 使用 var result spaced .Transform(new CultureInfo(en-US), new TrimThenUpperTransformer()); // 结果: SPACED自定义实现时需要注意必须同时实现两个重载IStringTransformer.Transform(string)与新增的Transform(string, CultureInfo)缺一不可否则无法通过接口编译约束无文化重载应委托给当前文化仓库内置实现均采用Transform(input, CultureInfo.CurrentCulture)的委托模式保持一致性可避免调用方在不传文化时产生意外行为文化操作优先走culture.TextInfoTextInfo.ToUpper/ToLower是文化感知大小写转换的标准途径土耳其语、希腊语等特殊规则均由其处理。适用场景与设计要点小结场景多语言 UI 的标题/首字母大写、报表字段大小写规范化、文本搜索引擎索引前的文化归一化以及任何需要按用户区域设置处理文本的场景。与IStringTransformer的关系ICulturedStringTransformer是IStringTransformer的文化扩展子接口。若转换不依赖文化应实现IStringTransformer若依赖则实现ICulturedStringTransformer两者的实例均可通过To.Transform扩展方法被组合调用。默认文化行为不显式传文化时内置转换器以CultureInfo.CurrentCulture为准显式传入CultureInfo时转换严格按传入文化执行不受运行环境线程文化影响。相关资源接口定义src/Humanizer/Transformer/ICulturedStringTransformer.cs基础接口src/Humanizer/Transformer/IStringTransformer.cs门户类属性与扩展方法src/Humanizer/Transformer/To.cs四个内置实现ToTitleCase.cs、ToLowerCase.cs、ToUpperCase.cs、ToSentenceCase.cs行为测试tests/Humanizer.Tests/TransformersTests.cs赞分享开发工具【免费下载链接】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 的 ICulturedStringTransformer 接口实现文化感知的字符串转换Humanizer 的 ICulturedStringTransformer 接口实现文化感知的字符串转换 导读 本文围绕 Humanizer 中面向 API开发工具Humanizer 的 ICulturedStringTransformer深入理解带文化感知的字符串变换接口Humanizer 的 ICulturedStringTransformer深入理解带文化感知的字符串变换接口 导读 ICulturedStringTrans开发工具Humanizer ICulturedStringTransformer 详解感知文化的字符串转换接口设计与大小写转换实现Humanizer ICulturedStringTransformer 详解感知文化的字符串转换接口设计与大小写转换实现 本篇以 Humanizer 官方开发工具上一篇深入解析 MediaPipe Modules面向人脸、人手、姿态与 3D 物体的可复用子图组件体系下一篇OpenCore Legacy Patcher完整教程4步修复老Mac显卡驱动问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表