0

임베디드 리소스로 정의 된 내 VB.NET 프로젝트에 "strings.resx"라는 문자열 리소스 파일이 있습니다. strings.es.resx이라는 다른 파일이 있는데, 스페인어로 된 모든 동일한 문자열이 들어 있습니다. 나는 다음과 같은 코드를 사용하여 런타임에 리소스를로드 해요 : 내가 Windows에서 스페인어하는 언어 로케일을 설정하고 다시 로그인 한런타임시 적절한 언어 버전의 문자열 리소스가로드되도록하려면 어떻게해야합니까?

MyStrings = New ResourceManager("myprog.strings", GetType(MainForm).Assembly) 

,하지만 난 여전히 영어 문자열 리소스 로딩을 받고있을 때 위 실행됩니다. Windows 로켈이 ES 인 경우 스페인어 리소스를로드하려면 어떻게해야합니까? 나는 그것이 자동으로 처리 될 것으로 예상했다.

답변

1

System.Threading.Thread.CurrentThread.CurrentUICulture 속성을 살펴보십시오. en-US에 고정되는 습관이 있습니다.

(있는 경우) CurrentCulture과 동일하게 설정하십시오.

업데이트

문제가 해결되지 않았기 때문에, 응용 프로그램의 출력 폴더가 strings.resources.dll라는 DLL 인 내부에 es 폴더를 가지고 있는지 확인합니다. 그렇지 않다면 기본적으로 자원 관리자는 문화권 특정 문자열 자원을 찾지 못합니다. 왜냐하면 거기에 존재하지 않기 때문에 복사해야하고 작동해야합니다.

+0

현재 UCulture는 es-ES입니다. 양식 리소스는 현지화되어 있습니다. 항상 중립적 인 문화로 보이는 코드에서 사용하는 "리터럴"값입니다. – Robinson

+0

@Robinson - 만약'ResourceManager'의'GetString (string)'메소드를 사용하고 있다면, 명시 적으로'GetString (string, CultureInfo)'오버로드를 시도하고 스페인 문화를 명확하게 전달해 줄 수 있습니까? 여전히 작동하지 않는다면, 내 생각에 bin 폴더에 리소스 파일이 없습니다. –

+0

Duh! 내 실수 ... 문자열이 올바르게로드되고 있습니다. 영어 버전의 문자열이 포함 된 이후에 다른 작업 (영어 설정 파일에서 읽기)을 수행하고 있습니다. 이유는 내 어리 석음 이었기 때문에 답을 자신의 노력에 맞게 표시합니다 : p. – Robinson

0

부인 -이 모든 메모리이며, 100 % 정확한 :-)

.NET 리소스를 사용하여로드하지 않을 수 있습니다 Thread.CurrentUICulture (코드 리소스를로드 할 때 명시 적으로 재정의하지 않는 한). Thread.CurrentUICulture은 Windows 설치에 사용 된 UI 언어로 설정되며 변경할 수 없습니다. 제어판에서 설정 한 Thread.CurrentCulture과 같지 않으며 언제든지 변경할 수 있습니다.

예를 들어, 내 PC에서 CurrentCulture은 그 자리에 있기 때문에 "en-GB"을 반환하지만 CurrentUICulture"en-US"을 반환합니다. Microsoft는 하나의 영어 버전의 Windows만을 제공하기 때문에.

+1

** ** ** Thread.CurrentUICulture를 설정할 수 있습니다 - ResourceManager는 실제로 이것에 응답하고이 culture에 대한 리소스 세트를로드합니다. – mnn