Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мультиязыковая поддержка [D7, WinXP]


Страницы:   1 2 3

Still Swamp ©   (2008-01-31 13:07:00) 

Есть проект - около пяти сотен формочек.
Появилась забота перевести его на английский. Подозреваю что этим дело не ограничится.

До чего я додумался для визуальных объектов:
1. Сдлеать некую софтину которая обшуршивает DFM на предмет рускоязычнх сообщений и создает к ним файл. Сопоставляющий сигнатуру и содержимое.
2. Сделать форме метод которым она обшуршивает ресурс и все свои компоненты, подставляя вместо сигнатуры данные из файла.

Для кода.
1. Оббежать код собирая все что между скобками и содержит русский. Слить это в файл заменив текст коде вызовом возвращающим значение по сигнатуре.
2. Перекомпилить.

Прежде чем затеваться с таким деянием, хочу узнать, нет ли каких иных вариантов, или может кто то все вышеописанное уже реализовал?


Still Swamp   (2008-02-01 15:21:00) [21]

Автоматически более благозвучное имя я себе не представляю.
Такие вещи самому писать не дешевле.
Я вот полдня проковырялся, освоил работу со свойствами и получил себе приемлимую крутилку для локализации форм.

Идея нужна. Писанина - дело второе.
А вот идеи нет.


Anatoly Podgoretsky   (2008-02-01 15:10:00) [22]

> Dimaxx  (01.02.2008 14:04:16)  [16]

Не надо.


Игорь Шевченко   (2008-02-01 15:03:00) [23]


> Какие есть еще варианты?


1. Например вариант с заменой IDFG12387GG7877ACCC3742346 на более благозвучное имя.
2. Поискать в тырнете готовых локализаторов - их есть. Всяко дешевле, чем самому писать


Still Swamp   (2008-02-01 14:22:00) [24]

Вообще - с компонентами красиво получается. Кода на сотню строк, и переводы готовы.
А вот что делать с кодом - ума не приложу.
Ну допустим, я возму все исходники. Перешерстю их на предмет MessageBox('русский');

Заменю на
// IDFG12387GG7877ACCC3742346 = 'русский'
MessageBox(GetMLS(Lang, Resource, 'IDFG12387GG7877ACCC3742346'));

И что..? на меня оно потом из кода будет глядеть с укоризной.
Какие есть еще варианты?


Still Swamp   (2008-02-01 14:16:00) [25]

Я...я... натюрлих. Перебрать все свойства и поглядеть их типы куда веселее чем описывать каждый компонент.


Игорь Шевченко   (2008-02-01 14:14:00) [26]

Dimaxx ©   (01.02.08 14:04) [16]


> Почему?



>  // В этих строках перебираем все классы компонентов, которые
> нуждаются в локализации


Вот поэтому. Потому что существует процедура SetStrProp


Dimaxx   (2008-02-01 14:04:00) [27]


> Так не надо делать

Почему?


Игорь Шевченко   (2008-02-01 13:33:00) [28]


> Что такое ITE?


Intergated Translation Environment


Still Swamp   (2008-02-01 12:23:00) [29]

Что такое ITE?
Какие есть еще варианты борьбы с текстом в коде?


Игорь Шевченко   (2008-02-01 11:55:00) [30]


> А кто мешает сделать примерно так?


Так не надо делать


Dimaxx   (2008-02-01 11:41:00) [31]


> Тут я не совсем отчетливо представляю себе как можно оббежать
> в рантайме все компоненты, а ни дай бог, там чье то нестандартное
> изделие попадется с каким нить свойством MyHint.

А кто мешает сделать примерно так?

var I: integer;
   C: TComponent;
   S: string;

begin
...
 C:=Components[I];
 // В этих строках перебираем все классы компонентов, которые нуждаются в локализации
 if (C.ClassName='TMenuItem') and ((C as TMenuItem).Caption<>'-') then (C as TMenuItem).Caption:='bla-bla';
 if C.ClassName='TRadioButton' then (C as TRadioButton).Caption:='bla-bla';
 if C.ClassName='TButton' then (C as TButton).Caption:='bla-bla';
 if C.ClassName='TCheckBox' then (C as TCheckBox).Caption:='bla-bla';
 if C.ClassName='TGroupBox' then (C as TGroupBox).Caption:='bla-bla';
 if C.ClassName='TLabel' then (C as TLabel).Caption:='bla-bla';
...
end;


Кто тебе мешает перебрать нестандартное? Например так: if C.ClassName='TShitHint' then (C as TShitHint).MyHint:='bla-bla'??

Ты же сам знаешь какие компоненты использовал...


Anatoly Podgoretsky   (2008-02-01 11:03:00) [32]

> @!!ex  (01.02.2008 10:34:10)  [10]

Да какая разница сколько форм, это экстенсивная характеристика, важнее как сделан проект, позволяет он использовать ITE или нет. Если нет, то все эти выше описаные манипуляции.


@!!ex   (2008-02-01 10:34:00) [33]

пять сотен формочек... нихреново...


Still Swamp   (2008-02-01 00:25:00) [34]

Вопрос как получить список свойств и как с ними работать - снимается. Разобрался.


Still Swamp   (2008-01-31 23:13:00) [35]

е мое.... а еще листы всякие которые вообще можно не найти...


Still Swamp   (2008-01-31 23:09:00) [36]

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

Теперь два способа построения.
1. Обшуршивание DFM. Надо писать парсер какой то. Это реально но лениво. Второй недостаток - требуется какая то предварительная подготовка как то сам по себе процесс сборки файла.
2. Действительно написать некий проц в Create формы, который при старте формы создаст файл если его не было, а потом потом тут же из него грузит значения. Те после первого старта приложение автоматом создаст необходимое, останется только перевести. Тут я не совсем отчетливо представляю себе как можно оббежать в рантайме все компоненты, а ни дай бог, там чье то нестандартное изделие попадется с каким нить свойством MyHint.

Высказывайтесь за и против.

И еще вопрос попутно. Как получить список свойств объекта? А так же тип. Без этого второй вариант несколько не жизнеспособен.


Игорь Шевченко   (2008-01-31 19:01:00) [37]


> До чего я додумался для визуальных объектов:
> 1. Сдлеать некую софтину которая обшуршивает DFM на предмет
> рускоязычнх сообщений и создает к ним файл. Сопоставляющий
> сигнатуру и содержимое.
> 2. Сделать форме метод которым она обшуршивает ресурс и
> все свои компоненты, подставляя вместо сигнатуры данные
> из файла.


Собственно, сделана программка, которая смотрит русскоязычные значения свойств в dfm, заменяет их на английский текст, и генерирует код для метода Loaded формы, в котором свойствам присваиваются их русскоязычные найденные значения.


Anatoly Podgoretsky   (2008-01-31 14:32:00) [38]

clickmaker ©   (31.01.08 13:16) [1]
Могу поспорить, что никаких resourcestring и в помине нет.


Dimaxx   (2008-01-31 13:50:00) [39]

А куда изящнее?? У меня код локализации в OnCreate формы сидит и при добавлении контролов даже переписывать ничего не надо. Тока в ini-файл добавлять не забывай строки и все.


Still Swamp   (2008-01-31 13:38:00) [40]

Ну те в общем я не оригинален и более изящных методов нет?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо