Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm in mehreren Sprachen(keine Programmiersprachen) (https://www.delphipraxis.net/109650-programm-mehreren-sprachen-keine-programmiersprachen.html)

track 5. Mär 2008 10:55


Programm in mehreren Sprachen(keine Programmiersprachen)
 
Also da ich noch nie mit so was zu tun hatte, interressiert mich nun wie man solche Programme schreibt, die dann in andere Sprachen(eng, franz, ital) übersetzt werden.
Gibt es irgendwo was darüber zulesen? würde gerne sehen wie sowas im Code aussieht. Sicherlich gibt es unterschiedliche Möglichkeiten sowas zu machen. Interessant wäre es natürlich das die Übersetzung von anderen Benutzern auch erweiterbar wäre.
Mir fehlt der Ansatz wie das geht.

Wie macht Ihr das?

Blackheart 5. Mär 2008 11:04

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Schau mal hier
http://www.del-net.com/delphi/delphimultilan.html

sakura 5. Mär 2008 11:06

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Es gibt verschiedene Tools, die einem bei solchen Aufgaben behilflich sind. Heute veröffentliche ich meine erste Version eines solchen Tools, wenn Du Interesse hast, dann schaue Dir das Video an und/oder lade Dir das Tool herunter. Das Tool macht es eigentlich nur noch zu einer Fleißaufgabe alles zu übersetzen, da Du im Source Code fast gar nichts ändern musst (1-5 Zeilen im Schnitt).

Produktseite: http://www.wischnewski.tv/de/products/dw32pl.html

...:cat:...

sakura 5. Mär 2008 11:08

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Zitat:

Zitat von Blackheart
http://www.del-net.com/delphi/delphimultilan.html

DelNet ist extrem flexibel, aber mMn mit viel zu viel manuellem Aufwand verbunden. Ähnlich der Lösung von Max Kleiner: http://max.kleiner.com/sprache.htm (MultilangTranslator).

...:cat:...

Bernhard Geyer 5. Mär 2008 11:15

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Ich schmeiß mal GNU Gettext ins rennen.

RavenIV 5. Mär 2008 11:22

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Und ich werde dann mal Multilizer hinterherschicken.
Bemüh den google dafür.

himitsu 5. Mär 2008 11:25

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
menno, wollt ich auch grad nennen :cry:

Hier im Forum suchengnu gettext wird jedenfalls von vielen hier verwendet
und wenn du danach hier im Forum suchst, dann werden dir bestimmt auch noch ander solcher Projekte über den Weg laufen
(gab einige Diskusionen welches besser ist und was warum nicht oder so)


Nja und ich verwende aktuell mehrsprachige Resourcen
[dp]mehrsprachig*[/dp]

track 5. Mär 2008 11:45

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
vielen dank!
muss das ganze erst mal verdauen :mrgreen:

ConstantGardener 10. Mär 2008 22:11

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
hallo zusammen,

auch ich suchte gerade nach einer "einfachen" Möglichkeit um meine Anwendungen auf mehrere Sprachen zu trimmen. Das ist jetzt glaub ich mein dritter Anlauf zu dem Thema.

Und siehe da.... Sakura zaubert ein geniales Tool aus dem Hut (Handling,Funktionen und Design). :thumb: :thumb: :thumb:

Mit dem Teil hat man in 0,nichts seine Anwendungen übersetzt. Hut ab. Eine Doku zum Programm wäre natürlich hilfreich aber mit dem Video kriegt man das auch hin. Also nochmal danke an :cat:


ps: Welche weiteren Funktionen und Versionen sind geplant ? Erstmals vermisst man das PostBuild Event von D2007.

stahli 11. Mär 2008 14:12

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Stimmt, das Video ist beeindruckend! :-)
Aktuell steht für mich keine Mehrsprachigkeit an, aber ich bin jetzt zumindest optimistisch für die Zukunft :-)

Eine Frage:
Wie wäre es rein theoretisch mit Übersetzungen für japanisch etc (Unicode)? Lässt sich so etwas im Tool für die Editfelder für "Fremdsprachen" einstellen, also für jede Sprache ein eigener Zeichensatz festlegen?

