2016-03-15 85 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;