Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.12.2010, 18:25
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию Язык для программы

Вот решил сделать мультиязыковую программу но как это сделать? Как записать например в файл Russian.lng все кэпшоны лэйблов? Подскажите)
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #2  
Старый 10.12.2010, 20:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если по простому - то идем на torry.ru и качаем какой-нить компонент для поддержки многоязычности.
Если хочется сделать самому, то начинаем разбираться с RTTI.
Ответить с цитированием
  #3  
Старый 10.12.2010, 20:52
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Можно lng файл сделать ini, и в массиве components поменять нужные кэпшоны
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #4  
Старый 10.12.2010, 21:11
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

нет, lng файл я знаю его через inifiles можно подключить а как хранить кэпшоны? напишите на практике, пожалуйста!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #5  
Старый 13.12.2010, 13:51
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

аааууу народ, помогите плз!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #6  
Старый 13.12.2010, 16:35
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Если через IniFiles, то так же как в обычном INI:
Цитата:
[Captions]
Label1=первый лейбл
Label2=второй лейбл
читать так:
Код:
Label1.Caption := Ini.ReadString('Captions', 'Label1', 'default caption');

Последний раз редактировалось ryderx34, 13.12.2010 в 16:37.
Ответить с цитированием
  #7  
Старый 13.12.2010, 17:34
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Можно и не только для 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);
Т.е. пишешь тип (любым номером), потом имя компонента и значение.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 13.12.2010, 17:46
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

а если 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.


Но как всегда не фурычит!
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #9  
Старый 13.12.2010, 17:54
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

читай ручками, не прогадаешь
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #10  
Старый 13.12.2010, 18:06
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Подобная тема:
http://www.delphisources.ru/forum/sh...0289#post60289
Ответить с цитированием
  #11  
Старый 13.12.2010, 18:38
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

один файл я подключил все отлично читает! а вот уже как на анг сменить чтобы не менять все кэпшоны в файле...
roamer, прочел я тему но там никакого примера нет=( torry.ru не заходит=(
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #12  
Старый 13.12.2010, 19:02
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от PaHaNjkee
Сначала Русский язык надо чтобы в комбобоксе при нажатии на English(Default) читалось из файла english.lng
Код:
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  
Старый 13.12.2010, 19:13
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Я писал ужасно простой компонент, если найду в архивах - выложу. Логика такая:
1. Файлы .lng - INI-формат.
2. Файл следующего содержания:
Код:
[Information]
LangName=English
LangId=1
[Form1]
Label1=Hello
Label2=World
В программе выполнялся поиск языковых файлов (в папке с программой, в подпапке Languages или в папке, задаваемой вручную), а при загрузке языка передавался Id языка. Компонент пробегал по всем компонентам, и при совпадении имён, в зависимости от типа, присваивал Caption/Text. Умел и TStrings (разделителем является первый символ строки). Загрузка дополнительных "ресурсов" тоже возможна.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #14  
Старый 13.12.2010, 19:20
Аватар для PaHaNjkee
PaHaNjkee PaHaNjkee вне форума
Начинающий
 
Регистрация: 13.10.2010
Адрес: Ульяновск
Сообщения: 115
Репутация: 10
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
Я писал ужасно простой компонент, если найду в архивах - выложу. Логика такая:
1. Файлы .lng - INI-формат.
2. Файл следующего содержания:
Код:
[Information]
LangName=English
LangId=1
[Form1]
Label1=Hello
Label2=World
В программе выполнялся поиск языковых файлов (в папке с программой, в подпапке Languages или в папке, задаваемой вручную), а при загрузке языка передавался Id языка. Компонент пробегал по всем компонентам, и при совпадении имён, в зависимости от типа, присваивал Caption/Text. Умел и TStrings (разделителем является первый символ строки). Загрузка дополнительных "ресурсов" тоже возможна.

Классноо....брррррр...скинь плз
__________________
Начинающий Delphi
Помогаю за Спасибо!
Ответить с цитированием
  #15  
Старый 13.12.2010, 19:36
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Мне ещё надо вспомнить, где он валяется, и доточить до ума (есть несколько моментов, которые я тогда не учёл, а сейчас вспомнил). На разработку его в текущем состоянии у меня ушло не больше часа с перекурами и чаем, так что пробуй. Логику я сказал.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:04.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025