2016-03-15 2 views
0

Я работаю над многоязычным приложением, которое должно иметь одинаковый формат NumberFormat и DateTimeFormat на всех языках (всего 4). Я считаю, что лучший способ достичь этого - установить эти форматы только один раз, а не каждый раз, когда я конвертирую значение в строку, поскольку это может быть забыто по некоторым значениям и приводит к ошибкам.Пользовательский NumberFormat для многоязычного приложения UWP

В 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 вместо этого. К сожалению, пользовательская культураInfo не может быть установлена ​​во всем приложении с помощью этого метода. Я установил культуру в методе OnLaunched, поэтому я думаю, что он установлен на правильной нити.

Я знаю, что с WinRT приложения работают только в одной из культур, к которым у приложения есть ресурсы, но означает ли это, что мы больше не можем переопределять NumberFormat? Или есть лучший способ достичь желаемого результата?

ответ

-1

Класс DateTimeFormatter предоставляет общедоступный метод форматирования даты или времени в строке для отображения пользователю. Он может либо использовать настройки по умолчанию для текущего пользователя, либо вызывающий может переопределить их, чтобы указать другие языки, географическую область, часы и системы календаря. Вызывающий может запросить формат с использованием известных констант (короткий, длительный, короткий или длинный) или определить требуемые элементы.

Вы можете получить демо от Microsoft в GitHub. 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), 
     }; 
+0

Это еще один из ваших ответов, который представляет собой скопированную копию из описания Github. – Ian

+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; 
Смежные вопросы