Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#15

AW: Fastreport, mehrsprachige Reports

  Alt 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 = 'qrluserthen
            TFrxMemoView(Report.Components[i]).Memo.Text := UserName
         else
         if CompName = 'qrlprogramnamethen
            TFrxMemoView(Report.Components[i]).Memo.Text := ProgramName+' '+CopyRight
         else
         if CompName = 'qrlversionthen
            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
  Mit Zitat antworten Zitat