2012-03-21 1 views
3

Я пытаюсь установить язык запуска по умолчанию в своем приложении Windows Metro в приложении App.xaml.cs, но я не могу найти место для этого. Обычно я устанавливаю это с помощью Thread.CurrentCulture в C#, но я не могу найти пространство имен Thread. Что-нибудь мне здесь не хватает?Приложение Windows 8 Metro (XAML) - Как установить язык запуска по умолчанию?

+0

См. Обновление ниже ... – chrisva

ответ

0

Вы можете попытаться установить его на сборку проекта. Попробуйте щелкнуть правой кнопкой мыши проект, затем «Информация о сборке ...» и выберите свою нейтральную культуру.

+1

UDPATE: Я действительно пробовал это, но приложение Metro не нашло правильного файла ресурсов. Я проверил, что мне удалось установить культуру в app.xaml.cs, используя следующий код: // Установка норвежского языка для запуска по умолчанию, даже если OS i English. System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new CultureInfo ("no"); System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo ("no"); – chrisva

+1

UPDATE: Но по-прежнему загружается файл ресурсов на английском языке, потому что моя ОС Windows 8 установлена ​​на английском языке. Я определил ресурсы, описанные в этом быстром запуске: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh771181.aspx, но не повезло. Я также хочу, чтобы пользователь мог изменить язык во время выполнения. – chrisva

+1

Любая идея, как изменить язык в приложении C# Metro во время выполнения, чтобы загрузить правильные языковые ресурсы? – chrisva

0

Вы можете установить культуру потоков по умолчанию, используя свойство CultureInfo.DefaultThreadCurrentCulture.

0

Возможно установить его в 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), потому что тогда он мог быть зарегистрирован несколько раз. И все же это событие должно быть зарегистрировано где-то, если изменение языка вступит в силу во время выполнения.

0

Я думаю, что вы ищете (в СР) Windows.Globalization.ApplicationPreferences.PreferredLanguage.

Обратите внимание, что ваш манифест должен перечислить все языки, вы на самом деле поддерживают. VS автоматически установит языки для вас, если манифест в проекте содержит x-generate.

4

Это прекрасно работает в Windows8 CP:

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de"; 
var resourceLoader = new ResourceLoader(); 
0

Откройте окно код ваших Package.appxmanifest Изменения Ресурсы для:

<Resources> 
    <Resource Language="x-generate" /> 
    </Resources> 
1

Если это все-таки по требованию у меня есть вариант здесь:

Попробуйте установить язык приложения по умолчанию в Package.appxmanifest. Откройте манифест с помощью VS и установите язык по умолчанию в соответствующем поле (интерфейс приложения -> язык по умолчанию).

Надеюсь, это поможет.