2009-04-24 2 views
0

Кто-нибудь успешно локализовал мобильное приложение, которое использует элементы управления Orientation Aware для поддержки нескольких разрешений. CultureInfo необходимо настраивать во время выполнения и не читать из системы. Не уверен, поддерживается ли это. Пожалуйста помоги.Локализация NET CF с ориентацией Aware

Пламен

ответ

1

Я никогда не использовал элементы управления вы упоминая при этом я не знаю причину, почему вы должны установить CultureInfo во время выполнения для указанного управления. Поэтому мой ответ основан на вашем вопросе о том, как установить CultureInfo во время выполнения. Если это не то, что вы хотели, просто не обращайте внимания на мой ответ.

Если мы программировали настольное приложение, он CultureInfo может быть изменен с помощью:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US") 
'en-US = American English 

К сожалению, это невозможно в CF.NET.

На самом деле, насколько я знаю, нет официального или поддерживаемого способа изменения настроек CultureInfo (и региональных настроек) устройства в CF.NET во время выполнения. Возможно, можно изменить региональные настройки в реестре, но это будет означать, что устройство необходимо перезагрузить.

В моей кодовой библиотеке, однако, у меня есть фрагмент кода, который я нашел некоторое время назад и который я тестировал только в эмуляторе, где он работал отлично. Это считается «взломом» и может быть рискованным, но при тестировании его в эмуляторе я никогда не сталкивался с какими-либо проблемами. Здесь в VB.Net:

'I declare the following statement 

Dim myCIintl As New Globalization.CultureInfo("en-US") 'where en-US is for Ame-English 

'Then I call the following sub 

SetDefaultLocale(myCIintl) 

'Here is the code of the sub 

Public Shared Sub SetDefaultLocale(ByVal locale As System.Globalization.CultureInfo) 
     If Nothing Is locale Then 
      Throw New ArgumentNullException("locale") 
     End If 

     Dim fi As System.Reflection.FieldInfo = GetType(System.Globalization.CultureInfo).GetField _ 
     ("m_userDefaultCulture", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Static) 
     If Nothing Is fi Then 
      Throw New NotSupportedException("Setting locale is not supported in this version of the framework.") 
     End If 
     fi.SetValue(Nothing, locale) 
End Sub 

Примечание: Обратите внимание на тот факт, что если частная переменная m_userDefaultCulture изменит свое название в будущей версии, то приведенный выше код может сломаться. Также имя переменной может иметь другое имя в локализованной версии Windows Mobile - возможно, в испанской версии это называется чем-то другим. Я не знаю, поэтому я думаю, вы должны попробовать это для себя.

Помимо вышеуказанного примечания, код выше должен работать (пересекая мои пальцы), пока региональные настройки, которые вы хотите использовать, присутствуют на устройстве. Чтобы узнать, какие региональные настройки поддерживаются устройством, вы можете использовать отличный код, который Ctacke показал here.

Удачи вам!

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