Ein Vorschlag:
Eine Export- und Importfunktion in eine Word-Datei wäre vielleicht nicht schlecht.
Man könnte (wenn man der Zielsprache nicht mächtig ist) alle relevanten Einträge in eine Word-Datei exportieren:
Zitat:

DEUTSCH | ENGLISH
-----------------
Maus |
Tisch |
bzw.
Zitat:

DEUTSCH | JAPANISCH
-------------------
Maus |
Tisch |
sich von fachkundigen Dritten eine Übersetzung erstellen lassen:
Zitat:

DEUTSCH | ENGLISCH
------------------
Maus | Mouse
Tisch | Table
bzw.
Zitat:

DEUTSCH | JAPANISCH
-------------------
Maus | #+$&%$
Tisch | §"§$"%(
und die Übersetzungen wieder in das Tool importieren.
Dabei wäre eine 2-spaltige Tabelle nicht schlecht, damit man auch mit Unicode arbeiten kann.


(ich hoffe, das klingt nicht vermessen)

stahli

juergen 11. Mär 2008 18:25

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Ich schließe mich den Vorrednern an, das im Video vorgestellte Tool ist schon sehr beeindruckend! :thumb:
Bis jetzt habe ich keinerlei Erfahrung in diese Richtung, im Video sah alles relativ einfach aus, so dass die eigentliche Fleißarbeit dem Übersetzen gewidmet werden kann.
Ich werde mich da am WE auf jeden Fall mal einarbeiten.

[OT]Während des Videos musste ich mehrmals schmunzeln, weil ich mir versucht habe die Tastatur von Sakura bildhaft vorzustellen.
Die Tastatatur muss ja MINDESTENS aus 5 cm massivstem Edelstahl bestehen. :zwinker: [/OT]

stahli 11. Mär 2008 19:19

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
OT: Im Fotoalbum sieht die Tastatur auf dem riesigen Arbeitsplatz schon gewaltig aus, aber nicht wie Edelstahl... ;-)

oki 11. Mär 2008 20:28

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Ich werf mal hier die integrierte Übersetzungsumgebung (TranslationManager) der IDE ins rennen. Ist halt schon dabei.

Gruß oki

Die Muhkuh 11. Mär 2008 20:39

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Zitat:

Zitat von juergen
[OT]Während des Videos musste ich mehrmals schmunzeln, weil ich mir versucht habe die Tastatur von Sakura bildhaft vorzustellen.
Die Tastatatur muss ja MINDESTENS aus 5 cm massivstem Edelstahl bestehen. :zwinker: [/OT]

Jupp, aber das beste war: "We close the application" und schreibt knallhart "Exit" drunter :mrgreen:

BTW: Mit gnu hab ich eig. recht gute Erfahrung gemacht, aber Daniels Tool sieht auch supi aus.

bluesbear 11. Mär 2008 20:58

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Zitat:

Zitat von oki
Ich werf mal hier die integrierte Übersetzungsumgebung (TranslationManager) der IDE ins rennen. Ist halt schon dabei.

Meine erste Anfängerfrage hier :stupid: (von Delphi3 bis Delphi 2007 ist ein krass großer Schritt) Ich war da bisher recht erfolglos mit Suchbegriffen in der Hinsicht. Es ist echt blöd, wenn ich sowenig Ahnung habe, daß ich nicht mal weiß, wonach ich suchen soll. Ich hab da die 2 Bücher von Marco Cantu, aber... Könnte mir vielleicht mal jemand mit ner Liste Schlagwörter aushelfen? <ganzliebguck> Derzeit wird das mit "Multilizer" gemacht. ist das noch zeitgemäß? Lohnt sich ein Update?

ConstantGardener 11. Mär 2008 22:55

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
...also ich hänge meinen ersten Erfahrungsbericht bezüglich dem WinLocalizer von Sakura mal hier rein da ich sonst noch kein Thema dazu gefunden habe und es für den Fragesteller denke ich recht interessant ist.

