Pertanyaan membaca string dari file .resx di C #


Bagaimana cara membaca string dari file .resx di c #? tolong kirimkan saya panduan. selangkah demi selangkah


75
2017-10-02 09:29


asal


Jawaban:


Contoh ini berasal 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");

70
2017-10-15 16:07



Manajer sumber daya tidak diperlukan kecuali Anda memuat dari sumber eksternal. Untuk sebagian besar hal, katakan Anda telah membuat proyek (DLL, WinForms, apa pun), Anda hanya menggunakan namespace proyek, "Sumber Daya" dan pengidentifikasi sumber daya. misalnya:

Dengan asumsi ruang nama proyek: UberSoft.WidgetPro

Dan resx Anda berisi:

resx content example

Anda bisa menggunakan:

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

68
2017-12-10 22:04



Coba ini, bekerja untuk saya .. sederhana

Asumsikan bahwa nama file sumber daya Anda adalah "TestResource.resx", dan Anda ingin melewatkan kunci secara dinamis saat itu,

string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);

Tambahkan Namespace

using System.Resources;

40
2018-03-19 00:48



Buka file .resx dan atur "Pengubah Akses" ke Publik.

var <Variable Name> = Properties.Resources.<Resource Name>

24
2017-07-16 20:50



Dengan asumsi file .resx ditambahkan menggunakan Visual Studio di bawah properti proyek, ada cara rawan kesalahan yang lebih mudah dan kurang untuk mengakses string.

  1. Memperluas file .resx di Solution Explorer seharusnya menampilkan file .Designer.cs.
  2. Ketika dibuka, file .Designer.cs memiliki namespace Properties dan kelas internal. Untuk contoh ini asumsikan kelas diberi nama Sumber Daya.
  3. Mengakses string semudah:

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
    
  4. Menggantikan JoshCodes.Core.Testing.Unit dengan namespace default proyek.

  5. Ganti "exampleXml" dengan nama sumber string Anda.

20
2017-08-13 16:38



Dilanjutkan dengan jawaban @JeffH, saya sarankan untuk menggunakannya typeof() dari nama perakitan string.

    var rm = new ResourceManager(typeof(YourAssembly.Properties.Resources));
    string message = rm.GetString("NameOfKey", CultureInfo.CreateSpecificCulture("ja-JP"));

13
2017-10-13 13:28



Jika karena alasan tertentu Anda tidak dapat meletakkan file sumber daya di App_GlobalResources, maka Anda dapat membuka file sumber daya secara langsung menggunakan ResXResourceReader atau Pembaca XML.

Berikut ini contoh kode 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 "";
   }

8
2018-04-27 09:15