Мультиязычное приложение на C# Windows Forms - Часть 2

06:02:2013 Рі.

Продолжение статьи про организацию мультиязычного приложения в C#. В прошлой части мы выполнили локализацию формы, которую создали. Теперь нужно воспользоваться этим функционалом и получить возможность менять язык приложения.

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

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

 

  При нажатии на кнопку языка, согласно логике, должно производиться переключение языка интерфейса. В данной части будет рассмотрен примитивный пример изменения языка интерфейса. Более сложный пример, учитывающий централизированное хранение языковых настроек в программе, позволяющих гибко добавлять или просто изменять языки не только на одной форме, но и в рамках всей программы в целом будет рассмотрен в третьей части. Если есть желание перейти к более реализации, эту часть можно или пропустить или прочитать и понять.

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

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

Ниже приведен код 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.CastToolStripItem>().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

Облако Тегов