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");
리소스 관리자는 외부 리소스에서로드하지 않는 한 필요하지 않습니다. 대부분의 경우 프로젝트 (DLL, WinForms 등)를 고 가정하면 프로젝트 네임 스페이스, "Resources"및 리소스 식별자 만 사용합니다. 예 :
프로젝트 네임 스페이스 가정 : UberSoft.WidgetPro
그리고 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를 사용하여 프로젝트 속성 아래에 추가로 가정하면 발생하는 액세스하는 더 오류가 발생하기 쉬운 방법이 있습니다.
- 솔루션 탐색기에서 .resx 파일을 확장하면 .Designer.cs 파일이 표시됩니다.
- .Designer.cs 파일을 열면 속성 네임 스페이스와 내부 클래스가 있습니다. 이 예에서는 클래스 이름이 리소스라고 가정합니다.
공유에 액세스하는 것은 다음과 같이 알고 있습니다.
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager; var exampleXmlString = resourceManager.GetString("exampleXml");
JoshCodes.Core.Testing.Unit
프로젝트의 기본 네임 스페이스로 바꿉니다 .- "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["scriptNAME"]));
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 "";
}
솔루션 / 어셈블리에 리소스 (이름 : ResourceName 및 값 : ResourceValue)를 추가하면 "Properties.Resources.ResourceName"을 사용하여 필요한 리소스를 얻을 수 있습니다.
Visual Studio를 통해 .resx 파일을 추가했습니다. 이것은 designer.cs
내가 원하는 키의 값을 즉시 반환하는 속성을 가진 파일을 만들었 습니다. 예를 들어 이것은 디자이너 파일에서 자동 생성 된 코드입니다.
/// <summary>
/// Looks up a localized string similar to When creating a Commissioning change request, you must select valid Assignees, a Type, a Component, and at least one (1) affected unit..
/// </summary>
public static string MyErrorMessage {
get {
return ResourceManager.GetString("MyErrorMessage", resourceCulture);
}
}
이렇게하면 다음과 같이 간단하게 할 수 있습니다.
string message = Errors.MyErrorMessage;
Visual Studio를 통해 생성 Errors
된 Errors.resx
파일 은 어디에 MyErrorMessage
있으며 키입니다.
내 프로젝트에 내 리소스 파일을 직접 추가했기 때문에 resx 파일 이름으로 잘 내부의 문자열에 액세스 할 수있었습니다.
예 : Resource1.resx에서 키 "resourceKey"-> 문자열 "dataString". "dataString"문자열을 얻기 위해 Resource1.resourceKey를 입력합니다.
내가 알지 못하는이 작업을하지 않는 이유가있을 수 있지만 그것은 나를 위해 일했습니다.
이를 수행하는 가장 쉬운 방법은 다음과 같습니다.
- App_GlobalResources 시스템 폴더를 만들고 여기에 리소스 파일 (예 : Messages.resx)을 추가합니다.
- 리소스 파일에 항목을 만듭니다 (예 : ErrorMsg = 오류입니다).
- 그런 다음 해당 항목에 액세스하려면 : string errormsg = Resources.Messages.ErrorMsg
리소스 파일에서 가치를 얻는 가장 간단한 방법. 프로젝트에 리소스 파일을 추가합니다. 이제 제 경우에는 텍스트 블록 (SilverLight)처럼 추가하려는 문자열을 가져옵니다. 네임 스페이스도 추가 할 필요가 없습니다. 제 경우에는 잘 작동합니다.
txtStatus.Text = Constants.RefractionUpdateMessage;
리소스를 검색하려면 리소스 관리자를 만듭니다.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = 리소스 파일에서 검색 할 수있는 이름
참고 URL : https://stackoverflow.com/questions/1508570/read-string-from-resx-file-in-c-sharp
'IT' 카테고리의 다른 글
UIActivityIndicator의 크기를 어디에 있습니까? (0) | 2020.09.08 |
---|---|
Flash가 설치되어 있는지 확인하고있는 경우 사용자에게 알리는 숨겨진 div를 표시해야 할 것입니까? (0) | 2020.09.08 |
JQuery로 "onclick"을 제거하는 방법은 무엇입니까? (0) | 2020.09.08 |
grunt throw "Recursive process.nextTick detected" (0) | 2020.09.08 |
git diff 두 파일을 동일한 분기, 동일한 커밋 (0) | 2020.09.08 |