Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / 2 GunSmoker по поводу ITM / 25 сообщений из 112, страница 1 из 5
12.01.2012, 20:27
    #37611901
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Решил локализовать свое приложение, покурил Вашу статью , очень здорово написано, спасибо!

Столкнулся с проблемой. У меня в приложении есть дата-модуль (у которого, само собой, есть DFM-файл), так вот этот DFM не попадает в проект локализации.

Вот, генерирую визардом русскую локализацию, создается проект MyCoolApplication.RUS, в который попадают DFM-файлы от всех форм моего проекта, а DFM от дата-модуля туда не попадает. Получается, когда я выбираю в меню IDE пункт Project/Languages/Set Active (Русский(Россия)) , приложение при запуске выбивает ексепшен

Код: plaintext
Project MyCoolApplication.exe raised exception class EResNotFound with message 'Resource TDM not found'.

поскольку сериализованные данные форм тянутся уже из ресурсной DLL, а в этой ресурсной DLL нет DFM-ки от дата-модуля.

Если из приложения исключить дата-модуль, то все формы нормально локализуются и все работает.

Если в проект локализации добавить DFM от дата-модуля вручную, то при клике на эту DFM вместо Translation editor открывается исходник дата-модуля.

Может быть, я что-то делаю не так. Посоветуйте, как это пофиксить или обойти.

When a movie is over, it's a black
...
Рейтинг: 0 / 0
13.01.2012, 01:07
    #37612212
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Не могу ничего специального сказать про модули данных - с базами данных я работаю крайне редко. Есть мнение, что он не должен отличаться от формы.

Попробовал воспроизвести ситуацию на пустом проекте (XE2) - не получилось. Модуль данных нормально попал в оба языковых проекта (два языка создавал). При загрузке опять же, нормально всё работало.

Возможно, среда почему-то не может его найти. Быть может, модуль (unit) с модулем данных не подключен как часть проекта или что-то такое?

В общем, не знаю.
...
Рейтинг: 0 / 0
13.01.2012, 01:10
    #37612215
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Тоже ничего сказать не могу, но есть предположение, что не попадает, потому что нечего локализировать. Нет ни resourcestring, ни визуальных элементов. Ничего нет у автора.
...
Рейтинг: 0 / 0
13.01.2012, 02:18
    #37612248
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Попробовал на пустом проекте с дата-модулем, DFM-ка дата-модуля попадает под локализацию. Пичалька.
...
Рейтинг: 0 / 0
13.01.2012, 02:20
    #37612249
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
GunSmokerБыть может, модуль (unit) с модулем данных не подключен как часть проекта или что-то такое?
Подключен, там все честно.

Если разберусь, что у меня не работает - отпишусь.
...
Рейтинг: 0 / 0
13.01.2012, 02:36
    #37612259
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Да, у меня был косяк в .dproj-файле. Дата-модуль был объявлен без ссылки на его форму. Все в порядке.
...
Рейтинг: 0 / 0
13.01.2012, 14:15
    #37613060
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
По поводу перевода. Может лучше использовать сторонние компоненты или программы?

Я в прошлом году перепробовал несколько разных компонент и программ.
Остановился на Radialix.
Программа на русском, сравнительно не дорого. Русскоязычная тех. поддержка в виде форума.
Я не вижу смысла в динамическом переключении языков (и не только я).

Radialix очень похожа на Lingobit, но стоимость последней.... для компаний-миллионеров.
Очень большое преимущество таких программ - это перевод, используя готовые программы перевода и онлайн сервисы, типа гуглопереводчика или M$переводчика. Гуглопереводчик значительно умнее оказался. M$переводчик переводит в стиле "Моя идёт купаться" или "Один палка два струна - я хозяин вся страна".

Выделил в таблице 1-2-50 строк, нажал кнопку, подождал 10-15 секунд - готово, только подкорректировать нужно.
Я не знаю, как в других случаях, но при переводе с русского на украинский гуглопереводчик даёт на 99% верный, литературно-правильный и корректный перевод. Единственное, что иногда добавляет лишние пробелы перед скобками, многоточием и другими служебными символами.

Я обращался к автору каких-то delphi компонент для перевода с просьбой добавить такой функционал в его компоненты. Авто не поддержал мою идею.

Но время перевода с помощью ПроМТ или гуглопереводчика сокращается в разы.

Где-то Radialix лучше, а где-то Lingobit. Везде есть свои ++ и --, в том числе и баги.
Ещё прелесть Radialix`а в том, что отдавая проект перевода переводчику, не нужно покупать дополнительную лицензию на Radialix, т.к. в режиме "Переводчик" программу можно использовать бесплатно.

Там можно как-то сделать и динамическое переключение, используя библиотеки ресурсов, но я пока не понял как, а в справке очень слабо описано. Сама программа Radialix так использует локализацию - 1 exe`шник + несколько Dll с переводом.
Если кто подскажет - буду рад.

