2011-02-07 70 views
2

我們有100多種形式的大型解決方案,它們都有英文標籤和按鈕等。多種形式的全球化

所有的表格都有共同的文字,比如說在至少20個表格上有「Job」這個詞。

我們正在尋求走向不同的市場,並要求所有表單都用不同的語言。通過研究.NET全球化技術,我們發現標準方法並不適合我們;該方法是一種編碼解決方案。我們想避免複製

button.Text = ResourceManager.getString("job");` 

20 +形式,並期待看看是否有一個更簡單的解決方案。 (我們在應用程序啓動時設置了文化)

我們想到的一個是我們可以綁定到表單的resx(資源文件),然後在該資源文件中選擇一個值以綁定到標籤或按鈕文本。據我們所知,我們無法找到像這樣的簡單解決方案。

我們知道我們可以在每個表單後面創建.resx文件,但是如果我們希望在將來包含更多語言時,這會產生太多的開銷 - 並且當「Job」這個單詞超過多個時,還有不必要的重複一種形式。

是否存在解決方案,我們可以將資源文件(或Satellite Assembly)綁定到每個表單/組件(無需代碼),然後選擇我們想要顯示的值?或者是否有類似的替代解決方案?

+0

該代碼是自動生成的,它不會花費任何東西。要求本地化服務做非標準的工作將花費你很多。 – 2011-02-07 20:50:08

回答

0

最後,由於項目的規模,我們不得不使用編碼解決方案。

我們在一個新的解決方案中添加了這個包含所有我們使用的語言以及默認集合(英文)的資源文件。

在我們將所有組件的文本值的每個頁面的構造函數中使用

job_label.Text = LanguageResources.job; //example to display "job" on a label 

由於Visual Studio創建強類型類的資源文件,我們可以直接調用資源文件LanguageResources和訪問它的任何領域。 然後我們創建了LanguageResources.de-DE.resx並使用所有與英文版相同的密鑰填充,但使用德文值。

感謝.NET的全球化技術,我們可以在.config文件中設置語言,以便在應用程序運行時查看需要顯示哪種語言並訪問相應的資源文件。如果語言無法識別,則默認爲英語。

0

有一種方法可以很簡單地做到這一點。首先創建您希望翻譯的所有窗體上所有控件的Text屬性的列表(這樣您就可以「確定」,「取消」,「作業」,「刪除」等)。然後讓某人翻譯您希望支持的任何語言的每個術語(並將翻譯添加到每個支持語言的單獨列中)。然後在您的應用程序中嵌入/包含此列表(作爲CSV,數據庫,XML文件或任何您喜歡的內容)。

在每個表單的Load事件中,調用遍歷表單上每個控件的方法(遞歸地,因此您還可以拾取位於容器控件上的任何控件),查找控件在您的翻譯列表中的Text屬性,並將文本更改爲翻譯的值(基於您確定和/或設置的其他語言的當前語言)。

我總是爲此使用Excel電子表格,因爲它很容易嵌入,並且易於發送以添加附加術語和/或附加語言。

在.Net中使用內置的全球化功能是一個痛苦的運動,恕我直言,通常要求程序員精通語言來支持。

+0

這個策略一直有效,直到你有一個單詞在不同的地方有不同的翻譯(例如,搜索法語中的動詞是Chercher,但搜索作爲名詞是Recherche)。然後你最終得到命名空間(如Search.verb)和一些管理頭痛。 – 2011-02-07 20:48:57

+0

有趣的想法,但作爲我上面的帖子說,我們有很多單詞是相同的英語,但取決於你如何使用它們,他們可能會在不同的語言中有不同的拼寫/含義。謝謝,請牢記這一點。 – Andrew 2011-02-07 20:53:35