3

内置的 .Net 方法TextInfo.ToTitleCase可以处理法语句子,但是有一些导致问题的示例,请参见备注(复制如下):

通常,标题大小写将单词的第一个字符转换为大写,其余字符转换为小写。但是,此方法当前不提供适当的大小写来转换完全大写的单词,例如首字母缩写词。下表显示了该方法呈现多个字符串的方式。

输入 预期结果 实际结果
战争与和平 英语 战争与和平 战争与和平
Per anhalter duch die Galaxis 德语 Per Anhalter duch die Galaxis Per Anhalter Durch Die Galaxis
les naufragés d'ythaq 法语 Les Naufragés d'Ythaq Les Naufragés D'ythaq

如上所示,TextInfo.ToTitleCase方法提供了在语言上不一定正确的任意大小写行为。语言正确的解决方案需要额外的规则,而当前的算法更简单、更快。我们保留在未来使这个 API 变慢的权利。

TextInfo.ToTitleCase方法的当前实现产生与输入字符串长度相同的输出字符串。但是,这种行为并不能保证,并且可能会在未来的实施中发生变化。

Humanizer 库中是否有一个选项可以使用给定的文化进行标题化?

4

1 回答 1

0

感觉像是对Humanizer库的一个很好的补充,但目前不支持。

如果我要为法语实现标题大小写,我会查看 javascript titlecase-french库并用 C# 重写它,遵循它定义的一组良好规则:

有5个主要规则:

  • 标题总是以大写单词开头
  • 一个特定的单词列表是小写的
  • After a quote ' 单词可以是小写或大写,具体取决于引号之前的单词
  • 首字母缩写词是大写的
  • 特殊的大写字母(例如带重音符号)被替换为它们的简单版本

备注中的示例TextInfo.ToTitleCase( les naufragés d'ythaq ) 按预期工作titlecase-french

console.log(require('titlecase-french').convert("les naufragés d'ythaq"));
// Les Naufragés d'Ythaq
于 2020-12-10T13:56:49.500 回答