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에는 다음이 포함됩니다.
다음을 사용할 수 있습니다.
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 파일을 열면 속성 네임 스페이스와 내부 클래스가 있습니다. 이 예에서는 클래스 이름이 Resources라고 가정합니다.
-
문자열에 액세스하는 것은 다음과 같이 쉽습니다.
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["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 "";
}