Win32에서 다국어 응용 프로그램을 구축하기위한 모범 사례는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/490297

문제

Windows Mobile에서 GUI 애플리케이션을 구축해야하며 사용자가 원하는 언어를 선택하거나 자동으로 언어를 선택할 수있는 응용 프로그램을 선택할 수 있기를 바랍니다. 필요한 리소스를 포함하는 여러 DLL을 사용하는 것이 좋습니다.

1) 사용자의 개입없이 응용 프로그램이 적절한 자원 언어를 자동으로 선택하는 선호 (기본값?) 방법은 무엇입니까? 샘플이 있습니까?

2) 사용자 / 애플리케이션 제어를 허용하는 옵션은 무엇입니까? 어떤 언어가 표시되어야합니까?

3) 가능하면 여러 언어 리소스를 포함하는 DLL을 어떻게 만들고 언어를 동적으로 선택합니까?

도움이 되었습니까?

해결책

#1의 경우 사용할 수 있습니다 getSystemDefaultLangid 컴퓨터 시스템의 언어 식별자를 얻을 수 있습니다.

#2의 경우 지원하는 언어를 나열 할 수 있으며 사용자가 하나를 선택하면 선택을 텍스트 파일 또는 레지스트리에 작성하십시오 (Windows Mobile의 레지스트리가 있습니까?). 시작시 파일 또는 레지스트리에 선택이없는 경우에만 #1의 함수를 사용하십시오.

#3의 경우, 우리가하는 방식은 언어 당 하나의 리소스 DLL을 갖는 것입니다. 각 자원은 동일한 리소스 ID를 포함합니다. 언어를 알아 내면 해당 언어에 대한 DLL을로드하면 나머지는 작동합니다.

다른 팁

이전 getSystemDefuaultLangid 제안은 좋은 제안입니다.

설치의 첫 번째 단계로 요청할 수 있습니다. 또는 각 언어에 대해 다른 설치자를 패키지 할 수 있습니다.

3 : : : 3 : 이론적으로 위에서 언급 한 DLL 방법은 훌륭하게 들리지만 실제로는 개인적으로 나에게 전혀 효과가 없었습니다.

더 나은 방법은 프로그램의 모든 문자열을 현지화 또는 놀 로화하는 것입니다.

MessageBox(Localize("Hello"), Localize("Title"), MB_OK);
RegOpenKey(NoLocalize("\\SOFTWARE\\RegKey"), ...);

Localize는 영어 텍스트를 선택한 언어로 변환하는 기능 일뿐입니다. nolocalize는 아무것도하지 않습니다.

선택한 스크립팅 언어로 몇 가지 유용한 스크립트를 만들 수 있기 때문에 문자열을 이러한 값으로 둘러싸고 싶습니다.

1) 모든 현지화를 검색하는 스크립트 ( "접두사 및 출력 a .ini 파일이 영어 = OtherLangauge 이름 값 쌍 쌍. output .ini 파일에 매핑이 포함되어 있으면 다시 추가하지 않습니다. 다시는 다시 만들지 않습니다. INI 파일을 완전히, 스크립트는 스크립트를 실행할 때마다 누락 된 스크립트를 추가합니다.

2) 모든 문자열을 검색하고 현지화 ( "또는 nolocize (". 그렇지 않은 경우 여전히 현지화 해야하는 줄을 알려주는 경우.

#2가 중요한 이유는 모든 문자열이 실제로 현지화가 필요한 것으로 의식적으로 표시되어야하기 때문입니다. 그렇지 않으면 적절한 현지화가 있는지 확인하는 것은 절대적으로 불가능합니다.

DLL에서로드하는 대신 #1의 이유는이 솔루션을 유지하는 데 작업이 필요하지 않으며 즉시 번역 해야하는 새로운 문자열을 추가 할 수 있기 때문입니다.

프로그램과 함께 출력되는 INI 파일을 배송합니다. 또한이 INI 파일을 번역기에게 제공하여 영어 = 기타 언어 쌍을 변환 할 수 있습니다. 그들이 당신에게 그것을 다시 보낼 때, 당신은 단순히 체크인 .ini 파일을 번역기의 주어진 것으로 교체합니다. #1에 언급 된대로 스크립트를 실행하면 번역가가 번역하는 동안 수행 된 경우 누락 된 번역이 다시 추가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top