Visual Studio: Игры с локализацией
В связи с выходом локализированной версии Visual Studio 2010 возникло желание посмотреть лично, что же это за зверь такой — русская версия Visual Studio 2010! Поэтому я пошел на сайт Microsoft и загрузил пробную версию VS2010, но к сожалению, до установки дело так и не дошло. Но вопрос локализации все таки достаточно интересен — поэтому статью решил все таки выкатить — может кому-то пригодится эта информация.
Как побороть локализированные сообщения при исключениях?
Если у вас русская редакция Виндоуз (что более реально, чем Визуальная
Студия 2010), то, наверняка, вы сталкивались с проблемой, когда все
сообщения об ошибках тоже локализированные. Не знаю, как вам, но для
меня это не всегда удобно.
Создадим простенький пример аля «Hello World!» и напишем следующий код:
try { throw new ArgumentNullException("param"); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine();
Запустим проект и получим следующее сообщение:
Значение не может быть неопределенным. Имя параметра: param
Для того, чтобы сообщение стало английским, необходимо добавить
следующую строчку перед try:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(«en-US»);
После
этого вуаля:
Value cannot be null. Parameter name: param
Здесь важно отметить, что часто вместо CurrentUICulture используют
свойство CurrentCulture — в этом случае ничего не изменится и сообщение
по прежнему будет локализированное. Причина в том, что CurrentCulture
влияет на настройки времени, конвертацию валют, форматирование и
сравнение строк и никаким образом не влияет на локализацию сообщений.
Но есть еще одно решение…
Finderr
Сайт: http://finderr.net/
Этот сайт создан для тех, кто хочет получить английский вариант ошибок и
не хочет играться с потоками и культурами.
Вбиваем наше локализированное сообщение в строку поиска и получаем
дословный перевод:
.NET Framework error in Русский (Russian):
Значение не может быть неопределенным.
English translation: Value cannot be null.
В данный момент есть сообщения в категориях MS SQL Server, .NET
Framework, Windows.
Тут еще нужно упомянуть качаем
аддоны.
Немножко фана
А еще можно писать локализированный
код (причем начиная с ранних версий Visual Studio и .NET Framework).
Вот такие хиты может создавать каждый (но не вздумайте
такое посылать своему заказчику!!!):
class Консолька { public static void НапишиВЧерненькомОкошке(string ЧтоПисатьБудем){ Console.WriteLine(ЧтоПисатьБудем); } internal static void ХочуПередатьПривет(string эсемесочка) { Console.WriteLine(эсемесочка); } } static class Время { public static DateTime ПрямоСейчас = DateTime.Now; public static DateTime ПрибавитьМинуты(this DateTime дата, int минут) { return дата.AddMinutes(минут); } } class Блондинка { private DateTime ВремяКогдаНачалаПлакать { get; set; } public bool Дура { get; set; } internal void ГромкоПлачет() { // всем пофиг } internal void УронилаМячВРеку() { ВремяКогдаНачалаПлакать = Время.ПрямоСейчас; } public bool НеПопустило(int минут) { return Время.ПрямоСейчас.CompareTo(ВремяКогдаНачалаПлакать.ПрибавитьМинуты(минут)) > 0; } }
Ну и собственно, в main:
var Таня = new Блондинка(); Таня.УронилаМячВРеку(); while (!Таня.НеПопустило(30)) { Таня.ГромкоПлачет(); if (!МячУтонет()) { Таня.Дура = true; break; } } Консолька.НапишиВЧерненькомОкошке("При отладке программы ни один мяч не пострадал :)"); Консолька.ХочуПередатьПривет("Чмоки - чмоки!");
Лично мне удобнее работать с англоязычным интерфейсом и сообщениями, но считаю, что локализация должна быть - пусть ее использует те, кому это действительно необходимо.
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |