我在Windows 8 Metro应用程序(XAML & C#)中遇到了有关用户区域设置的问题。看来,应用程序将不会尊重用户的区域设置,所以即使你的Windows 8被设置为显示日期和时间格式芬兰的应用仍然会使用美国格式显示。但是,这是一个很大的问题,我一定有一些东西丢失了?WinRT应用程序和区域设置。根据用户的区域设置格式化日期和数字的正确方法是什么?
为了验证这一点,我开始通过创建一个WPF应用程序。该应用程序会打印出的CurrentCulture和格式化DateTime.Now:
private void Culture_Loaded_1(object sender, RoutedEventArgs e)
{
this.Culture.Text = System.Globalization.CultureInfo.CurrentCulture.DisplayName;
}
private void Date_Loaded_1(object sender, RoutedEventArgs e)
{
this.Date.Text = DateTime.Now.ToString();
}
这里是我的默认区域设置:
运行时,应用程序显示在芬兰格式的日期:
然后我将区域设置更改为美国:
而当应用程序被再次运行,文化和格式更改:
这是如我所料一切工作,这也是我没有料到的WinRT应用工作。
因此,下一步,我创建了一个具有相同代码的WinRT(XAML & C#)应用程序,并将区域设置恢复为芬兰语。问题:
即使我已经通过区域设置该格式应该是“芬兰”定义的,WinRT的应用程序将显示美国格式化的日期时间。然后我修改了应用程序的项目文件并提出FI-FI的默认语言:
这一变化也修改了应用程序的文化:
奇怪。我将默认语言更改回默认值,并将格式恢复为美国。然后,我在项目内创建了文件夹“Strings-fi-FI”,并在项目中添加了一个空的“Resources.resw”。这个空文件似乎是不够的,因为我现在越来越芬兰格式:当我删除空资源文件
,将打印格式返回到美国:
很奇怪。
这导致了几个问题,但我认为的主要问题是:WinRT应用程序是否不像WPF应用程序那样遵循用户的区域设置?
所以,实际上可以如何获取/尊重用户分区格式设置? 我开始使用以下配置的windows phone 8.1仿真器进行测试: UI语言:德语,地区:美国,格式设置:爱尔兰语 我找不到信息,用户已将其格式设置爱尔兰人。我唯一的愿望是像用户想要看到的那样格式化日期时间。和区域格式不会自动意味着它的区域我将设备设置为或我选择的用户界面语言。在我的设备上,我将用户界面设置为英文,但希望以德文格式查看所有时间戳记和日期... – Kornelis
谢谢,以下内容非常棒,因为我需要ISO 3166-1 alpha2 https://en.wikipedia.org/ wiki/ISO_3166-1_alpha-2 GeographicRegion userRegion = new GeographicRegion(); string regionCode = userRegion.CodeTwoLetter; – Quincy
这对我有效,但现在我需要大数字和'CurrencyFormatter'不支持小数,所以我需要一个解决方法... –