2010-05-31 9 views
6

에서는 C# windows Appliation에서 샘플 소프트웨어를 개발했습니다. 다국어 지원 소프트웨어로 만드는 방법.다국어 지원 C#

예를 들어

: 메시지 상자 중 하나는

내가이 chinees OS의 소프트웨어를 설치 "응용 프로그램 샘플에 오신 것을 환영합니다"를 표시하지만, 그것은 단지 영어로 메시지를 표시합니다.

이 문제는 "문자열 테이블"(리소스 파일)을 사용하고 있습니다.

문자열 테이블에서 영어와 중국어로 각 메시지에 대한 항목을 만들어야합니다.

해당 프로세스. 이것을 할 수있는 다른 방법이 있습니까?

+2

좋은 스레드 : http://stackoverflow.com/questions/119568/best-practice-to-make-a-multi-language-application-in-c-winforms 또한 여기 – Inisheer

+0

: HTTP : // msdn.microsoft.com/en-us/library/1021kkz0%28v=VS.100 % 29.aspx – Inisheer

+0

WinForms 또는 WPF? –

답변

4

크레아 (Creare) 아래에 언급 된 지원을 원하는 언어별로 파일을 다시 만듭니다. 사용자의 언어/currentculture을 바탕으로

alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNETPlayground/resx.gif

, 라벨 또는 MessageBog에서 각각의 언어 리소스 파일 및 디스플레이의 값을 읽습니다. 다음은 몇 가지 샘플 코드입니다.

public static class Translate 

{ 

    public static string GetLanguage() 

    { 

     return HttpContext.Current.Request.UserLanguages[0]; 

    } 



    public static string Message(string key) 

    { 

     ResourceManager resMan = null; 

     if (HttpContext.Current.Cache["resMan" + Global.GetLanguage()] == null) 

     { 

      resMan = Language.GetResourceManager(Global.GetLanguage()); 

      if (resMan != null) HttpContext.Current.Cache["resMan" + Global.GetLanguage()] = resMan; 

     } 

     else 

      resMan = (ResourceManager)HttpContext.Current.Cache["resMan" + Global.GetLanguage()]; 



     if (resMan == null) return key; 



     string originalKey = key; 

     key = Regex.Replace(key, "[ ./]", "_"); 



     try 

     { 

      string value = resMan.GetString(key); 

      if (value != null) return value; 

      return originalKey; 

     } 

     catch (MissingManifestResourceException) 

     { 

      try 

      { 

       return HttpContext.GetGlobalResourceObject("en_au", key).ToString(); 

      } 

      catch (MissingManifestResourceException mmre) 

      { 

       throw new System.IO.FileNotFoundException("Could not locate the en_au.resx resource file. This is the default language pack, and needs to exist within the Resources project.", mmre); 

      } 

      catch (NullReferenceException) 

      { 

       return originalKey; 

      } 

     } 

     catch (NullReferenceException) 

     { 

      return originalKey; 

     } 

    } 

} 

asn asp.net 응용 프로그램에서는 다음과 같이 사용합니다.

<span class="label">User:</span> 

이제 둘 것 :

<span class="label"><%=Translate.Message("User") %>:</span> 
+1

고마워요 : 지금 나는 이것을 단지 .... 다른 방법으로 사용하고 있습니까? –

0

리소스 파일을 사용하여 수행 할 수 있습니다. 각 언어에 대한 리소스 파일을 만들어야하며 응용 프로그램을 실행하는 동안 적절한 언어를 사용할 수 있습니다.

+0

Ram 님, 고맙습니다. 이제이 방법을 사용하고 있습니다 .... 다른 간단한 방법은 없습니까? –

2

당신이 램이 제안 리소스 파일을 사용하려고 한 경우, 현지화 here: ASP.NET MVC 2 Localization complete guide에 대한 좋은 블로그 게시물이 있습니다. (나는 이것이 Asp.net MVC 2 용이라고 언급 했어야했다. 유용 할 수도 있고 그렇지 않을 수도있다.) 각 언어에 대한 테이블을 만드는 데 많은 시간을 할애해야한다. 나는 전에 다른 접근법을 사용하지 않았다. 유용하다고 생각하기를 바란다.

+0

고맙습니다. 모든 것이 그렇게 쉽게 설명되며 작동합니다. –

0

Resharper 5.0 당신이 현지화에 소비하는 시간을 크게 향상시킬 수있다. 그것은 자원으로 쉽게 이동할 수있는 기능을 가지고 있으며, 지역화 할 수있는 모든 문자열에 밑줄을 긋기 때문에 선택하기가 어렵습니다.

30 일 평가판 (정식 버전)을 제공한다면 간단히 설치할 수 있고, 감당할 수 없다면 제거하고 제거 할 수 있습니다.하지만 계속 유지할 것을 제안합니다 .- 정말 가치가 있습니다.

소프트웨어 현지화 및 세계화는 항상 힘들었고 개발자에게는 원치 않는 작업이었습니다. ReSharper 5는 ASP.NET 및 XAML 마크 업뿐만 아니라 C# 및 VB.NET 코드의 resx 파일 및 리소스 사용을위한 전체 기능 스택을 제공하여 리소스 작업을 크게 단순화합니다.
전용 기능에는 문자열을 리소스로 이동, 리소스 사용법 및 기타 탐색 작업이 포함됩니다. 리팩토링 지원, 검사 및 수정과 결합하면 편리한 현지화 환경을 얻을 수 있습니다.

여기