【问题标题】:RegionInfo.CurrentRegion is based on device language - c#RegionInfo.CurrentRegion 基于设备语言 - c#
【发布时间】:2019-04-30 17:37:36
【问题描述】:

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

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

【问题讨论】:

    标签: c# android ios xamarin xamarin.forms


    【解决方案1】:

    你应该没事的……

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

    NSLocale.CurrentLocale.CountryCode
    

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

    因此不可能不获得 iOS 中定义的 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";
    

    就我个人而言,我不知道有哪个欧洲国家/地区不受 Android 设备未覆盖的直接 ISO 代码覆盖(但欧洲和亚洲有很多 Android OEM,所以也许(?)你可以得到IV 返回...)。

    【讨论】:

    • 感谢@SushiHangover,如果我使用它,我无法确定用户的地理位置,所以我使用了 Xamarin.Essentials Geolocation and Geocoding API
    【解决方案2】:

    我通过为我的 xamarin.forms 应用程序采用以下方法使其工作

    为了检测位置,我使用了适用于 Android 和 iOS 的 Xamarin.Essentials 地理定位插件 - 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

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 2014-05-22
      • 2021-01-31
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多