1. 필요에 의해 게시할 프로그램의 '게시 언어'를 설정해야 할 때가 있다.
2. '게시 언어'를 설정하면 응용 프로그램 매니페스트의 assemblyIdentity 중 language값이 설정한 값으로 변경된다. (default는 neutral)
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이 각각 담긴다.
7. '게시 언어'를 설정하면 게시시 해당 국가를 제외한 다른 국가들의 리소스가 담긴 폴더들을 생성하지 않는다.
(즉, 다른 국가들의 resources.dll이 없어서 해당 클라이언트에서 언어 변경 기능을 수행할 때 정상적으로 동작하지 않는다.)
8. 이를 해결하기 위해선 '게시 언어' 설정과 별개로 게시결과물에 무조건 국가별 리소스를 포함하도록 해야 한다.
8-2. 아래 캡처에서 '게시 언어'가 설정되어있지 않을 때(nentral) 국가별 리소스 파일의 게시 상태가 포함으로 되어있는 것을 볼 수 있다.
8-3. 다시 옵션 탭으로 가서 '게시 언어'를 설정하고(아무 언어나) 응용 프로그램 탭으로 돌아가 보자
하단의 모든 파일 표시를 체크하면 리소스 파일들이 제외되어있는 것을 볼 수 있다.
이를 모두 포함으로 변경해주면 csproj상에 수정사항이 반영된다.
주의 : '게시 언어'변경은 불필요하다면 다시 기본값으로 변경해주어야 한다.