본문 바로가기

Programming/.NET

.NET Clickonce localization과 게시 언어 정리

반응형

 

1. 필요에 의해 게시할 프로그램의 '게시 언어'를 설정해야 할 때가 있다.

프로젝트우클릭 - 속성 - 게시 - 옵션

 

2. '게시 언어'를 설정하면 응용 프로그램 매니페스트의 assemblyIdentitylanguage값이 설정한 값으로 변경된다. (defaultneutral)

 

2-2. 글의 주제가 localization과 관련이 있는 만큼 다국가 지원을 위해 게시 툴을 별도로 만들어 사용한다면 아마 내부적으로 MSBuild를 많이 사용할 텐데 빌드 시에 TargetCulture값을 옵션으로 주면 '게시 언어'를 설정할 수 있다.

msbuild.Build($@"""{projectFilePath}"" /t:build;publish /p:Configuration=Release;PublishDir={publishPath};TargetCulture={targetCulture}");

 

3. '게시 언어'를 설정한다는 것은 쉽게말해 해당 클라이언트 프로그램을 지역화하는 것이다. 

 

4. 특정 시나리오에서 '게시 언어'를 설정하는것이 문제가 될 수 있다.

 

5. 여기서 특정 시나리오란 클라이언트 프로그램에서 언어 변경 과 같은 기능을 지원하는 것이다.

 

5.2 예를 들면 ko-KR로 '게시 언어'를 설정한 클라이언트에서 특정 메뉴가 영어로는 어떻게 나오는지 보고 싶어 

언어 변경 기능을 이용하여 영어(en-US)로 언어를 변경하는 시나리오 등을 생각해 볼 수 있다.

 

6. '게시 언어'가 설정되지 않은 상태(language = neutral)에서 게시하면 Application Files에 국가별 폴더가 생성되고 resx file의 빌드 결과물인 resources.dll file이 각각 담긴다.

Application Files 중 일부

 

7. '게시 언어'를 설정하면 게시시 해당 국가를 제외한 다른 국가들의 리소스가 담긴 폴더들을 생성하지 않는다. 

(즉, 다른 국가들의 resources.dll이 없어서 해당 클라이언트에서 언어 변경 기능을 수행할 때 정상적으로 동작하지 않는다.)

 

8. 이를 해결하기 위해선 '게시 언어' 설정과 별개로 게시결과물에 무조건 국가별 리소스를 포함하도록 해야 한다.

 

8-2. 아래 캡처에서 '게시 언어'가 설정되어있지 않을 때(nentral) 국가별 리소스 파일의 게시 상태포함으로 되어있는 것을 볼 수 있다.

프로젝트우클릭 - 속성 - 게시 - 응용 프로그램 파일

 

8-3. 다시 옵션 탭으로 가서 '게시 언어'를 설정하고(아무 언어나) 응용 프로그램 탭으로 돌아가 보자

프로젝트우클릭 - 속성 - 게시 - 옵션

 

하단의 모든 파일 표시를 체크하면 리소스 파일들이 제외되어있는 것을 볼 수 있다.

프로젝트우클릭 - 속성 - 게시 - 응용 프로그램 파일

 

이를 모두 포함으로 변경해주면 csproj상에 수정사항이 반영된다.

주의 : '게시 언어'변경은 불필요하다면 다시 기본값으로 변경해주어야 한다.

반응형