我正在开发一个多语言应用,它应该在所有语言中使用相同的NumberFormat和DateTimeFormat(总共4个)。 我认为实现这一目标的最佳方法是仅将这些格式设置一次,而不是每次将值转换为字符串时,因为这可能会忘记某些值并导致错误。
在Silverlight应用程序中,这可以通过以下方式实现:
var cultureInfo = new CultureInfo(languageCode);
cultureInfo.NumberFormat.NumberGroupSeparator = " ";
cultureInfo.NumberFormat.NumberDecimalDigits = 2;
cultureInfo.NumberFormat.NumberDecimalSeparator = ",";
cultureInfo.DateTimeFormat.ShortDatePattern = "dd'/'MM'/'yyyy";
Thread.CurrentThread.CurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
由于Thread.CurrentThread.CurrentCulture
不再可用,我改用CultureInfo.CurrentCulture
。
不幸的是,使用此方法似乎没有在整个应用程序中设置自定义cultureInfo。我在OnLaunched
方法中设置了文化,所以我认为它是在正确的线程上设置的。
我知道,自WinRT以来,应用只运行应用程序拥有资源的一种文化,但这是否意味着我们不能再覆盖NumberFormat?或者有更好的方法来实现我想要的结果吗?
答案 0 :(得分:0)
使用自定义格式替换整个CultureInfo
时,不会保留格式,但可以实例化各个格式并将其设置为当前文化。
var cultureInfo = new CultureInfo(languageCode);
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = " ";
nfi.NumberDecimalDigits = 2;
nfi.NumberDecimalSeparator = ",";
DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
dtfi.ShortDatePattern = "dd'/'MM'/'yyyy";
CultureInfo.CurrentCulture = cultureInfo;
CultureInfo.CurrentCulture.NumberFormat = nfi;
CultureInfo.CurrentCulture.DateTimeFormat = dtfi;
答案 1 :(得分:-1)
DateTimeFormatter类提供了一种全局感知方法,用于将日期或时间格式化为字符串以显示给用户。它可以使用当前用户的默认首选项,也可以覆盖这些首选项以指定其他语言,地理区域以及时钟和日历系统。调用者可以使用众所周知的常量(短期,长期,短期或长期)请求格式,或者定义所需的特定元素。
您可以在GitHub中从Microsoft获得演示。 Date and time formatting sample
DateTimeFormatter[] timeFormatters = new[]
{
// Example formatters for times.
new DateTimeFormatter(
HourFormat.Default,
MinuteFormat.Default,
SecondFormat.Default),
new DateTimeFormatter(
HourFormat.Default,
MinuteFormat.Default,
SecondFormat.None),
new DateTimeFormatter(
HourFormat.Default,
MinuteFormat.None,
SecondFormat.None),
};