2012-02-21 5 views
0

Я новичок в WPF и пытаюсь объединить некоторые концепции, о которых я читаю.Как использовать WPF для отображения локализуемого и динамического текста?

Что я пытаюсь сделать, это построить локализованный пользовательский интерфейс. Для простоты предположим, что я создаю пользовательский интерфейс со строкой: «Файл занимает 2 ГБ на диске».

Часть «2 ГБ» является динамической. Значение может меняться в зависимости от файла, который пользователь выбирает. Во-вторых, преобразование должно занимать от ulong (размер файла байтов) до строки (дружественный размер, используя соответствующие единицы, например KB, MB, GB, TB и т. Д.).

Я думал, что IValueConverter будет наиболее подходящим для подсчета байтов для преобразования в дружественный файл. Я также думал, что я буду хранить «Файл занимает {0} на диске». как строковый ресурс.

Я не уверен, что IValueConverter будет полезен здесь. Может ли он использоваться с String.Format()? Я не вижу, как это можно использовать в привязке напрямую, потому что мы вставляем результат преобразования в локализованный текстовый шаблон.

Есть ли лучший способ приблизиться к этому?

+0

Локализация более относится к дате и валютных форматам, используемым различными культурами. Насколько мне известно, KB, MB, GB и TB одинаковы во всех культурах. Поэтому я бы просто использовал конвертер. – Paparazzi

+0

Очевидно, что KB, MB, GB и TB - это то, что он называет «динамическим текстом», и что «локализуемая» часть - это «Файл занимает {0] на диске.» - для i18n/translation. – ANeves

ответ

1

Привязки имеют StringFormat property, вы должны иметь возможность использовать это, если вы можете как-то ссылаться на свою локализованную строку (возможно, используя пользовательский markup extension).

+0

Несомненно, это стандартная проблема, локализуемые текстовые шаблоны, не так ли? – jglouie

+0

@LemonBeagle: Если вы посмотрите вокруг, вы можете найти что-то здесь на SO, я за одну ненавижу локализацию и не хочу иметь с этим ничего общего, если я могу избежать этого. Если вы храните локализованные строки в своих ресурсах приложений, вы можете ссылаться на них с помощью '{x: Static prop: Resources.SomeString}', где prop сопоставляется с пространством имен clA-свойств, которое обычно содержит эти ресурсы. Если вы используете другой механизм, вам нужно придумать другой метод. –

+0

Я использовал эту ссылку здесь: http://www.hardcodet.net/2009/03/lookup-resource-value-using-markup-extension, и она отлично работала – jglouie

1

Используйте это удобные байты имя в текстовый конвертер и IValueConverter

Converting bytes to GB in C#?

private string formatBytes(float bytes) 
     { 
      string[] Suffix = { "B", "KB", "MB", "GB", "TB" }; 
      int i; 
      double dblSByte=0; 
      for (i = 0; (int)(bytes/1024) > 0; i++, bytes /= 1024) 
       dblSByte = bytes/1024.0; 
      return String.Format("{0:0.00} {1}", dblSByte, Suffix[i]); 
     } 

public class BytesSuffixConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     float bytes = (float)value; 
     return formatBytes(bytes); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new Exception("Not Supported."); 
    } 
} 
+0

Спасибо, но есть проблема. Я также хочу перевести текст на другие языки и динамически вставить вывод этого конвертера в этот текст – jglouie

Смежные вопросы