Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Localizer für Delphi-Programme (https://www.delphipraxis.net/151630-localizer-fuer-delphi-programme.html)

RWarnecke 25. Mai 2010 21:35


Localizer für Delphi-Programme
 
Hallo zusammen,

ich möchte gerne mein Programm mehrsprachig machen. Dazu habe ich mittlerweile mehrere Localizer im Freewarebereicht ausprobiert. Hängen geblieben bin ich bei Lingus von wicht. Das Programm ist echt super. Nur einen Nachteil hat es, wenn ich zur DesignTime in der TTreeview Knoten festlege, werden diese nicht übersetzt. Der Grund dafür ist mir auch klar, da die Knoten in der DFM Datei nicht im Klartext stehen. Jetzt bin ich auf der Suche nach einem einfachen Localizer wie Lingus, der aber auch die Knoten eines TTreeViews übersetzen kann. Kennt jemanden einen Localizer als Freeware oder OpenSource, der so etwas kann ?

Andere Alternative wäre nur noch, den Inhalt von Items.NodeData auszulesen und da stellt sich mir die Frage, wie ?

wicht 25. Mai 2010 22:11

Re: Localizer für Delphi-Programme
 
Weil ich es gerade lese:
Hat jemand Infos, wie man diese "serialisierten" Daten auslesen könnte?
Bitte nicht hauen, weil ich mich noch nicht groß informiert habe...

Bernhard Geyer 25. Mai 2010 22:23

Re: Localizer für Delphi-Programme
 
Zitat:

Zitat von RWarnecke
Andere Alternative wäre nur noch, den Inhalt von Items.NodeData auszulesen und da stellt sich mir die Frage, wie ?

Hier wäre mein Liebling RTTI zu nennen. Wenn die relevanten NodeData-Infos als properties vorlegen könntest du das mithilfe der Funktionen aus der TypeInfo.pas-Unit machen. Bei D2010 dann die erweiterte RTTI vewenden.

himitsu 25. Mai 2010 22:32

Re: Localizer für Delphi-Programme
 
Zitat:

Zitat von RWarnecke
da stellt sich mir die Frage, wie ?

Hier gibt es 3 Alternativen:
* Entweder du deserialisierst diese Daten selber: (würde ich nicht machen, da man so sich erstmal in das Format einarbeiten und auch noch aufpassen muß, wenn sich dieses mal ändert (wie z.B. beim Sprung von D2007 nach D2009)

* Dann könne man den Teil der Item.Data, bzw. die ganze TreeView aus der DFM extrahieren und diese Daten von einer temporär erstellen TreeView deserialisieren lassen, dann ändert man über den tree die Daten und serialisiert am Ende alles wieder.

* Oder man läßt die komplette Form von der DFM deserialisieren, welches wohl das Beste ist, da man dann gleich alles über die VCL bearbeiten kann und ebenfalls auch hier am Ende wieder serialisieren.

Die letzen Beiden haben nur einen Nachteil.
Und zwar, daß man den Lokalisierer möglichst mit der selbe Delphi-Version kompiliert, womit auch diese Form serialisiert wurde.


Aber mal was Anderes, willst du deine Anwendung über eine Fremdanwendung lokalisieren und alles direkt in der EXE umbauen lassen
oder soll dieses zur Laufzeit und womöglich noch mit mehreren integrierten Sprachen passieren?

PS: Ich hatte ja auch noch keinen Lokalisierer gefunden, welcher mit gefällt und probiere seit 'ner ganzen Weile immer mal verschiedene Methoden aus.
> bei meinem Hier im Forum suchenFileSplitter liegen alle Strings und Dialoge (nonVCL-Formulare) in den Programmresourchen, wobei die Resourcen ja mit Sprachinfos versehen werden, so daß man alle Resourchen mehrfach eingebunden haben kann und sich dann eine passende Sprachversion ausließt.
> und aktuell eim Manifest-Creator wird zur Laufzeit durch die Form interirrt und da über eine XML ersatzstings gesucht, wärend Strings im Programm ebenfalls aus der XML ausgelesen werden.
(bei beidem hab ich aber noch nichts, welches erstmal automatisch eine String-/Wortliste aus dem Programm erstellt, so daß man sich die übersetzen Komponenten selber anlegen muß.)


Aber ganz im Ernst, Lingus hab ich irgendwie übersehn ... also k.A. wie das ist.



PS: Hatte Sakura nicht auch einen Lokalisierer?

RWarnecke 26. Mai 2010 03:40

Re: Localizer für Delphi-Programme
 
Zitat:

Zitat von Bernhard Geyer
Hier wäre mein Liebling RTTI zu nennen. Wenn die relevanten NodeData-Infos als properties vorlegen könntest du das mithilfe der Funktionen aus der TypeInfo.pas-Unit machen. Bei D2010 dann die erweiterte RTTI vewenden.

Hättest Du dazu Links, wo das ganze für die TypInfo.pas oder für die RTTI beschrieben steht ?
Zitat:

Zitat von himitsu
Aber mal was Anderes, willst du deine Anwendung über eine Fremdanwendung lokalisieren und alles direkt in der EXE umbauen lassen
oder soll dieses zur Laufzeit und womöglich noch mit mehreren integrierten Sprachen passieren?

Nein, ein Fremdprogramm soll die übersetzung nicht machen. So wie Lingus es amcht über eine Resourcedatei, finde ich es sehr praktisch.
Zitat:

Zitat von himitsu
Aber ganz im Ernst, Lingus hab ich irgendwie übersehn ... also k.A. wie das ist.

Probiere es einfach mal aus. Ich finde Lingus sehr praktisch.
Zitat:

Zitat von himitsu
PS: Hatte Sakura nicht auch einen Lokalisierer?

Ja, aber dieser wird nicht mehr weiterentwickelt und kann auch keinen TTreeView auslesen umd den Inhalt zu übersetzen.

himitsu 26. Mai 2010 22:17

Re: Localizer für Delphi-Programme
 
Nja, mal sehn, wie es damit aussieht.
Aktuell reicht mir mein eigenes System, welches sich hier so langsam die letzen Jahre entwickelt, auch wenn ich noch keinen Editor hab, aber so oft brauch ich sowas noch nicht.

Aber Lingus sieht schonmal nicht schlecht aus.



Jup, das von Sakura (hatte ich es mir also richtig gemerkt :) ) liegt wohl wirklich auf Eis ... nichtmal das Setup läuft richtig, also vorallem das optionale Video fehlt.

nahpets 27. Mai 2010 07:11

Re: Localizer für Delphi-Programme
 
Hallo,

RTTI und Delphi bei Google [google]+rtti +delphi[/google]
Erster Treffer bei delphi.about.com und die Seite gründlich lesen und deren Links folgen. Ein erster Überblick ergab, dass das Wesentliche, um damit das gewünschte zu erreichen, dort zu finden ist.

Habe vor Jahr und Tag mal eine RTTI-Komponente geschrieben, die mir zur Laufzeit alle Captions, Hints, Shortcuts... einer Anwendung rekursiv ausliest und in eine INI-Datei schreibt. Die kann man dann kopieren und "übersetzen". Über ein Menü kann man sich dann die seiner Sprache entsprechende INI-Datei auswählen, die wird dann über RTTI eingelesen und alle Captions, Hints und Shortcuts... werden im Programm entsprechend gesetzt. Natürlich merkt sich das Programm die zuletzt genutzte INI-Datei und startet beim nächsten Mal mit der zuletzt ausgewählten Sprache.

Die Komponente braucht man genau einmal, bindet sie in alle Programme ein und wer seine eigene Sprache für ein Programm haben will, der kann sich seine individuelle INI-Datei erstellen, übersetzen.... Damit spar' ich mir dann auch das Übersetzen, die Texte können jederzeit angepasst werden, ohne dass man nochmal an's Programm ranmuss.

Statt INI-Dateien könnte man natürlich auch XML nehmen, aber INI-Dateien haben den Vorteil, dass Notepad zum "Übersetzen" ausreicht.

Die Idee kam mir, als mir mal jemand eine DOT für Word auf Bayrisch gab, und nun alles in Word auf Bayrisch beschriftet war.

himitsu 27. Mai 2010 07:49

Re: Localizer für Delphi-Programme
 
Zitat:

Zitat von nahpets
aber INI-Dateien haben den Vorteil, dass Notepad zum "Übersetzen" ausreicht.

reicht bei XML auch :zwinker:
(drum konnte ich bis jetzt mein diesbezügliches himXML-Addon auch noch ohne so einen schönen Spracheneditor verwenden :angel2: )

mkinzler 27. Mai 2010 07:57

Re: Localizer für Delphi-Programme
 
Zitat:

reicht bei XML auch Zwinkern
Wobei eine Ini aber leichter verständlich ist. XML ist natürlich viel mächtiger

nahpets 27. Mai 2010 08:13

Re: Localizer für Delphi-Programme
 
Zitat:

Zitat von mkinzler
Zitat:

reicht bei XML auch Zwinkern
Wobei eine Ini aber leichter verständlich ist. XML ist natürlich viel mächtiger

Genau deshalb ja auch INI-Datei:
Code:
fmMain.acNew.Caption=Neu
fmMain.acNew.HelpKeyword=
fmMain.acNew.HelpContext=1020
fmMain.acNew.HelpType=0
fmMain.acNew.ShortCut=16462
fmMain.acNew.Hint=Neue Datei erstellen.
fmMain.acOpen.Caption=Öffnen
fmMain.acOpen.HelpKeyword=
fmMain.acOpen.HelpContext=1021
fmMain.acOpen.HelpType=0
fmMain.acOpen.ShortCut=16463
fmMain.acOpen.Hint=Datei öffnen.
fmMain.acSave.Caption=Speichern
fmMain.acSave.HelpKeyword=
fmMain.acSave.HelpContext=1022
fmMain.acSave.HelpType=0
fmMain.acSave.ShortCut=16467
fmMain.acSave.Hint=Datei im aktuellen Editor speichern.
fmMain.acSaveAs.Caption=Speichern unter
fmMain.acSaveAs.HelpKeyword=
fmMain.acSaveAs.HelpContext=1023
fmMain.acSaveAs.HelpType=0
fmMain.acSaveAs.ShortCut=16469
fmMain.acSaveAs.Hint=Datei unter anderem Namen speichern.
fmMain.acSaveAll.Caption=alles speichern
fmMain.acSaveAll.HelpKeyword=
fmMain.acSaveAll.HelpContext=1024
fmMain.acSaveAll.HelpType=0
fmMain.acSaveAll.ShortCut=0
fmMain.acSaveAll.Hint=Alle geöffneten Dateien speichern.
fmMain.acClose.Caption=Ende
fmMain.acClose.HelpKeyword=
fmMain.acClose.HelpContext=1025
fmMain.acClose.HelpType=0
fmMain.acClose.ShortCut=32856
fmMain.acClose.Hint=Beenden des Programmes.
Das ist der Auszug aus so einer INI-Datei. Das dürfte für den Laien deutlich einfacher zu "Übersetzen" sein, als eine entsprechende XML-Datei.

himitsu 27. Mai 2010 08:58

Re: Localizer für Delphi-Programme
 
Dabei hast du doch bei XML 'ne Menge Freiheiten, um es übersichtlich zu gestalten, wenn die Datei für eine manuelle Bearbeitung vorgesehn ist?

In diesem Fall würde ich zu Ersterem oder Letzeren tendieren.
XML-Code:
<?xml version="1.0"?>
<Options>
  <Main>
    <New>
      <Caption>Neu</Caption>
      <HelpKeyword></HelpKeyword>
      <HelpContext>1020</HelpContext>
      <HelpType>0</HelpType>
      <ShortCut>16462</ShortCut>
      <Hint>Neue Datei erstellen.</Hint>
    </New>
    <Open>
      <Caption>Öffnen</Caption>
      <HelpKeyword></HelpKeyword>
      <HelpContext>1021</HelpContext>
      <HelpType>0</HelpType>
      <ShortCut>16463</ShortCut>
      <Hint>Datei öffnen.</Hint>
    </Open>
    <Save>
      <Caption>Speichern</Caption>
      <HelpKeyword></HelpKeyword>
      <HelpContext>1022</HelpContext>
      <HelpType>0</HelpType>
      <ShortCut>16467</ShortCut>
      <Hint>Datei im aktuellen Editor speichern.</Hint>
    </Save>
    <SaveAs>
      <Caption>Speichern unter</Caption>
      <HelpKeyword></HelpKeyword>
      <HelpContext>1023</HelpContext>
      <HelpType>0</HelpType>
      <ShortCut>16469</ShortCut>
      <Hint>Datei unter anderem Namen speichern.</Hint>
    </SaveAs>
    <SaveAll>
      <Caption>alles speichern</Caption>
      <HelpKeyword></HelpKeyword>
      <HelpContext>1024</HelpContext>
      <HelpType>0</HelpType>
      <ShortCut>0</ShortCut>
      <Hint>Alle geöffneten Dateien speichern.</Hint>
    </SaveAll>
    <Close>
      <Caption>Ende</Caption>
      <HelpKeyword></HelpKeyword>
      <HelpContext>1025</HelpContext>
      <HelpType>0</HelpType>
      <ShortCut>32856</ShortCut>
      <Hint>Beenden des Programmes.</Hint>
    </Close>
  </Main>
  <Nochwas>
    ...
  </Nochwas>
</Options>
XML-Code:
<?xml version="1.0"?>
<Options>
  <Main>
    <New
      Caption="Neu"
      HelpKeyword=""
      HelpContext="1020"
      HelpType="0"
      ShortCut="16462"
      Hint="Neue Datei erstellen." />
    <Open
      Caption="Öffnen"
      HelpKeyword=""
      HelpContext="1021"
      HelpType="0"
      ShortCut="16463"
      Hint="Datei öffnen." />
    <Save
      Caption="Speichern"
      HelpKeyword=""
      HelpContext="1022"
      HelpType="0"
      ShortCut="16467"
      Hint="Datei im aktuellen Editor speichern." />
    <SaveAs
      Caption="Speichern unter"
      HelpKeyword=""
      HelpContext="1023"
      HelpType="0"
      ShortCut="16469"
      Hint="Datei unter anderem Namen speichern." />
    <SaveAll
      Caption="alles speichern"
      HelpKeyword=""
      HelpContext="1024"
      HelpType="0"
      ShortCut="0"
      Hint="Alle geöffneten Dateien speichern." />
    <Close
      Caption="Ende"
      HelpKeyword=""
      HelpContext="1025"
      HelpType="0"
      ShortCut="32856"
      Hint="Beenden des Programmes." />
  </Main>
  <Nochwas>
    ...
  </Nochwas>
</Options>
XML-Code:
<?xml version="1.0"?>
<Options>
  <Main>
    <New Caption="Neu" HelpKeyword="" HelpContext="1020" HelpType="0"
      ShortCut="16462" Hint="Neue Datei erstellen." />
    <Open Caption="Öffnen" HelpKeyword="" HelpContext="1021" HelpType="0"
      ShortCut="16463" Hint="Datei öffnen." />
    <Save Caption="Speichern" HelpKeyword="" HelpContext="1022" HelpType="0"
      ShortCut="16467" Hint="Datei im aktuellen Editor speichern." />
    <SaveAs Caption="Speichern unter" HelpKeyword="" HelpContext="1023" HelpType="0"
      ShortCut="16469" Hint="Datei unter anderem Namen speichern." />
    <SaveAll Caption="alles speichern" HelpKeyword="" HelpContext="1024" HelpType="0"
      ShortCut="0" Hint="Alle geöffneten Dateien speichern." />
    <Close Caption="Ende" HelpKeyword="" HelpContext="1025" HelpType="0"
      ShortCut="32856" Hint="Beenden des Programmes." />
  </Main>
  <Nochwas>
    ...
  </Nochwas>
</Options>
XML-Code:
<?xml version="1.0"?>
<Options>
  <Main>
    <New HelpKeyword="" HelpContext="1020" HelpType="0" ShortCut="16462">
      <Caption>Neu</Caption>
      <Hint>Neue Datei erstellen.</Hint>
    </New>
    <Open HelpKeyword="" HelpContext="1021" HelpType="0" ShortCut="16463">
      <Caption>Öffnen</Caption>
      <Hint>Datei öffnen.</Hint>
    </Open>
    <Save HelpKeyword="" HelpContext="1022" HelpType="0" ShortCut="16467">
      <Caption>Speichern</Caption>
      <Hint>Datei im aktuellen Editor speichern.</Hint>
    </Save>
    <SaveAs HelpKeyword="" HelpContext="1023" HelpType="0" ShortCut="16469">
      <Caption>Speichern unter</Caption>
      <Hint>Datei unter anderem Namen speichern.</Hint>
    </SaveAs>
    <SaveAll HelpKeyword="" HelpContext="1024" HelpType="0" ShortCut="0">
      <Caption>alles speichern</Caption>
      <Hint>Alle geöffneten Dateien speichern.</Hint>
    </SaveAll>
    <Close HelpKeyword="" HelpContext="1025" HelpType="0" ShortCut="32856">
      <Caption>Ende</Caption>
      <Hint>Beenden des Programmes.</Hint>
    </Close>
  </Main>
  <Nochwas>
    ...
  </Nochwas>
</Options>
PS: ShortCutToText macht sich nicht schlecht, für die Verständlichkeit.

PSS: Alles in der selben Sektion? (oder täuscht das nur)
Code:
fmMain.acNew.Caption=Neu
fmMain.acNew.HelpKeyword=
...
Code:
[fmMain]
acNew.Caption=Neu
acNew.HelpKeyword=
...
[ot]
vielleicht sollten wir langsam mal 'nen Ini-Thread aufmachen ... wird eh mal wieder Zeit für den virteljährlichen Apfel-Birnen-Vergleichs-Mecker-und-am-Ende-verlassen-User-beleidigt-das-Forum-Thread.

(nja, ich glaub inzwischen wurde aber eh schon fast alles gesagt)

Die Muhkuh 27. Mai 2010 09:03

Re: Localizer für Delphi-Programme
 
Ich verweise mal noch auf GNU GetText for Delphi (DXGetText)

nahpets 27. Mai 2010 09:39

Re: Localizer für Delphi-Programme
 
Zitat:

Zitat von himitsu
Dabei hast du doch bei XML 'ne Menge Freiheiten, um es übersichtlich zu gestalten, wenn die Datei für eine manuelle Bearbeitung vorgesehn ist?

Natürlich kann man XML schön machen...
Natürlich kann man je Formular in der INI einen Abschnitt machen...
Natürlich kann man...

So wie es ist, kann ich den Eigenschaftsnamen ohne weitere "Überlegung" aus der INI-Datei lesen und den Wert zuweisen und muss mir die Sachen nicht erst beim Speichern auseinanderbröseln und beim Einlesen wieder zusammen setzen.

Ist reine Faulheit und erfüllt den Zweck auf eine für mich ausreichende Art und Weise.

Es führen auch hier, wie so oft, viele Wege nach Rom und meiner ist halt 'ne einfache INI-Datei ohne Schnörkel ;-)

haentschman 8. Jun 2014 08:38

AW: Localizer für Delphi-Programme
 
Guten Morgen... 8-)

