Пошаговое руководство. Локализация форм Windows Forms

Обновлен: Ноябрь 2007

Система работы с проектами Visual Studio предоставляет значительную поддержку для локализации приложений, работающих с формами Windows Forms. Существуют два способа создания файлов ресурсов при помощи среды разработки Visual Studio.

  • Файлы ресурсов могут создаваться системой проектов для локализуемых элементов пользовательского интерфейса, таких как текст и изображения в форме. Затем файлы ресурсов будут встраиваться в сопутствующие сборки. Такие ресурсы называются ресурсами форм.

  • Добавление шаблона файла ресурсов и затем редактирование шаблона с помощью конструктора XML. Второй способ применяется для создания локализуемых строк в диалоговых окнах и сообщениях об ошибках. Затем необходимо написать код для доступа к этим ресурсам. Такие ресурсы называются ресурсами проекта.

  • В общем случае, ресурсы форм следует использовать для всех ресурсов, относящихся к форме в приложении Windows Forms. Ресурсы проекта следует использовать для всех строк и изображений, которые не основаны на форме, таких как сообщения об ошибках.

y99d1cd3.alert_note(ru-ru,VS.90).gifПримечание.

Важно придерживаться единообразия и для одного и того же свойства использовать либо ресурсы форм, либо ресурсы проекта. Многие свойства изображений, например свойство Image в PictureBox, позволяют выбрать изображение из ресурсов проекта или импортировать новое изображение как ресурс форм. Если попытаться задать изображение по умолчанию при помощи ресурса проекта, а языковые версии изображения – при помощи ресурсов форм, изображение по умолчанию никогда не будет отображаться.

Данное пошаговое руководство демонстрирует оба процесса в рамках одного проекта приложения Windows.

Также можно преобразовать текстовый файл в файл ресурсов. Дополнительные сведения см. в разделах Ресурсы в формате текстового файла и Генератор файлов ресурсов (Resgen.exe).

Автоматическая генерация файлов ресурсов средствами Visual Studio

  1. Создайте новое приложение Windows с именем "WindowsApplication1". Дополнительные сведения см. в разделе Практическое руководство. Создание проекта приложения Windows.

  2. В окне Свойства присвойте свойству Localizable формы значение true.

    Свойство Language уже имеет значение (По умолчанию).

  3. Перетащите элемент управления Button с вкладки Windows Forms Области элементов в форму и установите для него значение свойства Text равным Hello World.

  4. Для свойства Language формы задайте значение Немецкий (Германия).

  5. Задайте для свойства Text кнопки значение Hallo Welt.

  6. Для свойства Language формы задайте значение Французский (Франция).

  7. Задайте для свойства Text кнопки значение Bonjour le Monde. При необходимости можно изменить размер кнопки для вмещения более длинной строки.

  8. Сохраните результаты и постройте решение.

  9. Нажмите кнопку Показать все файлы в Обозревателе решений.

    Файл ресурса появится под Form1.cs или Form1.jsl. Form1.resx — это файл ресурсов для языка и региональных параметров по умолчанию, который будет встроен в основную сборку. Form1.de-DE.resx — это файл ресурсов для варианта немецкого языка, принятого в Германии. Form1.fr-FR.resx – это файл ресурсов для варианта французского языка, принятого во Франции.

    Кроме того, в списке появятся файлы с именами Form1.de.resx и Form1.fr.resx. Visual Studio автоматически создает эти файлы для обхода ограничения Visual SourceSafe, регулирующего добавление новых файлов в проект в ходе операции сохранения. Файлы RESX пусты и не содержат ресурсов.

  10. Нажмите клавишу F5 или выберите в меню Отладка команду Запуск.

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

    y99d1cd3.alert_note(ru-ru,VS.90).gifПримечание.

    Язык пользовательского интерфейса в Windows зависит от параметра CurrentUICulture. Если в данном экземпляре Windows установлен многоязыковой интерфейс (MUI), можно изменить язык интерфейса в панели управления. Дополнительные сведения см. на странице Многоязыковой пользовательский интерфейс Windows Server 2003, Windows XP и Windows 2000 в Интернете. Если MUI не установлен, можно изменить текущий язык и региональные параметры интерфейса программно, как описано ниже.

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

Настройка языка и региональных параметров интерфейса для просмотра определенных ресурсов

  1. В Редакторе кода добавьте следующий код в начало модуля, перед объявлением Form1:

    ' Visual Basic
    Imports System.Globalization
    Imports System.Threading
    
    // C#
    using System.Globalization;
    using System.Threading;
    
    // Visual J#
    import System.Globalization.*;
    import System.Threading.*;
    
  2. Добавьте следующий код. В Visual Basic он добавляется в функцию New, до вызова функции InitializeComponent. В Visual C# и Visual J# он добавляется в Form1, а также до вызова функции InitializeComponent.

    ' Visual Basic
    ' Sets the UI culture to French (France).
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr-FR")
    
    // C#
    // Sets the UI culture to French (France).
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
    
    // Visual J#
    // Sets the UI culture to French (France).
    System.Threading.Thread.get_CurrentThread().set_CurrentUICulture( new CultureInfo("fr-FR"));
    
  3. Сохраните результаты и постройте решение.

  4. Нажмите клавишу F5 или выберите в меню Отладка команду Запуск.

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

