В связи с выходом локализированной версии Visual Studio 2010 и публикацией нескольких статей на хабре на эту тематику, возникло желание посмотреть лично, что же это за зверь такой — русская версия Visual Studio 2010! Поэтому я пошел на сайт Microsoft и загрузил пробную версию VS2010 и началось…
Сначала я думал, что начну с 10 причин, почему локализированная версия — это кул, но на первом пункте застопорился… Но вопрос локализации все таки достаточно интересен — поэтому статью решил все таки выкатить — может кому-то пригодится эта информация.
Если у вас русская редакция Виндоуз (что более реально, чем Визуальная Студия 2010), то, наверняка, вы сталкивались с проблемой, когда все сообщения об ошибках тоже локализированные. Не знаю, как вам, но для меня это не всегда удобно.
Создадим простенький пример аля «Hello World!» и напишем следующий код:
Значение не может быть неопределенным. Имя параметра: param
Для того, чтобы сообщение стало английским, необходимо добавить следующую строчку перед try:
Value cannot be null. Parameter name: param
Здесь важно отметить, что часто вместо CurrentUICulture используют свойство CurrentCulture — в этом случае ничего не изменится и сообщение по прежнему будет локализированное. Причина в том, что CurrentCulture влияет на настройки времени, конвертацию валют, форматирование и сравнение строк и никаким образом не влияет на локализацию сообщений.
Но есть еще одно решение…
Сайт: http://finderr.net/
Этот сайт создан для тех, кто хочет получить английский вариант ошибок и не хочет играться с потоками и культурами.
Вбиваем наше локализированное сообщение в строку поиска и получаем дословный перевод:
.NET Framework error in Русский (Russian):
Значение не может быть неопределенным.
English translation: Value cannot be null.
В данный момент есть сообщения в категориях MS SQL Server, .NET Framework, Windows.
Тут еще нужно упомянуть «Языковой пакет полного выпуска Microsoft .NET Framework 4 (x86/x64)» — языковой пакет платформы Microsoft .NET Framework 4 содержит переведенный текст, например сообщения об ошибках, для каждого языка.
Visual Studio 2010 Language Packs — это бесплатные аддоны, которые позволяют пользователям переключать язык интерфейса с английского на выбранный вами. Эти аддоны были созданы академическими сообществами. На данный момент есть такие языки: чешский, польский, турецкий. Не знаю, чем вызвана такая специфическая география, но если вы хотите разрабатывать в турецкой IDE — качаем аддоны.
Но больше всего мне понравилась возможность написания локализированного кода — я чуть футбол не пропустил, пока игрался (но не вздумайте такое посылать своему заказчику!!!).
Вот такие хиты может создавать каждый:
Сначала я думал, что начну с 10 причин, почему локализированная версия — это кул, но на первом пункте застопорился… Но вопрос локализации все таки достаточно интересен — поэтому статью решил все таки выкатить — может кому-то пригодится эта информация.
Как побороть локализированные сообщения при исключениях?
Если у вас русская редакция Виндоуз (что более реально, чем Визуальная Студия 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.
Тут еще нужно упомянуть «Языковой пакет полного выпуска Microsoft .NET Framework 4 (x86/x64)» — языковой пакет платформы Microsoft .NET Framework 4 содержит переведенный текст, например сообщения об ошибках, для каждого языка.
Visual Studio 2010 Language Packs
Visual Studio 2010 Language Packs — это бесплатные аддоны, которые позволяют пользователям переключать язык интерфейса с английского на выбранный вами. Эти аддоны были созданы академическими сообществами. На данный момент есть такие языки: чешский, польский, турецкий. Не знаю, чем вызвана такая специфическая география, но если вы хотите разрабатывать в турецкой IDE — качаем аддоны.
Немножко фана
Но больше всего мне понравилась возможность написания локализированного кода — я чуть футбол не пропустил, пока игрался (но не вздумайте такое посылать своему заказчику!!!).
Вот такие хиты может создавать каждый:
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;
}
}
* This source code was highlighted with Source Code Highlighter.
Ну и собственно, в main:var Таня = new Блондинка();
Таня.УронилаМячВРеку();
while (!Таня.НеПопустило(30))
{
Таня.ГромкоПлачет();
if (!МячУтонет()) {
Таня.Дура = true;
break;
}
}
Консолька.НапишиВЧерненькомОкошке("При отладке программы ни один мяч не пострадал :)");
Консолька.ХочуПередатьПривет("Чмоки - чмоки!");
* This source code was highlighted with Source Code Highlighter.
Установить Визуальную Студию 2010 Максимальную на свою машину мне так и не удалось — не хватило места на винчестере. Но тем не менее, считаю, что локализированная версия, как минимум, не лишняя — есть много людей, которые ее используют по разным причинам и думаю, Microsoft делает правильно, что выпускает локализированные продукты.