Windows Phone 10 UWP 应用中的区域格式和语言

Regional format and language in Windows Phone 10 UWP app

我正在开发本地化的 Windows (Phone) 10 UWP 应用程序。

我实现了对 2 种语言的支持:en-US 和 nl-NL(荷兰-荷兰)。这工作正常:当用户在 phone 设置中选择英语时,应用程序以英语启动,当用户在 phone 设置中选择荷兰语时,应用程序以荷兰语启动。

为了让它工作,我必须在 package.appxmanifest 中进行一些更改,因为我的语言资源位于不同的 DLL 中:

  <Resources>
    <Resource Language="nl-NL"/>
    <Resource Language="en-US"/>
  </Resources>

但是我找不到任何方法从用户那里获取日期、时间和数字格式的区域格式。

当用户选择英语作为语言但选择荷兰语(荷兰)作为区域格式时,我的应用程序以两者开头 System.Globalization.CultureInfo.CurrentUICulture 和 System.Globalization.CultureInfo.CurrentCulture 设置为 "en-US",其中 System.Globalization.CultureInfo.CurrentCulture 应为 "nl-NL"。

我一直在搜索所有文档,但找不到检索 phone 区域格式的方法(Windows.System.UserProfile.GlobalizationPreferences.HomeGeographicRegion 除外,后者有所不同)。

有没有办法检索 phone 区域格式?

我只知道下面提到的黑客here

 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);

Peter Meinl 的答案有效,但有点令人困惑,因为您不需要 RegionInfo。

Pedro Lamas 仅使用 "US".

描述了使用 DateTimeFormatter 的 ResolvedLanguage 的黑客攻击
    DateTimeFormatter dtf = new DateTimeFormatter("longdate", new[] { "US" });
    string regionInfoName = dtf.ResolvedLanguage;
    CultureInfo regionFormatCultureInfo = new CultureInfo(regionInfoName);

DateTimeFormatter 的 ResolvedLanguage 属性 将包含 phone 的区域格式 ID,在本例中为 "nl-NL"。

请注意,您确实需要在 DateTimeFormatter 的构造函数中使用一种语言,仅 new DateTimeFormatter("longdate") 或 DateTimeFormatter.LongDate 将不起作用。