2009-04-24 5 views
0

Hat jemand erfolgreich eine Mobile App lokalisiert, die Orientation Aware-Steuerelemente verwendet, um mehrere Auflösungen zu unterstützen. Die CultureInfo muss zur Laufzeit einstellbar sein und darf nicht vom System gelesen werden. Nicht sicher, ob dies unterstützt wird. Bitte helfen Sie.NET CF-Lokalisierung mit Orientierung Aware

Plamen

Antwort

1

Ich habe nie die Kontrollen Sie erwähnen auch nicht, ich kenne das der Grund, warum Sie haben Culture zur Laufzeit festgelegt für Kontrollen gesagt. Daher basiert meine Antwort auf Ihrer Frage, wie CultureInfo zur Laufzeit festgelegt wird. Wenn dies nicht das ist, was Sie wollten, ignorieren Sie einfach meine Antwort.

Wenn wir eine Desktop-Anwendung programmiert wurden, konnte die Culture unter Verwendung geändert werden:

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

Leider ist dies in CF.NET nicht möglich ist.

In der Tat, soweit ich weiß, gibt es keine offizielle oder unterstützte Möglichkeit, die CultureInfo (und regionale Einstellungen) des Geräts in CF.NET zur Laufzeit zu ändern. Man könnte vielleicht die regionalen Einstellungen in der Registry ändern, aber das würde bedeuten, dass das Gerät neu gestartet werden muss.

In meiner Code-Bibliothek habe ich jedoch ein Code-Snippet, das ich vor einiger Zeit gefunden habe und das ich nur in einem Emulator getestet habe, wo es großartig funktioniert hat. Es gilt als "Hack" und kann riskant sein aber während ich es im Emulator getestet habe, habe ich nie irgendwelche Probleme bekommen. Hier ist es in 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 

Hinweis: Bitte beachten Sie, dass, wenn der privaten Variable m_userDefaultCulture seinen Namen in einer zukünftigen Version ändern wird, dann über Code brechen. Auch der Name der Variablen könnte in einer lokalisierten Version von Windows Mobile einen anderen Namen haben - vielleicht in der spanischen Version heißt sie etwas anderes. Ich weiß es nicht. Ich schätze, du musst es selbst ausprobieren.

Neben dem oben genannten Hinweis sollte der obige Code funktionieren (Daumen drücken), solange die regionalen Einstellungen, die Sie verwenden möchten, auf dem Gerät vorhanden sind. Um zu sehen, welche regionalen Einstellungen vom Gerät unterstützt werden, können Sie den ausgezeichneten Code verwenden, den Ctacke here zeigte.

Viel Glück!