auch wenn es beim Niesen hier staubt... das Thema ist nach wie vor aktuell. :P Ich stehe vor dem gleichen Problem. Lingus würde ich gern benutzen, da es sehr einfach in der Umsetzung ist. Nur will der Treeview immer noch nicht. :(

Gibt es inzwischen Workarounds? Alternative Treeviews?

PS: PN an Autor ist unterwegs...

Dejan Vu 8. Jun 2014 10:27

AW: Localizer für Delphi-Programme
 
Darf es etwas kosten? TSiLang wäre eine ausgereifte professionelle Lösung. Inklusive separatem Übersetzungseditor, Wörterbuch, Repository etc.

haentschman 14. Jun 2014 10:24

AW: Localizer für Delphi-Programme
 
Guten Morgen... 8-)

Sorry für die späte Antwort...
Zitat:

Darf es etwas kosten?
...grundsätzlich mal ja. Ich habe mir auch schon diverse kommerzielle Sachen angeschaut. Ohne diese Trial Versionen in die IDE zu installieren ist eine Beurteilung des Handlings kaum möglich.

TsiLang kommt mir schon persönlich entgegen. Keine externen Spachdateien etc. ... Alles in der EXE. Ausnahmsweise werde ich mal die Testversion installieren... :)

Danke...

