AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sprache ändern mit ?

Ein Thema von gauggi · begonnen am 21. Apr 2006 · letzter Beitrag vom 22. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
gauggi

Registriert seit: 18. Apr 2006
177 Beiträge
 
#1

Sprache ändern mit ?

  Alt 21. Apr 2006, 20:45
Guten Abend!

Bis jetzt habe ich, wenn ich eine Anwendung zweisprachig erstellt habe, mit INI Dateien gearbeitet.

Das sah dann so aus:

Delphi-Quellcode:
var
  Ini: TIniFile;
  Sprache: String;
begin
        Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'test.ini');
    Sprache := Ini.ReadString('program','Sprache','');
    Ini.free;
if Sprache = 'Englishthen
    begin
    Datei1.Caption:='File';
end;
Diese Lösung ist aber nicht gut, denn ich möchte, dass jeder Anwender die Sprache seinen Wünschen

anpassen darf. Wie könnte man das lösen? Mit DLL's oder lng Dateien. Aber wie? Kennt jemand eine

Komponente? Oder Tipps?

Ich bin jeder Hilfe dankbar!
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Sprache ändern mit ?

  Alt 21. Apr 2006, 20:48
Du könntest 2 Dateien anlegen (oder eben wie viele Sprachen du haben möchtest) und in jeder Datei unter dem Selben Punkt deine beiden Übersetzungen hinschreiben. Ich hoffe du weißt grad was ich meine
Und dann brauchst du einfach entsprechend der Sprache eine Datei einladen.

Als D könntest du Ini-Dateien nehmen.

Du könntest das ganze aber auch per Datenbank erledigen.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Sprache ändern mit ?

  Alt 21. Apr 2006, 20:50
Für diesen Zweck gibt es unzählige Lösungen. Auch in Delphi gibt es schon Unterszützung für Mehrsprachigkeit.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Sprache ändern mit ?

  Alt 21. Apr 2006, 20:52
Erstell dir ne Resourcen-dll und binde diese in deinem Programm ein.
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
gauggi

Registriert seit: 18. Apr 2006
177 Beiträge
 
#5

Re: Sprache ändern mit ?

  Alt 21. Apr 2006, 20:53
Zitat von Flare:
Du könntest 2 Dateien anlegen (oder eben wie viele Sprachen du haben möchtest) und in jeder Datei unter dem Selben Punkt deine beiden Übersetzungen hinschreiben. Ich hoffe du weißt grad was ich meine
Und dann brauchst du einfach entsprechend der Sprache eine Datei einladen.

Als D könntest du Ini-Dateien nehmen.

Du könntest das ganze aber auch per Datenbank erledigen.


Flare
Wie meinst du das?

Ich verwende Delphi3. Was ich weiß, sind dort die Datenbankfunktionen sehr komplex. Ich habe noch nie mich mit Datenbanken beschäftigt
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Sprache ändern mit ?

  Alt 21. Apr 2006, 20:55
Dann haettest du ja jetzt die 1. Aufgabe dazu!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
gauggi

Registriert seit: 18. Apr 2006
177 Beiträge
 
#7

Re: Sprache ändern mit ?

  Alt 21. Apr 2006, 20:58
Zitat von Mackhack:
Erstell dir ne Resourcen-dll und binde diese in deinem Programm ein.
Wie kann ich eine Resourcen-dll erstellen? Blöde Frage.. Ich weiß, aber...
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Sprache ändern mit ?

  Alt 22. Apr 2006, 03:13
Zitat von gauggi:
Diese Lösung ist aber nicht gut, denn ich möchte, dass jeder Anwender die Sprache seinen Wünschen anpassen darf. Wie könnte man das lösen? Mit DLL's oder lng Dateien. Aber wie? Kennt jemand eine Komponente?
Wenn ich es richtig verstanden habe, so muß also der Anwender die Möglichkeit besitzen die Sprachausgaben editieren zu können?
Ein Vorschlag von mir wäre alle Komponenten, die Sprachausgaben enthalten, mit Tagnummern zu markieren und die Einträge dieser Nummern dann aus INI Dateien auszulesen. Denn das tolle an Ini-Dateien ist ja, dass der Anwender dazu lediglich den Notepad Editor benötigt statt einer laufenden Datenbank, die du unter Umständen noch mitliefern und installieren mußt.