Das Programm sieht nicht nur im Video beeindruckend aus, der Eindruck wird bei der Arbeit noch besser. :wink:

Das gute ist die einfache Integration in vorhandene Sourcen mit wirklich nur einem Aufruf je Formular. Ich hab's mit bedingter Compilierung aufgebaut und kann so schnell eine normale und eine Multilinguale Exe compilieren. Außerdem funktioniert das compilieren der Sprachdateien recht flott. Ich habe meine MainApp gleich mal 4 sprachig aufgezogen. Das programmieren der Aufrufe ist wirklich easy. Bleibt nur der innere Schweinehund(Fleiß) der die Übersetzung bremst. Ohne D2007 fehlen einem natürlich die Post Build Events um die Sache zu automatisieren. Aber das manuelle starten des WL ist auch nicht so wild. Auch die Hilfefunktionen (z.B. automatisches übersetzen gleicher Strings usw.) sind genial.

Tipp : Bei Datenbank-Apps unter den nicht betrachteten Propertys und Funktionen unbedingt FieldName,FieldByName und Konsorten aufnehmen sonst übersetzt ihr evtl. eure Feldbezeichnungen mit. :mrgreen:


ps : Das beste am Video ist das zwischen den Zähnen gezischte "Schei..." beim zehnten Tippfehler. :-D Ich weiß wie das ist wenn bei der Aufnahme eines Hilfevideos nach 5 Minuten kein Satz mehr gelingen will. :wall: Da bewundere ich ja immer Scheffe für seine Eloquenz. wuppdi usw.

CG

divBy0 24. Jun 2008 07:59

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Hat vielleicht jemand ein Beispiel für den WinLocalizer von Sakura? Oder gibt es auch eine Hilfe?

Übersetzt habe ich das ganze, nur wie wird das denn aufgerufen?

ConstantGardener 24. Jun 2008 20:47

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Hallo divby0

ich hoffe ich 'darf' hier für eine Software von Sakura antworten aber ich setze das ganze ja schon ne Weile ein. Hier einige Codeschnipsel zum grundsätzlichen Einsatz. Ich hab das Ganze mit bedingter Compilierung aufgebaut da ich nur BDS2006 habe und keine Post-Build-Events nutzen kann. Per Batch-Datei im Tool-Menu kann ich die Anwendung für Multilingual erzeugen, aus der IDE zum normalen entwickeln per F9 usw.

Delphi-Quellcode:

// Unit einbinden

uses {$IFDEF MultiLingual} dwsLocalizer, {$ENDIf} Datenmodul;

// Initialisierung im FormCreate bei dyn. erzeugten Forms

procedure TForm_AuswertungArbeitszeit.FormCreate(Sender: TObject);
begin
 {$IFDEF MultiLingual}
 GetLocalizer.InitializeLanguage(sprache);
 {$EndIF}
end;

// Anzeigen der verfügbaren Sprachen in einer Listbox

   {$IFDEF MultiLingual}
    GroupBox_Sprache.Visible:=true;
    GetLocalizer.GetLanguages(ListBox_Sprache.Items);
    if ListBox_Sprache.Count>0 then
     begin
      i:=0;
      while (i<Listbox_Sprache.Count) and (sprache<>Integer(ListBox_Sprache.Items.objects[i])) do inc (i);
      if i<Listbox_Sprache.Count then ListBox_Sprache.ItemIndex:=i;
     end;
    {$Else}
     GroupBox_Sprache.Visible:=false;
    {$EndIF}

// und Sprache auswählen zur Laufzeit
      {$IFDEF MultiLingual}
      if ListBox_Sprache.ItemIndex>=0 then
       sprache:=Integer(Listbox_Sprache.Items.Objects[ListBox_Sprache.ItemIndex]);
      GetLocalizer.InitializeLanguage(sprache);
      {$endIF}
     end;
Im Video wird das aber eigentlich ganz gut erklärt.

CG

