2016-03-15 82 views
0

我正在研究跨所有语言(共4个)应具有相同NumberFormat和DateTimeFormat的多语言应用程序。 我觉得最好的方法是只设置一次这些格式,而不是每次将值转换为字符串,因为这可能会遗忘某些值并导致错误。用于多语言UWP应用程序的自定义NumberFormat

在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代替。 不幸的是,通过使用此方法,customInfo似乎并未在整个应用程序中设置。我在OnLaunched方法中设置了文化,所以我认为它设置在正确的线程上。

我知道,自WinRT以来,应用程序只能运行在应用程序有资源的文化之一,但这是否意味着我们不能再覆盖NumberFormat?或者有更好的方法来达到我想要的结果吗?

回答

-1

DateTimeFormatter类提供了一个全局感知的方法,用于将日期或时间格式化为字符串以便显示给用户。它可以使用当前用户的默认首选项,或者调用者可以覆盖这些选项以指定其他语言,地理区域,时钟和日历系统。调用者可以使用众所周知的常量(shorttime,longtime,shortdate或longdate)来请求格式,或者定义所需的特定元素。

您可以从Microsoft获得GitHub的演示。用自定义一个替换整个CultureInfoDate 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), 
     }; 
+0

这是你的答案,这是从Github描述复制粘贴的另一个。 – Ian

+0

使用源代码进行更新 –

0

的格式不保留,但它是可以实例化单独的格式和设置它们上的当前培养物。

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;