Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Мультиязычный интерфейс

323
25 июля 2003 года
Sergun
228 / / 20.09.2000
Народ, посоветуйте как лучше и оптимальней создать программу с мультиязычным интерфейсом??
2.4K
26 июля 2003 года
Cepgei
26 / / 07.07.2003
Цитата:
Originally posted by Sergun
Народ, посоветуйте как лучше и оптимальней создать программу с мультиязычным интерфейсом??



Посмотри в Delphi6\Demos\RichEdit
Там есть пример с 3-мя языками

323
26 июля 2003 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Cepgei


Посмотри в Delphi6\Demos\RichEdit
Там есть пример с 3-мя языками




ээээ.... опс. у меня Delphi5:{

2.4K
27 июля 2003 года
Cepgei
26 / / 07.07.2003
Скажи своё мыло пришлю исходник.
Правда могут быть некоторые несовместимости вроде формы не откроет, но код откроет
323
28 июля 2003 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Cepgei
Скажи своё мыло пришлю исходник.
Правда могут быть некоторые несовместимости вроде формы не откроет, но код откроет



[email]sergun@hostel7.susu.ac.ru[/email]

323
30 июля 2003 года
Sergun
228 / / 20.09.2000
хочу чтоб все надписи были в обычном текстовом файле, а не в DLL.
Хорошо, поставлю вопрос по другому: есть текстовой файл, в нем записано имя компонента на форме, имя формы где он расположен и само свойство (причем известно заранее что это свойство имеет тип string). Как сделать так, чтобы читать из файла эти данные и устанавливать заданное свойство у этого компонента?
323
30 июля 2003 года
Sergun
228 / / 20.09.2000
это вообще возможно???
допустим файле написано:
====================
frmMain.label1.caption=TEXT1
frmAbout.label5.caption=TEXT5
====================
ну и соответствено чтоб они менялись....
2.4K
30 июля 2003 года
Cepgei
26 / / 07.07.2003
Конечно возможно
Для этого используются *.INI файлы. Они способны хранить String, Boolean, Integer, и др.
Приведу самый простой пример загрузки String данных из *.ini файлов:

Нужно создать новый проект, и изменить файлы
Unit1.pas и Unit1.dfm следующим содержимым:

Файл Unit1.pas
================================================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, INIFiles;

type
TForm1 = class(TForm)
Label1: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Ini: TIniFile;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Languages\English.ini');
Label1.Caption:= Ini.ReadString('Language','frmMain.label1.caption','');
Label5.Caption:= Ini.ReadString('Language','frmAbout.label5.caption','');
Ini.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Languages\Russian.ini');
Label1.Caption:= Ini.ReadString('Language','frmMain.label1.caption','');
Label5.Caption:= Ini.ReadString('Language','frmAbout.label5.caption','');
Ini.Free;
end;

end.

Файл Unit1.dfm
============================================
object Form1: TForm1
Left = 277
Top = 174
Width = 177
Height = 129
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 3
Height = 13
end
object Label5: TLabel
Left = 8
Top = 32
Width = 3
Height = 13
end
object Button1: TButton
Left = 8
Top = 64
Width = 75
Height = 25
Caption = 'Русский'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 88
Top = 64
Width = 75
Height = 25
Caption = 'English'
TabOrder = 1
OnClick = Button2Click
end
end

После этого создайте в директории проекта папку с названием languages и в обычном текстовом редакторе (можно мастдаевский блокнот)
файлы English.ini и Russian.ini со следующим содержимым:

Russian.ini
==================================
[Language]
frmMain.label1.caption=ТЕКСТ1
frmAbout.label5.caption=ТЕКСТ5

English.ini
==================================
[Language]
frmMain.label1.caption=TEXT1
frmAbout.label5.caption=TEXT5

===================================

Надеюсь помог.:}
323
30 июля 2003 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Cepgei
Конечно возможно
Для этого используются *.INI файлы. Они способны хранить String, Boolean, Integer, и др.
Приведу самый простой пример загрузки String данных из *.ini файлов:

Нужно создать новый проект, и изменить файлы
Unit1.pas и Unit1.dfm следующим содержимым:

Файл Unit1.pas
================================================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, INIFiles;

