c# - 如果在应用程序启动后更改了当前设备语言,如何获取当前设备语言?
问题描述
当您启动应用程序时,有很多方法可以获取当前设备语言:
CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
CultureInfo.DefaultThreadCurrentCulture
CultureInfo.DefaultThreadCurrentUICulture
Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture
但是,如果我在应用程序运行时更改设备语言,这些值都不会更新。
有没有一种通用的方法来获取当前的设备语言,还是我需要为每个平台独立编写代码?
- 安卓:
CultureInfo.GetCultureInfo(Locale.Default.ToString().Replace('_', '-'))
- IOS:
CultureInfo.GetCultureInfo(NSLocale.CurrentLocale.LocaleIdentifier.Replace('_', '-'));
- 超轻量级:
CultureInfo.GetCultureInfo(GlobalizationPreferences.Languages[0].ToString())
解决方案
每当用户更改设备的位置或语言时,每个平台都应提供通知。例如,iOS 发出NSCurrentLocaleDidChangeNotification
包含语言属性的 a。
您需要使用Xamarin.Forms 本地通知过程注册并观察平台通知,其中注释(添加了粗体和斜体):
每个平台以不同方式处理本地通知的创建、显示和使用。本文介绍如何使用 Xamarin.Forms创建跨平台抽象来发送、计划和接收本地通知。
有许多关于如何做到这一点的教程。在xamarin 表单本地通知使用教程上搜索以找到一些。请注意术语local。你不想要推送通知——那是另一回事。
要更简单地执行此任务,您可以使用插件,例如GitHub 上的 edsnider/localnotificationsplugin。您可以通过在搜索中将术语使用教程替换为插件来找到更多信息。
澄清:
- 本地通知发生在设备内部,即设备或应用程序在内部发送通知以供设备上的应用程序使用。
- 当向外部服务(例如 Azure)发出请求时,会发生推送通知。然后该服务将向适当的设备广播相应的通知。
推荐阅读
- javascript - JSON.stringify() 不适用于具有类的对象
- c# - MVC 身份,启用用户名,但登录中断
- c++ - 结构可以包含参数吗?
- django - django autocomplete_fields 在 TabularInline 中不起作用(但在 StackedInline 中起作用)
- mongodb - Azure 上的 MEAN Web 应用数据库连接
- html - CSS 网格为每个 html 标签创建一个新框
- python - 如何从谷歌知识面板获取答案到python中的变量中?
- laravel - 进行显式绑定会给我一个错误
- android-studio - 无法在 Android Studio 3.3.2 中移动任何元素,如 textview/button
- java - Reactor:并行下载 n 个图像,一个失败不应影响其余图像