2012-12-21 47 views
0

我有一個WinForms應用程序,我目前正在實施的翻譯引擎我至今是一堆下面的語法類似的文本文檔。設置文本動態

messages.manualupdate="There is a manual update available for ProgName.\n\nDo you want to update to version {0}.{1}.{2}{3}?" 
messages.errorcopy="Clicking OK will copy the error so you can paste it elsewhere!" 
messages.error="Error" 
messages.notsupported.title="Unsupported client" 
messages.notsupported.message="This version is no long supported. Please wait for an update." 

我有很多的這些不同的語言,例如:

messages.manualupdate="é disponibile un'aggiornamento manuale del programma ProgName.\n\nVuoi aggiornare alla versione {0}.{1}.{2}{3}?" 
messages.errorcopy="Cliccando OK eseguirete una copia degli errori visualizzati" 
messages.error="Error" 
messages.notsupported.title="Client non supportato" 
messages.notsupported.message="Questa versione non è utilizzabile al momento. attendi il prossimo aggiornamento!" 

我再解析爲DynamicObject,我可以訪問諸如language.messages.notsupported.error這一點。我想知道的是,如果我可以以某種方式鏈接表單上的所有控件,以便在創建時使用來自動態對象的變量。例如,我在窗體上有一個按鈕,我想在其中顯示文本「錯誤」。在窗體顯示之前,我將language變量設置爲用戶選擇的語言,然後當窗體顯示它僅從language加載文本。有沒有辦法在設計器中這樣做,而不必編寫一個在Forms構造函數中調用的方法,因爲在我看來,將所有按鈕文本設置爲一個值然後將其全部更改當表單加載時。我正在尋找一種綁定,但對於控件Text參數。

任何人有任何想法?

回答

1

MSDN對本地化字符串的演練,可能是使用你link

0

老實說,你正試圖避免的最好看我的做法。我會建議你在試圖設置文本的地方爲控件創建一個屬性。在「設置」屬性中,檢查所選語言併爲您獲取適當的文本。

public string Error 
{ 
    set { _errorLabel.Text = value; } 
} 

private void SetText() 
{ 
    if(EnglishSelected) 
     Error = "English"; 
} 

關於浪費時間,以及我只是建議不要在設計器中設置任何東西,並直接設置負載形式的屬性。但我想在此再補充一點,即任何方法都不會影響您的應用程序速度。首先它是關於使您的應用程序可擴展和可維護,然後使其快速。在設計師中設定邏輯事物總是一個不好的做法。如果你的應用程序不是小/小,那麼我會建議你遵循一些設計模式,如MVP,並在Presenter中移動所有這些邏輯事物。不是試圖宣講,而是建議。

是的,在我們公司的一個團隊正在開發應用程序的本地化部分。使用資源可能是更好的方法。

希望它有幫助。