GetString всегда возвращает языковой ресурс по умолчанию - PullRequest
0 голосов
/ 17 июня 2019

У меня есть микросервис в .Net-Core, который должен обрабатывать некоторые ресурсы в файле resx и возвращать их в соответствии с культурой, которую я предоставляю при вызове API, поэтому я не буду использовать культуру текущего потока, нокогда я вызываю метод GetString (key, culture), он всегда возвращает язык по умолчанию.У меня есть 2 файла resx на данный момент: resource.resx и resource.it-IT.resx, если я вызываю API со строкой культуры it-IT, я всегда получаю перевод в файле resource.resx, а не в resource.it-IT.resx file

Файлы resx находятся в другом проекте под названием Localization

У меня есть общий метод, в котором я передаю Enum, который мне нужно локализовать, и тип файла, в котором локализациясохраняется, затем я составляю ключ ресурса и вызываю метод GetString.Я также попытался изменить культуру текущего потока с помощью

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(cultureName);
public static string GetDisplayName(this Enum e, Type resourceType, string cultureName)
{
   var rm = new ResourceManager(resourceType);

   var resourceDisplayName = rm.GetString(e.GetType().Name + "_" + e, CultureInfo.CreateSpecificCulture(cultureName));

   return string.IsNullOrWhiteSpace(resourceDisplayName) ? string.Format("[[{0}]]", e) : resourceDisplayName;
 }

. Я исследовал немного больше, и в диспетчере ресурсов при его проверке у меня есть 3 resourceSet

resource
resource.it
resource.it-IT

Если я проверяю внутри этих 3-х наборов ресурсов, у меня все ресурсы всегда на английском, кажется, что менеджер ресурсов не загружает итальянский файл resx

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Прочитав это: Ошибка NetCore Мне удалось решить мою проблему, в первую очередь я изменил свой метод следующим образом:

 public static string GetDisplayName(this Enum e, Type resourceType, string cultureName)
    {
        var rm = new ResourceManager(resourceType.FullName, resourceType.Assembly);

        var key = $"{e.GetType().Name}_{e}";
        var culture = CultureInfo.CreateSpecificCulture(cultureName);
        var resourceDisplayName = rm.GetString(key, culture);

        return string.IsNullOrWhiteSpace(resourceDisplayName) ? string.Format("[[{0}]]", e) : resourceDisplayName;
    }

Затем я удалил ссылку наПроект локализации из проекта API и только оставил эту ссылку в другом проекте, на который затем ссылается проект API

0 голосов
/ 17 июня 2019

О ваших resource.resx и resource.it-IT.resx файлах, пожалуйста, проверьте, совпадает ли ваш ключ в обоих файлах.Если ключ, к которому вы пытаетесь получить доступ, недоступен, код автоматически перенаправляется в файл по умолчанию (resource.resx).

Эта ссылка поможет завершить реализацию Локализация и глобализация

...