mengapa? jika mereka tidak memuaskan saya atas pertanyaan saya, lalu mengapa saya harus menerima saran yang salah?
Red Swan
1
Jika file .resx ditambahkan menggunakan Visual Studio di bawah properti proyek, lihat jawaban saya untuk cara yang lebih mudah dan lebih sedikit rawan kesalahan untuk mengakses string.
// Create a resource manager to retrieve resources.ResourceManager rm =newResourceManager("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");
Dari halaman MSDN saya mereferensikan: baseName Nama root dari file sumber daya tanpa ekstensinya tetapi termasuk nama namespace yang memenuhi syarat. Misalnya, nama root untuk file resource yang bernama MyApplication.MyResource.en-US.resources adalah MyApplication.MyResource.
JeffH
1
item == namespace dari file sumber daya
7
contoh yang buruk: Anda harus menjelaskan bahwa item adalah namespace + tipe root dari sumber daya
ActiveX
Anda hanya perlu ResourceManagersaat Anda ingin memuat sumber daya Eksternal. Gunakan <Namespace>.Propertiessebagai gantinya.
Yousha Aleayoub
131
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
Anda juga dapat menentukan Budaya - berguna jika Anda ingin memastikan keluaran khusus budaya yang bertentangan dengan default. misalnya TestResource.ResourceManager.GetString (deskripsi, CultureInfo baru ("en-GB"));
Ian
Saya mendapatkan kesalahan berikut: 'Resources' tidak berisi definisi untuk 'GetString'.
Lechucico
Anda hanya perlu ResourceManagersaat Anda ingin memuat sumber daya Eksternal. Gunakan <Namespace>.Propertiessebagai gantinya.
Yousha Aleayoub
29
Buka file .resx dan setel "Access Modifier" ke Public.
apakah metode ini bekerja dengan banyak file sumber daya (bahasa), karena di mana-mana saya melihat mereka menggunakan Metode ResourceManager, dan saya bertanya-tanya apakah saya harus mengambil risiko menggunakan cara ini, atau tidak ...
deadManN
1
Tidak bekerja. File sumber daya saya tidak ditampilkan setelah Properties.Resources. "My filename" meskipun disetel ke publik
pengguna1804084
27
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.
Memperluas file .resx di Solution Explorer akan menampilkan file .Designer.cs.
Saat dibuka, file .Designer.cs memiliki namespace Properties dan kelas internal. Untuk contoh ini asumsikan kelas tersebut bernama Resources.
Mengakses string itu semudah:
var resourceManager =JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;var exampleXmlString = resourceManager.GetString("exampleXml");
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:
publicstaticstringGetResourceString(stringResourceName,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 nameList<string> resourceFileNameList =newList<string>();DirectoryInfo resourceDir =newDirectoryInfo(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 culturestring 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;}elseif(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.aspxResXResourceReader rsxr =newResXResourceReader(featureDirectory +"\\"+ strResourceFileName);//IDictionaryEnumerator idenumerator = rsxr.GetEnumerator();foreach(DictionaryEntry d in rsxr){if(d.Key.ToString().ToLower()== strKey.ToLower()){return d.Value.ToString();}}return"";}
Terima kasih, perhatikan bahwa Anda harus menambahkan referensi System.Windows.Formsuntuk digunakan System.Resources.ResXResourceReader. Selain itu, Anda dapat melakukan var enumerator = rsxr.OfType<DictionaryEntry>();dan menggunakan LINQ sebagai gantinya.
Dunc
Sangat sulit untuk menemukan artikel atau posting tentang cara "membaca, mengurai, dan memuat" file resx. Yang Anda dapatkan hanyalah "menggunakan resx sebagai wadah untuk string proyek Anda". Terima kasih atas jawaban ini!
Simone
9
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>publicstaticstringMyErrorMessage{get{returnResourceManager.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.
Yup yang baru saja saya lakukan adalah VS2015 hari ini. Klik kanan, tambahkan file "Resources", dan semua kunci menjadi "dottable". Jadi "MyResx.resx" dengan kunci "Script" dapat diakses seperti string scriptValue = MyResx.Script;
ampelas. Noel
5
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 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;
Konstanta adalah nama file sumber daya saya dalam proyek.
Jawaban:
Contoh ini dari halaman MSDN di ResourceManager.GetString () :
sumber
ResourceManager
saat Anda ingin memuat sumber daya Eksternal. Gunakan<Namespace>.Properties
sebagai gantinya.ResourceManager
tidak 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:
sumber
Coba ini, berhasil untuk saya .. sederhana
Asumsikan bahwa nama file sumber daya Anda adalah "TestResource.resx", dan Anda ingin meneruskan kunci secara dinamis,
Tambahkan Namespace
sumber
ResourceManager
saat Anda ingin memuat sumber daya Eksternal. Gunakan<Namespace>.Properties
sebagai gantinya.Buka file .resx dan setel "Access Modifier" ke Public.
sumber
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:
Ganti
JoshCodes.Core.Testing.Unit
dengan namespace default proyek.sumber
Diikuti oleh jawaban @JeffH, saya sarankan untuk menggunakan
typeof()
daripada nama rakitan string.sumber
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:
sumber
System.Windows.Forms
untuk digunakanSystem.Resources.ResXResourceReader
. Selain itu, Anda dapat melakukanvar 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.
sumber
Saya menambahkan file .resx melalui Visual Studio. Ini membuat
designer.cs
file dengan properti untuk segera mengembalikan nilai kunci apa pun yang saya inginkan. Misalnya, ini adalah beberapa kode yang dibuat secara otomatis dari file desainer.Dengan cara itu, saya dapat melakukan:
Di mana
Errors
adalahErrors.resx
file yang dibuat melalui Visual Studio danMyErrorMessage
adalah kuncinya.sumber
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.
sumber
Cara termudah untuk melakukannya adalah:
sumber
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
Konstanta adalah nama file sumber daya saya dalam proyek.
sumber
Buat pengelola sumber daya untuk mengambil sumber daya.
sumber
Ini berhasil untuk saya. katakanlah Anda memiliki file strings.resx dengan string ok di dalamnya. untuk membacanya
sumber