2013-07-08 3 views
0

I 인터페이스 현지화에 대해 배우고, 사용자가 버튼을 클릭하고 표시되는 언어를 변경할 수 있도록 비주얼 스튜디오 내 프로그램에 대한 나의 목표를 확인하는 것입니다 2008 년 WPF를 사용하고 창문에. 사용자가 단추를 클릭 할 때 코드 숨김 섹션에서 런타임에 리소스 파일을 변경하려고했습니다.변경 리소스 파일은

이 질문을 읽고 : 내가 버튼을 클릭 이벤트에 위의 변경을 원하기 때문에 Programmatically change resource file language (resx) in Code Behind

그러나이 나에게 해결책이 될 것 같지 않습니다. 이 질문에 대한 답변을 얻었습니다.이 질문에 유래 stackoverflow.com 의해 질문 여기

내가 이전 질문의 기반으로, 행운과 노력했습니다 것입니다 :

/// Change to English-US 
     private void Button2_Click(object sender, RoutedEventArgs e) 
     { 
      protected override void InitializeCulture() 
      { 
       base.InitializeCulture(); 
       System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 
      } 
     } 

/// Change to German 
     private void Button3_Click(object sender, RoutedEventArgs e) 
     { 
      protected override void InitializeCulture() 
      { 
       base.InitializeCulture(); 
       System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 
      } 
     } 

나는 학교에서 지금은 몇 년에 대한 내 자신에 프로그래밍 봤는데, 그래서 ' 절대적인 멍청 아. 그러나 저는 C#과 WPF에 익숙하지 않습니다. 내가 아는 바로는, 내 코드에서와 같이 함수 내에 함수를 가질 수 없습니다. 버튼 클릭 이벤트로 작업해야하기 때문에 여기에 넣은 유일한 이유가 있습니다.

도움을 주시면 대단히 감사하겠습니다. WPF는 현지화 및 로컬 라이 제이션의 말에 의해 윈폼 같은 기능을 지원하지 않습니다처럼

namespace LocalizationConcept 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      Properties.Resources.Culture = new CultureInfo(ConfigurationManager.AppSettings["Culture"]); 
      ///InitializeComponent(); 
     } 

     /// Exit Button 
     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      System.Environment.Exit(0); 
     } 

     private void ChangeCulture(string cultureKey) 
     { 
      try 
      { 
       System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureKey); 
      } 
      catch (Exception err) 
      { 
       System.Environment.Exit(0); 
      } 
     } 

     private void Button2_Click(object sender, RoutedEventArgs e) 
     { 
      ChangeCulture("en-US"); 
     } 

     private void Button3_Click(object sender, RoutedEventArgs e) 
     { 
      ChangeCulture("de-DE"); 
     } 
    } 
} 

답변

1

것 같다 :

여기에 새로운 코드입니다. 런타임에 언어를 교체하는 방법을 단계별로 보여주는 흥미로운 기사를 찾았습니다.

  • WPF Localization - On-the-fly Language Selection : 그것은 런타임에 언어를 대체 할 수있는 옵션 제공
    • 그것은 절름발이 XML보다 성능, XPath를 기반으로 결합 액
    • 그것은을 통해 사용할 수 있습니다에를 즉석에서 스타일, 컨트롤 템플릿 및 데이터 템플릿
    • 그것은 변환 매개 변수를 사용하여 서식있는 텍스트 사용하여 기본 및 사용자 정의 포맷터
    • 그것은 번역 사용자 지정 마크 업 extens을 제공합니다 자동으로 모든 지역화 요소
    • 를 사용하여 기존의 리소스 파일 구조 (* 된 .resx 파일) 업데이트 - 이온 우아한 XAML 런타임에
      쓰기 Visual Studio에서 유지 관리 할 수 ​​있습니다.
    • Expr에서 작동하는 지역화 된 요소에 대한 디자인 타임 지원 유지 ession 혼합 (잘하면 다른 XAML 설계 응용 프로그램)
0

(그것이 될 수 있지만) 그것은 그것의 자신의 기능에있을 필요가 없습니다.다음 고려 :

private void ChangeCulture(string cultureKey) 
    { 
     try 
     { 
      System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureKey); 
     } 
     catch (Exception err) 
     { 
      // That culture probably doesn't exist 
     } 
    } 

    private void ButtonA_Click(object sender, EventArgs args) 
    { 
     ChangeCulture("en-US"); 
    } 

    private void ButtonB_Click(object sender, EventArgs args) 
    { 
     ChangeCulture("de-DE"); 
    } 

편집 :

I found this on another post하고 +100 현상금을 수상했다, 그래서 나는 그것이 훌륭한 솔루션 상상. 확인 해봐.

+0

이전에 가지고 있던 버튼 클릭 이벤트를 완전히 지우고 입력했습니다. 컴파일러에는 문제가 없지만 버튼을 클릭하면 언어가 변경되지 않습니다. 새 코드를 게시합니다. - 프로그램을 실행하기 전에 언어를 변경하는 데 사용했던 app.config 파일이 있다는 점에 유의해야합니다. –

+0

방금 ​​관련성이 있지만 비슷한 답변이있는 링크를 추가했습니다. –

+0

내 인터페이스의 모든 텍스트를 현지화하려고합니다. 버튼, 텍스트 상자 및 탭 항목에 대한 텍스트가 있습니다. 그 링크가 잘 작동할까요? 내가 묻는 유일한 이유는 예를 들어 문자열을 XAML 창에 항상 코드화하기 때문입니다. –

관련 문제