Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.16;
Скачать: CL | DM;

Вниз

Как проще всего поддерживать проект на разных языках?   Найти похожие ветки 

 
YuN   (2004-01-02 04:38) [0]

Возникла необходимость делать русские и английские версии одного проекта. Ну, всякие диагностические сообщения я в отдельный файл скину и циклом в массив считаю, а с надписями на форме что делать? Не писать же длинную простыню траляляN.caption:=titleN?


 
Sergey_Masloff   (2004-01-02 08:58) [1]

почитай в справке про Resource DLL wizard


 
DDA ©   (2004-01-02 14:02) [2]

Я дак делаю так
ставлю например у формы Tag=1000
У кнопок там всяких Tag=1001 и т.д

потом при создании формы в TForm1.FormCreate
открываю INI файл например такой

[Caption]
1000=Моя прога
1001=Кнопка
.
.
1099=Другая кнопка

потом перебераю все компоненты на форме и ищу те у которых Tag>1000 и у этого компонента в Caption или например Hint
вписываю значение из INI файла



inif:=TIniFile.Create("c:\dda.ini");

//------label caption --------

for Ij := 0 to ComponentCount -1 do
if Components[Ij] is TLabel then
With TLabel(Components[Ij]) Do
Begin
jy:=Tag;
if (jy>1000) then
begin
Caption:=inif.ReadString("caption",inttostr(jy),"error");
end;
End;
//------Radoigroup caption --------

for Ij := 0 to ComponentCount -1 do
if Components[Ij] is TRadioGroup then
With TRadioGroup(Components[Ij]) Do
Begin
jy:=Tag;
if (jy>1000) then
begin
Caption:=inif.ReadString("caption",inttostr(jy),"error");
end;
End;
//------GroupBox caption --------

for Ij := 0 to ComponentCount -1 do
if Components[Ij] is TGroupBox then
With TGroupBox(Components[Ij]) Do
Begin
jy:=Tag;
if (jy>1000) then
begin
Caption:=inif.ReadString("caption",inttostr(jy),"error");
end;
End;
//------CheckBox caption --------

for Ij := 0 to ComponentCount -1 do
if Components[Ij] is TCheckBox then
With TCheckBox(Components[Ij]) Do
Begin
jy:=Tag;
if (jy>1000) then
begin
Caption:=inif.ReadString("caption",inttostr(jy),"error");
end;
End;
//------Hint --------

for Ij := 0 to ComponentCount -1 do
if Components[Ij] is TControl then
With TControl(Components[Ij]) Do
Begin
jy:=Tag;
if (jy>1000) then
begin
Hint:=inif.ReadString("hint",inttostr(jy),"error");
end;
end;
//------Speedbutton caption --------

for Ij := 0 to ComponentCount -1 do
if Components[Ij] is TSpeedButton then
With TSpeedButton(Components[Ij]) Do
Begin
jy:=Tag;
if (jy>1000) then
begin
caption:=inif.ReadString("caption",inttostr(jy),"");
end;
end;
//------Popupmenu caption --------

for Ij := 0 to ComponentCount -1 do
if Components[Ij] is TMenuItem then
With TMenuItem(Components[Ij]) Do
Begin
jy:=Tag;
if (jy>1000) then
begin
caption:=inif.ReadString("caption",inttostr(jy),"error");
end;
end;


 
хз ©   (2004-01-02 17:56) [3]

2 DDA

А если форма не одна, а, к примеру, их более 20. А еще если на каждой форме куча компонентов? Вы будете каждой кнопке, каждому лэйблу или GroupBox"у устанавливать нужный Tag?


 
DDA ©   (2004-01-02 18:52) [4]

хз © (02.01.04 17:56) [3]
Буду


 
DDA ©   (2004-01-02 18:53) [5]

хз © (02.01.04 17:56) [3]
Есть другие варианты -> предложи


 
Sergey_Masloff   (2004-01-02 19:09) [6]

DDA © (02.01.04 18:53) [5]
Я предложил. Или стандартные методы - не для настоящих хакеров? ;-)


 
хз ©   (2004-01-02 19:16) [7]

2 DDA

Есть.

1 - см. Sergey_Masloff (02.01.04 19:09) [6].
2 - если хочется через ini-файлы, то можно написать функцию, которая будет проходиться (в цикле) по нужным компонентам на форме, и по их именам извлекать Caption и Hint. Работы - 2 минуты.


 
Tahion2   (2004-01-02 20:25) [8]

Используй компонент для локалиации программ.
Сделаешь своей программе новый язык за 120 минут.

www.torry.net, однако......


 
YuN   (2004-01-02 23:56) [9]

Посмотрел Resource DLL wizard. Там в файл скидываются только сообщения ф-ций стандартных библиотек, а надписи на форме все равно надо редактировать прямо в dfm. Так что это не то.
А за 120 минут (на самом деле заметно быстрее) я и тупым поиском/заменой в исходнике все поменять могу. Про ф-цию, которая скидывает в файл все caption, уже думал. Если нет более стандартного ср-ва, так и сделаю.


 
Юрий Зотов ©   (2004-01-03 01:48) [10]

> YuN (02.01.04 23:56) [9]
> а надписи на форме все равно надо редактировать прямо в dfm

А кто мешает скинуть их в ресурс DLL и грузить через LoadStr, как это обычно и делается? Тогда язык можно менять хоть вообще прямо "на ходу".


 
YuN   (2004-01-04 02:32) [11]

А как автоматически скинуть-то?



Страницы: 1 вся ветка

Текущий архив: 2004.01.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
4-49801
_Andrew_
2003-11-10 16:04
2004.01.16
Загрузка файла из ресурса


4-49802
RustiK
2003-11-12 07:33
2004.01.16
Handle of Child


1-49575
Wadim
2004-01-05 17:57
2004.01.16
TListBox


1-49596
Вован_
2004-01-05 12:57
2004.01.16
Как получить код последней нажатой клавиши ?


1-49569
Alik
2004-01-05 19:58
2004.01.16
как бмп проявить