2013-04-26 1 views
0

Я не могу понять, как получить CultureInfo установленной системы на клиентской машине.Культура системы в приложении SIlverlight

Существует свойство CultureInfo.InstalledUICulture, но в Silverlight оно недоступно.

С уважением Jonny

+0

Не было [Culture.CurrentCulture] (http://msdn.microsoft.com/en-CA/library/system.globalization.cultureinfo.currentculture%28v=vs.95%29.aspx) быть тем, вы ищете? EDIT: Имейте в виду, что это культура для текущего потока (который может быть программно изменен), но я _think_ по умолчанию настроен на культуру пользовательской машины/операционной системы. –

+0

Эй, CurrentCulture будет определенно изменен во время применения. Поэтому я не могу доверять этой ценности. Извините, что я не упоминал об этом в своем оригинальном посте. –

+0

Нет других предложений? –

ответ

4

Я считаю, чтоCulture.CurrentCulture будет на самом деле предоставить вам с культурой пользователя. Он может, однако, изменить или быть программно установленным с помощью свойства текущего потока Thread.CurrentCulture. Я не уверен , если Silverlight может получить доступ к настройкам культуры/языка пользовательской машины/операционной системы за пределами этого механизма.

Как вы отметили в комментарии, вы не можете доверять ему, так как он определенно изменится на всю жизнь приложения. Возможно, тогда вы должны записать текущую культуру, когда приложение сначала запускается до того, как оно будет программно изменено, и сохраните его на неопределенный срок (статически или иначе), на который будет ссылаться ваш код.

EDIT: Еще одна возможность - использовать браузер хостинга и его JavaScript. Подойдя к нему, я вижу, что вы можете получить доступ к window.navigator.language, который будет сообщать о языке браузера. Internet Explorer любит делать что-то свое и сообщает browserLanguage, userLanguage и systemLanguage.

Вы можете написать небольшую метод JavaScript на странице (вы хотите сделать больше тестов кросс-браузер, версия тесты и системные тесты):

function GetUserLanguage() 
{ 
    if (window.navigator.language) 
     return window.navigator.language; 
    else //yay IE 
     return clientInformation.browserLanguage; 
} 

Затем в Silverlight вы могли иметь что-то как:

string userLanguage = (string)HtmlPage.Window.Invoke("GetUserLanguage"); 
CultureInfo userCulture = new CultureInfo(userLanguage); 

Я не уверен, если все культуры сообщили в браузере (во всех браузерах/версий/операционных систем) будет соответствовать листинг культуры в Silverlight.

+0

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

+0

__ReferenceError: окна не определены__ правильно - ** window.navigator.language ** –

+0

@AlexSkiffin: Спасибо, что выбрали эту опечатку; Я исправил это сейчас. –

 Смежные вопросы

  • Нет связанных вопросов^_^