Текущий архив: 2002.10.07;
Скачать: CL | DM;
Вниз
Локализация программы в отдельных файлах Найти похожие ветки
← →
Smok_er (2002-09-23 19:48) [0]Уважаемые мастера!
подскажите пожалуйста, как сделать локализацию программы с выносом всего перевода в отдельный ini файл со следующей структурой:
[Form1]
Button1.Caption = Жми здесь
Button2.Caption = Не Жми здесь
[Form2]
Button1.Caption = Жми здесь
Button2.Caption = Не Жми здесь
и т.д.
Заранее благодарен!
← →
Кадастр и ты (2002-09-23 21:35) [1]В OnCreate читай ини и работай :)
Есть же TForm.Components, RTTI, так чего еще?!
← →
Rouse_ © (2002-09-24 00:44) [2]сам ини
[form1]
lang1=Жми здесь
lang2=Не Жми здесь
В программе
uses IniFiles
procedure LoadLanguage(Value:String);
var r:TIniFile;
r:=TIniFile.Create(Имя файла);
Button1.Caption := r.ReadString("form1","lang1","Жми здесь");
end;
и т.д.
Желаю успехов
← →
Кадастрат удивился (2002-09-24 00:48) [3]2 Rouse_
И ты ему предлагаешь делать это твое "и т.д" для каждого контрола отдельно? Ну-ну, советчик.....
← →
Rouse_ © (2002-09-24 00:58) [4]А почему бы и нет? Я недавно закончил коммерческую программу, так вот в ней локализация реализована именно этим способом, а что именно вы предлагаете?
Желаю успехов
← →
Кадастрат удивился (2002-09-24 02:01) [5]2 Rouse_
Тебе успехов в коммерции
Разжевываю вариант, который привел выше.
В OnCreate формы или даже в конструкторе (если задача так стоит) читать ини.
Парсировать ключи, соответствующие твое форме, привести их к виду:
имя компонента (CompName), свойство (CompProp).
Пробежаться по всем компонентам на форме.
Сравнить с именем CompName, если совпадает, то использовать RTTI (TypInfo.pas, в справке нет) функцию SetStrProp (Объект, Имя_Свойста, Значение).
Все в виде ОДНОЙ УНИВЕРСАЛЬНОЙ ПРОЦЕДУРЫ, которую потом только вставлять в ОнКриейт.
А не писать для каждой формы (у каждой свой набор кнопок, лэйблов и прочего дерьма) свою процедуру.
Вот и все.
П.С.
procedure SetStrProp(Instance: TObject; const PropName: string;
const Value: string);
← →
kex86 © (2002-09-24 02:08) [6]>Кадастрат
хотя так и короче писать и легче понимать, но так медленнее, потому что для каждого компонента надо проверять соответствие названия, а потом давать Caption
← →
Кадастрат (2002-09-24 02:18) [7]Оно может быть и медленнее, зато как представишь, сколько времени потом займет переписывание и дописывания кода в твой вариант в случае изменения интерфейса, добавления новых контролов и т.п. -- так пусть лучше у конечного пользователья прога грузится на 0.3 сек. дольше :)
А если серьезно, то времени эта вся лабуда требует для загрузки и отработки не очень много. НЕЗНАЧИТЕЛЬНА разница.
А если скорость критична, то лучше делать через Делфовские стандартные средства локализации, т.е., все локальные ресурсы выносятся в ДЛЛ -- тогда и быстро и удобно и проч.
Но вопрос стоял именно об текстовых ини файлах.
Удачи.
← →
kex86 © (2002-09-24 02:22) [8]Зато пока набираешь весь код повысится скорость набора текста :о)
← →
Smok_er (2002-09-24 19:35) [9]Большое всем спасибо за советы!
Дело в том, что у меня изначально был вариант, предложенный Rouse_.
Недостатков в этом методе очень много, и поэтому я решил от него отказаться.
Придется рыться в RTTI.
Кстати, с со свойствами But1.Caption я к примеру разберусь. А что посоветуете, к примеру, с ListView1.Items[1].Caption и другим, сосотоящих из 5-ти, а то и 6-ти свойств?
← →
Rouse_ © (2002-09-25 21:22) [10]Кадастрат, я знаю тебя как весьма опытного программиста, ссорится не будем (тем более что мы оба правы) приведу выдержку из кода
(********************************************************)
{ }
{
← →
Rouse_ © (2002-09-25 21:27) [11]Кстати, если кто может дать пример получше (без шуток) приведите его плз этой конфе
Страницы: 1 вся ветка
Текущий архив: 2002.10.07;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.025 c