Wenn der Anwender die Ausgaben eh nicht editieren darf, sondern die Sprache nur zur Laufzeit einfach umschalten kann, so würde ich es dennoch mit den Tagnummern arbeiten und die Ausgaben in Ressourcedateien *.res packen und einfach im eigenen Programm einbinden. Ich benütze z.B. diese Methode weil *.res auch Unicode Zeichen enthalten können. Der Nachteil ist nur (zumindest bis Delphi7), dass man für Unicode *.res einen anderen als den Borland Ressource Compiler(z.B. GoRC) verwenden muß.

jus
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Sprache ändern mit ?

  Alt 22. Apr 2006, 08:32
Nimm GnuText oder, wenns bischen was kosten darf, die TsiLang Component Suite um mehrsprachige Anwendungen zu entwickeln. Denn wenn du jeden einzelnen Label, Datenbankspalte usw. händig übersetzen willst, sonst leicht die Übersicht Du verlieren wirst
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Sprache ändern mit ?

  Alt 22. Apr 2006, 09:02
Hai ihr,

da ich das vor kurzem selber gebraucht habe hatte ich mir mal eine Lösung überlegt.
So könnte man das ganze zum Beispiel machen. Das ganze ist nur als Denkanstoss gedacht.
Ich bringe die Funktion gerade in eine Klasse um das etwas einfacher zu machen.

Eigentlich ganz einfach das ganze. Für jede Komponente wird ein Abschnitt in der Ini erzeugt (besser wäre dann TMemIniFiles) und dort wird der Komponenten name und der Text des gewählten Propertys gespeichert (WriteInit()) bzw. gelesen (ReadIni()).

Delphi-Quellcode:
uses
  TypInfo, IniFiles;

var
  apppath: string;

function MyGetWideStrProp(Instance: TObject; const PropName: string): Widestring;
resourcestring
  SUnknownProperty = 'Eigenschaft %s existiert nicht.';
var
  PropInfo: PPropInfo;
begin
  PropInfo := GetPropInfo(Instance, PropName);
  if PropInfo = NIL then
  begin
    raise EPropertyError.CreateResFmt(@SUnknownProperty, [PropName]);
  end;
  result := GetWideStrProp(Instance, PropName);
end;

procedure MySetWideStrProp(Instance: TObject; const PropName: string; const Value: Widestring);
resourcestring
  SUnknownProperty = 'Eigenschaft %s existiert nicht.';
var
  PropInfo: PPropInfo;
begin
  PropInfo := GetPropInfo(Instance, PropName);
  if PropInfo = NIL then
  begin
    raise EPropertyError.CreateResFmt(@SUnknownProperty, [PropName]);
  end;
  SetWideStrProp(Instance, PropInfo, Value);
end;

procedure WriteIni(aForm: TForm; aType: TClass; const aProperty: string = 'Text');
var
  CurrentCompo: TComponent;
  ndx: Integer;
  TranslateIni: TIniFile;
  CurrentText: string;
begin
  TranslateIni := TIniFile.Create(apppath + 'data.ini');
  try
    for ndx := 0 to Pred(aForm.ComponentCount) do
    begin
      CurrentCompo := aForm.Components[ndx];
      if (CurrentCompo is aType) then
      begin
        CurrentText := MyGetWideStrProp(CurrentCompo, aProperty);
        TranslateIni.WriteString(CurrentCompo.ClassName, CurrentCompo.Name, CurrentText);
      end;
    end;
  finally
    TranslateIni.Free;
  end;
end;

procedure ReadIni(aForm: TForm; aType: TClass; const aProperty: string = 'Text');
var
  CurrentCompo: TComponent;
  ndx: Integer;
  TranslateIni: TIniFile;
  NewText: string;
begin
  TranslateIni := TIniFile.Create(apppath + 'data.ini');
  try
    for ndx := 0 to Pred(aForm.ComponentCount) do
    begin
      CurrentCompo := aForm.Components[ndx];
      if (CurrentCompo is aType) then
      begin
        NewText := TranslateIni.ReadString(CurrentCompo.ClassName, CurrentCompo.Name, '');
        MySetWideStrProp(CurrentCompo, aProperty, NewText);
      end;
    end;
  finally
    TranslateIni.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  apppath := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
  ReadIni(self, TEdit, 'Text');
  ReadIni(self, TLabel, 'Caption');
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
  WriteIni(self, TEdit, 'Text');
  WriteIni(self, TLabel, 'Caption');
end;
Stephan B.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:24 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