Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Локализация программы в отдельных файлах [D5, WinXP]


Smok_er ©   (2002-09-23 19:48:00) 

Уважаемые мастера!
подскажите пожалуйста, как сделать локализацию программы с выносом всего перевода в отдельный ini файл со следующей структурой:
[Form1]
Button1.Caption = Жми здесь
Button2.Caption = Не Жми здесь

[Form2]
Button1.Caption = Жми здесь
Button2.Caption = Не Жми здесь

и т.д.

Заранее благодарен!


Rouse_   (2002-09-25 21:27:00) [1]

Кстати, если кто может дать пример получше (без шуток) приведите его плз этой конфе


Rouse_   (2002-09-25 21:22:00) [2]

Кадастрат, я знаю тебя как весьма опытного программиста, ссорится не будем (тем более что мы оба правы) приведу выдержку из кода

(********************************************************)
{ }
{


Smok_er   (2002-09-24 19:35:00) [3]

Большое всем спасибо за советы!
Дело в том, что у меня изначально был вариант, предложенный Rouse_.
Недостатков в этом методе очень много, и поэтому я решил от него отказаться.
Придется рыться в RTTI.
Кстати, с со свойствами But1.Caption я к примеру разберусь. А что посоветуете, к примеру, с ListView1.Items[1].Caption и другим, сосотоящих из 5-ти, а то и 6-ти свойств?


kex86   (2002-09-24 02:22:00) [4]

Зато пока набираешь весь код повысится скорость набора текста :о)


Кадастрат   (2002-09-24 02:18:00) [5]

Оно может быть и медленнее, зато как представишь, сколько времени потом займет переписывание и дописывания кода в твой вариант в случае изменения интерфейса, добавления новых контролов и т.п. -- так пусть лучше у конечного пользователья прога грузится на 0.3 сек. дольше :)

А если серьезно, то времени эта вся лабуда требует для загрузки и отработки не очень много. НЕЗНАЧИТЕЛЬНА разница.

А если скорость критична, то лучше делать через Делфовские стандартные средства локализации, т.е., все локальные ресурсы выносятся в ДЛЛ -- тогда и быстро и удобно и проч.
Но вопрос стоял именно об текстовых ини файлах.
Удачи.


kex86   (2002-09-24 02:08:00) [6]

>Кадастрат
хотя так и короче писать и легче понимать, но так медленнее, потому что для каждого компонента надо проверять соответствие названия, а потом давать Caption


Кадастрат удивился   (2002-09-24 02:01:00) [7]

2 Rouse_
Тебе успехов в коммерции

Разжевываю вариант, который привел выше.

В OnCreate формы или даже в конструкторе (если задача так стоит) читать ини.

Парсировать ключи, соответствующие твое форме, привести их к виду:
имя компонента (CompName), свойство (CompProp).

Пробежаться по всем компонентам на форме.

Сравнить с именем CompName, если совпадает, то использовать RTTI (TypInfo.pas, в справке нет) функцию SetStrProp (Объект, Имя_Свойста, Значение).

Все в виде ОДНОЙ УНИВЕРСАЛЬНОЙ ПРОЦЕДУРЫ, которую потом только вставлять в ОнКриейт.

А не писать для каждой формы (у каждой свой набор кнопок, лэйблов и прочего дерьма) свою процедуру.

Вот и все.

П.С.
procedure SetStrProp(Instance: TObject; const PropName: string;
const Value: string);


Rouse_   (2002-09-24 00:58:00) [8]

А почему бы и нет? Я недавно закончил коммерческую программу, так вот в ней локализация реализована именно этим способом, а что именно вы предлагаете?

Желаю успехов


Кадастрат удивился   (2002-09-24 00:48:00) [9]

2 Rouse_

И ты ему предлагаешь делать это твое "и т.д" для каждого контрола отдельно? Ну-ну, советчик.....


Rouse_   (2002-09-24 00:44:00) [10]

сам ини

[form1]
lang1=Жми здесь
lang2=Не Жми здесь

В программе

uses IniFiles

procedure LoadLanguage(Value:String);
var r:TIniFile;
r:=TIniFile.Create(Имя файла);
Button1.Caption := r.ReadString("form1","lang1","Жми здесь");
end;
и т.д.

Желаю успехов


Кадастр и ты   (2002-09-23 21:35:00) [11]

В OnCreate читай ини и работай :)

Есть же TForm.Components, RTTI, так чего еще?!


Наверх

Титульная страница Поиск, карта сайта Написать письмо