divBy0 24. Jun 2008 21:43

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Danke dir! Werde ich mir morgen im Büro anschauen und ausprobieren.

Sakura wird schon nichts gegen haben. Das Video konnte ich mir leider heute nicht anschauen.

soulies 25. Jun 2008 07:33

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
moin,

funktioniert der WinLocalizer auch unter Delphi 7 Ent ?

cya

divBy0 25. Jun 2008 08:22

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Super! Funktioniert bestens. Geniales Teil.

Danke ConstantGardener!

ConstantGardener 25. Jun 2008 09:37

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
@divby0 : Pas de problem mon ami. :)

@soulis : Sollte eigentlich auch unter Delphi 7 / Win32 funktionieren. Der Localizer ist ja ein separates Programm welches sich nicht in Delphi einklinkt. Das Tool arbeitet mit des von der IDE / Compiler erzeugten Dateien und zieht dort die Bezeichner und Strings raus. Du übersetzt sie in weitere Sprachen und der Localizer erzeugt daraus entsprechende Sprachdateien. Diese weden dann mit einer mitgelieferten Unit in dein Programm eingebunden. Fertsch !

CG

soulies 25. Jun 2008 10:05

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
@ConstantGardener
Zitat:

Diese weden dann mit einer mitgelieferten Unit in dein Programm eingebunden.
Das war ja mein Problem, denn mein DEMO Programm konnte erst nicht kompiliert werden.

Aus 'TdwsLocalizer = class abstract' hab ich dann 'TdwsLocalizer = class' gemacht
und 'PropNames.StrictDelimiter := True;' kennt er net - hab ich auskommentiert

dann lief es ...

cya

ConstantGardener 25. Jun 2008 10:18

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
@soulies

...ok :oops: , das hatte ich nicht bedacht. Die Unit hatte ich nur überflogen und ob bestimmte Sprachfeatures in Delphi 7 noch nicht vorhanden waren nicht beachtet. Wäre aber mal nen Hinweis an Sakura wert. Auf der Projektseite ist von dieser Einschränkung auf den ersten Blick nicht zu sehen. Und Hilfedatei fehlt ja noch. Er hatt mir per PN aber schon vor einiger Zeit eine neue Version angekündigt. Evtl. wird sowas dann mit nachgereicht.

btw. wenns jetzt läuft :thumb:

CG

Garfield 21. Jul 2008 09:30

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Zitat:

Zitat von sakura
... Heute veröffentliche ich meine erste Version eines solchen Tools, ...

Wo kann man Fragen und Anmerkungen dazu loswerden?

divBy0 21. Jul 2008 10:16

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Also ich schreibe meine Frage hier rein und hoffe, dass Sakura antwortet. :-D

Wird es vielleicht die Möglichkeit geben die Texte der Anwendersprachen als CSV oder Excel zu exportieren? Problem ist, dass der Kunde die Übersetzungen macht.

mischerr 26. Aug 2008 13:56

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Hallo.

Ich gebe auch mal gerne meinen Senf zum WinLocalizer ab:
  • Generell: Schönes Tool
  • Eine Versionsnummer wäre nicht schlecht. So wären Änderungen in der Unit ggf. auch ohne WinMerge ersichtlich.
  • Könnte ein bisschen abwärtskompatibler sein (StrictDelimiter fehlt zB unter D6). Als Ersatz verwende ich hier zZt eine Implementierung aus FPC (siehe unten).
  • Vielleicht auch wegen letztem Punkt kommt es ab und zu zu einem Fehler "3f: Increment: Increment failed" bei "CopyMemory(@Res[1], ResItem, Size);" in der Funktion NewLoadResString bei Ersetzungen für ResourceStrings, sodass dieser Fehlertext als Übersetzung angezeigt wird. Ich weiss noch nicht wieso der Fehler auftritt, aber hier wäre ein Fallback auf die Default-Sprache schön.
  • IMO generelles Problem in TranslateComponent wenn zB einem Label zur Laufzeit bereits ein anderer Wert zugewiesen wurde. Bei Umschaltung der Sprache zur Laufzeit wird der neue Text durch den alten Text des DFMs ersetzt. Man müsste hier Elemente ausgrenzen können. Hier punktet eindeutig GetText.

