StringTable - локализация приложений Delphi
Ресурсы StringTable
В этой статье Вы научитесь проектировать приложение, которое поддерживает большое количество строковых ресурсов и может быть переведено на другой язык с минимальными усилиями. Сохранив локализованные заголовки меток, кнопок и других управлений в ресурсах StringTable мы получаем много преимуществ:
- Символьные строки, содержащиеся в StringTable не занимают память, пока они не будут определенно загружены приложением.
- При использовании ресурсов StringTable при создании многоязычных приложений, добавления нового языка является хорошим тоном, так как StringTable могут быть легко отредактированы. Более того, если StringTable хранится в ресурсном DLL, Вам даже не нужно будет повторно компилировать приложение.
Как и любой другой тип ресурсов, ресурсы StringTable компилируются в .RES файл, который прилагается к EXE файлу Вашего приложения во время компиляции.
Создание StringTable ресурсов
Для создания ресурса StringTable приложения для двух языков:
1. Создайте текстовый .RC файл, который содержит Ваши строковые ресурсы в директории Вашего проекта. Назовите файл StringTableLanguage.rc. Вообще-то Вы можете назвать его по-любому, главное, чтобы расширение файла было .RC
StringTableLanguage.rc STRINGTABLE { 1000, "English" 1001, "Display selected" 1002, "Yes" 1003, "No" 1004, "Maybe" 2000, "Русский" 2001, "Выбор отображения" 2002, "Да" 2003, "Нет" 2004, "Возможно" }
2. Компилируйте этот RC файл в RES файл при помощи компилятора ресурсов BRCC32.
Обратите внимание: Файл StringTableLanguage.rc может содержать любое дополнительное количество ресурсов другого типа (иконки, изображения, данные и т.д.)
Таблица строк начинается с ключевого слова StringTable. Строки заключены в фигурные скобки. Каждой строке присвоен числовой идентификатор. Символьные строки заключены в кавычки. Если Вы хотите использовать нестандартный символ, вставьте обратный слеш и далее номер символа, который Вы хотите вставить. Единственное ограничение: когда Вам нужно будет вставить обратный слеш, Вам необходимо будет вставить двойной обратный слеш.
Например:
1, "A two\012line string" 2, "c:\\Borland\\Delphi"
Использование таблиц строк
Чтобы загрузить определенную строку из StringTable нужно использовать функцию LoadString. Один из параметров в вызове LoadString - индекс строки в таблице строк.
Связывание в приложении
Как и любой .RES файл, Вы можете связать файл ресурсов с Вашим приложением просто добавив следующую инструкцию в код Вашего приложения (после implementation).
{$R StringTableLanguage.RES}
Как только файл ресурсов будет связан с Вашей программой, Вы сможете загружать ресурс из любого модуля, даже если Вы определили директиву $R в другум модуле.
LoadString
Вот пример, как использовать функцию LoadString для загрузки строки из StringTable:
function GetString(const Index: integer) : string; var buffer : array[0..255] of char; ls : integer; begin Result := ''; ls := LoadString(hInstance, Index, buffer, sizeof(buffer)); if ls <> 0 then Result := buffer; end;
Комментарии