[c#] C #의 .resx 파일에서 문자열 읽기

c #의 .resx 파일에서 문자열을 읽는 방법은 무엇입니까? 나에게 지침을 보내주십시오. 단계적으로



답변

이 예제는 ResourceManager.GetString ()MSDN 페이지에서 가져온 것입니다 .

// Create a resource manager to retrieve resources.
ResourceManager rm = new ResourceManager("items", Assembly.GetExecutingAssembly());

// Retrieve the value of the string resource named "welcome".
// The resource manager will retrieve the value of the  
// localized resource using the caller's current culture setting.
String str = rm.GetString("welcome");


답변

ResourceManager외부 리소스 에서로드하지 않는 한 필요하지 않습니다 .
대부분의 경우 프로젝트 (DLL, WinForms 등)를 만들었다 고 가정하면 프로젝트 네임 스페이스, “Resources”및 리소스 식별자 만 사용합니다. 예 :

프로젝트 네임 스페이스 가정 : UberSoft.WidgetPro

그리고 resx에는 다음이 포함됩니다.

resx 콘텐츠 예

다음을 사용할 수 있습니다.

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED


답변

이거 해봐, 나를 위해 일해 .. 간단

리소스 파일 이름이 “TestResource.resx”라고 가정하고 키를 동적으로 전달하려고합니다.

string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);

네임 스페이스 추가

using System.Resources;


답변

.resx 파일을 열고 “Access Modifier”를 Public으로 설정합니다.

var <Variable Name> = Properties.Resources.<Resource Name>


답변

.resx 파일이 Visual Studio를 사용하여 프로젝트 속성 아래에 추가되었다고 가정하면 문자열에 액세스하는 더 쉽고 오류가 발생하기 쉬운 방법이 있습니다.

  1. 솔루션 탐색기에서 .resx 파일을 확장하면 .Designer.cs 파일이 표시됩니다.
  2. .Designer.cs 파일을 열면 속성 네임 스페이스와 내부 클래스가 있습니다. 이 예에서는 클래스 이름이 Resources라고 가정합니다.
  3. 문자열에 액세스하는 것은 다음과 같이 쉽습니다.

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
  4. JoshCodes.Core.Testing.Unit프로젝트의 기본 네임 스페이스로 바꿉니다 .

  5. “exampleXml”을 문자열 리소스의 이름으로 바꿉니다.

답변

@JeffH 답변 다음에 typeof()문자열 어셈블리 이름보다 사용하는 것이 좋습니다 .

    var rm = new ResourceManager(typeof(YourAssembly.Properties.Resources));
    string message = rm.GetString("NameOfKey", CultureInfo.CreateSpecificCulture("ja-JP"));


답변

어떤 이유로 리소스 파일을 App_GlobalResources에 넣을 수없는 경우 ResXResourceReader 또는 XML 리더를 사용하여 리소스 파일을 직접 열 수 있습니다.

ResXResourceReader를 사용하기위한 샘플 코드는 다음과 같습니다.

   public static string GetResourceString(string ResourceName, string strKey)
   {


       //Figure out the path to where your resource files are located.
       //In this example, I'm figuring out the path to where a SharePoint feature directory is relative to a custom SharePoint layouts subdirectory.  

       string currentDirectory = Path.GetDirectoryName(HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"]));

       string featureDirectory = Path.GetFullPath(currentDirectory + "\\..\\..\\..\\FEATURES\\FEATURENAME\\Resources");

       //Look for files containing the name
       List<string> resourceFileNameList = new List<string>();

       DirectoryInfo resourceDir = new DirectoryInfo(featureDirectory);

       var resourceFiles = resourceDir.GetFiles();

       foreach (FileInfo fi in resourceFiles)
       {
           if (fi.Name.Length > ResourceName.Length+1 && fi.Name.ToLower().Substring(0,ResourceName.Length + 1) == ResourceName.ToLower()+".")
           {
               resourceFileNameList.Add(fi.Name);

           }
        }

       if (resourceFileNameList.Count <= 0)
       { return ""; }


       //Get the current culture
       string strCulture = CultureInfo.CurrentCulture.Name;

       string[] cultureStrings = strCulture.Split('-');

       string strLanguageString = cultureStrings[0];


       string strResourceFileName="";
       string strDefaultFileName = resourceFileNameList[0];
       foreach (string resFileName in resourceFileNameList)
       {
           if (resFileName.ToLower() == ResourceName.ToLower() + ".resx")
           {
               strDefaultFileName = resFileName;
           }

           if (resFileName.ToLower() == ResourceName.ToLower() + "."+strCulture.ToLower() + ".resx")
           {
               strResourceFileName = resFileName;
               break;
           }
           else if (resFileName.ToLower() == ResourceName.ToLower() + "." + strLanguageString.ToLower() + ".resx")
           {
               strResourceFileName = resFileName;
               break;
           }
       }

       if (strResourceFileName == "")
       {
           strResourceFileName = strDefaultFileName;
       }



       //Use resx resource reader to read the file in.
       //https://msdn.microsoft.com/en-us/library/system.resources.resxresourcereader.aspx

       ResXResourceReader rsxr = new ResXResourceReader(featureDirectory + "\\"+ strResourceFileName);

       //IDictionaryEnumerator idenumerator = rsxr.GetEnumerator();
       foreach (DictionaryEntry d in rsxr)
       {
           if (d.Key.ToString().ToLower() == strKey.ToLower())
           {
               return d.Value.ToString();
           }
       }


       return "";
   }