Проблема:
У меня есть приложение C # .NET 2.0, разработанное для Windows 7, которое переводит ресурсы на несколько языков (например, zh-CHS для китайского языка)., es для испанского и т. Д.).
У меня есть клиент, который хочет запустить свою ОС Windows 7 на английском языке, но запустить приложение .NET на испанском языке ( es ).
Мое приложение является многопоточным, поэтому простого изменения культуры основного потока графического интерфейса недостаточно для моих нужд (поверьте, я пытался).Это связано с тем, что другие строки, отображаемые пользователю через графический интерфейс, генерируются в других потоках.Чтобы получить 100% полное покрытие, мне нужно было бы вручную настроить культуру каждого отдельного потока, чтобы гарантировать, что весь текст из файлов ресурсов будет на правильном языке.Поскольку мой продукт в основном является основой для других плагинов, которые пишут другие группы разработчиков, я не могу контролировать действия, выполняемые в потоках, созданных в других плагинах.Из-за этого ручное изменение культуры для каждого потока недопустимо.
То, что я ищу, - это способ установки общего языка для приложения без необходимости изменениялюбые пользовательские настройки ОС.
В ходе некоторых исследований я наткнулся на следующий метод установки предпочтительного языка пользовательского интерфейса для процесса: SetProcessPreferredUILanguages
После прочтения этого кажется, что этоЗвонок это то, что я ищу.Однако, когда я реализовал этот вызов в методе Main моего приложения C #, он, похоже, ничего не делает.
Возвращаемое значение из следующего кода - true, но я никогда не вижу, чтобы мое приложение с графическим интерфейсом отображалотекст на испанском языке.
[DllImport("Kernel32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
public static extern Boolean SetProcessPreferredUILanguages(UInt32 dwFlags, String pwszLanguagesBuffer, ref UInt32 pulNumLanguages);
public void SetLanguages()
{
uint numLangs = 0;
string[] langs = new string[3];
uint MUI_LANGUAGE_NAME = 0x8; // Use ISO language (culture) name convention
langs[0] = "es\u0000";
langs[1] = "zh-CHS\u0000";
langs[2] = "en-US\u0000";
numLangs = (uint)langs.Length;
if (SetProcessPreferredUILanguages(MUI_LANGUAGE_NAME, String.Concat(langs), ref numLangs))
{
Console.WriteLine("Successfully changed UI language");
}
}
Есть ли что-то еще, чего мне не хватает для успешного запуска моего приложения с графическим интерфейсом с загруженными испанскими ресурсами?
Я пытаюсь реализовать второй вариант таблицы в нижней части страницы MSDN для Создание приложений MUI , где у меня есть настройки языка пользовательского интерфейса для конкретного приложения и я хочу достичь желаемогорезультат для загрузки ресурса:
Приложение вызывает MUI API для установки специфичных для приложения языков пользовательского интерфейса или предпочитаемых процессом языков пользовательского интерфейса, а затем вызывает стандартные функции загрузки ресурса.Ресурсы возвращаются на языках, установленных языками приложения или системы.
Я позвонил, чтобы успешно установить предпочтительные языки пользовательского интерфейса процесса, но мои ресурсы не загружаются на этом языкеЯ бы ожидал.Комментатор упомянул, что этот вызов будет работать только для неуправляемых ресурсов, которые я не могу проверить на 100%, но поведение, по-видимому, указывает на то, что это так.
Я не могу быть единственным человеком, который когда-либо пытался реализовать приложение .NET таким способом.Обидно, что больше нет информации о том, как это сделать.
Заранее спасибо,
Кайл