![]() |
Mehrsprachiges Programm mit *ini
Liste der Anhänge anzeigen (Anzahl: 3)
Zu allererst:
Ich hoffe etwas ähnliches wurde nicht schon früher gepostet, denn ich bin mit der Suchfunktion auf nichts gestoßen. Falls es ein ähnliches Tutorial schon geben sollte, dann verzeiht mir :D Multilanguage Programm by Whiteprince aka Ashaníta Allgemeine Information Zubereitungszeit: ca. 30-45 Minuten Schwierigkeitsgrad: mittel Freischaltung: 23. Dezember 08 Beschreibung Das Programm soll mit mehreren Sprachen mit INI Konfiguration verfügbar sein, sprich wenn man als Einstellung ENGLISCH für das Programm wählt, wird das ganze Programm ins Englische übersetzt. Screenshots & Demo Downloads ![]() Download usw.: SIEHE ANHANG! Zutaten für 1 Programm:
Erstelle ein neues Projekt (VCL-Formularanwendung) und ziehe alle oben aufgelisteten Komponenten auf die Form. (Genau ausrichten kann man die Später ) Zubereitung Zuallererst: was hat welche Komponente für eine Aufgabe? Deutsch (Button) | Übersetzt ganzes Programm in Deutsch Englisch (Button) | Übersetzt ganzes Programm in Englisch TestLabel1 (Label) | Einfacher Text zum überprüfen ob Übersetzung funktoniert TestLabel2 (Label) | Selbe wie TestLabel1 Zuerst fügen wir (ganz wichtig!)IniLang in die uses rein! Jetzt doppelklicken wir (in der Form) auf den Deutsch-Button. Jetzt können wir mit Hilfe der procedure Funktion bestimmen was beim Button-Klick passiert. Wir geben an, dass beim Klick das Programm übersetzt wird:
Code:
Und jetzt, dass ALLE Labels bzw Button (oder was auch immer) Captions mit den englischen/deutschen Wörtern gefüllt wird:
CL:=loadIni(DE) // DE steht hier für Deutsch
Delphi-Quellcode:
Das sieht dann jetzt so aus:
if CL<>nil then
begin fillProps([form1],CL); // Alles füllen
Delphi-Quellcode:
Damit wir das ganze jetzt auch in Englisch machen können, doppelklicken wir auf den Englisch-Button und geben folgenden Code ein:
procedure TForm1.DeutschClick(Sender: TObject);
begin CL:=loadIni(DE); if CL<>nil then fillProps([form1],CL); end;
Delphi-Quellcode:
Jetzt erstellen wir die Labels.
procedure TForm1.EnglischClick(Sender: TObject);
begin CL:=loadIni(EN); // Statt DE steht jetzt hier EN if CL<>nil then fillProps([form1],CL); end; Und nun erstellen wir 2 Ini-Dateien, eine mit dem Namen "Englisch.ini" und eine mit dem Namen "German.ini" (die Dateien müssen so heißen). Die Englisch.ini füllen wir folgendermaßen:
Delphi-Quellcode:
Und die German.ini genau gleich ABER auf Deutsch :D
[Form1]
Form1.Caption=Gewünschter Text für die Form-Caption in Englisch Form1.Englisch.Caption=Gewünschter Text für den Englisch-Button in Englisch Form1.Deutsch.Caption=Gewünschter Text für den Deutsch-Button in Englisch Form1.TestLabel1.Caption=Gewünschter Text für den TestLabel1 in Englisch Form1.TestLabel2.Caption=Gewünschter Text für den TestLabel2 in Englisch Damit das Programm gleich beim starten übersetzt wird, doppelklicken wir in die Form (FormCreate Funktion) und geben folgendes ein:
Delphi-Quellcode:
Das sieht dann so aus:
CL:=loadIni(DE); // DE wenn ihr Deutsch laden wollt und EN wenn ihr Englisch laden wollt
if CL<>nil then fillProps([form1],CL);
Delphi-Quellcode:
TEST
procedure TForm1.FormCreate(Sender: TObject);
begin CL:=loadIni(DE); if CL<>nil then fillProps([form1],CL); end; Jetzt Compilieren wir das ganze und starten das Programm (bitte geht sicher, dass German.ini und Englisch.ini im selben Ordner wie euer Programm ist) und klicken einmal auf den Englisch-Button bzw den Deutsch-Button und TADA es geht :D [edit=Phoenix]Verlinkung auf Rapidshare entfernt. Wenn, dann bitte hier anhängen. Mfg, Phoenix[/edit] |
Re: Mehrsprachiges Programm mit *ini
Hallo und Willkommen in der DP :dp:,
Du hast Dir da viel Mühe gegeben, allerdings erscheint mir die Bedienung etwas umständlich (ohne es ausprobiert zu haben, ich habe nur Deinen Beitrag gelesen). Vielleicht möchtest Du einmal einen Blick auf sakuras ![]() |
Re: Mehrsprachiges Programm mit *ini
Ich denke, es ist sinnvoller die Sprachen in DLLs auszulagern.
|
Re: Mehrsprachiges Programm mit *ini
Och, der Möglichkeiten gibt es viele, Ressourcen-DLLs sind eine davon (und IMHO keine schlechte).
|
Re: Mehrsprachiges Programm mit *ini
Zitat:
Bei Freeware gibt es öfters User, die das Programm freiwillig in ihre eigene Sprache übersetzen wollen. INI-Dateien sind einfach mit dem Editor zu bearbeiten. Bei Resourcen-DLLs könnte die Hürde schon zu hoch sein. |
Re: Mehrsprachiges Programm mit *ini
Dafür gibt es aber z.B. Gnu/gettext auch für Delphi. Dort hat man standardisierte .pl-Files mit denen diese freiwilligen Helfer dann auch arbeiten können.
Ich würde auf jeden Fall mit ressourcen arbeiten. Da gibt es genug Automatisierung um angenehm zu arbeiten. Der Aufwand so etwas ausgereiftes von Hand nachprogrammieren zu wollen (zumal noch mit .ini-Dateien, die schon etwas.. in die Jahre gekommen sind) ist einfach nicht gerechtfertigt. |
Re: Mehrsprachiges Programm mit *ini
Hallo,
ausserdem sind Inis mit Vista nicht mehr so einfach zu benutzen. Heiko |
Re: Mehrsprachiges Programm mit *ini
Inwiefern?
|
Re: Mehrsprachiges Programm mit *ini
Hallo,
der Pfad der Inis wird "virtualisiert". Da ins Programme-Verzeichnis nicth geschieben werden kann, legt Vista die Ini selbständig im Nutzerverzeichnis (Pfad steht im Netz) ab, und gaukelt dem Programm vor, dass die Ini erfolgreich im Programm-Verzeichnis geschieben wurde. Das wird dann lustig, wenn man Änderungen im falschen Verzeuichnis sucht und nicht findet. Heiko |
Re: Mehrsprachiges Programm mit *ini
Das lustige daran ist, dass Du im Programm-Verzeichnis keinerlei Daten abzulegen hast und wenn man es macht, wie man es sollte, nämlich unter AppData, funktioniert alles ohne Probleme. :zwinker:
|
Re: Mehrsprachiges Programm mit *ini
Zitat:
Wie wäre es einfach ein passendes Manifest mitliefern und diese Virtualisierung fürs eigene Programm abschalten lässt. |
Re: Mehrsprachiges Programm mit *ini
In diesem Fall werden die Inis ja nicht beschrieben, so dass auch keine Virtualisierung erfolgen sollte
|
Re: Mehrsprachiges Programm mit *ini
So geht es natürlich auch. :-)
Übrigens: Wäre es nicht besser die Daten an den ersten Post anzuhängen und nicht auf Rapidshare auszulagern? |
Re: Mehrsprachiges Programm mit *ini
Hallo,
Bernhard, ja mit Manifest löst man sowas ... ;) Heiko |
Re: Mehrsprachiges Programm mit *ini
Zitat:
|
Re: Mehrsprachiges Programm mit *ini
Wie genannt, sollte Virtualisierung kein Thema sein, da auf die Inis nur lesend zugegriffen wird.
es ist aber in der Tat so, dass Inis etwas in die Jahre gekommen sind und ich meine auch, es gäbe Begrenzungen für die Anzahl und Länge der Einträge. Allerdings ist eine andere Frage, ob (wenn man eben keine Ressourcen will) der Aufwand für z.B. XML sich lohnt. |
Re: Mehrsprachiges Programm mit *ini
Hallo,
Noch ein kleiner Tip. TIniFile öffnet die Ini schreibend, auch wenn nur lesend zugegriffen wird. Lösung: TMemIniFile. Heiko |
Re: Mehrsprachiges Programm mit *ini
Zitat:
Ich hänge es mal direkt normal an :) @Heiko (über mir) Danke dir, ich werde es mir mit TMemIniFile mal ansehen. Mein Delphi ist noch nicht weit genug um mit DLL zu arbeiten, aber ich enke das kommt bald :D Und das mit INI, mache ich, damit ich Rechtschreibverbesserungen usw. machen kann. Aber mal sehen wie es mit DLL dann aussieht. Greetz Asha |
Re: Mehrsprachiges Programm mit *ini
Hi,
Zitat:
TInifile öffnet die Ini gar nicht, sondern bemüht zu diesem Zweck die Windows Api Funktionen zum lesen / schreiben. Gruss |
Re: Mehrsprachiges Programm mit *ini
Hallo,
schon klar, die API-Funktionen aber öffnen die Ini zum Schreiben. Heiko |
Re: Mehrsprachiges Programm mit *ini
Wie funktoniert das mit mehreren Forms??
Mein Versuch:
Delphi-Quellcode:
da wird nur mein hauptformular übersetzt.
CL:=loadIni(EN);
if CL<>nil then fillProps([form1],CL); fillProps([form2],CL); meine ini wurde so fortgeführt Zitat:
|
Re: Mehrsprachiges Programm mit *ini
Erstens fehlt dir ein begin-end Block! Zweitens nehme ich an, ist form2 noch gar nicht erstellt ust, wenn du die Funktion aufrufst oder?
MfG xZise |
Re: Mehrsprachiges Programm mit *ini
ich rufe es im formcreate ereignis von form1 auf.
an dem begin-end block liegts auch nicht den hab ich erstellt |
Re: Mehrsprachiges Programm mit *ini
Form1 ist vermutlich Dein MainForm, oder? Dann hat xZise absolut recht, Form2 gibt es zu diesem Zeitpunkt überhaupt noch nicht.
|
Re: Mehrsprachiges Programm mit *ini
ja, es ist mein mainform.
Muss ich es dann nochmal mit dem jeweiligen Form in dessen FormCreate Ereignis aufrufen?? |
Re: Mehrsprachiges Programm mit *ini
Das solltest Du in Erwägung ziehen.
|
Re: Mehrsprachiges Programm mit *ini
wenn ich es im FormCreate des jeweiligen Forms dann aufrufe, wirds aber nicht übersetzt.
Mein Code:
Delphi-Quellcode:
meine Ini sieht wie oben geschrieben aus.
CL:=loadIni(EN);
if CL<>nil then begin fillProps([Form2],CL); end; |
Re: Mehrsprachiges Programm mit *ini
Ich kann hier im Moment kein rar entpacken, daher würde es nichts nützen, den Source herunterzuladen. Wird Deine Routine denn ausgeführt?
|
Re: Mehrsprachiges Programm mit *ini
Zitat:
Diese können also jederzeit aus der aktuellen API herausfliegen, da es jetzt den XP-Mode gibt, ggf. auch schon beim Nachfolger von Windows 7. (Wird wohl nicht so schnell passieren, es gibt aber keine Garantie, dass es nicht passiert. Und deshalb kann es sein, dass Programme, die darauf bzw. auf TIniFile aufbauen, plötzlich nicht mehr funktionieren.) |
Re: Mehrsprachiges Programm mit *ini
also wenn ichs complimiert habe kommt an der seite der codezeilen blaue punkt.
ich schätze mal, dass das bedeutet sie wird ausgeführt. |
Re: Mehrsprachiges Programm mit *ini
Zitat:
|
Re: Mehrsprachiges Programm mit *ini
ich hab jetzt einfach mal noch gesagt, er soll dann noch ne showmessage ausgeben und die gibt er aus.
|
Re: Mehrsprachiges Programm mit *ini
Wie gesagt, setz einen Breakpoint und steppe einmal durch (F7 bzw. F8).
|
Re: Mehrsprachiges Programm mit *ini
also er springt dann in die nächste zeile fillprops steht
|
Re: Mehrsprachiges Programm mit *ini
Und genau da wäre es jetzt interessant, ob das auch richtig abgearbeitet wird.
|
Re: Mehrsprachiges Programm mit *ini
da er es ja nicht übersetzt, denke ich mal das er es nicht richtig abarbeitet
|
Re: Mehrsprachiges Programm mit *ini
Nicht denken, nachsehen ;)
|
Re: Mehrsprachiges Programm mit *ini
Sorry Leute, wenn ich mich hier mal einmische:
Es gibt einen Unterschied zwischen Forum und Chat: Chat: ein Satz/Halbsatz pro Nachricht Forum: mehrere Sätze; gut durchdacht mit deutlich höherem Informationsgehalt als bei einem Chat. Und sorry falls ich hier einem Forumsmanager auf den Schlips trete. Aber bitte mehr Informationsgehalt pro Nachricht; danke. |
Re: Mehrsprachiges Programm mit *ini
Sollen wir jetzt erklären, wie man seinen Code zeilenweise abarbeitet und Variablen überwacht? Das ist mir persönlich zuviel Schreibarbeit, IIRC gibt es aber ein Tut dazu hier in der DP.
|
Re: Mehrsprachiges Programm mit *ini
habs jetzt gecheckt wie man variablen überwacht.
CL hat den Wert 0 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz