Я пытаюсь установить язык запуска по умолчанию в своем приложении Windows Metro в приложении App.xaml.cs, но я не могу найти место для этого. Обычно я устанавливаю это с помощью Thread.CurrentCulture в C#, но я не могу найти пространство имен Thread. Что-нибудь мне здесь не хватает?Приложение Windows 8 Metro (XAML) - Как установить язык запуска по умолчанию?
ответ
Вы можете попытаться установить его на сборку проекта. Попробуйте щелкнуть правой кнопкой мыши проект, затем «Информация о сборке ...» и выберите свою нейтральную культуру.
UDPATE: Я действительно пробовал это, но приложение Metro не нашло правильного файла ресурсов. Я проверил, что мне удалось установить культуру в app.xaml.cs, используя следующий код: // Установка норвежского языка для запуска по умолчанию, даже если OS i English. System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new CultureInfo ("no"); System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo ("no"); – chrisva
UPDATE: Но по-прежнему загружается файл ресурсов на английском языке, потому что моя ОС Windows 8 установлена на английском языке. Я определил ресурсы, описанные в этом быстром запуске: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh771181.aspx, но не повезло. Я также хочу, чтобы пользователь мог изменить язык во время выполнения. – chrisva
Любая идея, как изменить язык в приложении C# Metro во время выполнения, чтобы загрузить правильные языковые ресурсы? – chrisva
Вы можете установить культуру потоков по умолчанию, используя свойство CultureInfo.DefaultThreadCurrentCulture.
Возможно установить его в App.xaml.cs, как показано ниже, поможет
Windows.Globalization.ApplicationPreferences.PreferredLanguage = "no";
Где «нет» BCP47 языка тегов для норвежского языка.
Update: Метро изменить язык приложения во время выполнения
В соответствии с ОС Windows 8 SDK Sample «ресурсов приложений и локализации»
Вполне возможно, что, в то время как приложение работает, язык, масштаб, контраст или другие настройки могут измениться. Чтобы обрабатывать эти события, слушатели событий должны быть зарегистрированы, чтобы прослушивать и реагировать на изменение. Это можно сделать либо путем сохранения состояния и обновления страницы, либо путем перерисовки определенных ресурсов.
Теперь в моем языке выбора изменения события я устанавливаю PreferredLanguage как:
Windows.Globalization.ApplicationPreferences.PreferredLanguage = "en";
this.Frame.Navigate(this.GetType());
И самое главное, что я пропускал это код ниже в OnLaunched случае приложения:
ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += async (s, m) =>
{
if (m.Key == "Language")
{
// react to language change
}
};
Я не размещал это событие в констракторе страницы или событии любой страницы (как в примере SDK), потому что тогда он мог быть зарегистрирован несколько раз. И все же это событие должно быть зарегистрировано где-то, если изменение языка вступит в силу во время выполнения.
Я думаю, что вы ищете (в СР) Windows.Globalization.ApplicationPreferences.PreferredLanguage.
Обратите внимание, что ваш манифест должен перечислить все языки, вы на самом деле поддерживают. VS автоматически установит языки для вас, если манифест в проекте содержит x-generate
.
Это прекрасно работает в Windows8 CP:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
var resourceLoader = new ResourceLoader();
Откройте окно код ваших Package.appxmanifest Изменения Ресурсы для:
<Resources>
<Resource Language="x-generate" />
</Resources>
Если это все-таки по требованию у меня есть вариант здесь:
Попробуйте установить язык приложения по умолчанию в Package.appxmanifest. Откройте манифест с помощью VS и установите язык по умолчанию в соответствующем поле (интерфейс приложения -> язык по умолчанию).
Надеюсь, это поможет.
См. Обновление ниже ... – chrisva