Фрилансеров: 3217 Работодателей: 297 Заказов: 277
 
Авторизация Нет аккаунта? Создать
Удаленная работа, работа на дому, фриланс
Выберите язык: ru en
Поиск работы / Что влияет на получение высокооплачиваемой работы?
offline admin / 27.08 (02:24)
Поиск работы / Работа на дому: за и против
offline admin / 31.08 (20:58)
Поиск работы / Удалённая работа.
offline admin / 31.08 (21:05)
Продвижение сайтов / Самое современное искусство - копирайтинг!
offline admin / 31.08 (21:18)
Поиск работы / Заработок в интернет – сказка или реальность?
offline olika / 19.10 (20:25)
Программирование / Структуры с меняющимися размерами данных
offline admin / 21.05 (11:38)
Программирование / Ввод чисел в консольных приложениях
offline admin / 21.05 (11:52)
Программирование / Локализация интерфейса в приложениях Windows
offline admin / 21.05 (12:08)
Базы данных / Перила из нержавейки (495) 772-49-08
offline metallnmru / 27.12 (22:59)
Базы данных / Перила из нержавейки (495) 772-49-08
offline metallnmru / 27.12 (23:06)
Программирование → Локализация интерфейса в приложениях 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=&Файл;&Правка;&Вид;&Справка

$2:3=Подменю
$2:3:0=Один
ID_ONE_ITEM1=Позиция 1
ID_ONE_ITEM2=Позиция 2
ID_ONE_ITEM3=Позиция 3
$2:3:1=Два
ID_TWO_ITEM4=Позиция 4
ID_TWO_ITEM5=Позиция 5
ID_TWO_ITEM6=Позиция 6
$2:3:2=Три
ID_THREE_ITEM7=Позиция 7
ID_THREE_ITEM8=Позиция 8
ID_THREE_ITEM9=Позиция 9

[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

Автор: offlineadmin
Комментариев нет
Обсуждение:
Оставлять комментарии могут только зарегистрированные пользователи