单数/复数单词的本地化 - 语法数字的不同语言规则是什么?

Sco*_*pey 12 .net c# string.format localization internationalization

我一直在开发一个.NET字符串格式库来协助应用程序的本地化.它被称为SmartFormat,在GitHub上是开源的.

它试图解决的一个问题是语法数字.这也被称为"单数和复数形式"或"条件格式",这里有一个英文版的片段:

var message = "There {0:is|are} {0} {0:item|items} remaining";

// You can use the Smart.Format method just like using String.Format:
var output = Smart.Format(CultureInfo.CurrentUICulture, message, items.Count);
Run Code Online (Sandbox Code Playgroud)

我相信英国的规则是,有2种形式(单数和复数)可以应用于名词,动词和形容词.如果数量是1单数,则使用,否则使用复数.

我现在正试图通过实施其他语言的正确规则来"开阔视野"!我已经明白,某些语言最多可以包含4种复数形式,并且需要一些逻辑来确定正确的形式.我想扩展我的代码以适应多种语言.例如,我听说俄语,波兰语和土耳其语的规则与英语完全不同,所以这可能是一个很好的起点.

但是,我只会说英语和西班牙语,那么如何确定许多常用语言的正确语法规则呢?

编辑:我也想知道我的单元测试的一些好的非英语"测试短语":什么是一些非常好的非英语短语,有单数和复数形式可用于测试国际化和本地化库?

Paw*_*yda 10

当然,不同的语言有不同的复数规则.特别有趣的可能是阿拉伯语和波兰语,两者都包含相当多的复数形式.

如果您想了解有关这些规则的更多信息,请访问Unicode Common Locale Data Repository,即语言复数规则.

那里有很多有趣的信息,不幸的是其中有些信息是错误的.我希望复数形式是正确的(至少对波兰人来说,就我所知,:)).