Проблема состоит из двух частей:
1) проблема передачи исходных файлов программисту команды, у которого локализация (н.п. английская вместо русской) ОС отличается от ОС у других программистов;
2) проблема отображения кириллицы при работе программы на ОС (операционная система) разной локализации.
Решение пункта 1
Для правильной передачи dfm-файлов между разработчиками достаточно вместо кодов в dfm вписать простой текст.
Это довольно трудоемкий процесс, кроме того, при внесении новых компонент текст в них будет оформлен кодами.
Такой функционал присутствует в программе локализации, и его можно использовать даже без настройки программы локализации, а просто бросить на специальный ярлык свой dfm-файл, и коды в нем будет преобразованы в текст.
Решение пункта 2
В Delphi7(6) есть проблема с отображением текста форм в зависимости от кодировки системы, заключающаяся в появлении знаков вопросов, если кодировки не совпадают - delphi, начинает считать юникод как 1251 или наоборот.
Основным решением, которое я встречал, является использование специальных unicode-компонентов, но это будет серьезной переработкой форм.
Для больших проектов это мало подходит. Особенно, когда нужно старый готовый проект локализовать для иностранных пользователей и при этом "ничего не трогать" в коде проекта.
Предлагаю следующее решение этой проблемы: автоматическое формирование кода вызова всех элементов формы с заполнением их теми же текстовыми значениями, но уже из кода.
Данная программа локализации позволяет автоматически формировать такой код, для этого необходимо просто подключить внешний файл в свой файл директивой $I.
Таким образом, для runtime - генерируется спец.файл вызова всех элементов форм и переназначение им текста. От программиста требуется только указать обращение
к этому файлу из функции инициализации формы через {$I namefile.pas}
Пример формы и генерируемого к нему файла:
(sender as TForm1).Caption := 'Прием заявок';
(sender as TForm1).Label1.Caption := 'Фамилия:';
(sender as TForm1).Label2.Caption := 'Имя:';
(sender as TForm1).Label3.Caption := 'Отчество:';
(sender as TForm1).Label4.Caption := 'Контактный телефон:';
(sender as TForm1).Label5.Caption := 'Заявка:';
(sender as TForm1).Label6.Caption := 'Важность заявки:';
(sender as TForm1).Edit1.Text := 'Пример фамилии';
(sender as TForm1).Button1.Caption := 'Сохранить';
(sender as TForm1).memo1.Lines[0] := 'Текстовая линия 1';
(sender as TForm1).memo1.Lines[1] := 'Текстовая линия 2';
(sender as TForm1).Button2.Caption := 'Отменить';
(sender as TForm1).ComboBox1.Text := 'Обычная';
(sender as TForm1).ComboBox1.Items[0] := 'Низкая';
(sender as TForm1).ComboBox1.Items[1] := 'Обычная';
(sender as TForm1).ComboBox1.Items[2] := 'Высокая';
(sender as TForm1).N1.Caption := 'Действие';
(sender as TForm1).N3.Caption := 'Сохранить';
(sender as TForm1).N4.Caption := 'Удалить';
(sender as TForm1).N5.Caption := 'Выход';
(sender as TForm1).ComboBox1.ItemIndex := 1;
Прошу обратить внимание на последнюю строку кода.
Дело в том, что при переназначении текстовых значений "слетают" индексы для таких (combobox и т.п.) компонентов, поэтому необходимо им назначить ранее указанный индекс.
1) проблема передачи исходных файлов программисту команды, у которого локализация (н.п. английская вместо русской) ОС отличается от ОС у других программистов;
2) проблема отображения кириллицы при работе программы на ОС (операционная система) разной локализации.
Решение пункта 1
Для правильной передачи dfm-файлов между разработчиками достаточно вместо кодов в dfm вписать простой текст.
Это довольно трудоемкий процесс, кроме того, при внесении новых компонент текст в них будет оформлен кодами.
Такой функционал присутствует в программе локализации, и его можно использовать даже без настройки программы локализации, а просто бросить на специальный ярлык свой dfm-файл, и коды в нем будет преобразованы в текст.
Решение пункта 2
В Delphi7(6) есть проблема с отображением текста форм в зависимости от кодировки системы, заключающаяся в появлении знаков вопросов, если кодировки не совпадают - delphi, начинает считать юникод как 1251 или наоборот.
Основным решением, которое я встречал, является использование специальных unicode-компонентов, но это будет серьезной переработкой форм.
Для больших проектов это мало подходит. Особенно, когда нужно старый готовый проект локализовать для иностранных пользователей и при этом "ничего не трогать" в коде проекта.
Предлагаю следующее решение этой проблемы: автоматическое формирование кода вызова всех элементов формы с заполнением их теми же текстовыми значениями, но уже из кода.
Данная программа локализации позволяет автоматически формировать такой код, для этого необходимо просто подключить внешний файл в свой файл директивой $I.
Таким образом, для runtime - генерируется спец.файл вызова всех элементов форм и переназначение им текста. От программиста требуется только указать обращение
к этому файлу из функции инициализации формы через {$I namefile.pas}
Пример формы и генерируемого к нему файла:
(sender as TForm1).Caption := 'Прием заявок';
(sender as TForm1).Label1.Caption := 'Фамилия:';
(sender as TForm1).Label2.Caption := 'Имя:';
(sender as TForm1).Label3.Caption := 'Отчество:';
(sender as TForm1).Label4.Caption := 'Контактный телефон:';
(sender as TForm1).Label5.Caption := 'Заявка:';
(sender as TForm1).Label6.Caption := 'Важность заявки:';
(sender as TForm1).Edit1.Text := 'Пример фамилии';
(sender as TForm1).Button1.Caption := 'Сохранить';
(sender as TForm1).memo1.Lines[0] := 'Текстовая линия 1';
(sender as TForm1).memo1.Lines[1] := 'Текстовая линия 2';
(sender as TForm1).Button2.Caption := 'Отменить';
(sender as TForm1).ComboBox1.Text := 'Обычная';
(sender as TForm1).ComboBox1.Items[0] := 'Низкая';
(sender as TForm1).ComboBox1.Items[1] := 'Обычная';
(sender as TForm1).ComboBox1.Items[2] := 'Высокая';
(sender as TForm1).N1.Caption := 'Действие';
(sender as TForm1).N3.Caption := 'Сохранить';
(sender as TForm1).N4.Caption := 'Удалить';
(sender as TForm1).N5.Caption := 'Выход';
(sender as TForm1).ComboBox1.ItemIndex := 1;
Прошу обратить внимание на последнюю строку кода.
Дело в том, что при переназначении текстовых значений "слетают" индексы для таких (combobox и т.п.) компонентов, поэтому необходимо им назначить ранее указанный индекс.
Комментариев нет:
Отправить комментарий