Фрилансеров: 4472 Работодателей: 479 Заказов: 485
Авторизация Нет аккаунта? Регистрация
Удаленная работа, работа на дому, фриланс
 
Поиск работы / Работа по выходным
offline ContentUM / 23.12 (19:05)
Дизайн / Дизайнер для удаленной работы
offline ContentUM / 14.12 (18:26)
Поиск работы / Копирайтер
offline ContentUM / 25.11 (17:16)
Продвижение сайтов / Использование тега title
offline ContentUM / 21.11 (12:05)
Поиск работы / Перспективные направления поиска работы
offline ContentUM / 11.11 (16:48)
Поиск работы / Командная работа фрилансеров
offline ContentUM / 03.11 (15:44)
Продвижение сайтов / SEO копирайтинг – волшебство для сайтов
offline ContentUM / 26.10 (14:03)
Поиск работы / Начинающему фрилансеру посвящается
offline ContentUM / 20.10 (12:13)
Поиск работы / Осторожно! Тестовые задания для фрилансера
offline ContentUM / 19.10 (14:31)
Поиск работы / Творческие люди
offline Producer / 31.07 (20:12)

Программирование → Локализация интерфейса в приложениях 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
Комментариев нет
Обсуждение:
Оставлять комментарии могут только зарегистрированные пользователи