Delphi-Quellcode:
  TStringList = class(Classes.TStringList)
  private
    function GetDelimitedText : string;
    procedure SetDelimitedText(const AValue : string);
  public
    StrictDelimiter : boolean;
    property DelimitedText : string read GetDelimitedText write SetDelimitedText;
  end;

function TStringList.GetDelimitedText: string;
var
  I : integer;
  P : pchar;
begin
  {$IFDEF FPC}CheckSpecialChars;{$ENDIF}
  Result := '';
  for I := 0 to Count-1 do begin
    P := pchar(Strings[I]);
    if not StrictDelimiter then
      while not(P^ in [#0..' ', QuoteChar, Delimiter]) do inc(P)
    else
      while not(P^ in [QuoteChar, Delimiter]) do inc(P);
    // strings in list may to contain #0
    if P <> (pchar(Strings[I]) + length(Strings[I])) then
      Result := Result + QuoteChar + Strings[I] + QuoteChar
    else
      Result := Result + Strings[I];
    if I < Count-1 then Result := Result + Delimiter;
  end;
  if (length(Result) = 0) and (Count = 1) then Result := QuoteChar + QuoteChar;
end;

procedure TStringList.SetDelimitedText(const AValue : string);
var
  I, J : integer;
  aNotFirst : boolean;
begin
  {$IFDEF FPC}CheckSpecialChars;{$ENDIF}
  BeginUpdate;
  I := 1;
  aNotFirst := false;
  try
    Clear;
    while I <= length(AValue) do begin
      // skip delimiter
      if aNotFirst and (I <= length(AValue)) and (AValue[I] = Delimiter) then inc(I);
      // skip spaces
      if not StrictDelimiter then
        while (I <= length(AValue)) and (ord(AValue[I]) <= ord(' ')) do inc(I);
      // read next string
      if I <= length(AValue) then begin
        if AValue[I] = QuoteChar then begin
          // next string is quoted
          J := I + 1;
          while (J <= length(AValue)) and ((AValue[J] <> QuoteChar) or
             ((J+1 <= length(AValue)) and (AValue[J+1] = QuoteChar))) do
            if (J <= length(AValue)) and (AValue[J] = QuoteChar) then
              inc(J, 2)
            else
              inc(J);
          // J is position of closing quote
          Add(StringReplace(Copy(AValue, I+1, J-I-1), QuoteChar + QuoteChar, QuoteChar, [rfReplaceAll]));
          I := J + 1;
        end
        else begin
          // next string is not quoted
          J := I;
          if not StrictDelimiter then
            while (J <= length(AValue)) and (ord(AValue[J]) > ord(' ')) and (AValue[J] <> Delimiter) do inc(J)
          else
            while (J <= length(AValue)) and (AValue[J] <> Delimiter) do inc(J);
          Add(copy(AValue, I, J-i));
          I := J;
        end;
      end
      else
        if aNotFirst then Add('');
      // skip spaces
      if not StrictDelimiter then
        while (I <= length(AValue)) and (ord(AValue[I]) <= ord(' ')) do inc(I);
      aNotFirst:=true;
    end;
  finally
    EndUpdate;
  end;
end;

ConstantGardener 26. Aug 2008 20:24

Re: Programm in mehreren Sprachen(keine Programmiersprachen)
 
Hallo mischerr,

zum Punkt "Ausgrenzen von Elementen" solltest du nochmal unter PROJEKTOPTIONEN --> ZU IGNORIERENDE CONTROLS UND EIGENSCHAFTEN schauen. Hier kannst Du die entsprechenden Elemente mit Joker usw. ausgrenzen. Bei allen anderen Punkten gebe ich Dir Recht. Von der neuen Version ist auch noch nichts zu hören. Oder ist das jetzt in D2009 integriert ? :roll: :gruebel:

mfg ConstantGardener


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 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