Visual Studio: Игры с локализацией

пятница, 9 июля 2010, Александр Краковецкий

В связи с выходом локализированной версии 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 Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии