2012-07-27 3 views
1

클래스 라이브러리가 있습니다. 프레임 워크라고 부릅니다. 의 AssemblyInfo.cs에서, 내가 가진하십시오 \ 자료 \ 디렉토리에서ResourceManager가 모든 문화권을 자동으로로드합니까?

[assembly: NeutralResourcesLanguage("en-US")] 

, 나는 나는, FrameworkResources.resxFrameworkResources.fr-FR.resx 헬퍼 클래스에서

: 나는 같은 것을 할 경우, 코드에서

private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly()); 

: 내 자원 관리자로 이것을 사용하고

CurrentCulture에서 디버깅하고 가져올 수 있으며 (및 UICulture) FR-FR로 설정되어 있지만 fr-FR 리소스 파일의 프랑스어 메시지가 아닌 항상 기본 영어 메시지를 반환합니다.

ResourceManager가 자동으로이를 연결해야합니까, 아니면 현재 문화권을 쿼리하는 코드를 작성하고 올바른 파일을 열어야합니까? 나는 그것이 현재 문화권이기 때문에 Resource Manager가 fr-FR 문자열을 얻는 것을 알 것이라고 가정 할 때 틀린가?

이것이 작동하지 않는 이유는 확실하지 않습니다.

업데이트 : 위성 어셈블리가 있으므로 컴파일 부분이 정상적으로 진행될 것으로 생각됩니다. 문제는 내 리소스 관리자에 있다고 생각합니다. 이 결과

ResourceManager manager = 
    new ResourceManager("Framework.Resources.FrameworkResources", 
     Assembly.GetExecutingAssembly()); 

Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE"))); 
Debug.WriteLine("el : " + manager.GetString(resourceName, new CultureInfo("el"))); 
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX"))); 
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR"))); 
Debug.WriteLine("hi : " + manager.GetString(resourceName, new CultureInfo("hi"))); 
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN"))); 

이 : 모든 장소에 있더라도

de-DE : Argument '%ArgumentName%' cannot be null or empty. 
el : Argument '%ArgumentName%' cannot be null or empty. 
es-MX : Argument '%ArgumentName%' cannot be null or empty. 
fr-FR : Argument '%ArgumentName%' cannot be null or empty. 
hi : Argument '%ArgumentName%' cannot be null or empty. 
zh-CN : Argument '%ArgumentName%' cannot be null or empty. 

그래서, 내 자원 관리자가 간단하지 않다 나는 ResourceSets를 사용하여 다음과 같이 명시 적으로는 ResourceManager를 사용하여 시도 그 위성 어셈블리를 들여다 보려고. 그리고 그 어셈블리에서 분명히 위의 문자열의 번역 된 버전이 있습니다. 따라서 문화권의 FrameworkResources.resx 파일 대신 확실히 기본 텍스트 인 FrameworkResources.resx 파일을 읽습니다.

+0

알고있는 한, 이미 맞습니다. 출력 폴더를 확인 했습니까 - 위성 어셈블리가 적절하게 만들어 졌습니까? –

+0

예 - \ bin \ Debug에 Framework.dll이 있습니다. 그런 다음 fr-FR 하위 디렉토리가 있고 안에 Framework.resources.dll이 있습니다. –

+0

나는이 지역에서 특별히 경험이 없지만 나에게 맞는 것처럼 들린다. –

답변

3

나는 그것을 알아 냈다. (interweb에서 더 많은 수색 덕분에). 내가 단위 테스트에서 코드를 실행하고 있었는데, apperently MSTest ""위성 어셈블리를 배포하지 않습니다. 테스트 설정으로 이동하여 "배포"를 해제하면 모든 것이 예상대로 작동합니다. 아!