Правим исходники или стандартные сообщения на русском.

Статьи » Базы данных » Правим исходники или стандартные сообщения на русском.

А не случалось ли вам выводить для пользователя сообщения об ошибках? Кажется -что может проще? Правильно кажется. Только бывает возможностей для него ошибиться – море, а вы один. Например, заполняет он базу, полей много, и обязательных для заполнения среди них тоже много. И ведь он забудет че ниб заполнить. И захочет шоб прога сама ему подсказала, че именно он забыл.

Слава Борланду, он уже все написал за нас – если у необходимого объекта TField свойство Required = true, то при его незаполнении вылетает месага типа “Field ‘Bonus’ must have a value” – пожалуйста, дополняйте именно это поле и работайте дальше. И все бы ничего, но попадаются еще юзеры, которые вместо того, шоб выучить быстренько английский, звонят вам и давай: …а твоя программа выдала какую-то ошибку, диктую по буквам – эф – латинское, и – белорусское, е – русское и т.д. Неплохой вариант – выдать ему MessageBox(Handle, PChar('Не все поля заполнены'), PChar('Ошибка при заполнении'), 0) и пускай, нерадивый, пробежит еще разок глазками по форме. Недостаток этого подхода в том, что нужно писать кучу дополнительного кода (try, except, end, MessageBox с параметрами – уже больше 5 слов!!!), да для каждого датасета, да еще переделывая то, что уже давно написано. (В русифицированной Делфе, все это может быть на русском и выскакивает – не знаю, но что делать если вы как и я не доверяете русифицированным продуктам). Я решил так – раз уж Делфи поставляется с исходниками, почему бы не подправить их как надо и забыть про эти стандартные месаги по крайней мере до выхода нового релиза. Во первых надо найти где эти самые мессаги определены. Для выше рассмотренного примера надо найти директорию $(DELPHI)sourcevcl; и в DBConsts.pas исправить ресурс SFieldRequired с 'Field ''%s'' must have a value'; на на что ниб типа SFieldRequired = 'А ну ка заполни поле''%s'' чем-ниб подходящим’ (вместо '%s''вставляется название поля).

(Можно так изменить значения всех ресурсов, но среди них много тех, что появляются (или должны появляться) только в режиме разработки т.е. для вас и если вы разработали парочку другую проектов, то и так поймете, что они значат. А что ниб вроде SDeleteRecordQuestion = 'Delete record?' – подтверждение перед удалением строки заменить будет совсем не лишним.) После этого модуль DBConsts компилируем (например подключив его к любому левому приложению) и полученным DBConst.dcu заменяем такой же в директории $(DELPHI)lib
Вот почти и все. Месага – уже понятна и в любых ваших дальнейших проектах не нужно писать ни строчки лишнего кода. Название поля в ней вставляется из свойства DisplayLabel этого самого поля, так что его тоже следует набрать на русском (немецком, испанском). Напомню только – чтобы сообщение вываливалось до того. как произойдет попытка сохранить запись в саму БД, Required нужного нам поля должно быть true (если вы явно определяете список полей ч/з Field Editor и в БД поле помечено как обязательно – Required включится автоматом, а если вы сначала написали весь проект, а потом стали помечать обязательные поля – то надо будет включить ручками).

Еще один момент. В lookup – ских полях реальное изменение происходит в полях, определенных как внешние ключи, т.е. юзеру кажется, что он меняет поле «Имя работника», а на деле заносится код в обязательное поле «emploee_id». Здесь нужно свойству DisplayLabel как раз поля «emploee_id» присвоить «Имя работника» - все равно это поле обычно нигде не показывается.

P.S.

По такой схеме кстати можно поменять многие надписи: Yes, No, Cancel… на кнопках и Warning, Error… на формах, показываемых с помощью MessageDlg() – Consts.pas, сообщения сокетов - ScktCnst.pas… , константы сторонних разработчиков и тд и тп.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com