type
TForm1 = class(TForm)
Label1: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Ini: TIniFile;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Languages\English.ini');
Label1.Caption:= Ini.ReadString('Language','frmMain.label1.caption','');
Label5.Caption:= Ini.ReadString('Language','frmAbout.label5.caption','');
Ini.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Languages\Russian.ini');
Label1.Caption:= Ini.ReadString('Language','frmMain.label1.caption','');
Label5.Caption:= Ini.ReadString('Language','frmAbout.label5.caption','');
Ini.Free;
end;

end.

Файл Unit1.dfm
============================================
object Form1: TForm1
Left = 277
Top = 174
Width = 177
Height = 129
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 3
Height = 13
end
object Label5: TLabel
Left = 8
Top = 32
Width = 3
Height = 13
end
object Button1: TButton
Left = 8
Top = 64
Width = 75
Height = 25
Caption = 'Русский'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 88
Top = 64
Width = 75
Height = 25
Caption = 'English'
TabOrder = 1
OnClick = Button2Click
end
end

После этого создайте в директории проекта папку с названием languages и в обычном текстовом редакторе (можно мастдаевский блокнот)
файлы English.ini и Russian.ini со следующим содержимым:

Russian.ini
==================================
[Language]
frmMain.label1.caption=ТЕКСТ1
frmAbout.label5.caption=ТЕКСТ5

English.ini
==================================
[Language]
frmMain.label1.caption=TEXT1
frmAbout.label5.caption=TEXT5

===================================

Надеюсь помог.:}



Хе... это понятно, это самое тривиальное решение... вообще то я имел ввиду решение в виде перебора компонентов в приложении... типа FindComponent итд...

2.4K
01 августа 2003 года
Cepgei
26 / / 07.07.2003
Попробуй это:
 
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
  Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Languages\Russian.ini');
  for i:=0 to 10 do
   with Form1.FindComponent('Label' + IntToStr(i)) as TLabel do
    Caption:= ini.ReadString('Language','frmMain.label'+inttostr(i)+'.caption','');
  Ini.Free;
end;
323
01 августа 2003 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Cepgei
Попробуй это:
 
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
  Ini := TIniFile.Create(ExtractFilePath(Application.Exename) + 'Languages\Russian.ini');
  for i:=0 to 10 do
   with Form1.FindComponent('Label' + IntToStr(i)) as TLabel do
    Caption:= ini.ReadString('Language','frmMain.label'+inttostr(i)+'.caption','');
  Ini.Free;
end;



а если заранее не известно сколько в проекте форм и как они называются?

2.4K
01 августа 2003 года
Cepgei
26 / / 07.07.2003
Как так в своём - то проекте и не знать число и названия форм? Нонсонс!

А если кому - то придется транслировать INI-файл, то запустит прогу, откроет языковой файл и переведет значения.

Или я что-то не понял?
Поясни...
323
01 августа 2003 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Cepgei
Как так в своём - то проекте и не знать число и названия форм? Нонсонс!

А если кому - то придется транслировать INI-файл, то запустит прогу, откроет языковой файл и переведет значения.

Или я что-то не понял?
Поясни...



Ну вот сам подумай... создаешь ты приложение... делаешь ини файл, там все значения... итд.. это понятно...
однако, если в процессе разработки ты создаешь новую форму.... эээ... то тут уже надо забититься опять о мультиязычности этой формы... не так ли?
а если бы просто допустим указывать имя формы в инишнике, и чтоб это транслировалось в delphi, ты было бы просто замечательно... уже не задумывался бы об этом... поэтому я все это и затеял...:!!!:

2.4K
01 августа 2003 года
Cepgei
26 / / 07.07.2003
Тут уже компонент надо создавать а в создании компонентов я еще не учавствовал:(
На этом мои советы исчерпаны. Может кто-то другой будет просматривать эту тему и предложит кокой-нибудь компонент.:???:
323
02 августа 2003 года
Sergun
228 / / 20.09.2000
Цитата:
Originally posted by Cepgei
Тут уже компонент надо создавать а в создании компонентов я еще не учавствовал:(
На этом мои советы исчерпаны. Может кто-то другой будет просматривать эту тему и предложит кокой-нибудь компонент.:???:




и всетаки???? :(

2.4K
02 августа 2003 года
Cepgei
26 / / 07.07.2003
Покопался на Vingrad.ru и нашел там тему тоже про мультиязычность если интересует вот линк
Multilanguage
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог