Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 哪些具有单数和复数形式的非英语短语可以用于测试国际化和本地化库?_C#_.net_Localization_Internationalization_String Formatting - Fatal编程技术网

C# 哪些具有单数和复数形式的非英语短语可以用于测试国际化和本地化库?

C# 哪些具有单数和复数形式的非英语短语可以用于测试国际化和本地化库?,c#,.net,localization,internationalization,string-formatting,C#,.net,Localization,Internationalization,String Formatting,我一直在开发一个.NET库来帮助实现应用程序的国际化。它是用C#编写的,名为,是GitHub上的开源 它包含多种语言的规则,这些规则根据模板和区域设置确定正确的单数/复数形式。这些规则是从中获得的 翻译包含依赖于数量的词(如名词、动词和形容词)的短语时,指定多种形式,格式化程序根据这些规则选择正确的形式 英语中的一个例子:(注意语法与String.Format几乎相同) 我想为许多受支持的语言编写单元测试。然而,我只说英语和西班牙语(这两种语言都有相同的语法数字规则) 哪些好的非英语测试短语可以

我一直在开发一个.NET库来帮助实现应用程序的国际化。它是用C#编写的,名为,是GitHub上的开源

它包含多种语言的规则,这些规则根据模板和区域设置确定正确的单数/复数形式。这些规则是从中获得的

翻译包含依赖于数量的词(如名词、动词和形容词)的短语时,指定多种形式,格式化程序根据这些规则选择正确的形式

英语中的一个例子:(注意语法与
String.Format
几乎相同)

我想为许多受支持的语言编写单元测试。然而,我只说英语和西班牙语(这两种语言都有相同的语法数字规则)

哪些好的非英语测试短语可以用于这些单元测试? 我正在寻找类似于
“还有{0:is:are}{0:item:items}{0:items}的短语。”
。请注意,此示例需要基于数量的特定动词和名词

关于语法的注释

此库查找
分隔词,并根据为区域设置定义的规则选择正确的词。例如,在波兰语中,“文件”一词有3种复数形式:1“plik”,2-4“pliki”,5-21“plików”。因此,您将以以下格式字符串指定所有3个表单:
“{0}{0:plik:pliki:plików}”

这些词通常从可能的最小值到最大值排序,如
“{0:zero:one:two:now:many:other}”
,如所定义


关于此代码的其他信息已在此处讨论:

我想提供示例短语的近似土耳其语翻译,以便您可以测试可能的形式数等于1的情况

{0}nesne kaldı。
=
({0}项剩余。)

尽管土耳其语单词经常用后缀复数,但在指定项目数量时,从未使用复数形式。因此,在每种情况下,上述内容应保持一致:

1奈斯内卡尔德。

2奈斯内卡尔德。

42奈斯内卡尔德。

然而,当没有明确指定计数时,从语法上讲,指出我们谈论的是一个还是多个项目可能变得很重要。因此,消息“
是否要删除所选项目?”
”应如下呈现:

Seçili nesneyi silmek istiyor musunuz?
(当项目数量=1时)

Seçili nesneleri silmek istiyor musunuz?
(当物品计数>1时)

因此,我想这种形式应该是:


Seçili{0:nesneyi:nesneleri}silmek istiyor musunuz?

这个库是纯C#,我非常确定
System.String
与Unicode完全兼容。我还没有明确测试过它,但是Unicode应该没有问题。讨论一下Unicode和C#。事实上,我喜欢Unicode中的“测试短语”@史考特:你能解释一下“单词应该总是按照从最小到最大的顺序来指定”的原则吗。例如,在俄语中,“文件”一词有:0“фаааааа”,1“фааа”,2-4“фааа”,5-20“фаааа1072,。。。“фаааа”(如1)等。鉴于此,我应该使用什么格式来表示这个词?如果我指定“{0:фаааааааа:фааа}”,并且文件数为2,那么正确的形式是第3号“фаааа”,但是如果我们有11个文件,那么正确的形式是第1号“фа1072。对于21个文件,正确的格式是第2号“фааа”,尽管21>11>2。这个系统是否处理0个值(或小于0)?@Igor Korkhov:我修改了该部分以更好地描述顺序,并添加了指向的链接。因为21,31,41属于“一”规则,所以它出现在2-4之前。太棒了!这是一个很好的例子!感谢您解释非显式量如何要求复数化。。。我以前没听说过,所以我不打算进行单元测试,因为我认为它总是有1个表单。但我一定会在我的测试中包括这些短语!好的,我在单元测试中添加了您的示例。这段代码很容易解释。如果您感兴趣,请看一看(查找
Test\u Turkish
var message = "There {0:is:are} {0} {0:item:items} remaining.";
var output = Smart.Format(culture, message, items.Count);