簡體   English   中英

在c#中本地化UserControl的最佳方法(winforms)

[英]Best way to localize UserControl in c# (winforms)

由於我缺乏知識,我編輯了這個問題

我正在使用DataGridView制作一個UserControl ,我希望盡可能地簡化實現過程,所以我想知道我應該用本地化嗎? 到目前為止,我的知識和研究 ,我的本地化方法是這樣的:

例如,假設我的form/UserControl上有一個按鈕,文本屬性設置為“hello”,現在我想將我的form/UserControl本地化為意大利語。

  1. 將localizable屬性設置為true並選擇語言(在本例中為Italian)
  2. 谷歌翻譯
  3. 將文本屬性設置為“Ciao”

英語是默認的,所以我已經在我的表單中有.resx文件了,但是在此之后,VS將生成意大利語資源,其中button.Text屬性為 ,“ciao”為 ,如果我理解正確,但如果有人來,會發生什么更改button.Text屬性從hello到“hello world”,然后我的意大利語資源將不正確,除非他們手動更改,有沒有辦法以某種方式自動進行此更改?

我想知道這一點,因為當我的UserControlDataGridView在某個form上實現時,我不知道我的DataGridView會有哪些列,所以我想知道我應該將本地化過程留給實現我的控件的人嗎?

謝謝,我真的很感謝幫助,對不起編輯。

最好的選擇是使用代碼設置(本地化)文本(使用一個資源文件)。
例如,您可以在表單的/用戶控件的構造函數中執行此操作。
盡量避免在每個表單/用戶控件上使用resx,因為這可能導致無法維護的代碼(重復的鍵/值),除非您使用第三方工具本地化整個應用程序,如( Infralution Globalizer

上面的工具不是免費的,但它是我用過的唯一一個

構造函數中的代碼將如下所示(假設您有一個YourResourceFile.resx)

public MyUserControl()
{
        columnFirstName.Header = YourResourceFile.FirstName;
        columnLastName.Header = YourResourceFile.LastName;
}

如果要在網格上添加更多列,則需要添加:

  1. 資源文件中的一個鍵
  2. 構造函數中的新行

實際上,通常,步驟1不是必需的,因為密鑰可能會在那里

更新:
似乎有一個流行的VS插件,名為ResXManager或( 這里 )。

UserControl的Localizable屬性應設置為true。

此外,您想要翻譯的UserControl的任何自定義屬性都應該添加:

[Localizable(true)]
public string MyTranslatableLabel
{
    get;set;
}

您可能還必須從包含UserControl的Form的Designer.cs文件中刪除下面的任何實例化,以使其正常工作:

this.myUserControl.MyTranslatableLabel = "Initial label of user control";

所有這些都在MS VisualStudio 2017社區進行了測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM