Как сменить
локаль в Silverlight на время исполнения
некоего кода?
Вот примерно
так:
// change locale for decimal separator's sake
var currCulture = System.Globalization.CultureInfo.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
if(sr != null) res = sr.ToJson();
System.Threading.Thread.CurrentThread.CurrentCulture = currCulture;
return res;
Некоторые
спросят — а зачем это надо? Ответ: в
основном затем, чтобы мог сработать
код, который сделан без учета того
простого факта, что в разных культурах
по разному записывают данные. Например
дату и время. Или, в моем случае, десятичный
разделитель.
Напоролся я
тут на грабли, впрочем достаточно
типичные. В некоей библиотеке есть тип
данных с кодеком ToJson/FromJson. Писали
библиотеку, понятное дело, заклятые
друзья американцы (возможно, руками
индусов). В условиях системных настроек
на русскую локаль, дробное число функцией
ToJson записывается через запятую, например
1,5
А функция
FromJson такой записи не понимает. Ей подавай
точку: 1.5
Обычное дело,
чего там. При этом никаких настроек на
локаль, типа object.ToString(cultureinfo) и в помине
нет.
Поэтому, перед
вызовом ToJson приходится выставлять
американскую локаль и после восстанавливать
предыдущую.
original post http://vasnake.blogspot.com/2012/12/cultureinfo.html
original post http://vasnake.blogspot.com/2012/12/cultureinfo.html
Комментариев нет:
Отправить комментарий