![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Вот решил сделать мультиязыковую программу но как это сделать? Как записать например в файл Russian.lng все кэпшоны лэйблов? Подскажите)
|
|
#2
|
|||
|
|||
|
Если по простому - то идем на torry.ru и качаем какой-нить компонент для поддержки многоязычности.
Если хочется сделать самому, то начинаем разбираться с RTTI. |
|
#3
|
||||
|
||||
|
Можно lng файл сделать ini, и в массиве components поменять нужные кэпшоны
|
|
#4
|
||||
|
||||
|
нет, lng файл я знаю его через inifiles можно подключить а как хранить кэпшоны? напишите на практике, пожалуйста!
|
|
#5
|
||||
|
||||
|
аааууу народ, помогите плз!
|
|
#6
|
||||
|
||||
|
Если через IniFiles, то так же как в обычном INI:
Цитата:
Код:
Label1.Caption := Ini.ReadString('Captions', 'Label1', 'default caption');Последний раз редактировалось ryderx34, 13.12.2010 в 16:37. |
|
#7
|
||||
|
||||
|
Можно и не только для Label'ов, и в обычном TXT-файле:
Код:
2 label1=Привет, мир 2 label2=Еще раз привет, мир 1 Form1=Форма приложения Код:
var f:text;
s,nam:string;
t:integer;
...
assignfile(f,'Russian.lng');
reset(f);
while not eof(f) do
begin
readln(f,s);
t:=strtoint(s[1]);
delete(s,1,2);
nam:=copy(s,1,pos('=',s)-1);
delete(s,1,pos('=',s));
case t of
1: TForm1(FindComponent(nam)).Caption:=s;
2: TLabel(FindComponent(nam)).Caption:=s;
end;
end;
closefile(f); |
|
#8
|
||||
|
||||
|
а если 2 файла например english.lng и russian.lng
Есть комбобокс есть три лейбла и один баттон в комбобоксе написано: Русский / Russian English (Default) Сначала Русский язык надо чтобы в комбобоксе при нажатии на English(Default) читалось из файла english.lng Вот что получилось: Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
IniFile: TIniFile;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
IniFile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'lang\russian.lng');
Label1.Caption := IniFile.ReadString('Captions', 'Label1', Label1.Caption);
Label2.Caption := IniFile.ReadString('Captions', 'Label2', Label2.Caption);
Label3.Caption := IniFile.ReadString('Captions', 'Label3', Label3.Caption);
Button1.Caption := IniFile.ReadString('Captions', 'Button1', Button1.Caption);
if ComboBox1.Items[Combobox1.ItemIndex]=inttostr(1) then
begin
IniFile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'lang\english.lng');
Label1.Caption := IniFile.ReadString('Captions', 'Label1', Label1.Caption);
Label2.Caption := IniFile.ReadString('Captions', 'Label2', Label2.Caption);
Label3.Caption := IniFile.ReadString('Captions', 'Label3', Label3.Caption);
Button1.Caption := IniFile.ReadString('Captions', 'Button1', Button1.Caption);
Inifile.Free;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IniFile.WriteString('Captions','Label1',Label1.Caption);
IniFile.WriteString('Captions','Label2',Label2.Caption);
IniFile.WriteString('Captions','Label3',Label3.Caption);
IniFile.WriteString('Captions','Button1',Button1.Caption);
end;
end.Но как всегда не фурычит! |
|
#9
|
||||
|
||||
|
читай ручками, не прогадаешь
![]() |
|
#10
|
|||
|
|||
|
Подобная тема:
http://www.delphisources.ru/forum/sh...0289#post60289 |
|
#11
|
||||
|
||||
|
один файл я подключил все отлично читает! а вот уже как на анг сменить чтобы не менять все кэпшоны в файле...
roamer, прочел я тему но там никакого примера нет=( torry.ru не заходит=( |
|
#12
|
||||
|
||||
|
Цитата:
Код:
uses
IniFiles;
procedure TForm1.ComboBox1Change(Sender: TObject);
var
Ini: TIniFile;
begin
case ComboBox1.ItemIndex of
0: Ini := TIniFile.Create(ExtractFilePath(Paramstr(0)) + 'russian.lng');
1: Ini := TIniFile.Create(ExtractFilePath(Paramstr(0)) + 'english.lng')
end;
Label1.Caption := Ini.ReadString('Captions', 'Label1', '...');
Label2.Caption := Ini.ReadString('Captions', 'Label2', '...');
Label3.Caption := Ini.ReadString('Captions', 'Label3', '...');
Button1.Caption := Ini.ReadString('Captions', 'Button1', '...');
Ini.Free;
end;Последний раз редактировалось ryderx34, 13.12.2010 в 19:10. |
|
#13
|
||||
|
||||
|
Я писал ужасно простой компонент, если найду в архивах - выложу. Логика такая:
1. Файлы .lng - INI-формат. 2. Файл следующего содержания: Код:
[Information] LangName=English LangId=1 [Form1] Label1=Hello Label2=World |
|
#14
|
||||
|
||||
|
Цитата:
Классноо....брррррр...скинь плз |
|
#15
|
||||
|
||||
|
Мне ещё надо вспомнить, где он валяется, и доточить до ума (есть несколько моментов, которые я тогда не учёл, а сейчас вспомнил). На разработку его в текущем состоянии у меня ушло не больше часа с перекурами и чаем, так что пробуй. Логику я сказал.
|