Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
Delphi 7 Enterprise
|
AW: Fastreport, mehrsprachige Reports
15. Feb 2013, 20:19
Wir haben das wie folgt gelöst (es wird Localizer eingesetzt, aber die Funktion GetTranslatedProperty sowie die Native-Abfrage kann ja leicht angepasst werden). Die Funktion wird dann vor dem ShowReport oder PrepareReport aufgerufen.
Delphi-Quellcode:
procedure PrepareFrx(Report : TFrxReport);
//------------------------------------------------------------------------
// Abfrage der Strings aus Localizer
//------------------------------------------------------------------------
function GetTranslatedProperty(const FormName, PropertyName : string): string;
begin
Result := LocOnFly.LocalizerOnFly.GetTranslatedProperty(Formname, PropertyName);
end;
var
i : integer;
ResString : widestring;
FormName, CompName : string;
Native : boolean;
begin
// Feststellen, ob übersetzt werden müss
Native := (LocalizerOnFly.NativeLocale = LocalizerOnFly.CurrentLocale);
// Name der Elternkomponente, sollte immer das Formular sein ...
if Report.Owner <> nil then
Formname := Report.Owner.Name;
// Alle Reportkomponenten durchlaufen
for i := 0 to Report.ComponentCount-1 do
begin
// wenn es ein Textfeld ist
if TFrxComponent(Report.Components[i]) is TFrxMemoView then
begin
// Die Spezialfälle eintragen, die müssen dann so heißen
CompName := Lowercase(TFrxComponent(Report.Components[i]).Name);
if CompName = 'qrluser' then
TFrxMemoView(Report.Components[i]).Memo.Text := UserName
else
if CompName = 'qrlprogramname' then
TFrxMemoView(Report.Components[i]).Memo.Text := ProgramName+' '+CopyRight
else
if CompName = 'qrlversion' then
TFrxMemoView(Report.Components[i]).Memo.Text := ProgramVersion
else
if not Native then
begin
// Wenn Übersetzung notwendig, dann den übersetzten String holen
// ResString := LocOnFly.LocalizerOnFly.GetTranslatedProperty(Formname,TFrxComponent(Report.Components[i]).Name+'.Memo.UTF8');
ResString := GetTranslatedProperty(Formname,TFrxComponent(Report.Components[i]).Name+'.Memo.UTF8');
// und eintragen
if ResString <> '' then
TFrxMemoView(Report.Components[i]).Memo.Text := ResString;
// wichtig, da UTF8 keine CHARSETS verträgt! Localizer trägt aber
// beim Einlesen der Übersetzung das Charset der Zielsprach-Lokale ein.
// Also DEFAULT_CHARSET setzen
TFrxMemoView(Report.Components[i]).Font.Charset := 1;
end;
end;
end;
if frmData.tblSetup.FieldByName('WaterMark').AsString <> '' then
CreateReportWaterMark(Report, frmData.tblSetup.FieldByName('WaterMark').AsString);
end;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
|
|
Zitat
|