![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Локализация программы в отдельных файлах [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, так чего еще?!