This article has been localized into Russian by the community.
Вступительные слова
Время, когда вы создавали программное обеспечения для выполнения на нескольких локальных компьютерах, в значительной степени прошло. Благодаря глобализации и Интернету в частности, программное обеспечение сегодня широко используется во всем мире, на очень широком спектре устройств. Это означает, что код должен обрабатывать множество случаев специфики языка и региональных параметров, таких как обработка чисел и дат в другом формате, отличном от ожидаемого. Например, знаете ли вы, что во многих странах число с дробями (например, 1,42) использует не точку, а запятую в качестве десятичного разделителя (например, 1,42)? И знаете ли вы, что во многих странах день пишется перед месяцем в дате, в то время как другие пишут год в первую очередь?
Работа со всем этим может быть серьезной проблемой, но, к счастью для нас, .NET framework имеет несколько классов, которые могут помочь нам справиться с этими ситуациями. Чаще всего используется класс CultureInfo, о котором мы поговорим в следующей статье, но .NET также предлагает классы для работы с регионами и даже конкретными календарями (вы знаете, что даже календарь не одинаков во всем мире, правда?).
Эта тема особенно важна, если вы работаете над приложением, которое должно поддерживать несколько языков, но даже если это не так, вам все равно придется иметь дело с тем фактом, что оно может использоваться на устройстве, которое не использует одни и те же обозначения, например, даты и цифры. Чтобы проиллюстрировать, насколько это важно, рассмотрим следующий пример:
string inputNumber = "1.425";
double usNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("en-US"));
double germanNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("de-DE"));
Console.WriteLine(usNumber.ToString() + " is not the same as " + germanNumber);
Подумайте о переменной inputNumber как о том, что мы получили от пользователя приложения, например, как о чем-то введенном в текстовое поле веб-формы. Мы используем метод double.Parse(), чтобы превратить его в float, и мы передаем второй параметр типа CultureInfo - если мы этого не сделаем, то будут использоваться системные настройки, которые могут быть английскими, немецкими или чем-то совершенно другим. Теперь обратите внимание на вывод:
1,425 is not the same as 1425
Совершенно верно! Наше числовое значение только что увеличилось в тысячу раз, потому что в Германии в качестве десятичного разделителя используется запятая, а в качестве разделителя тысяч используется точка. Это может быть серьезной проблемой в большинстве приложений, но хорошая новость заключается в том, что, хотя пример иллюстрирует проблему, он также иллюстрирует и решение: Вы всегда должны контролировать способ получения входных данных, а затем поступать с ними соответствующим образом. Благодаря классу CultureInfo .Net способен разбирать числа (и даты тоже!) в любом из возможных форматов до тех пор, пока вы сообщаете ему, чего ожидать.
Резюме
Учет культурных и региональных различий, возможно, даже более важен при составлении программ, чем в реальной жизни. К счастью для нас, .NET framework может быть огромной помощью в этом отношении, если вы знаете, где искать. В следующих двух статьях мы обсудим инструменты, предлагаемые платформой .NET framework для устранения этих различий.