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

Pau*_*ean 4 c# android ios xamarin xamarin.forms

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

如果有有经验的人指点一下就好了。

Sus*_*ver 5

你应该没事...

iOS 和 macOS 在框架内是特殊情况,因为它CurrentRegion通过本机调用获取

NSLocale.CurrentLocale.CountryCode
Run Code Online (Sandbox Code Playgroud)

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

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

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

Thread.CurrentThread.CurrentCulture
Run Code Online (Sandbox Code Playgroud)

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

因此,假设设备的区域设置设置为已知国家/地区,您就可以使用RegionInfo.CurrentRegion.

但您应该意识到这CultureInfo.InvariantCultureId是一种有效的文化,因此 ISO 国家/地区的回归IV是可能的:

iso2Name = "IV";
iso3Name = "ivc";
win3Name = "IVC";
nativeName = englishName = "Invariant Country";
Run Code Online (Sandbox Code Playgroud)

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