2012-10-21 5 views
2

클래스 라이브러리 프로젝트에 리소스 파일이 있습니다. 이 리소스 파일을 사용하여 사용자가 볼 수있는 다양한 메시지를 보류합니다.ResourceManager.GetString()을 사용할 때 어떻게 마법 문자열을 사용하지 않는가?

예를 들어 리소스 이름은 "InvalidEmailAddress"이고 en-US 리소스 파일의 값은 "잘못된 전자 메일 주소"입니다.

내가이 일을하고있는 ResourceManager에의하여 GetString (문자열) 메소드를 호출

는 :

return resourceManager.GetString("InvalidEmailAddress"); 

그러나 이것은 나에게 정말 나쁜 것 같다. 누군가 자원의 이름을 변경하면 어떨까요? 이제 내 진술은 null 값을 반환합니다.

이 문제를 해결할 방법이 있습니까?

업데이트 : 현지화가 중요한 요소입니다. 리소스 관리자는 문화권을 변경하고 적절한 문자열 값을 얻을 수 있도록하기 위해 사용됩니다.

답변

5

대신 자동 생성 클래스를 사용할 수 있습니다. 매직 문자열 상수는 코드에서 제거되고 강력한 유형의 액세스 메소드로 대체됩니다. VS는이 파일에 ResourceName.Designer.cs라는 이름을 지정하고 resx가 VS에서 수정 될 때마다이 파일을 업데이트합니다. 생성 방법의

샘플 :

internal static string String1 { 
     get { 
      return ResourceManager.GetString("String1", resourceCulture); 
     } 

참고 :이 파일을 생성하는 당신은 VS에서 새 리소스를 추가 할 기본 동작하는 동안, 당신이 그것을 비활성화 할 수 있습니다 또는 생성을 사용하려했을 수 있습니다 어셈블리 외부의 리소스. 이 경우 "Custom Tool"속성이나 resx 파일을 "PublicResXFileCodeGenerator"또는 "ResXFileCodeGenerator"(나중에 단일 어셈블리 내에서만 리소스를 사용하는 경우)로 설정하십시오. (감사를 위해 @dbaseman에게 감사).

+1

"사용자 지정 도구"속성을 "PublicResXFileCodeGenerator"로 변경해야 할 수도 있습니다. – McGarnagle

+0

이것은 ResourceManager를 우회합니다. 현지화는 계속 진행 되나요? 예를 들어 CurrentCulture를 "de-GR"로 설정하면 리소스 관리자가 독일어 등가 문자열을 가져 오기 시작할 정도로 똑똑합니다. –

+0

@SailingJudo, Why? 코드를 생성 한 적이 있습니까? –

2

리소스를 생성하면 리소스 네임 스페이스에 강력한 형식으로 생성됩니다.

Resources.ClassName.InvalidEmailAddress에 액세스 할 수 있습니다. ClassName은 Resource (resx) 파일의 이름입니다.

+0

Alexei의 답변에있는 위치에 대한 내 의견보기. –