Добавление файлов ресурсов в проект вручную и их редактирование

  1. В меню Проект выберите команду Добавить новый элемент.

  2. В поле шаблонов выберите шаблон Файл ресурсов сборки. В поле Имя введите имя файла "WinFormStrings.resx". Файл "WinFormStrings.resx" будет содержать резервные ресурсы на английском языке. Обращение к этим ресурсам будет происходить каждый раз, когда приложение не сможет найти ресурсы, более соответствующие языку и региональным параметрам пользовательского интерфейса.

    Файл добавляется в проект в Обозревателе решений и автоматически открывается в конструкторе XML в представлении Данные.

  3. В области Таблицы данных выберите данные.

  4. В области Данные щелкните пустую строку, после чего введите strMessage в столбце имя и Hello World в столбце значение.

    Значения "type" и "mimetype" для строки указывать не нужно; они предусмотрены для объектов. Описатель типа содержит тип данных сохраняемого объекта. Описатель типа MIME задает базовый тип (base64) сохраняемой двоичной информации, если объект состоит из двоичных данных.

  5. В меню Файл выберите Сохранить WinFormStrings.resx.

  6. Выполните действия 1-5 еще два раза, чтобы создать новые файлы ресурсов с именами WinFormStrings.de-DE.resx и WinFormStrings.fr-FR.resx, со строками ресурсов, указанными в следующей таблице. Файл WinFormStrings.de-DE.resx будет содержать ресурсы, относящиеся к варианту немецкого языка, принятому в Германии. Файл WinFormStrings.fr-FR.resx будет содержать ресурсы, относящиеся к варианту французского языка, принятому во Франции.

    Имя файла ресурса

    Имя

    Значение

    WinFormStrings.de-DE.resx

    strMessage

    Hallo Welt

    WinFormStrings.fr-FR.resx

    strMessage

    Bonjour le Monde

Доступ к ресурсам, добавленным вручную

  1. В Редакторе кода импортируйте пространство имен System.Resources в начало модуля кода.

    ' Visual Basic
    Imports System.Resources
    
    // C#
    using System.Resources;
    
    // Visual J#
    import System.Resources.*;
    
  2. В режиме разработки дважды нажмите кнопку, чтобы отобразить код для обработчика соответствующего события Click, и добавьте следующий код. Конструктор ResourceManager имеет два аргумента. Первый — это корневое имя ресурсов, т. е. имя файла ресурсов без указания языка и региональных параметров, а также суффикса .resx. Вторым аргументом является основная сборка.

    В этом пошаговом руководстве пространства имен не объявляются, так что первый аргумент конструктора ResourceManager может принимать вид ProjectName.ResourceFileRootName. Однако в реальных приложениях обычно устанавливается свойство DefaultNamespace. В этом случае потребуется объявить диспетчер ресурсов с полным корневым именем файла ресурсов, включая пространство имен. Например, если имя пространства имен – MyCompany.MyApplication.MyComponent, первый аргумент конструктора ResourceManager может быть MyCompany.MyApplication.MyComponent.WinFormStrings.

    ' Visual Basic
    ' Declare a Resource Manager instance.
    Dim LocRM As New ResourceManager("WindowsApplication1.WinFormStrings", GetType(Form1).Assembly)
    ' Assign the string for the "strMessage" key to a message box.
    MessageBox.Show(LocRM.GetString("strMessage"))
    
    // C#
    // Declare a Resource Manager instance.
    ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",typeof(Form1).Assembly);
    // Assign the string for the "strMessage" key to a message box.
    MessageBox.Show(LocRM.GetString("strMessage"));
    
    // Visual J#
    // Declare a Resource Manager instance.
    ResourceManager LocRM = new ResourceManager("WindowsApplication1.WinFormStrings",
       System.Type. GetType("WindowsApplication1.Form1").get_Assembly());
    // Assign the string for the "strMessage" key to a message box.
    MessageBox.Show(LocRM.GetString("strMessage"));
    
    y99d1cd3.alert_note(ru-ru,VS.90).gifПримечание.

    По умолчанию регистр в объекте ResourceManager учитывается. Если требуется поиск без учета регистра, чтобы "TXTWELCOME" возвращал тот же ресурс, что и "txtWelcome", можно установить свойство диспетчера ресурсов IgnoreCase равным true. Однако по соображениям быстродействия лучше всего всегда указывать имена ресурсов в правильном сочетании прописных и строчных букв. Поиск ресурсов без учета регистра может вызвать снижение производительности.

  3. Выполните построение и запустите форму. Щелкните кнопку.

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

См. также

Задачи

Практическое руководство. Установка значений Culture и UICulture для глобализации форм Windows Forms