Форум: "Прочее";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
ВнизПосоветуйте компонент для локализации ПО, для D2009 Найти похожие ветки
← →
Кто б сомневался © (2009-06-08 12:54) [0]Пожалуйста не закрывайте топик.
Посоветуйте компонент для локализации программы, для D2009
Желательно:
Небольшой размер, производительность.
Было б еще лучше если б он был бесплатный.
Возможно у кого то есть недописанный модуль, который не жалко дать, - я попробую его дописать.
Спасибо.
← →
Кто б сомневался © (2009-06-08 12:56) [1]Кто чем пользуется? Что посоветуете?
← →
Dimka Maslov © (2009-06-08 12:59) [2]У меня есть такой модуль недописанный:
unit Locaizator;
interface
uses
Windows, SysUtils, Classes;
implementation
end.
← →
Кто б сомневался © (2009-06-08 13:03) [3]
> У меня есть такой модуль недописанный:
Смешно, согласен.
← →
oldman © (2009-06-08 13:12) [4]
> Кто б сомневался © (08.06.09 12:54)
>
> Посоветуйте компонент для локализации программы, для D2009
Что он с твоей точки зрения должен делать? Именно как компонент.
И как он это должен делать? Именно как компонент.
← →
oldman © (2009-06-08 13:17) [5]
> Кто б сомневался © (08.06.09 12:54)
Локализаций ПО занимаются целые фирмы.
А тебе компонент всего лишь...
:)
← →
test © (2009-06-08 13:39) [6]Ресурсы в DLL и при выборе выводить все заголовки из Dll для языка Х.
← →
Andy BitOff © (2009-06-08 13:41) [7]
> Кто б сомневался © (08.06.09 12:54)
http://delphimaster.net/view/16-1238483355/
← →
Кто б сомневался © (2009-06-08 14:23) [8]
> Что он с твоей точки зрения должен делать? Именно как компонент.
>
> И как он это должен делать? Именно как компонент.
Локализировать форму.
> И как он это должен делать?
Неважно. Как угодно.
← →
Andy BitOff © (2009-06-08 14:37) [9]
> Кто б сомневался © (08.06.09 14:23) [8]
Значит по ссылке то, что надо. Текстовой файл в формате ини. Точно не помню, но что-то типа того;
[frmMain]
lblMyLabel.Caption=КепшонМоегоЛабела
btnMyButton.Caption=КаптионМайБутон
btnMyButton.Hint=ХинтФорМайБутон
P.S. Сорри, за мой француский.
← →
Кто б сомневался © (2009-06-08 14:44) [10]
> Andy BitOff © (08.06.09 14:37) [9]
Да это вариант первый.
Но возможно будут еще варианты?
← →
oldman © (2009-06-08 15:20) [11]
> Кто б сомневался © (08.06.09 14:23) [8]
>
> > Что он с твоей точки зрения должен делать? Именно как
> компонент.
> >
> > И как он это должен делать? Именно как компонент.
>
>
> Локализировать форму.
Что такое по-твоему "локализовать"?
И почему этим должен заниматься "компонент"?
Может таки нанять переводчика и перевести сырцы на нужный тебе язык?
← →
oldman © (2009-06-08 15:24) [12]
> Кто б сомневался ©
Локализация ведь подразумевает не только подстрочный, а и смысловой перевод, так?
Представляю я себе этот "компонент" с прикрученным словарем...
Получишь ведь вместо "Use mouse driver" "Позови погонщика мышей" :)
← →
Онотоле (2009-06-08 16:00) [13]TsiLang
← →
Кто б сомневался © (2009-06-08 16:04) [14]
> Онотоле (08.06.09 16:00) [13]
>
> TsiLang
Я так понимаю вы пользовались им. Не подскажите, программу надо перезагружать после смены языка?
← →
Кто б сомневался © (2009-06-08 16:07) [15]
> Что такое по-твоему "локализовать"?
> И почему этим должен заниматься "компонент"?
> Может таки нанять переводчика и перевести сырцы на нужный
> тебе язык?
Локализация - это привязка (адаптация) программно-аппаратных средств к условиям и стандартам страны пользователя. Втч и отображение языка.
Это не синоним слова "перевод".
← →
Онотоле (2009-06-08 16:10) [16]
> Кто б сомневался © (08.06.09 16:04) [14]
>
>
> > Онотоле (08.06.09 16:00) [13]
> >
> > TsiLang
>
>
> Я так понимаю вы пользовались им. Не подскажите, программу
> надо перезагружать после смены языка?
не надо
← →
Игорь Шевченко © (2009-06-08 16:13) [17]а что, в D2009 Integrated translation environment убрали ?
← →
oldman © (2009-06-08 16:30) [18]
> Кто б сомневался © (08.06.09 16:07) [15]
> Локализация - это привязка (адаптация) программно-аппаратных
> средств к условиям и стандартам страны пользователя. Втч
> и отображение языка.
> Это не синоним слова "перевод".
Это долгая и муторная работа.
И компонент или процедура с этим не справятся.
← →
Кто б сомневался © (2009-06-08 16:50) [19]
> Это долгая и муторная работа.
> И компонент или процедура с этим не справятся.
Это один из остальных инструментов. Причем это базовый инструмент.
> Игорь Шевченко © (08.06.09 16:13) [17]
>
> а что, в D2009 Integrated translation environment убрали
> ?
Мне он не подходит. К тому же он вываливается с кучей ошибок (Update 3 установлен).
← →
Игорь Шевченко © (2009-06-08 16:53) [20]Кто б сомневался © (08.06.09 16:50) [19]
> Мне он не подходит
Ну парься...
Промежду прочим, он решает все твои задачи. Правда, глючен и неудобен, но реальной готовой альтернативы я не подобрал. То, что я видел (всякие локалайзеры) во-первых, еще более глючные, во-вторых, стоят денег.
Сам в итоге локализую руками, в смысле полусамостоятельно пишу ресурсы и вставляю в нужное место код для их загрузки.
← →
Кто б сомневался © (2009-06-08 16:56) [21]
> Игорь Шевченко © (08.06.09 16:53) [20]
>>Ну парься...
Наоборот не хочу с ним парится.. Да и идея нужна другая - чтобы был один exe, а языки были в отдельных txt редактируемых файлах.
← →
Игорь Шевченко © (2009-06-08 17:18) [22]Кто б сомневался © (08.06.09 16:56) [21]
Я к этому пришел путем ручного труда. Только не в txt, а в rc-файлах, и редактируются не абы как, а сначала редактируются, потом компилируются компилятором ресурсов, потом работают.
← →
Sapersky (2009-06-08 19:46) [23]Ну вот мне не жалко. Тем более что "ядро" ProcessProperties явно откуда-то скопипастено, стиль не мой... откуда - уже не помню.
// TIniBase - самописный аналог TIniFile, можно заменить на стандартный
procedure ProcessProperties(Parent : TPersistent; Ini : TIniBase;
Const NamePrefix : String = "";
CustomClassProc : TCustomClassProc = nil);
var
I, n, Count: Integer;
PropInfo: PPropInfo;
PropList: PPropList;
PropType: PTypeInfo;
Name : String;
Comp : TComponent;
procedure ProcessStrProp;
Var Value: string;
begin
Value := GetStrProp(Parent, PropInfo);
If (Value <> "") then
If (Ini.Mode = fmWrite) then
Ini.WriteString(Name + PropInfo.Name, Value)
else
If Ini.ReadStringEx(Name + PropInfo.Name, Value) then
SetStrProp(Parent, PropInfo, Value);
end;
procedure ProcessObjProp;
Var Obj : TObject;
Str : TStrings;
Coll : TCollection;
n : Integer;
Value, nm : String;
begin
Obj := GetObjectProp(Parent, PropInfo, TStrings);
If (Obj <> nil) then begin
Str := Obj as TStrings; nm := Name + PropInfo.Name;
If (Ini.Mode = fmWrite) then
For n:=0 to Str.Count-1 do
Ini.WriteString(nm + Num_2Str(n), Str[n])
else
For n:=0 to Str.Count-1 do
If Ini.ReadStringEx(nm + Num_2Str(n), Value) then Str[n] := Value;
end else begin
Obj := GetObjectProp(Parent, PropInfo, TCollection);
If (Obj <> nil) then begin
Coll := Obj as TCollection; nm := Name + PropInfo.Name;
For n:=0 to Coll.Count-1 do
ProcessProperties(Coll.Items[n], Ini, nm + Num_2Str(n));
end else
If Assigned(CustomClassProc) then CustomClassProc(Ini, Name, Parent, PropInfo);
end;
end;
begin
If Parent is TComponent then begin
Comp := Parent as TComponent;
Name := Comp.Name + ".";
end else begin
Comp := nil;
Name := NamePrefix + ".";
end;
Count := GetTypeData(Parent.ClassInfo)^.PropCount;
If (Count > 0) then begin
GetMem(PropList, Count * SizeOf(Pointer));
try
GetPropInfos(Parent.ClassInfo, PropList);
For I := 0 to Count - 1 do begin
PropInfo := PropList^[I];
If PropInfo = nil then break;
If ( IsStoredProp(Parent, PropInfo) ) and
( PPropInfo(PropInfo)^.SetProc <> nil ) and
( PPropInfo(PropInfo)^.GetProc <> nil ) then
begin
PropType := PPropInfo(PropInfo)^.PropType^;
Case PropType^.Kind of
tkString, tkLString {$IFDEF UNICODE}, tkUString {$ENDIF}:
ProcessStrProp;
tkClass : ProcessObjProp;
end;
end;
end;
finally
FreeMem(PropList, Count * SizeOf(Pointer));
end;
end;
If (Comp <> nil) then
For n := 0 to Comp.ComponentCount-1 do
ProcessProperties(Comp.Components[n], Ini, "", CustomClassProc);
end;
procedure SaveTextProperties(Comp : TComponent; Const Filename : String;
Section : String = "";
CustomProc : TCustomClassProc = nil);
Var Ini : TIniBase;
begin
Ini := TIniFile.Create(Filename);
Ini.Mode := fmWrite;
Ini.SetSection(Section);
ProcessProperties(Comp, Ini, "", CustomProc);
Ini.Free;
end;
function LoadTextProperties(Comp : TComponent; Const Filename, Section : String;
CustomProc : TCustomClassProc = nil): Boolean;
Var ini : TIniBase;// TIniFile;
begin
ini := TIniFile.Create(Filename, False);
If ( ini.Enabled ) and ( ini.SetSection(Section) ) then begin
ProcessProperties(Comp, Ini, "", CustomProc);
Result := True;
end else
Result := False;
Ini.Free;
end;
← →
Кто б сомневался © (2009-06-08 22:37) [24]Минус что код в двух постах, не поддерживает комбинированные компоненты типа TLabeledEdit.
Хм, будем искать. Не верю чтобы не было готового компонента для D2009 .
← →
Игорь Шевченко © (2009-06-08 22:41) [25]
> Не верю чтобы не было готового компонента для D2009
"Компонента для локализации" вообще-то не существует
← →
Кто б сомневался © (2009-06-09 10:35) [26]
> "Компонента для локализации" вообще-то не существует
что все юзают D2009 Integrated translation environment?
не верю..
← →
oldman © (2009-06-09 11:37) [27]
> Игорь Шевченко © (08.06.09 22:41) [25]
> "Компонента для локализации" вообще-то не существует
Я ему с самого начала намекаю, но он непробиваем...
← →
TIF © (2009-06-09 11:43) [28]Кто б сомневался © (09.06.09 10:35) [26]
> что все юзают D2009 Integrated translation environment?
Игорь Шевченко © (08.06.09 16:53) [20]
> То, что я видел (всякие локалайзеры) во-первых, еще более
> глючные, во-вторых, стоят денег.
Компоненты - это из другой оперы
http://ru.wikipedia.org/wiki/Компонентно-ориентированное_программирование
Кстати, Google выдаёт 25200 вариантов для азпроса про локализацию в Delphi:
http://www.google.com/search?q=%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+delphi
← →
TIF © (2009-06-09 11:46) [29]PS: ссылку из вики воспринимать не как ссылку на что-то полезное и в тему, а как ссылку на что-то, что отвлечёт автора от симбиоза локализации и компонентов :) Хотя вообще-то надо было тогда кинуть ссылку на развлекательный сайт...
← →
oldman © (2009-06-09 11:47) [30]
> TIF © (09.06.09 11:43) [28]
> Компонентно-ориентированное программирование
На Вику не пойду, попытаюсь перевести сам...
:)
← →
Игорь Шевченко © (2009-06-09 11:51) [31]TIF © (09.06.09 11:43) [28]
>
> Компоненты - это из другой оперы
> http://ru.wikipedia.org/wiki/Компонентно-ориентированное_программирование
А солнце - шар, дающий свет
← →
Кто б сомневался © (2009-06-09 12:26) [32]
> Я ему с самого начала намекаю, но он непробиваем...
Откройте словарь ,и посмотрите что есть локализация. Это не перевод.. Однин из базовых инструментов локализации, это компонент, загружающий языки на форму, который я и ищу. Так что сформулировано все правильно.
← →
test © (2009-06-09 12:34) [33]Одно время были вопросы какой компонент надо использовать чтобы запуздырить туда где часики, через некоторе время он появился, может это следующий вопрос?
← →
oldman © (2009-06-09 13:05) [34]
> Один из базовых инструментов локализации, это компонент
Где ты это вычитал?
← →
oldman © (2009-06-09 13:08) [35]
> загружающий языки на форму
Интересно, откудова он их "загружает"?
И что такое "загрузить языки на форму"?
← →
oldman © (2009-06-09 13:10) [36]Вот что такое "загрузить на форуме" я теперь догадываюсь...
← →
TIF © (2009-06-09 13:33) [37]Кажется автор ищет большой мультиязычный энциклопедический толково-компьютерно-программерский словарь в виде компонента :) С заранее переведенными на все языки мира наиболее часто встречающимися пунктами меню и названиями кнопок %-)
> Откройте словарь
Открыл словарь. Электронный. Стало тошнолокализация:
привязка программно-аппаратных средств к условиям и стандартам страны пользователя - internationalization
обнаружение, выявление - localization
Странно, но википедия оказалась умнее словаря
http://ru.wikipedia.org/wiki/Локализация
← →
Sapersky (2009-06-09 16:37) [38]Минус что код в двух постах, не поддерживает комбинированные компоненты типа TLabeledEdit.
Вот так вроде работает:
var
<...>
Child : TComponent;
begin
If Parent is TComponent then begin
Comp := Parent as TComponent;
Name := Comp.Name + ".";
If NamePrefix <> "" then Name := NamePrefix + Name;
end
<...>
If (Comp <> nil) then begin
For n := 0 to Comp.ComponentCount-1 do begin
Child := Comp.Components[n];
If csSubComponent in Child.ComponentStyle then
ProcessProperties(Child, Ini, Name, CustomClassProc)
else
ProcessProperties(Child, Ini, "", CustomClassProc);
end;
← →
любитель дельфинов (2009-06-09 16:45) [39]TcxLocalizer
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.005 c