2012-06-24 3 views
2

이 함수가 있으며 이라는 특정 리소스 파일에서 변환 된 값을 얻는 것이 좋습니다. OkayMessages.ResourceManager를 동적으로 초기화하십시오.

public static string GetResourceString(string resourceKey){ 
    ResourceManager resourceManager = Resources.OkayMessages.ResourceManager; 
    return resourceManager.GetString(resourceKey); 
} 

는하지만 난 1 개 이상의 리소스 파일을 가지고 있고이 기능뿐만 아니라 해당 파일에서 값을 얻으려면 ... 만, 내가 동적 프로그래밍에 올바른 자원 (관리자)를 선택 /에 문제가 있어요. 나는 아래 코드와 그 변형을 사용하려고 시도했지만 항상 오류가 발생합니다.

public static string GetResourceString(string resourceFile, string resourceKey){ 
    ResourceManager resourceManager = new System.Resources.ResourceManager("Resources." + resourceFile, Assembly.GetExecutingAssembly()); 
    return resourceManager.GetString(resourceKey); 
} 

대부분의 시간에 오류가 발생했습니다. 지정한 문화 또는 중립 문화에 적합한 자원을 찾을 수 없습니다. 내 리소스 파일에 대한 \ 폴더 \ App_GlobalResources을 사용하고을하고,이 문제 것 같다 :

업데이트 .. 확인 "Resources.OkayMessages.resources"가 올바르게 삽입 또는 어셈블리에 연결되었다합니다. 내 프로젝트의 루트에 리소스 파일을 배치하면 문제없이 ResourceManager를 초기화 할 수 있습니다.

+1

그래서 여기에 근본적인 문제가 App_GlobalResources 폴더에있는 자원이 자신의 조립 (App_GlobalResources)로 컴파일받을 것입니다. GetGlobalResourceObject 메서드는 올바른 어셈블리를 사용하는 것을 알고 있습니다. –

답변

5

:

using System.Reflection; 
using System.Resources; 
using System.Web.UI; 

namespace WebApplication1 
{ 
    public partial class _Default : Page 
    { 

     public _Default() 
     { 
      var result = GetResourceString("OkayResources", "SomeKey"); 
     } 

     private static string GetResourceString(string resourceFileName, string key) 
     { 
      var resourceName = "WebApplication1." + resourceFileName; 
      var resourceManager = new ResourceManager(resourceName, Assembly.GetExecutingAssembly()); 
      return resourceManager.GetString(key); 
     } 
    } 
} 

당신이 자원 폴더로 리소스 파일을 넣을 경우에 당신은 자원 이름 공간을 업데이트해야합니다 잠시 동안 잘못된 방향으로,이 문제에 대한 가장 간단한 대답을 찾았습니다. GetGlobalResourceObject이라는 메서드가 있음이 밝혀졌습니다.

그래서 내 경우에는 이제 모든 일이 코드 줄을 사용하고 있습니다 :

GetGlobalResourceObject("OkayMessages", "PasswordChanged").ToString(); 
+0

Resources.OkayMessages 파일을 사용하여이 작업을 수행 할 수 있었습니까? (원래 예제에서와 같이) "OkayMessages"로 이름을 지정 했습니까? 그것을 작동 시키려면 파일 이름에 마침표가 없어야했습니다. 왜냐하면 그 기간이 현지화의 핵심 포인트라고 생각하기 때문입니다. – Peter

1

article을주의 깊게 읽고 자원의 올바른 네임 스페이스를 지정해야합니다. 그게 네 문제 야. OkayResources.resx 프로젝트의 루트 폴더에있는 경우 다음 예제를 작동하고 다음에서 검색 한 후

var resourceName = "WebApplication1.Resources." + resourceFileName; 
+0

나는 여전히 같은 오류가 발생합니다. \ App_GlobalResources \ 폴더를 사용하고 있기 때문에 내 리소스 파일은 네임 스페이스 리소스에 있습니다. 차이가 있니? – Tys

+0

내 코드의 다른 부분에서는 보통 리소스 문자열을 Resources.OkayMessages.UserLoggedIn이라고 부릅니다. – Tys

+0

솔루션을 가지고 놀고 나서 몇 가지 결과를 가지고 제 질문을 업데이트했습니다. 문제는 \ App_GlobalResources \ 폴더를 사용하는 것 같습니다. – Tys

관련 문제