Форум: "Основная";
Текущий архив: 2004.01.16;
Скачать: [xml.tar.bz2];
ВнизКак проще всего поддерживать проект на разных языках? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c