我一直在开发 .NET 库来协助应用程序的国际化。它是用 C# 编写的,名为 SmartFormat ,并在 GitHub 上开源。
它包含Grammatical Number多种语言的规则,根据模板和语言环境确定正确的单数/复数形式。这些规则是从 Unicode Language Plural Rules 获得的.
在翻译包含数量词(例如名词、动词和形容词)的短语时,您指定多种形式,格式化程序根据这些规则选择正确的形式。
英语示例:(注意语法与 String.Format
几乎相同)
var message = "There {0:is:are} {0} {0:item:items} remaining.";
var output = Smart.Format(culture, message, items.Count);
我想为许多受支持的语言编写单元测试。但是,我只会说英语和西类牙语(它们都有相同的语法数字规则)。
有哪些好的非英语测试短语可以用于这些单元测试?
我正在寻找类似于 "There {0:is:are} {0} {0:item:items} remaining."
的短语。请注意此示例如何根据数量要求特定的动词和名词。
关于语法的注释:
该库查找 :
分隔词并根据为语言环境定义的规则选择正确的词。例如,在波兰语中,"file"一词有 3 种复数形式:1“plik”,2-4“pliki”,5-21“plików”。因此,您将在格式字符串中指定所有 3 种形式:"{0} {0:plik:pliki:plików}"
。
单词通常按可能的最小值到最大值排序,例如 "{0:zero:one:two:few:many:other}"
,由 Unicode Language Plural Rules 定义.
有关此代码的其他信息已在此处讨论:Localization of singular/plural words - what are the different language rules for grammatical numbers?
最佳答案
我想为您的示例短语提供大致的土耳其语翻译,这样您就可以测试可能的形式数等于 1 的情况。;)
{0} nesne kaldı.
= (剩余 {0} 项。)
虽然土耳其语单词通常带有后缀复数形式,但在指定项目数时从不使用复数形式。所以上面的内容在每种情况下都应该呈现相同:
1 nesne kaldı.
2 nesne kaldı.
42 nesne kaldı.
但是,当未明确指定计数时,表明我们是在谈论一个还是多个项目在语法上可能变得很重要。所以消息“Do you want to delete the selected item(s)?
”应该像这样呈现:
Seçili nesneyi silmek istiyor musunuz?
(当项目计数=1 时)
Seçili nesneleri silmek istiyor musunuz?
(当项目计数>1 时)
所以我想这个格式应该是:
Seçili {0:nesneyi:nesneleri} silmek istiyor musunuz?
关于c# - 可用于测试国际化和本地化库的单数和复数形式的非英语短语有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7184244/