ResourceManager загружает все культуры автоматически?
-
12-12-2019 - |
Вопрос
У меня есть библиотека классов - вызовите его каркас. В assentionfo.cs у меня есть:
[assembly: NeutralResourcesLanguage("en-US")]
.
Под A \ Resources \ Directory у меня frameworkresources.resx и frameworkresources.fr-fr.resx
в классе помощника, я использую это как мой диспетчер ресурсов:
.
private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());
в коде, если я сделаю что-то подобное:
.
String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);
Я могу отладить и наведите курсор reciveCulture, и это (и roomulature) установлено в FR-FR, но это всегда возвращает мое по умолчанию, английское сообщение - не французское сообщение от файла ресурсов FR-FR.
Должен ли ResourceManager автоматически проводит это, или я должен написать код для запроса текущей культуры, затем откройте правильный файл? Я неверно, предполагая, что менеджер ресурсов будет знать, чтобы получить строку FR-FR, потому что это текущая культура?
Я не уверен, почему это не работает.
<Сильное> Обновление:
У меня есть спутниковые сборки, так что верьте, что часть компиляции идет хорошо. Я думаю, что проблема в моем диспетчере ресурсов. Я пытался использовать ресурсы и явно использую ResourceManager:
.
ResourceManager manager =
new ResourceManager("Framework.Resources.FrameworkResources",
Assembly.GetExecutingAssembly());
Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
Debug.WriteLine("el : " + manager.GetString(resourceName, new CultureInfo("el")));
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
Debug.WriteLine("hi : " + manager.GetString(resourceName, new CultureInfo("hi")));
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));
Это приводит к этому:
.de-DE : Argument '%ArgumentName%' cannot be null or empty. el : Argument '%ArgumentName%' cannot be null or empty. es-MX : Argument '%ArgumentName%' cannot be null or empty. fr-FR : Argument '%ArgumentName%' cannot be null or empty. hi : Argument '%ArgumentName%' cannot be null or empty. zh-CN : Argument '%ArgumentName%' cannot be null or empty.
Так, хотя все на месте, мой диспетчер ресурсов просто не пытается посмотреть в этих спутниковых собраниях. И чтобы быть понятным, в этих сборках у меня переведена версия строки выше - поэтому она определенно читает из моего файла frameworkresources.resx.resx, вместо того, чтобы конкретные культуры.
Решение
Я подумал это (спасибо более чистящимися на интервате).Я управлял кодом из модульных тестов, и вертелю MSTest не «развертывает» спутниковые узлы.Если я пойду в настройки теста и выключите «развертывание», все работает, как и ожидалось.Тьфу!