.net 具有方向感知的NETCF本地化
是否有人成功本地化了一个使用方向感知控件支持多分辨率的移动应用程序。CultureInfo需要在运行时可设置,而不是从系统中读取。不确定这是否受支持。请帮忙.net 具有方向感知的NETCF本地化,.net,compact-framework,localization,.net,Compact Framework,Localization,是否有人成功本地化了一个使用方向感知控件支持多分辨率的移动应用程序。CultureInfo需要在运行时可设置,而不是从系统中读取。不确定这是否受支持。请帮忙 Plamen我从未使用过您提到的控件,也不知道为什么您必须在运行时为这些控件设置CultureInfo。因此,我的回答是基于您的问题:如何在运行时设置CultureInfo。如果这不是你想要的,就不要理会我的回答 如果我们正在编写桌面应用程序,则可以使用以下方法更改CultureInfo: Thread.CurrentThread.Curr
Plamen我从未使用过您提到的控件,也不知道为什么您必须在运行时为这些控件设置CultureInfo。因此,我的回答是基于您的问题:如何在运行时设置CultureInfo。如果这不是你想要的,就不要理会我的回答 如果我们正在编写桌面应用程序,则可以使用以下方法更改CultureInfo:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
'en-US = American English
不幸的是,这在CF.NET中是不可能的
事实上,据我所知,没有官方或受支持的方式可以在运行时在CF.NET中更改设备的CultureInfo(和区域设置)。也许可以更改注册表中的区域设置,但这意味着必须重新启动设备
然而,在我的代码库中,我有一段代码片段,这段代码片段是我不久前发现的,并且我只在一个模拟器中进行了测试,它工作得非常好这被认为是一种“黑客行为”,可能有风险但在模拟器中测试时,我从未遇到任何问题。在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显示的优秀代码
祝你好运