这样的本地化考虑了您想要翻译的语言。多重复数是相当罕见的,我想大多数情况下都是可以互换的或者是上下文相关的。除非在应用程序的多个位置使用它,否则不需要担心。如果你这样做,并且特定的用法确实会在复数用法中产生语法错误,那么你需要在该板上添加一个新的密钥(所有语言)。或者,由于您无论如何都在探索文化,请为受影响的语言添加附加条件并使用单个替代复数形式。
我不会建议避免它,因为你可以很快失去自然语言的流动“分钟前回答:6”。
也许你的意思是第一位的,但更常见的情况是跨不同文化的语法位置变化。例如,想要本地化的字符串“此页面被查看X次”。你可能想为这3个本地化字符串:
PageViewStart =“此页面查看” PageViewEnd =“时间” PageViewEndPlural =“时代”
然后一个简单的伪实施将
PageViewStart + pageCount.ToString()+ pageCount == 1? PageViewEnd:PageViewEndPlural;
但在荷兰语中,“Deze pagina is {0} keer bekeken”和韩语“조회수{0}”。所以你会发现你会立即遇到问题与实施多种语言格式复杂句子结构的方式。
我特意在示例中留下了{0},因为它暗示了我的解决方案。以复数和非复数形式使用整个句子的本地化。
PageView =“此页面被浏览了1次。” PageViewPlural =“此页面被浏览了{0}次”。
这样,你可以写条件(伪同样取决于你的实现):
页页次> 1? PageView:String.Format(PageViewPlural,pageCount.ToString());
唯一的问题是您的翻译人员需要指示resx文件中{0}标记的含义和位置。
举个例子吧? – 2009-09-16 04:40:03
例如:在波兰语中,有单数,复数和复数的术语,例如可以单数形式的房子,复数形式的单数形式的domy和复数形式的domów。单数是1,paucal是范围2-4,22-24,32-34,...和复数是其他的一切。相比英语而言更多... – Sam 2009-09-16 06:03:37
@Sam - 感谢您为我添加一个示例,当我问这个问题时我在iPod Touch上,所以我需要保持简短。 – dustyburwell 2009-09-16 13:08:10