2009-09-16 36 views
3

我有一个C#WPF应用程序,我试图用resx文件进行全球化。它出色地工作。然而,我遇到了麻烦。我有一个相对简单的多元化解决方案,我有一个单一和复数形式的字符串,我正在显示,并根据我所谈论的任何事情的数量选择一个。在C中多元化和本地化字符串#

但是,最近我接触到一些事实,即一些文化有多种复数形式。有没有人在C#中遇到过这个问题的一个很好的解决方案,更不用说WPF了?

我见过这个问题的典型例子来自波兰语。波兰语有一个单数,十进制和复数形式。这个例子是单词 “文件” 的翻译:

  • 1 plik
  • 2,3,4 pliki
  • 5-21 pliko'w
  • 22-24 pliki
  • 25 -31 pliko'w
+0

举个例子吧? – 2009-09-16 04:40:03

+1

例如:在波兰语中,有单数,复数和复数的术语,例如可以单数形式的房子,复数形式的单数形式的domy和复数形式的domów。单数是1,paucal是范围2-4,22-24,32-34,...和复数是其他的一切。相比英语而言更多... – Sam 2009-09-16 06:03:37

+0

@Sam - 感谢您为我添加一个示例,当我问这个问题时我在iPod Touch上,所以我需要保持简短。 – dustyburwell 2009-09-16 13:08:10

回答

8

Mozilla已经在Firefox 3中实现了这个功能,他们有一个指导说明如何使用它们的实现here。 最值得注意的是,在Developing with PluralForm节,他们有一个链接

资源://gre/modules/PluralForm.jsm

将其付诸实施的来源。必须在Firefox 3及更高版本中打开。

我还没有读完整个事情,但这似乎是一个好地方,至少可以得到一些想法。

HTH。

+0

感谢您向我指出这一点!尽管它不是C#解决方案,但至少它们具有复数形式规则的列表,这些规则肯定会有所帮助! – dustyburwell 2009-09-16 13:14:58

4

考虑试着完全避免这个问题。不要构建句子,请尝试构建您的用户界面以避免此问题。不要说“5页”,请尝试说:“Pages:5”。

+0

+1有趣的方法 – 2009-09-16 05:53:44

+1

绝对!避免的一个问题是不太需要维护的解决方案。即使有很好的代码解决方案,翻译者也需要输入各种形式的短语。由于复数形式的所有变化和不规则性,这是很多工作,容易犯错误。 – peterchen 2009-09-16 06:15:51

+9

没有试图冒犯,但这只是一个懒惰的出路。这似乎倾向于使产品非人化,并且肯定会降低可用性。 – dustyburwell 2009-09-16 13:10:40

2

这样的本地化考虑了您想要翻译的语言。多重复数是相当罕见的,我想大多数情况下都是可以互换的或者是上下文相关的。除非在应用程序的多个位置使用它,否则不需要担心。如果你这样做,并且特定的用法确实会在复数用法中产生语法错误,那么你需要在该板上添加一个新的密钥(所有语言)。或者,由于您无论如何都在探索文化,请为受影响的语言添加附加条件并使用单个替代复数形式。

我不会建议避免它,因为你可以很快失去自然语言的流动“分钟前回答: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}标记的含义和位置。

+0

对于第一段,我想到匈牙利语http://en.wiktionary.org/wiki/Category:Hungarian_nouns_with_multiple_plural_forms等语言。 – 2009-09-16 05:54:12

+5

“多个复数是相当罕见的,我想大多数情况下可以互换或者上下文敏感。” ...是的,很少见。至少像所有斯拉夫语言一样罕见。 – Jenda 2011-03-07 16:11:12

1

我想你知道gettext的复数形式处理。但通常情况下,我会尽量避免它(如Yuliy所说)。

它不仅名词 - 短语可以改变(例如,在德国“1 Datei konnte nichtgelöschtwerden”/“2 Dateien konnten nichtgelöschtwerden”)。

它比问题的回避更加友好,优雅“Dateien,死nichtgelöschtwerden konnten:2”,但有你有多少ressources有本地化的权衡。