AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fastreport, mehrsprachige Reports
Thema durchsuchen
Ansicht
Themen-Optionen

Fastreport, mehrsprachige Reports

Ein Thema von EarlyBird · begonnen am 14. Feb 2013 · letzter Beitrag vom 16. Feb 2013
Antwort Antwort
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#1

AW: Fastreport, mehrsprachige Reports

  Alt 14. Feb 2013, 11:47
Dein Weg mit dem Mastertemplate gefällt mir dagegen schon recht gut
Danke aber das ist mir zu umständlich, da ich bei Änderungen immer so viele Dateien änder muss.
Auch auf verschiedenen Servern.

was mir gerade einfällt du könntest mit der uses Klausel eine Sprachdatei einbinden in dem Textkonstanten vorhanden sind und diese dann verwenden.
Das muss ich mal zu ende Denken ob es mir wirklich weiterhilft.


je mehr ich darüber nachdenke scheint mir Lösung mit der Datenbank die die flexibelste zu sein.
Ich könnte die Objektnamen aus dem Report in einer Tabelle speichern und dann in "Sprachfeldern" die jeweilige Übersetzung
Nach dem Laden des Reports kann ich dann in einer Schleife alle Reportobjecte suchen und den Text anpassen.
Was meint Ihr dazu?

Weitere Anregungen und Meinungen sind herzlich Willkommen
  Mit Zitat antworten Zitat
DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Fastreport, mehrsprachige Reports

  Alt 14. Feb 2013, 11:52
Wir machen das, indem die beschriftungsfelder eigene Funktionen erhalten, welche dann vom programm übersetzt werden.

Stichworte "AddFunction" bzw. "TfrxReport.OnUserFunction"

Die Variante mit Templates und Ableitungen ist gut, hat aber den Nachteil das man 2 Scripte hat, da nur das Layout und nicht das Script vererbt ist (das könnte man aber selbst implementieren).
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#3

AW: Fastreport, mehrsprachige Reports

  Alt 14. Feb 2013, 12:15
Wir machen das, indem die beschriftungsfelder eigene Funktionen erhalten, welche dann vom programm übersetzt werden.

Stichworte "AddFunction" bzw. "TfrxReport.OnUserFunction"

Die Variante mit Templates und Ableitungen ist gut, hat aber den Nachteil das man 2 Scripte hat, da nur das Layout und nicht das Script vererbt ist (das könnte man aber selbst implementieren).
Das habe ich nicht ganz verstanden.
Kannst Du es mir bitte ein bisschen genauer erklären?
  Mit Zitat antworten Zitat
DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Fastreport, mehrsprachige Reports

  Alt 14. Feb 2013, 12:37
du kannst in FR ja callbacks implementieren. Dann kannst Du aus dem Listengestalter heraus funktionen aufrufen, die Programmseitig abgearbeitet werden und dann ein ergebnis in den Listengestalter zurückgeben.

Du kannst zB im FR eine Funktion registrieren "translate(konstante: String) : string)"

In dein Memo schreibst Du dann den Funktionsaufruf "[translate('artikel')]"

FR ruft dann zum Zeitpunkt des Drucks Deine Delphi Funktion auf, darin kannst Du dann zB dinge machen wie
"If Kunde = EN then Result:='article no.'"
"If Kunde = D then Result:='Artikel'"

Dadurch hast du zur DesignTime der Liste überall konstanten, die dann von deiner Software in Abhängigkeit andere Werte zurückgeben. Wir haben zB immer ein Wörterbuch (Dictionary) aus der DB im Cache geladen, welches alle Konstanten hält.
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Fastreport, mehrsprachige Reports

  Alt 14. Feb 2013, 13:08
beim Erstellen des TfrxReport auf die Variablen zugreifen & die Texte entsprechend setzen:

Delphi-Quellcode:
var
  i : Integer;
  Variable : TfrxVariable;
  MemoFeld : TfrxMemoView;
begin
  i := Report.Variables.IndexOf('ReportVariable');
  if i <> -1 then
  begin
    Variable := Report.Variables.Items[i];
    Variable.Value := QuotedStr('Anzeigetext');
  end;

...

Report.ShowReport();
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#6

AW: Fastreport, mehrsprachige Reports

  Alt 14. Feb 2013, 13:12
könnte man doch auch innerhalb des Reportes steuern, hätte den Vorteil dass es nur für den jeweiligen Report angepasst werden müsste. Bei der Steuerung vom aufrufenden Programm müsste das ja jedes mal angepasst werden wenn etwas ergänzt oder verändert wird...
  Mit Zitat antworten Zitat
