String.Format неправильно преобразовывает целые числа в арабский - PullRequest
8 голосов
/ 16 июня 2010

У меня проблема с String.Format. Следующий код форматирует строку правильно, кроме первого целого числа. Текущая культура настроена на иракский арабский (ar-IQ):

int currentItem= 1;
string of= "من";
int count = 2;
string formatted = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", currentItem, of, count);

Текст форматируется справа налево, а цифра 2 преобразуется в арабскую цифру, а цифра 1 - нет.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 16 июня 2010

Поведение по умолчанию для преобразования числовых значений - «Контекст», что в основном означает, что если число обрабатывается по-арабски, они отображаются на арабском языке (или другой «нелатинский» символ), если нет, то отображаются в »стандартные "европейские номера.

Вы можете довольно легко изменить это поведение, хотя:

var culture = CultureInfo.CurrentCulture;
culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational; // Always use native characters
string formatted = string.Format(culture, "{0:d}{1:d}{2:d}", currentItem, of, count);

Это должно работать так, как вы ожидаете - подробнее о MSDN .

0 голосов
/ 24 января 2011
var culture = CultureInfo.CurrentCulture;
culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;

не работает, но работает следующее:

var culture = new CultureInfo("ar-SA");
culture.NumberFormat = new NumberFormatInfo();
Thread.CurrentThread.CurrentCulture = culture;

Спасибо за подсказку !!!

...