Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2012, 19:46   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вот ваш модифицированный xml. В качестве id можно использовать хотя бы имена компонент, или любой текст, соблюдая уникальность
Код:
<?xml version="1.0" encoding="windows-1251"?>
<words>
  <i>
    <id>Label1</id>
    <n>Apples</n>
    <v>Яблоки</v>
  </i>
  <i>
    <id>Label2</id>
    <n>Pears</n>
    <v>Груши</v>
  </i>
  <i>
    <id>Label3</id>
    <n>plums</n>
    <v>Сливы</v>
  </i>
</words>
Обращайтесь к фукции FindText в цикле по нужным компонентам и выбирайте наименования. Сама функция написана без обработки критических ситуаций, предусмотрите (на тот случай, если в xml введены данные не так, как прога предполагает)
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  XMLDocument.LoadFromFile('e:\Primer.xml');
end;

procedure TForm1.Button1Click(Sender: TObject);
var s: String;
begin
  if FindText('Label2',True,s) then Label1.Caption:=s;
end;

function TForm1.FindText(Id: String; Russian: Boolean; var Text: String): Boolean;
var i: Integer;
    xNode1,xNode2,xNode3: IXMLNode;
begin
  Result:=False;
  xNode1:=XMLDocument.ChildNodes.FindNode('words');
  for i:=0 to xNode1.ChildNodes.Count-1 do begin
    xNode2:=xNode1.ChildNodes.Nodes[i];
    xNode3:=xNode2.ChildNodes.FindNode('id');
    if AnsiSameText(xNode3.Text,Id) then begin
      if Russian then Text:=xNode2.ChildNodes.FindNode('v').Text
                 else Text:=xNode2.ChildNodes.FindNode('n').Text;
      Result:=True;
      Exit;
    end;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  XMLDocument.Active:=False;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.01.2012, 20:28   #12
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Пытаюсь сделать как вы написали но выдает ошибку
[DCC Error] Unit1.pas(15): E2003 Undeclared identifier: 'TForm1'
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 09.01.2012, 20:56   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это у меня форма имеет тип TForm1, смотрите на свою форму. И вообще с таким вопросом вам в раздел для начинающих
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.01.2012, 21:03   #14
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это у меня форма имеет тип TForm1, смотрите на свою форму. И вообще с таким вопросом вам в раздел для начинающих
В том то и дело что у меня тоже форма имеет тип TForm1.

Решил использовать INI. Сделал файлы Russian.lng и England.lng и из них вытягиваю для каждой кнопки свое Название. Условие ставлю "Если используется русский язык, то подключаю файл Russian.lng, а если английский - England.lng

Жаль не смог разобраться с XML. Будет время - продолжу изучение. Спасибо всем кто помогал.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 10.01.2012, 10:41   #15
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Удобный вариант сделать один INI-файл и в нем сделать секции [Русский], [English] и т.д. Далее на форму кинуть TComboBox и при запуске программы считать все имена секций в него. А уже при выборе того или иного языка читать содержимое секции.
Такой способ позволит любому пользователю добавлять свой родной язык. Т.е. программа будет универсальнее. Но это лично моё мнение.

Вот примерчик на скорую руку
http://www.fayloobmennik.net/1394407

Последний раз редактировалось FaTaL; 10.01.2012 в 11:11.
FaTaL вне форума Ответить с цитированием
Старый 10.01.2012, 10:55   #16
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Удобный вариант сделать один INI-файл и в нем сделать секции [Русский], [English] и т.д. Далее на форму кинуть TComboBox и при запуске программы считать все имена секций в него. А уже при выборе того или иного языка читать содержимое секции.
Такой способ позволит любому пользователю добавлять свой родной язык. Т.е. программа будет универсальнее. Но это лично моё мнение.
Вы просматривали вложение Language.rar в одном из моих предыдущих постов? Там на секции разбиты отдельные функциональные блоки.
Если программа большая и языков несколько десятков, такой файл будет грузиться целую вечность.
И что Вам мешает создать подкаталог и помещать туда новые файлы, а названия этих файлов считывать в цикле while.
Тогда файл с новым языком будет включаться в список автоматически.

Здесь есть другая проблема. С кириллицей и латиницей, более менее просто. А вот как быть с арабскими, китайскими и японскими начертаниями? Как локально, в одной программе, изменить кодировку?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 10.01.2012, 11:15   #17
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Во первых я не спорю, с тем что лучше сделать в разных файлах. Я только предложил свой вариант. Хотя если уж такая большая программа, тогда для скорости лучше всего использовать не файлы, а ресурсы самой программы.

Во вторых пробoвал писать на разных языках LNG-файл, в том числе и на арабском. И в программе на Delphi XE2 всё корректно отображается. Может у Вас просто какая-нибудь старая версия Delphi?

Последний раз редактировалось FaTaL; 10.01.2012 в 11:18.
FaTaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
4 версии программы gunis7 Фриланс 2 27.11.2011 12:41
с русской версии на английскую WIN 7 СУПЕР ЧАЙНИК Windows 2 16.05.2011 22:07
Добавить в XML дополнительное поле используя appendChild. Alfiks Microsoft Office Excel 1 14.03.2011 12:59
Создание портабл версии программы. Dartar Общие вопросы Delphi 2 26.12.2010 16:41
Добавить информацию о версии программы Alex Cones Общие вопросы Delphi 2 27.11.2009 09:18