2017-01-02 4 views
1

위성 어셈블리를 사용하여 컨트롤을 지역화 할 수있는 방법에 대한 데모를 제시해야합니다. 이 작업을 수행하는 동안 양식에 두 개의 컨트롤이있는 곳을 두 곳 모두 동일하게 유지했습니다. 나는 Label에서 그것을 파생 시켰었다. 이제 culture가 fr-FRcontrol2이고 de-DEcontrol1을 표시해야합니다.두 개의 다른 문화권을 하나의 양식에서 동시에 설정하는 방법은 무엇입니까?

양식에 표시된 것과 동일한 컨트롤에 다른 문화권을 설정할 수있는 옵션이 있습니까?

다음 스크린 샷은 필자의 필요를 보여줍니다.

enter image description here

나 제안하십시오 가능 여부 것입니다. 가능한 경우 어떻게 할 수 있는지 알려주십시오.

답변

1

당신이 의지 할 수 사용 Windows 양식의 localization 기능. 이 방법을 사용하면 다른 문화권의 다양한 속성으로 컨트롤을 설정할 수 있습니다. 그런 다음 특정 문화권에 대해 설정된 속성을 사용하여 전체 양식을 표시 할 수 있습니다.

각기 다른 문화권으로 각 컨트롤을 표시 할 수도 있습니다. 이 양식 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); 

그리고 단순히 de-DE 문화 코드 위 button2 사용. 솔루션 위

  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"값과 그 이후의 Statement를 전달할 곳. –

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