Jens01 14. Jun 2014 11:32

AW: Localizer für Delphi-Programme
 
i18n

Dejan Vu 14. Jun 2014 12:06

AW: Localizer für Delphi-Programme
 
Zitat:

Zitat von haentschman (Beitrag 1262279)
TsiLang kommt mir schon persönlich entgegen. Keine externen Spachdateien etc.

Du kannst die Sprachen auch in externen Dateien vorhalten. Das ist ideal, wenn Du für einen Kunden im Ausland die Übersetzung nicht selbst machen willst oder kannst. Denen gibst Du einfach den separaten Übersetzungseditor.

haentschman 15. Jun 2014 11:38

AW: Localizer für Delphi-Programme
 
Moin... 8-)

Nach ein paar Testungen:

i18n macht auch einen schmalen Fuß. Hier ist allerdings immer ein Language File in Benutzung. (Wer es besser weiß, bitte melden) Inzwischen kann ich mich auch mit dieser Variante anfreunden. Vor allem gefällt mir hier die Export / Import Varianten um die "Texte" an einen Übersetzer zu geben.

An dieser Stelle Dank an den Entwickler für die freie Verwendungsmöglichkeit... :thumb:

Nachtrag:
Enttäuschung...i18n findet manchmal Strings, manchmal nicht z.B. bei einem unveränderten Formular. Probleme hatte ich auch mit Konstanten... daher für mich nicht nutzbar. Ich werde wohl auf TsiLang wechseln. Lieber für Geld Ruhe als für umsonst Probleme...

generic 18. Jun 2014 13:57

AW: Localizer für Delphi-Programme
 
Du könntest dir noch mal http://www.sisulizer.de/ anschauen.

DeddyH 18. Jun 2014 14:11

AW: Localizer für Delphi-Programme
 
Richtig, allein schon, weil die beiden auf den Delphi-Tagen immer so freundlich und gut gelaunt sind.

haentschman 18. Jun 2014 16:15

AW: Localizer für Delphi-Programme
 
Hallöle...
Zitat:

Du könntest dir noch mal http://www.sisulizer.de/ anschauen.
...hab ich. Ist ein mächtiges Ding. Kann für meine Verhälnisse viel zu viel...und liegt außerhalb meines Budgets. (Professional 929€) :(

generic 19. Jun 2014 08:58

AW: Localizer für Delphi-Programme
 
Sakura (Daniel W.) hatte auch mal was geschrieben. Leider finde ich seine Homepage gerade nicht wieder. Die Software war kostenlos und hat mir sehr gut gefallen. Er sagt bei den Delphi-Tagen in Hamburg das er die Software auch OpenSource machen würde.

Vielleicht hast du Lust ihn noch mal da drauf anzubohren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz