/ / Resourcemanager връща същия ресурс, въпреки че е посочен CultureInfo - c #, dll, глобализация, вграден ресурс, ресурс

Resourcemanager връща същия ресурс, въпреки че CultureInfo е специфициран - c #, dll, глобализация, вграден ресурс, resourcemanager

Много просто нещо, и аз не мога да го "" да го накара да работи.

Аз наричам ресурсния мениджър така:

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"));