В каких-то других компонентах я обнаружил неплохую возможность перевода данных из базы, т.е. можно держать справочники в разных языках.
...
Рейтинг: 0 / 0
13.01.2012, 14:26
    #37613087
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
X11По поводу перевода. Может лучше использовать сторонние компоненты или программы?
Я работаю в профессиональном бюро переводов. Для перевода мы используем пакет SDL Trados , который умеет зачитывать билингуальный формат XLIFF (.dfn, .rcn - это XLIFF-файлы, которые генерирует штатный Delphi ITE). Переведенные XLIFF я просто "подкидываю" в проект локализации, ITE их компилирует в ресурс. Вуаля!
...
Рейтинг: 0 / 0
13.01.2012, 14:31
    #37613106
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
X11Там можно как-то сделать и динамическое переключение, используя библиотеки ресурсов, но я пока не понял как, а в справке очень слабо описано.
Если кто подскажет - буду рад.


Смотри ...\Samples\Delphi\VCL\RichEdit\reinit.pas, там готовый код для runtime-переключения языков приложения.


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
unit reinit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;

procedure ReinitializeForms;
function LoadNewResourceModule(Locale: LCID): Longint;

implementation

type
  TAsInheritedReader = class(TReader)
  public
    procedure ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer); override;
  end;

procedure TAsInheritedReader.ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer);
begin
  inherited ReadPrefix(Flags, AChildPos);
  Include(Flags, ffInherited);
end;

function SetResourceHInstance(NewInstance: Longint): Longint;
var
  CurModule: PLibModule;
begin
  CurModule := LibModuleList;
  Result := 0;
  while CurModule <> nil do
  begin
    if CurModule.Instance = HInstance then
    begin
      if CurModule.ResInstance <> CurModule.Instance then
        FreeLibrary(CurModule.ResInstance);
      CurModule.ResInstance := NewInstance;
      Result := NewInstance;
      Exit;
    end;
    CurModule := CurModule.Next;
  end;
end;

function LoadNewResourceModule(Locale: LCID): Longint;
var
  FileName: array [0..260] of char;
  NewName: string;
  LocaleName: array[0..4] of Char;
  NewInst: Longint;
begin
  GetModuleFileName(HInstance, FileName, SizeOf(FileName));

    // create libname from base name

  GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, LocaleName, SizeOf(LocaleName));
  NewInst := 0;
  Result := 0;
  begin
    if LocaleName[0] <> #0 then
    begin
      NewName := StringReplace(FileName, '.exe', '.' + String(LocaleName), [rfIgnoreCase]) ;

      // Then look for a potential language/country translation

      NewInst := LoadLibraryEx(PChar(NewName), 0, LOAD_LIBRARY_AS_DATAFILE);
      if NewInst = 0 then
      begin
        // Finally look for a language only translation

        LocaleName[2] := #0;
        NewName := StringReplace(FileName, '.exe', '.' + String(LocaleName), [rfIgnoreCase]) ;
        NewInst := LoadLibraryEx(PChar(NewName), 0, LOAD_LIBRARY_AS_DATAFILE);
      end;
    end;
  end;
  if NewInst <> 0 then
    Result := SetResourceHInstance(NewInst)
end;

function InternalReloadComponentRes(const ResName: string; HInst: THandle; var Instance: TComponent): Boolean;
var
  HRsrc: THandle;
  ResStream: TResourceStream;
  AsInheritedReader: TAsInheritedReader;
begin                   { avoid possible EResNotFound exception }
  if HInst = 0 then HInst := HInstance;
  HRsrc := FindResource(HInst, PChar(ResName), RT_RCDATA);
  Result := HRsrc <> 0;
  if not Result then Exit;
  ResStream := TResourceStream.Create(HInst, ResName, RT_RCDATA);
  try
    AsInheritedReader := TAsInheritedReader.Create(ResStream, 4096);
    try
      Instance := AsInheritedReader.ReadRootComponent(Instance);
    finally
      AsInheritedReader.Free;
    end;
  finally
    ResStream.Free;
  end;
  Result := True;
end;

function ReloadInheritedComponent(Instance: TComponent; RootAncestor: TClass): Boolean;

  function InitComponent(ClassType: TClass): Boolean;
  begin
    Result := False;
    if (ClassType = TComponent) or (ClassType = RootAncestor) then Exit;
    Result := InitComponent(ClassType.ClassParent);
    Result := InternalReloadComponentRes(ClassType.ClassName, FindResourceHInstance(
      FindClassHInstance(ClassType)), Instance) or Result;
  end;

begin
  Result := InitComponent(Instance.ClassType);
end;

procedure ReinitializeForms;
var
  Count: Integer;
  I: Integer;
  Form: TForm;
begin
  Count := Screen.FormCount;
  for I := 0 to Count - 1 do
  begin
    Form := Screen.Forms[I];
    ReloadInheritedComponent(Form, TForm);
  end;
end;

end.


