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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2011, 01:31   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Держи компонент

В кратце:
TbsPolyglotManager кидаем только на гл. форму.
TbsPolyglotTranstator на гл. форму и на все последующие формы в проекте.

Копилируем проект.
Далее Project -> Generate LNG File -> и выбираем что нужно. По умолчанию перебирает и формы и строковые ресурсы.

вот выдрал из своего проекта процедуру смены языков:
Код:
procedure FillLanguages;
var
  i: SmallInt;
  iTrans: TbsCorePolyglot;
begin
  //Polyglot manager
  MainForm.PolyglotManager.LangsDir := HLR_GetLanguagesDir;
  //Мой ComboBox "сменьщик" языков
  SettingsForm.LangsBox.Items.Clear;
  iTrans := TbsCorePolyglot.GetCorePolyglot;
  for i := 0 to iTrans.LangCount - 1 do
  begin
    SettingsForm.LangsBox.Items.Add(itrans.Langs[i]);
    if iTrans.Langs[i] = iTrans.CurrentLang then
      SettingsForm.LangsBox.ItemIndex := i;
  end;
end;

P.S. Если уж говорить о прямоте рук и извилинах то, почему все напрочь забывают о существовании RTTI?
Вложения
Тип файла: zip BalmsoftPolyglot.zip (970.5 Кб, 12 просмотров)

Последний раз редактировалось Человек_Борща; 21.02.2011 в 01:34.
Человек_Борща вне форума Ответить с цитированием
Старый 21.02.2011, 02:04   #12
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Спс. Посмотрю.
з.ы. Но вопрос первоначальный все равно как бы не закрыт...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 21.02.2011, 02:19   #13
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
заменять соответственные ресурсные строки из файла
для не русских поясните пожалуста , не уверен что правельно понял
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.02.2011, 02:35   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

ArtGrek
В программе строка "this is my resource string"
в файле "Это моя строка как строковой ресурс"

В run-time происходит замена того что в программе тем что в фаиле.

хм а как вариант, в готовом exe все строковые ресурсы имеют свой номер. Как насчёт того чтобы сохранять в ini переменные с этими именами и номерами? А потом так же их подгружать но с другими значениями? (Так делает Polyglot)

Последний раз редактировалось Человек_Борща; 21.02.2011 в 02:44.
Человек_Борща вне форума Ответить с цитированием
Старый 21.02.2011, 02:46   #15
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вот Человек_Борща правильно пояснил...

Цитата:
хм а как вариант, в готовом exe все строковые ресурсы имеют свой номер. Как насчёт того чтобы сохранятьь в ini рнонменные с этими именами и номерами? А потом так же их подгружать но с другими значениями?
Так после компиляции вот те номера, которые мы сохраним в файл не совпадут с теми что будут...вот тут-то и загвоздка...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 21.02.2011, 03:07   #16
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

При каких условиях?

Если произошли изменения? Допилили новые строки в resorcestrings? Нет, ничего не изменится, старые строки будут иметь теже номера.

единственно что программа не сможет найти в старых файла новые строки, и будет грузить дефолтные.
Человек_Борща вне форума Ответить с цитированием
Старый 21.02.2011, 03:22   #17
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
При каких условиях?

Если произошли изменения? Допилили новые строки в resorcestrings? Нет, ничего не изменится, старые строки будут иметь теже номера.

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

А и кстати
Цитата:
сохранятьь в ini рнонменные с этими именами
я так понял сохранять имена ресурсстрингов, так ведь? А смысл, если будут известны id?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 21.02.2011, 12:52   #18
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от spamer Посмотреть сообщение
А что вы имели ввиду под этим? Можно конкретнее.
Ну в общем это немного бредовая идея, но она работает. Почему Борланд это не автоматизировал, я не знаю. А может ITE что-то подобное и использует, не помню. Короче, шаги такие:

1) Создаём ДДЛ-ки со строками для каждого языка. Вот код для ДЛЛ с языком ENG, остальные ДЛЛ создаются аналогично, меняется только имя и сами строки.

Код:
library
  str.Eng;

resourcestring
  a = 'Foo.ENG';
  b = 'Bar.ENG';

var
  s: string;
begin
  {$O-}
  s := a + b; // so compiler will include a and b into DLL
end.
2) Пишем наше приложение, и в нем указываем те же строки и в том же порядке, что и в ДЛЛ. Это важно, иначе ничего не будет работать! В частности, если приложение использует другие модули, которые объявляют свои resourcestring (а в VCL их дофига), то нумерация строк в ДЛЛ и в приложении будет разная. Выход - включить в ДЛЛ те же модули и в том же порядке, что и в приложении. Но не факт, что это поможет ) Вот примерный код приложения:

Код:
program
  resUse;

uses
  Windows;

resourcestring
  a = 'Foo.Neutral';
  b = 'Bar.Neutral';

var
  g_m: hModule;

// --  --
procedure patchStrings(const module: string; strings: array of pointer);
var
  i: integer;
  r: PResStringRec;
begin
  g_m := LoadLibrary(PChar(module));
  for i := low(strings) to high(strings) do begin
    //
    r := PResStringRec(strings[i]);
    r.Module^ := g_m;
  end;
end;

var
  s: string;
begin
  patchStrings('str.ENG.dll', [@a, @b]);
  //
  s := a + ', ' + b;	// Foo.ENG, Bar.ENG
end.
Как видно, самое интересное происходит в patchStrings(), ей передаётся имя ДЛЛ со строками на том языке, который хотим видеть, и список строк, которые нужно "пропачить".

Возможно, проблему с нумерацией строк можно как-то решить по-другому, пока не придумал )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 21.02.2011, 22:26   #19
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

veniside, а у вас данный код работает? Ибо я не смог добиться нужного результата. А в дебаге если смотреть, то видно, что r.Module^ не меняется...

И еще насчет смены идентификатора (к посту #17), действительно вроде не меняется - так если даже и получу список номеров строк, все равно вопрос остается, а как же подменить...
Может еще есть какие-то варианты...?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 21.02.2011, 22:32   #20
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

попалось в процессе поисков,думаю ето по вашеи теме
Многоязычный интерфейс приложений в Delphi
http://www.codenet.ru/progr/delphi/stat/multilang.php
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание TImage в Run-time mrbadge Помощь студентам 9 03.02.2011 22:48
Run-time error 13 olimpus Microsoft Office Excel 11 25.12.2010 22:49
Создание компонентов Run Time Serebah Общие вопросы Delphi 13 08.12.2010 22:02
Заполнение cxLookupComboBox в run time fake2 БД в Delphi 0 17.05.2010 08:31
ActionManager - работа в run - time chingiz Компоненты Delphi 0 10.10.2009 08:48