2017-01-02 6 views
1

我需要演示如何使用衛星程序集來定位控件。雖然這樣做,我堅持一個地方,我有一個窗體上的兩個控件都是一樣的。我曾經從標籤中派生出來。 現在我需要顯示control1與文化fr-FRcontrol2與文化de-DE如何在同一時間爲單個窗體上的兩個不同的控件設置兩個不同的文化?

是否有任何選項可用於爲表單中顯示的相同控件設置不同的文化。

下面的截圖會顯示我的需要。

enter image description here

請給我建議的是,可以或不可以。如果可能的話,讓我知道我該怎麼做到這一點。

回答

1

你可以依靠在localization windows窗體的功能。這樣你就可以爲不同的文化設置不同的屬性。然後,您可以使用爲特定文化設置的屬性顯示整個表單。

此外,您可以選擇顯示不同文化的每個控件。要做到這一點是不夠的表單Load事件處理程序使用這些代碼:

System.Threading.Thread.CurrentThread.CurrentUICulture = 
    System.Globalization.CultureInfo.GetCultureInfo("fr-FR"); 
var resources = new System.ComponentModel.ComponentResourceManager(this.GetType()); 
resources.ApplyResources(button1, button1.Name); 

,簡單地對上面的代碼button2使用與de-DE文化。

注意

  1. 上述方案並不限於Text財產,它支持所有Localizable屬性。

  2. 您可以簡單地將它作爲控件類的擴展方法。

  3. 它具有創建控件的本地化外觀的設計器支持。

+0

有關使用Windows窗體的多語言應用程序的更多信息,請參見:[如何在winforms中創建多語言應用程序](http:// stackoverflow。com/q/32989100/3110834) –

+0

ApplyResources是否只需要從resx文件中獲取本地化的字符串。 – Adhi

+0

在本地化的形式中,'ApplyResources'將在每個控件的'InitializeComponent'中被自動調用。在將CurrentUICulture設置爲特定文化後,我們在這裏所做的是爲特定控件調用ApplyResources。如果需要,這種方式可以爲不同的控制加載不同的文化。 –

1

嘗試使用以下代碼。

if(langCode=="fr-FR") 
{ 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR"); 
} 
if(langCode=="de-DE") 
{ 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE"); 
} 
+0

我在哪裏需要在Form_Load中使用此代碼? – Adhi

+0

您傳遞「langCode」值及其後續語句的位置。 –

1

因爲要展示的本地化功能,爲您的應用程序,你可以改變當前線程的文化,當您爲您的控件更新值

private void SetLocalizedTextForLabel(Label label, string language) 
{ 
    var original = Thread.CurrentThread.CurrentUICulture; 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 

    // Here value will be retrieved from YourResource based on the current culture 
    label.Text = Properties.YourResource.YourText; 

    Thread.CurrentThread.CurrentUICulture = original; 
} 

然後用它

SetLocalizedTextForLabel(frenchLabel, "fr-FR"); 
SetLocalizedTextForLabel(germanLabel, "de-DE"); 
+0

對於演示,這是好的。這是可能的一個真實的工作應用程序。我如何在真實的應用程序中爲這些提供支持,我的控件將對核心中同一表單上的兩種不同文化具有默認支持。 – Adhi

相關問題