2016-08-01 2 views
-1

제 질문은 언어를 변경해야 할 때이 코드를 반복하지 않고 언어를 변경하는 방법입니다. 다음은 불가리아어 및 영어 용 버튼입니다. 코드를 반복하지 않고 추가하는 방법을 하나 더 추가해야합니다.Windows에서 언어 런타임을 변경하십시오.

private void BtnBg_Click(object sender, EventArgs e) 
{ 
    CultureInfo ci = new CultureInfo("bg-BG"); 
    Assembly a = Assembly.Load("CoffeeShop"); 
    ResourceManager rm = new ResourceManager("CoffeeShop.Languages.Languages", a); 
    BtnCapuchino.Text = rm.GetString("Cappucino", ci); 
    BtnCinnamon.Text = rm.GetString("Cinnamon", ci); 
    BtnEspresso.Text = rm.GetString("Espresso", ci); 
    BtnDecaffeinedCoffee.Text = rm.GetString("DecaffeinedCoffee", ci); 
    BtnMilk.Text = rm.GetString("Milk", ci); 
    BtnSugar.Text = rm.GetString("Sugar", ci); 
    BtnBack.Text = rm.GetString("Clear", ci); 
    Bulgarian.Text = rm.GetString("LanguageBulgarian", ci); 
    textBox1.Text = rm.GetString("Bill", ci); 
    CoffeeShop.ActiveForm.Text = rm.GetString("CoffeeShop", ci); 
    BtnBuy.Text = rm.GetString("Buy", ci); 
    ShowInformation(this, null); 
} 

private void BtnEng_Click(object sender, EventArgs e) 
{ 
    CultureInfo ci = new CultureInfo("en-US"); 
    Assembly a = Assembly.Load("CoffeeShop"); 
    ResourceManager rm = new ResourceManager("CoffeeShop.Languages.Lang", a); 
    BtnCapuchino.Text = rm.GetString("Cappucino", ci); 
    BtnCinnamon.Text = rm.GetString("Cinnamon", ci); 
    BtnEspresso.Text = rm.GetString("Espresso", ci); 
    BtnDecaffeinedCoffee.Text = rm.GetString("DecaffeinedCoffee", ci); 
    BtnMilk.Text = rm.GetString("Milk", ci); 
    BtnSugar.Text = rm.GetString("Sugar", ci); 
    BtnBack.Text = rm.GetString("Clear", ci); 
    Bulgarian.Text = rm.GetString("LanguageBulgarian", ci); 
    textBox1.Text = rm.GetString("Bill", ci); 
    CoffeeShop.ActiveForm.Text = rm.GetString("CoffeeShop", ci); 
    Bulgarian.Text = rm.GetString("LanguageBulgarian", ci); 
    BtnBuy.Text = rm.GetString("Buy", ci); 
    ShowInformation(this, null); 
}  
+0

는 한 번 봐, 올바른 언어를 선택하고 올바른 라벨, 버튼이 표시됩니다 당신의 코드. 이 메소드의 유일한 차이점은'bg-BG'를 사용하고 다른 하나는'en-US'를 사용하는 첫 번째 라인에 있습니다. 그래서 여러분은 간단하게 메소드를 코드에 캡슐화 할 수 있습니다. void Localize (string culture) {CultureInfo ci = 새로운 CultureInfo (문화권); .....}'Localize ("bg-BG")를 사용하여 호출하십시오. 또는 당신이 필요로하는 다른 어떤 문화. –

+0

또한 양식의 [localization] (https://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.100) .aspx) 기능을 사용할 수 있습니다. –

+0

또한 디자인 타임을 지원하는 양식을 닫았다가 다시 열지 않고도 런타임시 언어를 변경하는 좋은 방법으로 [this post] (http://stackoverflow.com/a/33948879/3110834)를 살펴보십시오. 이 포스트에서 디자인 타임에 컨트롤의 텍스트를 설정할 수있는 익스텐더 컨트롤을 볼 수 있으며 런타임에는 폼을 다시 열지 않고 다른 문화권간에 전환 할 수 있습니다. –

답변

0

를 볼 수 있지만이 경우 당신은 새로운 방법으로 기능을 빼지를 시도 할 수 있습니다 :

private void ApplyLanguage (CultureInfo ci) 
{ 
    Assembly a = Assembly.Load("CoffeeShop"); 
    ResourceManager rm = new ResourceManager("CoffeeShop.Languages.Lang", a); 
    BtnCapuchino.Text = rm.GetString("Cappucino", ci); 
    BtnCinnamon.Text = rm.GetString("Cinnamon", ci); 
    BtnEspresso.Text = rm.GetString("Espresso", ci); 
    BtnDecaffeinedCoffee.Text = rm.GetString("DecaffeinedCoffee", ci); 
    BtnMilk.Text = rm.GetString("Milk", ci); 
    BtnSugar.Text = rm.GetString("Sugar", ci); 
    BtnBack.Text = rm.GetString("Clear", ci); 
    Bulgarian.Text = rm.GetString("LanguageBulgarian", ci); 
    textBox1.Text = rm.GetString("Bill", ci); 
    CoffeeShop.ActiveForm.Text = rm.GetString("CoffeeShop", ci); 
    Bulgarian.Text = rm.GetString("LanguageBulgarian", ci); 
    BtnBuy.Text = rm.GetString("Buy", ci); 
    ShowInformation(this, null); 
} 

하고 버튼에서 호출 :

private void BtnBg_Click(object sender, EventArgs e) 
{ 
    ApplyLanguage(new CultureInfo("bg-BG")) 
} 
private void BtnEng_Click(object sender, EventArgs e) 
{ 
    ApplyLanguage(new CultureInfo("en-US")) 
} 
+0

그것은 furst 언어에 대한 작동하지만 영어 나는 다른 리소스 관리자가 : ResourceManager rm = newResourceManager ("CoffeeShop.Lang.Languages", a) –

+0

이 언어와 작품을 만드는 방법? –

+0

'ResourceManager '를 매개 변수로도 전달할 수 있습니다. 'ApplyLanguage (CultureInfo ci, ResourceManager rm)'사용 – Marusyk

0

모든 언어를 동시에 표시 하시겠습니까? 아니면 현재 언어의 레이블, 버튼 만 표시하려고합니까?

대부분의 사람들은 Visual Studio의 내장 기능을 사용하여 양식을 클릭하고 새 언어를 선택한 다음 텍스트를 편집하기 만하면됩니다. 이렇게하면 해당 양식의 각 언어에 대해 별도의 리소스 파일이 만들어집니다.

그런 식으로 당신은 당신의 코드에서 아무것도 변경할 필요가 없습니다 ... 그리고 그것은 자동적 등

https://msdn.microsoft.com/en-us/library/y99d1cd3(v=vs.100).aspx

관련 문제