Jak odczytać ciąg z pliku .resx wC#? proszę przesłać mi wytyczne. krok po krokuodczytać ciąg z pliku .resx w C#
Odpowiedz
Ten przykład jest z MSDN page on 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");
Co to jest "przedmioty" w kodzie? –
Ze strony MSDN, do której się odwoływałem: nazwa_bazowa Nazwa główna pliku zasobu bez jego rozszerzenia, ale z uwzględnieniem w pełni kwalifikowanej nazwy przestrzeni nazw. Na przykład nazwa główna pliku zasobów o nazwie MyApplication.MyResource.en-US.resources to MyApplication.MyResource. – JeffH
items == przestrzeń nazw pliku zasobów –
Otwarte .resx pliku i ustaw "Access modyfikator" publicznie.
var <Variable Name> = Properties.Resources.<Resource Name>
czy ta metoda działa z wieloma plikami zasobów (językami), ponieważ wszędzie tam, gdzie wyglądam, używają metody ResourceManager, i jestem ciekawy, czy powinienem ryzykować używanie w ten sposób, czy nie ... – deadManN
Menedżer zasobów nie powinien być potrzebny, chyba że ładujesz z zewnętrznego źródła. Dla większości rzeczy, powiedzmy, że stworzyłeś projekt (DLL, WinForms, cokolwiek), wystarczy użyć przestrzeni nazw projektu, "Zasobów" i identyfikatora zasobu. np:
Zakładając nazw projektu: UberSoft.WidgetPro
A twój RESX zawiera:
można po prostu użyć:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Niektóre dokumentacja na ten temat znajduje się w MSDN: How to: Retrieve Resource Values Programmatically.
Założenie, że plik .resx został dodany za pomocą Visual Studio w ramach właściwości projektu, jest łatwiejszy i mniej podatny na błędy sposób dostępu do łańcucha.
- Po rozszerzeniu pliku .resx w eksploratorze rozwiązań powinien zostać wyświetlony plik .Designer.cs.
- Po otwarciu plik .Designer.cs ma przestrzeń nazw właściwości i klasę wewnętrzną. W tym przykładzie załóżmy, że klasa nazywa się Zasoby.
Dostęp ciąg jest wtedy tak łatwe, jak:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager; var exampleXmlString = resourceManager.GetString("exampleXml");
Wymień
JoshCodes.Core.Testing.Unit
z domyślnej przestrzeni nazw projektu.- Zastąp "przykładXml" nazwą zasobu ciągów.
To działa dla mnie, dzięki –
Bardzo pomocne. Dzięki. – ejmin
Najprostszym sposobem na to jest:
- Utwórz folder systemowy App_GlobalResources i dodać plik zasobów do niego np Messages.resx
- Utwórz swoje wpisy w pliku zasobów, np. ErrorMsg = To jest błąd.
- Następnie aby uzyskać dostęp do wpisu: string ErrorMsg = Resources.Messages.ErrorMsg
Spróbuj tego, działa na mnie .. proste
Załóżmy, że nazwa pliku zasobów jest „TestResource.RESX”, a chcesz przekazać klucz dynamicznie wtedy,
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Dodaj Przestrzeń nazw
using System.Resources;
Dodałem plik .resx poprzez Visual Studio. Ten utworzony plik designer.cs
o właściwościach natychmiastowego zwrotu wartości .. z dowolnego klawisza chciałem na przykład, jest to niektóre automatycznie wygenerowany kod z pliku projektanta
/// <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);
}
}
w ten sposób udało mi się po prostu zrobić:
string message = Errors.MyErrorMessage;
Gdzie Errors
jest plik Errors.resx
stworzony przez Visual Studio i MyErrorMessage
jest kluczem.
Tak, właśnie to zrobiłem dzisiaj VS2015. Kliknij prawym przyciskiem myszy, dodaj plik "Zasoby", a wszystkie klawisze staną się "spacje". Więc "MyResx.resx "z kluczem" Skrypt "może być dostępny tak jak string scriptValue = MyResx.Script; –
Po odpowiedzi @JeffH polecam użyć typeof()
niż nazwy zespołu ciągów.
var rm = new ResourceManager(typeof(YourAssembly.Properties.Resources));
string message = rm.GetString("NameOfKey", CultureInfo.CreateSpecificCulture("ja-JP"));
Jeśli z jakiegoś powodu nie można umieścić pliki zasobów w App_GlobalResources, wtedy można otworzyć zasoby pliki bezpośrednio za pomocą ResXResourceReader lub czytniku XML.
Oto przykładowy kod do korzystania z 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 "";
}
Dzięki, zwróć uwagę, że musisz dodać odniesienie do' System.Windows.Forms', aby użyć 'System.Resources.ResXResourceReader'. Również , możesz zrobić 'var enumerator = rsxr.OfType
Bardzo trudno jest znaleźć artykuły lub posty o tym, jak "czytać, parsować i ładować" plik resx. to "użyj resx jako kontenera dla ciągów twojego projektu." Dziękuję za tę odpowiedź! – Simone
dodałam mój plik zasobów bezpośrednio do mojego projektu, a więc byłem w stanie uzyskać dostęp do ciągów wewnątrz dobrze z RESX nazwy pliku.
Przykład: w pliku Resource1.resx, klucz "resourceKey" -> ciąg "dataString". Aby uzyskać ciąg "dataString", wystarczy umieścić Resource1.resourceKey.
Może być powód, żeby tego nie robić, o czym nie wiem, ale to zadziałało.
Po dodaniu zasobu (nazwa: nazwa zasobu i wartość: wartość zasobu) do rozwiązania/zespołu można po prostu użyć "Properties.Resources.ResourceName", aby uzyskać wymagany zasób.
- 1. jak odczytać ciąg połączenia z pliku App.config przez C#
- 2. Należy odczytać ciąg i podwójne z pliku
- 3. Przeczytaj ciąg zapisany w pliku zasobów (resx) z dynamiczną nazwą pliku
- 4. c odczytać uprawnienia pliku
- 5. Jak odczytać plik json do C++ ciąg
- 6. Jak odczytać i napisać ciąg STL C++?
- 7. Jak uzyskać komentarz z wpisu pliku .resx
- 8. odczytać dane z pliku do końca wiersza w C/C++
- 9. dodanie niestandardowego pliku resx kolumny
- 10. Jak odczytać ciąg z NSUserDefaults
- 11. Jak odczytać niestandardowe właściwości pliku w C#
- 12. Arduino odczytać ciąg z Serial
- 13. Jak odczytać zawartość pliku z pliku?
- 14. Jak odczytać ciąg połączenia w .NET Core?
- 15. Jak odczytać klucz prywatny z pliku Pvk w języku C#?
- 16. Uzyskaj wartości z plików * .resx w XAML
- 17. C++ jak usunąć pliku z ciąg ścieżki
- 18. najłatwiejszy sposób odczytać z adresu URL na ciąg w .NET
- 19. odczytać wynik QProcess na ciąg
- 20. Jak mogę odczytać ciąg znaków zawierający spacje w C?
- 21. C# szukaj ciąg w pliku txt
- 22. C# ciąg połączenia w pliku web.config
- 23. Jak odczytać dane z pliku Excel za pomocą C#?
- 24. NullPointerException próbuje odczytać ciąg działki []
- 25. Identyfikator URI opakowania dla obrazu osadzonego w pliku resx
- 26. Jak odczytać plik cookie z pliku org.eclipse.swt.browser.Browser?
- 27. odczytać pliku CSV z przecinkiem w ciągu pól w Pythonie
- 28. Czy są jakieś narzędzia, które obsługują refaktoryzację resx w Xaml?
- 29. Jak odczytać dane wejściowe z konsoli w pliku wsadowym?
- 30. dynamicznie odczytać/dodać wartość do parametru pliku conf z właściwościami
dlaczego? Jeśli nie zadowalają mnie moje pytania, to dlaczego muszę przyjąć złe sugestie? –
Jeśli plik .resx został dodany za pomocą Visual Studio w ramach właściwości projektu, zobacz [moja odpowiedź] (http://stackoverflow.com/questions/1508570/read-string-from-resx-file-in-c-sharp/ 18214592 # 18214592) dla łatwiejszego i mniej podatnego na błędy sposobu dostępu do napisu. – Joshcodes
Zobacz [to] (http://snipplr.com/view/2140/csharp-reading-string-from-resource-file------------------ - /) link, to powinno pomóc. –