ћульти€зычное приложение на 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);
      }
}

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

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

 

 омментарии  

 
0#5ElvaXti2017-11-16 14:40Hey guys!!!
designs and builds specialty lines of lead oxide production equipment, material handling systems, battery related process machinery, parts, and accessories for the battery, pigment, glass, and chemical industries. http://techbasys.com offers technical application and engineering services to help the customer acheive maximum benefit from their equipment and manufacturing processes.
÷итировать
 
 
0#4ElvaOxm2017-11-10 19:28Hey guys!!!
designs and builds specialty lines of lead oxide production equipment, material handling systems, battery related process machinery, parts, and accessories for the battery, pigment, glass, and chemical industries. http://techbasys.com offers technical application and engineering services to help the customer acheive maximum benefit from their equipment and manufacturing processes.
÷итировать
 
 
0#3ElvaDqb2017-11-03 17:02Hey guys!!!
designs and builds specialty lines of lead oxide production equipment, material handling systems, battery related process machinery, parts, and accessories for the battery, pigment, glass, and chemical industries. http://techbasys.com offers technical application and engineering services to help the customer acheive maximum benefit from their equipment and manufacturing processes.
÷итировать
 
 
+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

ќблако “егов