Много просто нещо, и аз не мога да го "" да го накара да работи.
Аз наричам ресурсния мениджър така:
var p = new ResourceManager("Appname.Default", Assembly.GetExecutingAssembly());
Вземи подобни струни
System.Diagnostics.Debug.WriteLine(p.GetString("greeting"));
System.Diagnostics.Debug.WriteLine(p.GetString("greeting", new CultureInfo("nl")));
System.Diagnostics.Debug.WriteLine(p.GetString("greeting", new CultureInfo("nl-NL")));
System.Diagnostics.Debug.WriteLine(p.GetString("greeting", new CultureInfo("en")));
И се връща 4 пъти на същия низ. Моите файлове се извикват
Default.resx
Default.en.resx
Default.nl.resx
Default.nl-NL.resx
Всички настройки на файловете са едни и същи, но както е споменато - използва се само ресурсът в файла по подразбиране.
Какво пренебрегвам тук?
Отговори:
11 за отговор № 1Има няколко начина за използване на файлове с ресурси, единият от които използва .resx
файлове. Тези файлове се локализират автоматично, въз основа на стойността на Thread.CurrentThread.CurrentUICulture
, По подразбиране .resx
файлът се компилира в събранието, в което е част (например главната си изпълнимия файл), докато локализираните ресурси (Default.nl-NL.resx
) се компилират в собствена директория (въз основа на идентификатора на културата, nl-NL
в този случай) в събрание, наречено <AssemblyName>.resources.dll
.
Отчитането на стойностите от тези ресурси е толкова лесно, колкото <ResourceName>.<KeyName>
, например Default.Greeting
, За да го тествате, променяте културата, като използвате:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(Default.Greeting);
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("nl-NL");
Console.WriteLine(Default.Greeting);
Кое ще изведе
Hello
Hallo
При стартиране на програмата, UI културата е настроена на културата на компютъра, върху който работи, така че няма да се налага да указвате сами езика, за да представяте локализираните ресурси. Така, .resx
Файловете изглеждат като път.
Когато използвате ResourceManager
от var p = new ResourceManager("Appname.Default", Assembly.GetExecutingAssembly());
, ще трябва да прочетете .resources
файлове. Ако няма (във вашия случай) Appname.Default.resources
файл, p.GetString
ще се провали. Предполагам, че сте го създали .resources
файла по-рано, но не са преобразували локализираните .resx
файлове към .resources
файлове.
Ако искате да използвате ResourceManager, за да можете да посочите културата, можете да използвате:
Default.ResourceManager.GetString("Greeting", new CultureInfo("en-US"));