Библиотека классов C # - файлы ресурсов не загружаются - PullRequest
0 голосов
/ 15 сентября 2018

Я работаю над добавлением локализации в мою библиотеку классов.В настоящее время у меня есть два файла ресурсов: Strings.resx и Strings.es.resx.

Оба файла находятся под «внутренним» модификатором доступа, хотя я попытался установить оба «public» без какой-либо помощи.

Моя проблема в том, что испанский файл ресурсов (Strings.es.resx) не загружается;и эта проблема повторится с другими файлами ресурсов, которые я добавлю для других языков.Strings.resx работает нормально, поскольку это файл ресурсов по умолчанию.

Этот код используется для получения загруженных файлов ресурсов строк;в настоящее время загружается только файл по умолчанию.Испанский не появляется:

private static void LoadLanguages()
    {
        var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

        foreach (var culture in cultures)
        {
            try
            {
                var rs = Properties.Lang.Strings.ResourceManager.GetResourceSet(culture, true, false);
                if (rs != null) SupportedLanguages.Add(culture.Name.ToLower(), culture.NativeName);
            }
            catch (Exception)
            {
                // ignored
            }
        }

        Log.Info("Loaded languages: " + SupportedLanguages.Count); //OUT: 1
    }

Я сделал открытие, хотя.В моих результатах сборки есть папка "es", и внутри этой папки есть DLL с именем Project.resources.dll.Если я скопирую эту DLL в корневую папку выходных данных сборки, ресурс загрузится.

Решение этой проблемы состоит в том, чтобы загрузить эти файлы ресурсов из папок.По какой-то причине этого не происходит.Есть ли известное решение для этого?Спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

Работает темы текущей культуры.Пример можно увидеть в документации по Microsoft https://docs.microsoft.com/en-us/dotnet/framework/resources/creating-satellite-assemblies-for-desktop-apps (проверьте код на шаге 13 в конце)

Ниже приведен пример из документации.Локализованный ресурс StringLibrary

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-GB", "en-US", "fr-FR", "ru-RU" };
      Random rnd = new Random();
      string cultureName = cultureNames[rnd.Next(0, cultureNames.Length)]; 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
      Console.WriteLine("The current UI culture is {0}", 
                        Thread.CurrentThread.CurrentUICulture.Name);
      StringLibrary strLib = new StringLibrary();
      string greeting = strLib.GetGreeting();
      Console.WriteLine(greeting);
   }
}
...