Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-16450
PleaseHelpME
2004-01-28 01:19
2004.02.06
PROBLEMZ с передачей данных


1-16409
Вомбат
2004-01-22 16:53
2004.02.06
Продолжаем разбираться в записи / чтении из ресурса


1-16240
Chuha
2004-01-26 17:13
2004.02.06
Массив?


1-16225
Alex*
2004-01-28 11:02
2004.02.06
F1Book


1-16243
AngelOid
2004-01-26 16:25
2004.02.06
Создание новых компонентов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский