RegionInfo.CurrentRegion基于设备语言-C#

时间:2019-04-30 17:37:36

标签: c# android ios xamarin xamarin.forms

我可以使用System.Globalization的RegionInfo.CurrentRegion来检测基于xamarin表单项目的设备中的用户区域吗?使用它时,检测到的区域基于我在设备设置中设置的设备语言。如果我不应该使用它,请引导我朝正确的方向进行,以便在地理位置上实现用户区域的检测。 注意: 1.我还要求根据设备语言设置应用程序语言。 (在某个地方,我看到regioninfo根据cultureinfo中设置的文化检测区域) 2.我基本上想检测用户是否在欧洲地理上

如果有经验的人指出方向,那将是非常好的。

2 个答案:

答案 0 :(得分:1)

你应该没事...

iOS和macOS在框架内是特殊情况,因为它通过对的本地调用获得CurrentRegion

NSLocale.CurrentLocale.CountryCode

re:https://developer.apple.com/documentation/foundation/nslocale?language=objc

因此,不可能获得iOS内定义的ISO国家/地区代码,因为它是OS本身设置的一部分,并且不可跳过(我不相信iOS | macOS甚至不支持定义不变式的方法文化在本机操作系统级别)

在Android上,将执行默认的Mono / .Net代码并提取国家/地区:

Thread.CurrentThread.CurrentCulture

注意:Mono运行时本身正在确定线程区域性的初始设置(当然,您的代码可以通过编程方式更改该初始设置)

因此,假设设备的语言环境设置为已知国家/地区,则可以使用RegionInfo.CurrentRegion

但是您应该知道CultureInfo.InvariantCultureId是一种有效的文化,因此有可能返回ISO国家IV

iso2Name = "IV";
iso3Name = "ivc";
win3Name = "IVC";
nativeName = englishName = "Invariant Country";

就我个人而言,我不知道一个欧洲国家没有被Android设备未涵盖的直接ISO代码覆盖(但是欧洲和亚洲有很多Android OEM,所以也许(?)您可以获得IV的回报...)。

答案 1 :(得分:0)

我通过在xamarin.forms应用程序中采用以下方法来使其正常工作

对于检测位置,我使用了 Xamarin.Essentials地理位置插件,适用于Android和iOS-https://docs.microsoft.com/en-gb/xamarin/essentials/geolocation?context=xamarin%2Fandroid&tabs=android

为了检测设备语言,我偶然发现了官方本地化的Xamarin文档,这些文档对我有很大帮助:

Android -https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/localization

iOS -https://docs.microsoft.com/en-gb/xamarin/ios/app-fundamentals/localization/#language