Pull to refresh

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

Reading time4 min
Views4.1K
В связи с выходом локализированной версии Visual Studio 2010 и публикацией нескольких статей на хабре на эту тематику, возникло желание посмотреть лично, что же это за зверь такой — русская версия Visual Studio 2010! Поэтому я пошел на сайт Microsoft и загрузил пробную версию VS2010 и началось…

Сначала я думал, что начну с 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 делает правильно, что выпускает локализированные продукты.
Tags:
Hubs:
+2
Comments9

Articles