Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизПеревод MessageDLG Найти похожие ветки
← →
andrew_p (2004-01-22 13:58) [0]Здравствуйте.
Можно ли перевести оглавление и кнопки функции MessageDLG на русский язык или на какой-нибудь другой? Если можно, то как это сделать?
Заранее благодарен.
← →
YuRock (2004-01-22 13:59) [1]Использовать MessageBox
← →
andrew_p (2004-01-22 14:33) [2]А как кнопки перевести на украинский язык?
← →
pasha_golub (2004-01-22 14:33) [3]Можно, но через задницу. :-)
например
function ShowDialog(Msg:string; DlgType: TMsgDlgType; Buttons:TMsgDlgButtons):integer;
var
i:integer;
begin
with CreateMessageDialog(Msg, DlgType, Buttons) do
try
for i:=0 to ComponentCount-1 do
if Components[i] is TButton then
if TButton(Components[i]).Caption = "&Yes" then
TButton(Components[i]).Caption := "Да"
else
if TButton(Components[i]).Caption = "&No" then
TButton(Components[i]).Caption := "Нет";
Position := poMainFormCenter;
BorderStyle := bsNone;
Result := ShowModal;
finally
Free;
end;
end;
← →
andrew_p (2004-01-22 14:48) [4]Спасибо всем, особенно pasha_golub - все получилось и совсем не через задницу. Просто нужно в главную форму поместить эту функцию (в раздел Public) и все.
← →
alex_*** (2004-01-22 14:57) [5]:))
Задницу в раздел public ?!
← →
Amoeba (2004-01-22 15:18) [6]Если перевод на русский - по выручат переведенные на русский модули строковых констант от Polaris:
http://polesoft.narod.ru
← →
andrew_p (2004-01-27 11:56) [7]alex_*** >>> Нет, задница пусть остается там, где должна быть. Здесь о заднице никто речь не вел.
← →
alex_*** (2004-01-27 12:05) [8]Все равно изврат какой-то... бегать по компонентам, менять Caption"s... Проще через MessageBox
← →
Erik (2004-01-27 12:15) [9]А как интересно через MessageBox переопределить Yes в Да?
← →
YuRock (2004-01-27 12:17) [10]> Erik © (27.01.04 12:15) [9]
Лучше всего поменять английскую версию Windows на русскую
← →
alex_*** (2004-01-27 12:21) [11]Тем более что переведенные константы будут включаться только при статической компоновке пакетов
← →
Юрий Зотов (2004-01-27 12:22) [12]> Erik © (27.01.04 12:15) [9]
Если юзер ставит себе английскую (русскую, французскую, немецкую, испанскую, китайскую и т .д.) версию Windows - то на каком языке он хочет видеть ее сообщения, как Вы полагаете?
MessageBox полагает, что на своем родном. И не без оснований, не так ли?
← →
Mystic (2004-01-27 12:56) [13]It is not difficult to create internationalized applications. You need to complete the following steps:
1 You must enable your code to handle strings from international character sets.
2 You need to design your user interface so that it can accommodate the changes that result from localization.
3 You need to isolate all resources that need to be localized.
Копай в сторону Resource DLL
← →
andrew_p (2004-01-27 13:07) [14]Абсолютно согласен с Mystic. Я сделал так, что независимо от языка ОС сообщения показываются такими как пользователь хочет (сделал локализацию программы).
function ShowMessageDialog(Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons;HelpCtx: Longint): integer;
var
i:integer;
begin
with CreateMessageDialog(Msg, DlgType,Buttons) do
try
for i:=0 to ComponentCount-1 do
if Components[i] is TButton then
begin
if TButton(Components[i]).Caption = "&Yes" then TButton(Components[i]).Caption := GetStr(103); // взять строку из файла локализации по номеру
if TButton(Components[i]).Caption = "&No" then TButton(Components[i]).Caption := GetStr(104);// взять строку из файла локализации по номеру
if TButton(Components[i]).Caption = "Cancel" then TButton(Components[i]).Caption := GetStr(105);// взять строку из файла локализации по номеру и т.д.
// дальше - переводим нужные кнопки по усмотрению
end;
if DlgType = mtError then caption:=GetStr(106);
if DlgType = mtConfirmation then caption:=GetStr(107);
if DlgType = mtInformation then caption:=GetStr(108);
if DlgType = mtWarning then caption:=GetStr(109);
if DlgType = mtCustom then caption:=GetStr(110);
Position := poMainFormCenter;
BorderStyle := bsDialog;
Result:=ShowModal;
finally
Free;
end;
end;
Вот и вся проблема.
← →
andrew_p (2004-01-27 13:12) [15]alex_*** >>> "Бегание" по компонентам Вы считаете извращением? Я считаю это очень нужным методом. Например, локализация програмы извне ее - это сплошное "бегание" по компонентам, иначе если менять заголовки и подсказки напрямую (по имени) - не это ли извращение? Это уже не напиание програмного кода, а "тупая" его генерация (я это называю "генерация случайного кода").
← →
alex_*** (2004-01-27 13:34) [16]ну само по себе локализация извне - не есть правильно. Прога (Форма, юнит и т.д.) должна сама сразу из ресурсов свои тексты/рисунки подгружать. Ну а если такого нет, то конечно придется по компонентам бегать.
← →
andrew_p (2004-01-27 14:14) [17]alex_*** >>> А Вы с абсолютной точностью уверены, что программой будут пользоваться только на двух(трех и т.д.) языках? А если (к примеру)в Индии будут пользоваться Вашей программой, и надо будет перевести ее, то Вам надо будет менять строки в ресурсах и копилировать программу, и это без Вас никто не сделает. Чтобы избежать этого и делают локализацию извне.
← →
alex_*** (2004-01-27 14:20) [18]в смысле извне?
А если есть ресурсная dll из которой берутся ресурсы это извне или нет? Я про ресурсную dll и говорю.
← →
Некто (2004-01-27 14:48) [19]\Delphi\Source\Vcl\Consts.pas
← →
alex_*** (2004-01-27 14:57) [20]и кстати насчет компилляции. Использование GetStr(NUM) говорит о том, что при использовании другого языка все равно придется скомпилиться с другими ресурсами.
← →
Erik (2004-01-27 15:37) [21]Юрий Зотов
У нас пользователям поставлена Английская версия, потому, что Эстонской версии 98 несуществует. Есть только возможность выбрать кодировку в MessageBoxEx, но кнопочки непереведутся. :(
← →
andrew_p (2004-01-27 15:54) [22]alex_*** >>> Я имел виду текстовый файл с локализацией. Этот файл загружается на этапе выполнения программы в класс TStringList, и из него получают строку ( Values) по имени ( Names) который является номером, заблаговременно записанным в свойство Tag каждого визуального компонента. Вот здесь и не обойдешься без "бегания" по компонентам. Воть.
← →
alex_*** (2004-01-27 15:59) [23]ОК. понял.
← →
andrew_p (2004-01-27 16:10) [24]alex_*** >>> Вы согласны со мной, что это эффективно? А функция GetStr(NUM) написана как раз для того, чтобы получить строку от TStringList по ее номеру.
var language_mes : TStringList;
.....
function GetStr (const num:integer):string;
begin
Result:=language_mes.Values[IntToStr(num)];
end;
Например, надо локализовать все Лейбелы
with mainform.fm_main do
for i:=0 to ComponentCount-1 do
begin
//------------ перевод TLabel ----------------------
if Components[i] is TLabel then
if (Components[i] as TLabel).Tag <> 0
then (Components[i] as TLabel).Caption:=language_mes.Values[FloatToStr((Components[i] as TLabel).Tag)];
end;
Воть.
← →
alex_*** (2004-01-27 16:19) [25]Согласен.
я перепутал GetStr c LoadStr. Думал ты из ресурсов приложения тянешь строки.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.045 c