2009-08-24 114 views
6

我們有一個資源文件,其中包含許多用於我們應用程序中不同位置的翻譯字符串。有沒有更好的方法來綁定例如按鈕的文本到某個字符串?C#:如何將winforms按鈕的文本綁定到資源

目前我們通常只是做這樣的事情在構造函數中,在Load事件處理程序或在通過其中的一個調用的方法:

someButton.Text = CommonTexts.SomeString; 
someMenuItem.Text = CommonTexts.SomeOtherString; 

有沒有更好的辦法做到這一點?也許在設計師?或者這是推薦的方式嗎?


只是爲了讓您知道我們如何進行實際的翻譯:我們有一個只包含resx文件的類庫項目。主要的resx文件是用英語寫的(當然)。然後,我們在一個名爲ResEx的應用程序中打開這些基本的resx文件,我們(或其他人)將其轉換爲其他語言。編譯後的Visual Studio根據當前的文化集自動爲每種語言創建自動創建程序集。這工作得很好,所以我真的不需要關於如何做翻譯的信息等等(雖然我總是對改進當然好奇)。我問的是,如果有更好的方式從資源組合中獲取這些翻譯後的字符串,並且可以使用所有各種Text屬性。

+0

Re,編輯:反問題是:爲什麼不使用默認的FormLoad系統?它內置和隱藏。 – 2009-08-25 18:38:33

+1

因爲我想知道是否有更好的方法。 – Svish 2009-08-26 10:06:58

回答

3

你可以這樣做:

using System.Resources; 
using System.Reflection; 

Assembly assembly = this.GetType().Assembly; 
resman = new ResourceManager("StringResources.Strings", assembly); 
btnButton.Text = resman.GetString("ButtonName"); 
+3

這種方式會和我已經做的一樣,除了更復雜的情況:p – Svish 2009-08-24 13:52:25

+0

@Thomas:我不認爲海報意味着與「數據綁定」中的綁定。 – MusiGenesis 2009-08-24 13:52:46

+0

在VS2008(可能是2005)中,您通過將資源文件添加到項目中而獲得的默認資源管理器將公開爲該鍵值命名的屬性,所以這只是「btnButton.Text = resman.ButtonName」,節省了對拼寫錯誤的擔憂字符串。 – 2009-08-24 18:37:50

0

你的方式是,如果你有開發商誰是不是在你翻譯你的應用程序到語言流利親自做到這一點的最好辦法。我之前用一個英文應用程序完成了這個工作,這個英文應用程序必須翻譯成西班牙文,葡萄牙文和中文(我只能說這些半流利的其中之一)。原始表單全部以英文創建,在表單的Load事件中,代碼遍歷每個控件,並在翻譯電子表格中搜索每個控件的Text屬性,並用適當的翻譯替換它。

將表單國際化的內置方式(基本上是表單繼承的一種變體)假定程序員能夠流利地使用需要轉換的語言,這非常簡單,它需要你手動輸入每種形式和每種語言的所有翻譯文本值。它還會使您的二進制文件變大(可能要大得多),因爲它爲您支持的每種語言的每個表單添加了一個.resx文件。

0

試試這個:

someButton.DataBindings.Add( 「文本」,CommonTexts, 「SomeString」);

1

有一個很好的工具叫做LingoBit Localizer,它可以完成所有reasources文件所花費的時間。

在開發過程中,您不必關心其他語言,只需編碼和設置屬性就如同爲單一語言軟件編程一樣。完成後或者只要你願意,你可以在你的DLL或Windows窗體應用程序上運行LingoBit Localizer。這將在其GUI中爲用戶提供用戶可顯示的字符串。現在,如果程序員不知道應用程序必須翻譯的語言,那麼也許專業的翻譯人員可以用它來翻譯這些單詞。然後,您只需在完成後保存該項目。這將創建一個DLL文件,您只需將其添加到您的二進制部署目錄中,然後您的應用程序將根據當前應用程序的文化信息自動將其自身設置爲正確的語言。已安裝或等。這節省了大量編程時間和頭痛。

希望這有助於即使它不是基於資源的解決方案。

+0

這是解決此問題的合理方法。如果只有他們支持葡萄牙語...... – MusiGenesis 2009-08-24 20:17:16

+0

你也可以使用VisualLocalize。我們經常使用該工具。這裏的好處在於,如果翻譯文本適合控件,稍後可以檢查所有對話框,如果不是,則只能使用該語言調整控件的大小,並且新大小將存儲在衛星組件中的本地化文本旁邊。 – PVitt 2009-08-25 20:12:02

1

這將提取Home關鍵字的值並填充到Text1框中。

Text1.Text= Resource.Home.ToString(); 
3

我明白了,這是一個老問題了,不過,我有同樣的問題(VS 2010),並在谷歌第一環節之一就是這個主題。

爲了將所有文本移動到表單資源文件 - 您需要將winform的Localizable屬性設置爲True。就是這樣。 (c)Cap。 O.