ensaron

Registriert seit: 29. Aug 2008
Ort: 10369 Berlin
63 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Fastreport, mehrsprachige Reports

  Alt 14. Feb 2013, 13:25
Ähnlich wie user0815 mit den Variablen nutze ich folgende Funktion um die Komponenten eines Reports zu übersetzen (mittels der gnugettext):

Delphi-Quellcode:
for i := 0 to Report.ComponentCount - 1 do
begin
  if Report.Components[i] is TfrxMemoView then
  begin
    TranslateMemo := TStringList.Create;
    try
      TranslateMemo.Text := TfrxMemoView(lComponent).Memo.Text;
      for j := 0 to TranslateMemo.Count - 1 do
        TranslateMemo[j] := _(TranslateMemo[j]); //Übersetzungsfunktion der gnuggettext
      TfrxMemoView(lComponent).Memo.Text := TranslateMemo.Text;
    finally
      TranslateMemo.Free;
    end;
  end;
end;
Report.ShowReport;
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#8

AW: Fastreport, mehrsprachige Reports

  Alt 15. Feb 2013, 12:38
Du kannst zB im FR eine Funktion registrieren "translate(konstante: String) : string)"

In dein Memo schreibst Du dann den Funktionsaufruf "[translate('artikel')]"

Dadurch hast du zur DesignTime der Liste überall konstanten, die dann von deiner Software in Abhängigkeit andere Werte zurückgeben. Wir haben zB immer ein Wörterbuch (Dictionary) aus der DB im Cache geladen, welches alle Konstanten hält.
Vielen Dank für die Info.
Ich habe es gerade getestet und es funktioniert wie gewünscht.
Ich werde es nun mit der registrierten Funktion implementieren.
So kann ich die Übersetzungen gut in der Datenbank speichern und bei bedarf anpassen ohne den Report zu ändern.
Und ich brauche nur einen Report für viele Sprachen

Noch eine weitere Frage:
Übergebt Ihr alle möglichen Konstanten aus dem Wörterbuch an den Report damit sie als Auswahlliste im Designer zur Verfügung stehen?
Und Wenn ja wie?
  Mit Zitat antworten Zitat
DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: Fastreport, mehrsprachige Reports

  Alt 15. Feb 2013, 14:10
nein, wir geben den konstantennamen zurück, wenn es keine übersetzung exstiert. wir haben allerdings eine möglichkeit implementiert, vom reportdesigner aus in unser wörterbuch zu schauen, damit man weiß welche konstanten bereits vorhanden sind und somit automatisch übersetzt werden.

das andere bsp (wurde hier auch schon einmal vorgeschlagen) haben wir aber auch implementiert:

darin werden alle felder übersetzt, in abhängigkeit dessen was im listenlayout hinterlegt wurde. man hat aber dadurch das problem "zufälliger übersetzungen"

Code:
   For I:=0 to frxReport1.ComponentCount-1 do
       If (frxReport1.Components[I] IS TfrxMemoView)then
          begin
           If not (Sender=btDesignReport) then//keine Übersetzung der Captions im Designer!
              (frxReport1.Components[I] AS TfrxMemoView).Memo.Text:=DM1.GetFieldAlias(Trim((frxReport1.Components[I] AS TfrxMemoView).Memo.Text));
           (frxReport1.Components[I] AS TfrxMemoView).DisplayFormat.DecimalSeparator:=FormatSettings.DecimalSeparator;
           If (frxReport1.Components[I] AS TfrxMemoView).Frame.Width=1 then
              (frxReport1.Components[I] AS TfrxMemoView).Frame.Width:=0.1;
          end
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#10

AW: Fastreport, mehrsprachige Reports

  Alt 15. Feb 2013, 14:23
nein, wir geben den konstantennamen zurück, wenn es keine übersetzung exstiert.
Ich gebe den konstantennamen mit angehängtem ? zurück.
Damit sieht man sofort wo etwas fehlt

wir haben allerdings eine möglichkeit implementiert, vom reportdesigner aus in unser wörterbuch zu schauen, damit man weiß welche konstanten bereits vorhanden sind und somit automatisch übersetzt werden.
Kannst Du mir da noch einen Tipp geben wie Ihr das gelöst habt.
So eine List würde ja schon mal viel helfen beim erstellen der Reports
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz