我希望能够根据用户在Windows 10中配置的“区域格式”设置来格式化日期和数字。使用WPF并不是问题,但是在UWP中,如果不采用一些技巧,似乎很难实现。
样例代码供您参考。
我提出了一个新的问题,因为最好的类似问题已有3年没有被答复。
“区域格式”是一个Windows设置,用户可以独立于语言和地区进行配置。例如,用户可以配置以下内容:
- 语言:英语(作为Windows显示语言)、法语、德语 - 地区:泰国(获取地区信息) - 区域格式:德语(以德语格式显示日期和数字)
“微软似乎建议的方法对我不起作用,我的客户抱怨我的应用程序没有遵守他们的设置。能否有人解释一下这是为什么?如果这是一个SDK的bug,那么早就应该被修复了。内置的日历UWP应用程序确实遵守区域格式。”
我提出了一个新的问题,因为最好的类似问题已有3年没有被答复。
“区域格式”是一个Windows设置,用户可以独立于语言和地区进行配置。例如,用户可以配置以下内容:
- 语言:英语(作为Windows显示语言)、法语、德语 - 地区:泰国(获取地区信息) - 区域格式:德语(以德语格式显示日期和数字)
微软似乎希望我们使用UserProfile.GlobalizationPreferences,但它没有公开活动的“区域格式”。在上面提到的问题中,有一份微软声明:“这是有意的。微软正在摆脱强制应用程序使用操作系统语言的做法......” 我们从未遇到过在与操作系统不同的语言中创建应用程序的问题。这也无法解释如何在UWP应用程序中尊重用户的选择。
- UserProfile.GlobalizationPreferences.HomeGeographicRegion返回的是地区而不是“区域格式”。
- Windows.Globalization.Language.CurrentInputMethodLanguageTag取决于键盘选择。
- Windows.System.UserProfile.GlobalizationPreferences.Languages(1)只有在用户意外配置了与第二种语言匹配的“区域格式”时才起作用。
我阅读了所有能找到的关于此问题的帖子,唯一的解决方案似乎是描述在此处:
var systemLanguage = GlobalizationPreferences.Languages.First();
var regionInfo = new RegionInfo(systemLanguage);
var dtf = new DateTimeFormatter("longdate", new[] { regionInfo.TwoLetterISORegionName });
var regionInfoName = dtf.ResolvedLanguage;
var regionFormatCultureInfo = new CultureInfo(regionInfoName);
“微软似乎建议的方法对我不起作用,我的客户抱怨我的应用程序没有遵守他们的设置。能否有人解释一下这是为什么?如果这是一个SDK的bug,那么早就应该被修复了。内置的日历UWP应用程序确实遵守区域格式。”