Должен состоять только из латинских букв (A-Z a-z) , цифр (0-9) и символа '_'. Длина никнейма не должна быть менее 3 и больше 15 символов. Ваша страница будет доступна по адресу: http://free-lancing.ru/profile/логин
E-mail
Скрыть e-mail
Используется для сервисных уведомлений, не публикуется на страницах портала. Пожалуйста, используйте существующий адрес электронной почты, к которому Вы имеете доступ, так как для активации аккаунта Вы должны будете пройти по ссылке, которая будет послана на этот адрес.
Программирование → Локализация интерфейса в приложениях Windows
Размещена: 21.05.2009 12:08
Автор: Виталий Рычков (WinMain)
Довольно часто возникает необходимость в разработке пользовательского интерфейса приложения с поддержкой разных национальных языков. Каждый производитель «многонационального» программного продукта по-своему решает эту задачу. Например, корпорация Microsoft просто выпускает отдельную локальную версию продукта для каждого поддерживаемого языка. Другие производители обычно в состав программного продукта включают набор файлов, содержащих текстовые сообщения для разных языков, а пользователь потом сам выбирает для работы приложения тот язык, который ему больше подходит.
Я могу предложить свой оригинальный вариант создания приложения с поддержкой многоязычного интерфейса без дополнительного набора отдельных файлов под каждый язык. Данное решение реально применяется в крупном проекте, в котором присутствует около сотни разных визуальных форм в виде диалоговых панелей, а так же меню и стандартные окна сообщений.
По какому принципу работает моё решение?
Само приложение разрабатывается под какой-то один конкретный язык, например английский. Разработанная мной библиотека функций содержит специальный код, который при запуске программы с определённым параметром в командной строке, перебирает все ресурсы приложения, содержащие текст, и записывает текстовые строки в один INI-файл с указанием идентификатора ресурса для каждой строки. Далее этот INI-файл редактируется, и текст каждой строки заменяется соответствующим текстом в переводе на другой язык. Далее приложение запускается и считывает из INI-файла текстовые строки для каждого элемента интерфейса. Таким образом, оригинальный текст элементов интерфейса меняется на тот текст, который записан в INI-файле.
Чтобы переключиться с одного языка на другой, необходимо через меню вызвать соответствующее окно диалога и выбрать нужный язык из числа представленных в списке.
При этом в INI-файле одновременно может содержаться несколько наборов текстовых строк для разных языков, а в меню главного окна программы добавляется пункт, который позволяет пользователю переключиться на один из нескольких языков, представленных в INI-файле. Так выглядит описание текстовых ресурсов в INI-файле для английского языка: [ENG:IDR_MAINFRAME] ID_FILE_NEW=&New Ctrl+N ID_FILE_OPEN=&Open... Ctrl+O ID_FILE_SAVE=&Save Ctrl+S ID_FILE_SAVE_AS=Save &As... ID_FILE_MRU_FILE1=Recent File $0:7=Localization ID_RESINI_CREATE=Create or Update ID_RESINI_ADDLANGUAGE=Add language... ID_RESINI_CHOICELANGUAGE=Select language... ID_APP_EXIT=E&xit ID_EDIT_UNDO=&Undo Ctrl+Z ID_EDIT_CUT=Cu&t Ctrl+X ID_EDIT_COPY=&Copy Ctrl+C ID_EDIT_PASTE=&Paste Ctrl+V ID_VIEW_TOOLBAR=&Toolbar ID_VIEW_STATUS_BAR=&Status Bar ID_APP_ABOUT=&About Localize... MAINMENU=&File;&Edit;&View;&Help $2:3=SubMenu $2:3:0=One ID_ONE_ITEM1=Item 1 ID_ONE_ITEM2=Item 2 ID_ONE_ITEM3=Item 3 ID_SUBMENU_TWO=Two ID_SUBMENU_THREE=Three $2:3:1=Two ID_TWO_ITEM4=Item 4 ID_TWO_ITEM5=Item 5 ID_TWO_ITEM6=Item 6 $2:3:2=Three ID_THREE_ITEM7=Item 7 ID_THREE_ITEM8=Item 8 ID_THREE_ITEM9=Item 9
[ENG:IDD_ABOUTBOX] CAPTION=About Localize IDC_STATIC_VERSION=Localize Version 1.0 IDC_STATIC_COPYRIGHT=Copyright (C) 2008 IDOK=OK
[ENG:IDD_LOCALIZE_FORM] IDC_STATIC_TODO=TODO: Place form controls on thisdialog. IDC_BUTTON_FIRST=First IDC_BUTTON_SECOND=Second IDC_STATIC_GROUP=Edit group IDC_COPYRIGHT=Copyright (c) Vitaliy Rychkov IDC_BITMAP_BUTTON=IDB_BITMAP_EN
А это описание тех же ресурсов, но для русского языка: [RUS:IDR_MAINFRAME] ID_FILE_NEW=&Создать Ctrl+N ID_FILE_OPEN=&Открыть... Ctrl+O ID_FILE_SAVE=&Сохранить Ctrl+S ID_FILE_SAVE_AS=Сохранить &как... ID_FILE_MRU_FILE1=Recent File $0:7=INI-файл ресурсов ID_RESINI_CREATE=Создать или обновить ID_RESINI_ADDLANGUAGE=Добавить локализацию... ID_RESINI_CHOICELANGUAGE=Выбор языка... ID_APP_EXIT=В&ыход ID_EDIT_UNDO=&Вставить Ctrl+Z ID_EDIT_CUT=Вы&резать Ctrl+X ID_EDIT_COPY=&Копирование Ctrl+C ID_EDIT_PASTE=&Вставка Ctrl+V ID_VIEW_TOOLBAR=&Панель инструментов ID_VIEW_STATUS_BAR=&Строка состояния ID_APP_ABOUT=&О программе... MAINMENU=&Файл;&Правка;&Вид;&Справка
[RUS:IDD_ABOUTBOX] CAPTION=О программе IDC_STATIC_VERSION=Локализация версия 1.0 IDC_STATIC_COPYRIGHT=Разработка (C) 2008 IDOK=OK
[RUS:IDD_LOCALIZE_FORM] IDC_STATIC_TODO=СЮДА: Разместить элементы формы на этом диалоге. IDC_BUTTON_FIRST=Первая IDC_BUTTON_SECOND=Вторая IDC_STATIC_GROUP=Группа редактирования IDC_COPYRIGHT=Автор (c) Виталий Рычков IDC_BITMAP_BUTTON=IDB_BITMAP_RU
Если данный INI-файл отсутствует в каталоге запуска программы, то программа использует тот интерфейс, который находится у неё в ресурсах, т.е. выглядит таким образом, как она была создана в оригинале.
Среди функций библиотеки по локализации приложения имеется функция загрузки строки из INI-файла с учётом выбранного языка. Тогда текст сообщения в окне диалога будет представлен на том языке, который выбран текущим.
Имеется так же возможность добавить в INI-файл другой язык (локализацию) из списка, представленного операционной системой Windows:
Для страниц свойств есть специальная функция, которая меняет текст закладок с учётом выбранного языка.
По интересующим вопросам обращайтей по адресу: rychkov@inbox.ru