2009-09-16 72 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有本地化的權衡。