Лекция № 14

Тема: «Создание программ с интерфейсом на разных языках»

 

План

1. Подготовка формы к переводу

2. Работа с библиотекой TsiLang

3. Переключение языка интерфейса

 

1. Интернационализация форм и сообщений

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

Существует множество программных решений для перевода интерфейса программ на разные языки. Мы рассмотрим одно из них – библиотеку TsiLang.

 Все текстовые надписи на компонентах и формах, все тексты всплывающих подсказок и т.п. доступны для перевода автоматически.

Что касается перевода сообщений в диалогах, то такие диалоги нужно немного видоизменить: все текстовые константы помещать в функцию Pchar (‘текст’).

Например: вместо оператора

 

Application.MessageBox('Выйти из программы?','Выход',mb_ok)

 

нужно писать

 

Application.MessageBox(pchar('Выйти из программы?'), pchar('Выход'),mb_ok)

 

 

2. Работа с библиотекой TsiLang

Данная библиотека содержит набор компонентов для выполнения перевода всех компонентов программы. Устанавливается библиотека с помощью стандартного инсталлятора Windows. После установки в среде Delphi появятся две новых закладки: siComponents с набором основных компонентов и siDialogs с набором компонентов для перевода стандартных диалоговых окон Windows (Открыть, Сохранить как…, Шрифт, Цвет и т.п.). Все компоненты являются невидимыми при работе программы.

 

Перевод формы

Пусть у Вас уже есть форма с нужными компонентами, которые нужно перевести.

Нанесите на форму компонент siLang (siComponents). В свойстве LangNames введите названия языков перевода. Можно вводить произвольные названия, но только латинскими символами. Эти названия будут отображаться только в окне ввода перевода.

Двойным щелчком на компоненте siLang откройте окно Translation Editor.

 

 

 

В левой части окна отображаются группы текстовых элементов, которые можно перевести:

Captions – все заголовки элементов:

Hints – все тексты всплывающих подсказок;

DisplayLabels – заголовки колонок сеток;

Fonts – имена шрифтов, которые будут использоваться при выборе нужного языка;

MultiLines – перевод многострочных элементов (обычных списков и раскрывающихся списков);

Dialogs – перевод надписей в диалоговых окнах;

Strings – перевод текстовых констант в диалоговых окнах и т.п.

 

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

После окончания перевода закройте окно Translation Editor и подтвердите сохранение изменений.

Если после выполнения перевода на форме появятся новые компоненты, то для их перевода достаточно двойным щелчком открыть компонент siLang. Все данные о новых компонентах автоматически появятся в окне ввода перевода.

 

Перевод текстовых констант

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

Для добавления констант в окно перевода нужно выполнить ряд действий:

Двойным щелчком откройте компонент siLang, в левой части окна выберите группу Strings и переведите все тексты на нужны языки.

 

Если после выполнения перевода в коде появятся новые диалоги с новыми текстовыми сообщениями, то повторите указанные выше операции повторно и переведите новые строки.

 

Перевод диалогов

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

 В этом случае нужно использовать аналогичные диалоги со вкладки siDialogs. После добавления любого диалога в окне перевода  (открывается двойным щелчком на компоненте siLang) в группе Dialogs появятся все надписи этого диалога, которые можно перевести.

 

3. Переключение языка интерфейса

После того как весь перевод выполнен включить нужный язык можно с помощью команды:

 

siLang1.ActiveLanguage:=n;

 

где n – порядковый номер нужного языка в свойстве LangNames компонента siLang. При этом нумерация начинается с 1.

 

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

Для кнопки русского языка напишем код:

 

siLang1.ActiveLanguage:=1;

 

Для кнопки украинского языка напишем код:

 

siLang1.ActiveLanguage:=2;

 

Для кнопки английского языка напишем код:

 

siLang1.ActiveLanguage:=3;

 

Чаще всего язык выбирают из выпадающего списка. Пусть имеется компонент ComboBox1 со строками: русский, украинский, английский. При выборе нужной строки должен активироваться соответсвующий язык. Для компонента в событии OnChange напишем код:

 

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

    //к ComboBox1.ItemIndex прибавляем 1,

//потому что нумерация строк в списке начинается с 0

siLang1.ActiveLanguage:=ComboBox1.ItemIndex+1;

end;

 

Переключение языка на нескольких формах.

Пусть имеются две формы. Каждая форма имеет свой компонент siLang, с помощью которого эта форма переведена.

Выбор активного языка выполняется на первой форме с помощью списка ComboBox (код для компонента мы написали выше).

На этой же форме есть кнопка, которая открывает вторую форму, которая также должна отображаться на выбранном языке. Для кнопки напишем код:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

    //открываем вторую форму Form2

form2.Show;

//на второй форме устанавливаем такой же номер активного языка

form2.siLang1.ActiveLanguage:=siLang1.ActiveLanguage;

end;

 

Замечание: следите за тем, чтобы порядковые номера языков на всех формах были одинаковыми.

 

Вопросы для самоконтроля

 

1. Как правильно записывают текстовые константы, которые планируется переводить на другие языки с помощью siLang?

2. Приведите пример записи произвольной команды выдачи окна диалога для перевода текстовых констант?

3. Опишите принцип перевода стандартных надписей на форме с помощью siLang

4. Опишите принцип перевода текстовых констант с помощью siLang

5. Как подключить нужный язык перевода при использовании siLang?

6. Приведите код включения языка перевода с помощью списка ComboBox.