...
Рейтинг: 0 / 0
13.01.2012, 15:14
    #37613230
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Квейд, на вскидку...
Новые формы (которых нет в Screen.Forms) создаются уже в новой LCID?
...
Рейтинг: 0 / 0
13.01.2012, 15:24
    #37613267
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
2Квейд и X11: а нет желания потом поделиться опытом в виде статьи сами знаете куда ? :)
...
Рейтинг: 0 / 0
13.01.2012, 15:30
    #37613285
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
КвейдСмотри ...\Samples\Delphi\VCL\RichEdit\reinit.pas, там готовый код для runtime-переключения языков приложения.

Который работает отвратительно, только на очень простых проектах нормально.
Проще перезапустить проект.
...
Рейтинг: 0 / 0
13.01.2012, 16:02
    #37613377
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
GunSmoker2Квейд и X11: а нет желания потом поделиться опытом в виде статьи сами знаете куда ? :)

Можно попробовать. Только я не уверен, что статью выпустят.
Я ни разу статьи не писал, тем более для журналов :)
...
Рейтинг: 0 / 0
13.01.2012, 16:09
    #37613399
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
X11GunSmoker2Квейд и X11: а нет желания потом поделиться опытом в виде статьи сами знаете куда ? :)

Можно попробовать. Только я не уверен, что статью выпустят.
Я ни разу статьи не писал, тем более для журналов :)
Напиши для GunSmoker, для его блога.
...
Рейтинг: 0 / 0
13.01.2012, 16:15
    #37613416
xen2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
про delloc знаете? (был в обзоре )
...
Рейтинг: 0 / 0
13.01.2012, 18:50
    #37613804
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
X11
Там можно как-то сделать и динамическое переключение, используя библиотеки ресурсов, но я пока не понял как, а в справке очень слабо описано. Сама программа Radialix так использует локализацию - 1 exe`шник + несколько Dll с переводом.
Если кто подскажет - буду рад.

Как оказалось, в Radialix это решается просто: включение в программе нужного чекбокса для создания dll и потом копирование созданных dll в папке программы.

Нужно будет попробовать.
...
Рейтинг: 0 / 0
13.01.2012, 19:45
    #37613895
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
OFF
Квейд> Я работаю в профессиональном бюро переводов.
А кто у вас именно переводом занимается? Сотрудники/агенты/фриланс переводчики? Не гугл же...
Как обходитесь с "предметными областями", терминами?
...
Рейтинг: 0 / 0
13.01.2012, 21:52
    #37614054
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
GatorOFF
Квейд> Я работаю в профессиональном бюро переводов.
А кто у вас именно переводом занимается? Сотрудники/агенты/фриланс переводчики? Не гугл же...


Гугл у нас - один из заказчиков.

У нас в штате есть проджект-менеджеры, которые работают с удаленными переводчиками-фрилансерами.

Так же имеются штатные переводчики-профессионалы. Например, у нас переводчик, который переводит тексты на медицинскую тематику, имеет диплом врача.
...
Рейтинг: 0 / 0
14.01.2012, 05:02
    #37614310
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
X11Можно попробовать. Только я не уверен, что статью выпустят.
Я ни разу статьи не писал, тем более для журналов :)

Да ничего страшного. Могу помочь подправить, если будет нужно.

Но даже если вдруг почему-то в журнал не попадёт - работа не пропадёт же, найдём куда пристроить.
...
Рейтинг: 0 / 0
14.01.2012, 15:41
    #37614503
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Статью на какую тему? На тему сравнения двух программ? Или вообще на тему локализации?
...
Рейтинг: 0 / 0
14.01.2012, 19:49
    #37614706
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
GunSmoker2Квейд и X11: а нет желания потом поделиться опытом в виде статьи сами знаете куда ? :)Я закончу со своим проектом, и мог бы накропать статью. Другое дело, что imho Ваша статья про ITM - вполне себе раскрывает тему, нужно ли плодить сущности?
...
Рейтинг: 0 / 0
15.01.2012, 04:06
    #37614958
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Имелось в виду: вот есть теоретический материал по локализации - хорошо.

А можно было бы написать про практический аспект. Какие инструменты использовали, как их вместе соединяли, где брали словари/переводы, что там с совместимостью форматов, какие возникали проблемы, как их решали и т.п.
...
Рейтинг: 0 / 0
15.01.2012, 12:14
    #37615051
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
В принципе не было никаких особых проблем, была задача выбрать максимально удобный инструмент, с помощью которого можно было бы максимально быстро перевести и при этом потратить минимальное время на установку.
...
Рейтинг: 0 / 0
15.01.2012, 12:14
    #37615052
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Я понял, попробую что-то накрапать.
...
Рейтинг: 0 / 0
15.01.2012, 16:05
    #37615211
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 GunSmoker по поводу ITM
Ну, насильно вытаскивать из себя, конечно, не надо. Но если вдруг есть что интересное, чем можно поделится - было бы неплохо :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / 2 GunSmoker по поводу ITM / 25 сообщений из 112, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]