Bagaimana cara membaca string dari file .resx di c #? tolong kirimkan saya pedoman. selangkah demi selangkah
Bagaimana cara membaca string dari file .resx di c #? tolong kirimkan saya pedoman. selangkah demi selangkah
Jawaban:
Contoh ini dari halaman MSDN di ResourceManager.GetString () :
// 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");
ResourceManagersaat Anda ingin memuat sumber daya Eksternal. Gunakan <Namespace>.Propertiessebagai gantinya.
ResourceManagertidak diperlukan kecuali Anda memuat dari sumber daya eksternal .
Untuk sebagian besar hal, katakanlah Anda telah membuat proyek (DLL, WinForms, apa pun), Anda cukup menggunakan namespace proyek, "Sumber Daya", dan pengenal sumber daya. misalnya:
Dengan asumsi ruang nama proyek: UberSoft.WidgetPro
Dan resx Anda berisi:

Anda bisa menggunakan:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Coba ini, berhasil untuk saya .. sederhana
Asumsikan bahwa nama file sumber daya Anda adalah "TestResource.resx", dan Anda ingin meneruskan kunci secara dinamis,
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Tambahkan Namespace
using System.Resources;
ResourceManagersaat Anda ingin memuat sumber daya Eksternal. Gunakan <Namespace>.Propertiessebagai gantinya.
Buka file .resx dan setel "Access Modifier" ke Public.
var <Variable Name> = Properties.Resources.<Resource Name>
Dengan asumsi file .resx telah ditambahkan menggunakan Visual Studio di bawah properti proyek, ada cara yang lebih mudah dan lebih sedikit rawan kesalahan untuk mengakses string.
Mengakses string itu semudah:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
var exampleXmlString = resourceManager.GetString("exampleXml");Ganti JoshCodes.Core.Testing.Unitdengan namespace default proyek.
Jika karena alasan tertentu Anda tidak dapat meletakkan file sumber daya di App_GlobalResources, Anda dapat membuka file sumber daya secara langsung menggunakan ResXResourceReader atau XML Reader.
Berikut kode contoh untuk menggunakan 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.Formsuntuk digunakan System.Resources.ResXResourceReader. Selain itu, Anda dapat melakukan var enumerator = rsxr.OfType<DictionaryEntry>();dan menggunakan LINQ sebagai gantinya.
Setelah Anda menambahkan sumber daya (Name: ResourceName dan Value: ResourceValue) ke solusi / perakitan, Anda cukup menggunakan "Properties.Resources.ResourceName" untuk mendapatkan sumber daya yang diperlukan.
Saya menambahkan file .resx melalui Visual Studio. Ini membuat designer.csfile dengan properti untuk segera mengembalikan nilai kunci apa pun yang saya inginkan. Misalnya, ini adalah beberapa kode yang dibuat secara otomatis dari file desainer.
/// <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);
}
}
Dengan cara itu, saya dapat melakukan:
string message = Errors.MyErrorMessage;
Di mana Errorsadalah Errors.resxfile yang dibuat melalui Visual Studio dan MyErrorMessageadalah kuncinya.
Saya menambahkan file sumber daya saya ke proyek saya secara langsung, sehingga saya dapat mengakses string di dalamnya dengan baik dengan nama file resx.
Contoh: di Resource1.resx, kunci "resourceKey" -> string "dataString". Untuk mendapatkan string "dataString", saya hanya meletakkan Resource1.resourceKey.
Mungkin ada alasan untuk tidak melakukan ini yang tidak saya ketahui, tetapi berhasil untuk saya.
Cara termudah untuk melakukannya adalah:
Cara termudah untuk mendapatkan nilai dari file sumber daya. Tambahkan file Sumber Daya dalam proyek. Sekarang dapatkan string di mana Anda ingin menambahkan seperti dalam kasus saya itu adalah blok teks (SilverLight). Tidak perlu menambahkan namespace juga. Ini berfungsi dengan baik dalam kasus saya
txtStatus.Text = Constants.RefractionUpdateMessage;
Buat pengelola sumber daya untuk mengambil sumber daya.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = nama string yang akan diambil dari file sumber daya
Ini berhasil untuk saya. katakanlah Anda memiliki file strings.resx dengan string ok di dalamnya. untuk membacanya
String varOk = My.Resources.strings.ok