回答:
この例は、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
外部リソースをロードする場合にのみ必要です。<Namespace>.Properties
代わりに使用してください。
ResourceManager
外部リソースからロードしているのでない限り、必要ありません。
ほとんどの場合、プロジェクトの名前空間「リソース」とリソース識別子を使用するだけでプロジェクト(DLL、WinFormsなど)を作成したとしましょう。例えば:
プロジェクトの名前空間を想定: UberSoft.WidgetPro
そしてあなたのresxには以下が含まれます:
あなたはただ使うことができます:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
これを試してみてください、私にとってはうまくいきます。
リソースファイル名が「TestResource.resx」であり、動的にキーを渡したいとします。
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
名前空間を追加
using System.Resources;
ResourceManager
外部リソースをロードする場合にのみ必要です。<Namespace>.Properties
代わりに使用してください。
.resxファイルを開き、「Access Modifier」をPublicに設定します。
var <Variable Name> = Properties.Resources.<Resource Name>
.resxファイルがプロジェクトのプロパティの下でVisual Studioを使用して追加されたと仮定すると、文字列にアクセスするための簡単でエラーが発生しにくい方法があります。
文字列へのアクセスは次のように簡単です。
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
var exampleXmlString = resourceManager.GetString("exampleXml");
JoshCodes.Core.Testing.Unit
プロジェクトのデフォルトの名前空間に置き換えます。
何らかの理由でリソースファイルを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 "";
}
System.Windows.Forms
使用するには、への参照を追加する必要があることに注意してくださいSystem.Resources.ResXResourceReader
。また、var enumerator = rsxr.OfType<DictionaryEntry>();
代わりにLINQを実行して使用することもできます。
リソース(名前: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
キーです。