Dize c # .resx dosyasından nasıl okunur? lütfen bana yönergeler gönderin. adım adım
Dize c # .resx dosyasından nasıl okunur? lütfen bana yönergeler gönderin. adım adım
Yanıtlar:
Bu örnek, ResourceManager.GetString () üzerindeki MSDN sayfasındandır :
// 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");
ResourceManagerHarici bir kaynak yüklemek istediğinizde ihtiyacınız vardır . <Namespace>.PropertiesBunun yerine kullanın .
ResourceManagerHarici bir kaynaktan yükleme yapmadığınız sürece gerekli olmamalıdır .
Çoğu şey için, bir proje (DLL, WinForms, her neyse) oluşturduğunuzu varsayalım, sadece proje ad alanını, "Kaynaklar" ı ve kaynak tanımlayıcısını kullanın. Örneğin:
Bir proje ad alanını varsayarsak: UberSoft.WidgetPro
Ve resxiniz şunları içerir:

Sadece kullanabilirsiniz:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Bunu dene, benim için çalışıyor .. basit
Kaynak dosya adınızın "TestResource.resx" olduğunu ve anahtarı dinamik olarak geçirmek istediğinizi varsayalım,
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Ad Alanı Ekle
using System.Resources;
ResourceManagerHarici bir kaynak yüklemek istediğinizde ihtiyacınız vardır . <Namespace>.PropertiesBunun yerine kullanın .
.Resx dosyasını açın ve "Erişim Değiştirici" yi Genel olarak ayarlayın.
var <Variable Name> = Properties.Resources.<Resource Name>
.Resx dosyasının proje özellikleri altında Visual Studio kullanılarak eklendiğini varsayarsak, dizeye erişmenin daha kolay ve daha az hataya açık bir yolu vardır.
Dizeye erişmek şu kadar kolaydır:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
var exampleXmlString = resourceManager.GetString("exampleXml");Değiştir JoshCodes.Core.Testing.Unitprojenin varsayılan ad ile.
Herhangi bir nedenle kaynak dosyalarınızı App_GlobalResources içine koyamıyorsanız, kaynak dosyalarını doğrudan ResXResourceReader veya XML Reader kullanarak açabilirsiniz.
ResXResourceReader'ı kullanmak için örnek kod:
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.Formskullanmak için bir referans eklemeniz gerektiğini unutmayın System.Resources.ResXResourceReader. Ayrıca, var enumerator = rsxr.OfType<DictionaryEntry>();bunun yerine LINQ yapabilir ve kullanabilirsiniz.
Çözüme / derlemeye bir kaynak (Ad: KaynakAdı ve Değer: KaynakDeğeri) ekledikten sonra, gerekli kaynağı almak için yalnızca "Özellikler.Kaynakları.KaynakAdı" kullanabilirsiniz.
.Resx dosyasını Visual Studio üzerinden ekledim. Bu designer.cs, istediğim herhangi bir anahtarın değerini hemen döndürmek için özelliklere sahip bir dosya oluşturdu . Örneğin, bu, tasarımcı dosyasından otomatik olarak oluşturulmuş bir koddur.
/// <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);
}
}
Bu şekilde basitçe şunları yapabildim:
string message = Errors.MyErrorMessage;
Nerede Errorsolduğunu Errors.resxVisual Studio ile oluşturulan dosya ve MyErrorMessageanahtarıdır.
Kaynak dosyamı doğrudan projeme ekledim ve böylece resx dosya adıyla gayet iyi içindeki dizelere erişebildim.
Örnek: Resource1.resx'te, "resourceKey" anahtarı -> "dataString" dizesi. "DataString" dizesini almak için sadece Resource1.resourceKey'i koydum.
Bunu yapmamak için bilmediğim sebepler olabilir ama benim için işe yaradı.
Bunu yapmanın en kolay yolu şudur:
Kaynak dosyasından değer elde etmenin en basit yolu. Projeye Kaynak dosyası ekleyin. Şimdi, benim durumumdaki gibi eklemek istediğiniz dizeyi alın metin bloğu (SilverLight). Ayrıca herhangi bir ad alanı eklemeye gerek yok. Benim durumumda iyi çalışıyor
txtStatus.Text = Constants.RefractionUpdateMessage;
Kaynakları almak için bir kaynak yöneticisi oluşturun.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = kaynak dosyasından alınacak dizenin adı
Bu benim için çalışıyor. Dize tamam olan bir strings.resx dosyanız olduğunu varsayalım. okumak için
String varOk = My.Resources.strings.ok