|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Мне ещё надо вспомнить, где он валяется, и доточить до ума (есть несколько моментов, которые я тогда не учёл, а сейчас вспомнил). На разработку его в текущем состоянии у меня ушло не больше часа с перекурами и чаем, так что пробуй. Логику я сказал. |