ћульти€зычное приложение на C# Windows Forms - „асть 2

06:02:2013 –≥.

ѕродолжение статьи про организацию мульти€зычного приложени€ в C#. ¬ прошлой части мы выполнили локализацию формы, которую создали. “еперь нужно воспользоватьс€ этим функционалом и получить возможность мен€ть €зык приложени€.

ѕредыдуща€ часть мануала про организацию файлов ресурсов с помощью VisualStudio, редактиру€ форму с установленным свойством Language читайте здесь.

ћожно внизу формы реализовать StatusStrip, на котором будет реализована кнопка переключени€ €зыка формы. ѕример показан ниже:

 

localization_6.jpg

  ѕри нажатии на кнопку €зыка, согласно логике, должно производитьс€ переключение €зыка интерфейса. ¬ данной части будет рассмотрен примитивный пример изменени€ €зыка интерфейса. Ѕолее сложный пример, учитывающий централизированное хранение €зыковых настроек в программе, позвол€ющих гибко добавл€ть или просто измен€ть €зыки не только на одной форме, но и в рамках всей программы в целом будет рассмотрен в третьей части. ≈сли есть желание перейти к более реализации, эту часть можно или пропустить или прочитать и пон€ть.

 ¬ простом примере добавим по обработчику событий на нажатие на кнопку переключени€ €зыка дл€ каждого €зыка в отдельности (TSMI в названии - ToolStripMenuItem): 

localization_7.jpeg

ѕолный вид переключател€ на форме показан выше.

Ќиже приведен код C# с обработкой нажати€ каждой из кнопок. ¬ коде, примененному ниже используютс€ следующие правила именовани€ контролов.  онтролы называютс€, использу€ суффикс и им€. —уффикс отображает тип контрола. “ипы контролов и их обозначени€, которые будут используютс€ в коде указаны ниже:

  • TSMI - ToolStripMenuItem
  • SS - StatusStrip
  • TSDD - ToolStripDropDownButton

private void TSMI_English_Click(object sender, EventArgs e)
{
     ChangeFormLanguage("en-US");  
}  

private void TSMI_Russian_Click(object sender, EventArgs e)
{
     ChangeFormLanguage("ru-RU");  

ѕри этом функци€ ChangeLanguage может выгл€деть следующим образом:

private void ChangeLanguage(string newLanguageString)
{
    var resources = newComponentResourceManager(typeof(StartWindow));

    CultureInfo newCultureInfo = newCultureInfo(newLanguageString);

    //ѕримен€ем дл€ каждого контрола на форме новую культуру
    foreach
(Control c inthis.Controls)
    {
       resources.ApplyResources(c, c.Name, newCultureInfo);
    }
 

    //ќтдельно мен€ем дл€ тайтла самой формы локализацию
    resources.ApplyResources(this, "$this", newCultureInfo);

    //ƒл€ элементов статус стрипа устанавливаем также установки локализации
    foreach (var item in SS_Status.Items.Cast<ToolStripItem>().Where(item => (item isToolStripStatusLabel) != false))
    {
        resources.ApplyResources(item, item.Name, newCultureInfo);
    }

    //”станавливаем текст на кнопке, котора€ была изображена на скриншоте раньше название локализации
    TSDD_Language.Text = newCultureInfo.NativeName;

    //”станавливаем флаг на активной локализации (см. функцию ниже)
    SetCurrenLanguageButtonChecked();
}

private void SetCurrenLanguageButtonChecked()
{
      foreach (ToolStripMenuItem languageButton in TSDD_Language.DropDownItems)
      {
            //≈сли надпись на нашем активном отображаемом €зыке в ToolStripDropDownButton-е,
            //который был установлен в актуальный перед вызовом функции совпадает с
            //надписью в ToolStripStatusLabel (всплывающие элементы выбора €зыка)
            //которые относ€тс€ к данному  ToolStripDropDownButton-у - отмечаем его Checked

            languageButton.Checked = (languageButton.Text == TSDD_Language.Text);
      }
}

“аким образом, мы обрабатываем нажатие на кнопку изменени€ €зыка, примен€€ вновь выбранный €зык "на лету", чита€ данные из файлов ресурсов локализации, создание которых рассматривалось в первой части данного мануала. 

 —ледующа€ часть мануала, котора€ рассматривает более сложный пример архитектуры, котора€ может заботитьс€ о хранении, изменении и использовании централизованой локализации дл€ всей программы в целом, а не только дл€ одного окна, доступна здесь.

 

 омментарии  

 
+1#2јлексей2013-06-10 18:21SS_Status это статус стрип, который отображен на первом скриншоте.

ƒл€ пользователей этот элемент предназначен дл€ визуализации текущих настроек €зыка приложени€. » с его помщью можно установить (изменить) текущий €зык нашего приложени€ на C#
÷итировать
 
 
0#1ƒарь€2013-05-29 14:32SS_Status подскажите, откуда это беретс€? не могу пон€ть что это вообще тако?÷итировать
 

ƒобавить комментарий


«ащитный код
ќбновить

« ѕриложение с поддержкой локализации на C# Windows Forms - часть 3 ћного€зычное приложение на C# Windows Forms - часть 1 »

‘отоальбом

fotic.jpg

ќблако “егов