Локализация с использованием файла ресурсов не работает

2

Я добавил новый файл Rosource UserNotification.resx. Затем я добавил два файла для локализации и назвал их UserNotification.hr-HR.resx и UserNotification.sl-SI.resx. (follow thread: Как использовать локализацию в С#)

Затем я изменил язык Windows на "si". Если я печатаю текущую культуру с помощью System.Globalization.CultureInfo.CurrentCulture.ToString(), выход si sl-SI

Но я всегда получаю строку из UserNotification.resx. Швы не распознают файлы ресурсов локализации.

  • 0
    Попробуйте изменить CurrentUICulture в своем коде и посмотреть, что произойдет?
  • 0
    Это работает, если я добавлю это в свой конструктор App.xaml.cs: Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo (System.Globalization.CultureInfo.CurrentCulture.ToString ()); Но так ли это? Что если я использую многопоточность?
Теги:
localization
resource-files

1 ответ

5
Лучший ответ

Проблема в локализации .NET, если вы используете многопоточность, заключается в том, что вам нужно установить культуру вручную для каждого потока, который вы создаете (в случае, если он отличается от культуры Windows, если пользователь может выбрать нужный язык). Он не унаследован от основного потока.

После создания нового потока и перед его запуском вы должны установить его в Культуру основного потока (который normaly использует стандартную культуру для окон).

Итак, система показывает хороший CurrentCulture. Но что говорит текущая нить? Может быть, приложение запускается с другой культурой по какой-то причине, так что почему он загружает файл ресурсов по умолчанию? Во всяком случае, нет причин, по которым вы не должны вручную настраивать текущую культуру. В основном вам нужно это сделать, когда вы хотите дать пользователю возможность изменить язык приложения.

  • 0
    System.Globalization.CultureInfo.CurrentUICulture.ToString () и Thread.CurrentThread.CurrentUICulture.ToString () возвращает тот же вывод: en-US, но System.Globalization.CultureInfo.CurrentCulture.ToString () возвращает hr-HR (== Windows - > Панель управления -> Регион и свойство языкового формата). Поэтому я должен установить CurrentThread.CurrentUICulture, потому что для System.Globalization.CultureInfo.CurrentUICulture нет установщика?
  • 0
    Да, вы должны установить CurrentThread.CurrentUICulture и CurrentThread.CurrentCulture на то, что вы хотите. Вы ошибаетесь английским языком System.Globalization.CultureInfo, поэтому ваше приложение использует файл ресурсов по умолчанию. Как MSDN говорит для Thread.CurrentUICulture: «Получает или задает текущую культуру, используемую Resource Manager для поиска ресурсов, специфичных для данной культуры, во время выполнения».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню