2009-04-28 13 views
6

아래의 짧은 기사를 사용하여 다중 언어를 추가했습니다.C# 다국어 용 설정 만들기

당신은 예를 들어 독일어 언어 추가하면 이러한 파일이됩니다 formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs 첫 번째 파일에서

을 당신은 자원이됩니다 문자열, 이미지, ...과 같은 중립 언어 용.

이제 코드에 사용 된 문자열에도 리소스를 추가해야합니다. 새 리소스 파일을 추가하고 formMain.Strings.resx 이름을 입력하십시오. 그런 다음 변환해야하는 모든 문자열에 대해 name, value 쌍을 입력합니다. 리소스 파일을 추가하면 resx 디자이너가 닫을 때마다 formMain.Strings.Designer.cs라는 이름의 다른 파일이 자동으로 다시 생성되므로 자동으로 입력됩니다.

formMain.Strings.de-DE.resx라는 이름의 다른 리소스를 추가하십시오. 이전 자원에서 동일한 이름 키를 추가하고 해당하는 독일어 단어로 값을 변경하십시오. 이제는 소스에서 생성 된 리소스에 액세스하려면 다음과 같이됩니다.

MessageBox.Show (formMain_Strings.SameStringName);

그러나 나는 태국어로 바꿨다. VS에서 내 앱을 실행할 때 모든 것이 잘 작동합니다.

그러나 설치 프로젝트를 추가하고 클라이언트 컴퓨터에 설치하자마자 언어가 태국어로 변경되지 않고 기본 언어 만 유지하면됩니다.

그래서 리소스 파일과 th-TH dll을 프로젝트 설정에 추가했습니다. 그리고 나는 여전히 같은 문제를 겪고 있습니다.

Packaging file 'Lang.Strings.resx'... 
Packaging file 'MultiLanguage.resources.dll'... 
Packaging file 'MultiLanguage.exe'... 
Packaging file 'Lang.Strings.th-TH.resx'... 

Visual Studio에서 실행하면 모든 것이 잘 작동합니다. 일단 설치되면 실행되도록해야 할 일이 있습니까? 각 파일의 모든 속성은 기본값을 유지합니다.

많은 감사,

=========

static void Main() 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo("th-TH"); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 

답변

10

나는

추가를 클릭 한 후 솔루션 탐색기에서 설치 프로젝트를 클릭하고 답을 발견 \ Project Output \. 대화 상자에서 현지화를 포함 할 프로젝트를 선택하십시오 (sat 엘리트) 어셈블리를 선택한 다음 지역화 된 리소스를 선택합니다.

내가 설치 한 폴더에 설치 한 후 위성 어셈블리가 포함 된 th-TH 폴더가 있습니다.

감사합니다.

+0

가능하다면 가능한 한 빨리 설치 프로젝트를 중단하고 Windows Installer XML (WiX)로 전환하는 것이 좋습니다. 한 번 설치 프로젝트를 사용하여 제품을 출하했습니다. 다시는. 절대로 다시는. – Promit

+0

방금 ​​WiX를 살펴보고 설치 패키지에 현지화 된 리소스 dll을 포함시키지 못했습니다. 모든 종류의 설치 프로젝트에서 지역화 된 리소스가 단순히 작동하지 않는 것 같습니다 (현재 VC++ 프로젝트에서 작업 중입니다). – galmok

1

(거기 아니라면) 응용 프로그램의 시작시이에 추가보십시오 : 여기

Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture; 

이 작업을 수행하는 방법의 옵션 중 일부와 런타임에 로케일을 선택할 수있는 옵션을 설명하는 short article입니다. 댓글 후


편집 :

이 위성 어셈블리가 적절한 위치에 있는지, 올바르게 구축합니다. 그 문서에서 내가 참조한 :

"응용 프로그램을 시작할 때 가능한 위성 어셈블리 파일을 찾습니다. 위성 어셈블리 파일은 .exeIR 대신 .resources.dll 확장명을 가진 리소스 전용 어셈블리 파일입니다. dll (주 어셈블리가 라이브러리 인 경우) 위성 어셈블리 파일은 항상 applciation의 주 디렉터리의 언어 별 하위 디렉터리에서 찾습니다. 응용 프로그램 파일이 Converter.exe 인 경우 일본어 위성 어셈블리 파일은 ja \ Converter.resources.dll입니다."

여기에서 확인해야 할 몇 가지 사항이 있습니다. 어셈블리의 이름을 확인하고 올바른 위치에 있는지 확인하십시오. 해당 경우 해당 이름이있는 th-TH 하위 디렉토리에 있어야합니다 실행 파일에서. 그것은이 있다면, 그것은 발견하고 적절하게 사용되어야한다. 여기

이 항목에 대한 another good source of information입니다.

+0

안녕하세요. 이 항목은 이미 내 양식로드 이벤트에 추가되어 있습니다. 모든 것은 Visual Studio에서 잘 작동합니다. 클라이언트의 컴퓨터에 설치해야합니다. public Form1() { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo ("th-TH"); InitializeComponent(); } – ant2009

+0

양식을로드하기 전에 Main() 루틴으로 이동하십시오. form_load에서 가져 오는 것이 너무 늦었다 고 생각합니다 ... 그 시점에서, 어셈블리는 이미로드되고 선택되었습니다. –

+0

안녕하세요. 나는 form_load에서 그것을 제거하고 그것을 나의 메인에 넣었다. 그러나 Visual Studio에서 작동합니다. 그러나 클라이언트 컴퓨터에 설치하자 마자 태국어가 아닌 기본 언어 만 표시됩니다. 내 첫 번째 게시물에서 내 리소스 파일과 resource.dll을 추가했습니다. 내가 그 일을해야합니까? – ant2009