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

4
我可以使用System.Globalization的RegionInfo.CurrentRegion在Xamarin Forms项目中检测设备上用户所在的地区吗?当我使用它时,检测到的地区是基于我在设备设置中设置的设备语言。如果不应该使用它,请指导我正确实现地理位置上的用户区域检测。
注: 1. 我还需要根据设备语言设置应用程序语言。(在某些地方,我看到RegionInfo是基于CultureInfo设置来检测区域的) 2. 我基本上想检测用户是否身处欧洲地区。
有经验的人指点方向将非常好。
2个回答

5
你应该没问题了...
在框架内,iOS和macOS是特殊情况,它通过本地调用来获取CurrentRegion
NSLocale.CurrentLocale.CountryCode

关于 https://developer.apple.com/documentation/foundation/nslocale?language=objc 的回复:

iOS 中定义 ISO 国家代码是操作系统本身设置的一部分,不可跳过,因此不可能不获取 ISO 国家代码(我认为 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";

个人而言,我不知道有哪个欧洲国家没有被直接ISO代码覆盖,也没有被Android设备覆盖(但在欧洲和亚洲有很多Android OEMs,所以也许你可以获得一个IV返回值……)。

谢谢@SushiHangover,无论如何我都不能确定用户的地理位置,所以我使用了Xamarin.Essentials Geolocation和Geocoding API。 - Mac

1
我采用以下方法使我的xamarin.forms应用程序正常工作:
对于检测位置,我使用了Xamarin.Essentials地理位置插件,适用于Android和iOS-https://learn.microsoft.com/en-gb/xamarin/essentials/geolocation?context=xamarin%2Fandroid&tabs=android 对于检测设备语言,我偶然发现了官方本地化Xamarin文档,对我非常有帮助:
Android-https://learn.microsoft.com/en-us/xamarin/android/app-fundamentals/localization iOS-https://learn.microsoft.com/en-gb/xamarin/ios/app-fundamentals/localization/#language

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接