Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Konstanten/Variablen suchen und Werte ändern (https://www.delphipraxis.net/56525-konstanten-variablen-suchen-und-werte-aendern.html)

dahead 7. Nov 2005 11:46


Konstanten/Variablen suchen und Werte ändern
 
Hallo,

wie der Titel hoffentlich schon erahnen lässst, suche ich eine Möglichkeit "const" Werte durch andere zu ersetzen.

Ich bräuchte da einen Befehl, mit dem ich nach dem Namen eines "const" Ausdruck suchen, und dann dessen Wert ersetzen kann. Ziel ist es, ein Programm für mehrere Sprachen umzurüsten.

Zum Beispiel:

Delphi-Quellcode:
const
  k_DaysLong = 'Tage';
da möchte ich dann z. B. statt 'Tage' den Wert 'Days' einsetzen. Gibt es sowas überhaupt? Wie könnte ich das bewerkstelligen? (das selbe bräuchte ich für variable Strings)

Danke schonmal im Voraus.

RavenIV 7. Nov 2005 12:24

Re: Konstanten/Variablen suchen und Werte ändern
 
Stichwort "Multilizer".
suchen kannst du dann wohl selber...

Bernhard Geyer 7. Nov 2005 13:05

Re: Konstanten/Variablen suchen und Werte ändern
 
Oder wie wäre es mit GNU GetText?

dahead 7. Nov 2005 13:14

Re: Konstanten/Variablen suchen und Werte ändern
 
danke für die tipps, aber meine frage war egtl. anders gestellt.

ich kenne diese diversen programme/tools. allerdings halte ich davon erstens weniger und zweitens denke ich, wäre das overkill für mein kleines programm.

ich wollte egtl. nur wissen, wie ich const/var Werte (egtl. nur Strings) suchen und ändern kann. Falls das nicht möglich ist, muss ich mir logischerweise was anderes überlegen. eine möglichkeit wäre ja, alle const/vars in ein array zu packen und dann zur laufzeit die entspr. lokalisierten strings zu verwenden.

@raven: arbeitest du bei diesem projekt mit? nach der suche "Multilizer" im forum gabst allein du ca. 3 mal den tipp ab, dieses teil zu verwenden. achja, und suchen kann ich selbst - danke!

Robert Marquardt 7. Nov 2005 13:18

Re: Konstanten/Variablen suchen und Werte ändern
 
Der einfachste Weg ist es alle Stringliterale in zwei Files zu konzentrieren.
Das eine enthaelt die sprachabhaengigen Strings und das andere die restlichen nicht sprachabhaengigen Strings.
Damit faellt erst mal das Handling der Uebersetzungen leichter.

RavenIV 7. Nov 2005 13:47

Re: Konstanten/Variablen suchen und Werte ändern
 
Zitat:

Zitat von dahead
@raven: arbeitest du bei diesem projekt mit? nach der suche "Multilizer" im forum gabst allein du ca. 3 mal den tipp ab, dieses teil zu verwenden. achja, und suchen kann ich selbst - danke!

nein, ich bin auch nur Anwender dieses Tools.
Bei uns in der Firma verwenden wir den Multilizer und haben durchweg nur positive Erfahrungen gemacht.

gruessle

Sidorion 7. Nov 2005 14:28

Re: Konstanten/Variablen suchen und Werte ändern
 
probier doch folgendes:
Statt:
Delphi-Quellcode:
  const
   Text1='bla';
   Text2='sülz';
   ...
Konstanten im sinne von ID deklarieren:
Delphi-Quellcode:
  const
   Text1= 1;
   Text2= 2;
dann kannst Du Dir eine Funktion schreiben, die mittels Text ID und eingestellter Sprache den eigentlichen String irgendwoher liest (inifile, Datenbank, csv, etc.) und zurückgibt.
z.b.:
Delphi-Quellcode:
function GetText(_iTextID: Integer): String;
Var
  sActualLabguage: String;
Begin
  sActualLanguage:=oIniFile.ReadString('Language','currentLanguage','Illegal Language');
  If sActualLanguage='Illegal Language'
  Then Result:=sActualLanguage
  Else Result:=oIniFile.ReaadString(sActualLanguage, IntToStr(_iTextID),'Text not defined');
End;

shmia 7. Nov 2005 15:21

Re: Konstanten/Variablen suchen und Werte ändern
 
Anstelle von Konstanten sollte man gleich resourcestring verwenden:
Delphi-Quellcode:
resourcestring
  SDaysLong = 'Tage';
  SDayLong = 'Tag';
  SMonth = 'Monat';
Damit stehen dir alle Wege offen, diese Texte nachträglich zu übersetzen.
Borland verwendet übrigens für (Resource-)String-Konstanten den Prefix "S".

DP-Maintenance 7. Nov 2005 15:21

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.

ichbins 7. Nov 2005 15:23

Re: Konstanten/Variablen suchen und Werte ändern
 
wie wärs damit:
Delphi-Quellcode:
var
  lang:byte;

const
  german:byte=0;
  english:byte=1;
 
  string1:array[0..1] of string = ('Tage','Days');


[...]
  lang:=german;
  string1[lang] = 'Tage'

dahead 7. Nov 2005 15:36

Re: Konstanten/Variablen suchen und Werte ändern
 
Zu aller erstmal vielen Dank für die Tipps.

@Sidorion: ein ähnliches prinzip hatte ich vor einigen Jahren mal in einem Programm. Das Problem daran war, dass die ID's egtl. relativ unaussagekräftig sind, und bei Änderungen/Erweiterungen im Programm die Nummernvergabe etwas mühselig ist (sprich ungeordnet).

@shmia: der von mir oben gepostete Sourcecode ist egtl. auch ein ressourcestring, ich habe nur davon nichts geschrieben. Du schreibst, dass mir damit alle Wege zur Bearbeitung offen stünden, doch wie? Wie kann ich bspw. den ressourcestring "k_test = 'Test'" finden und umändern?

zum verständnis: ich möchte, dass die Sprach-Dateien extern vom Programm liegen. Diese Dateien sind wie INIs aufgebaut. Hier mal ein Auszug aus der dt. Sprachdatei:

Delphi-Quellcode:
[AlarmForm]
BTN_Close=&Zurück
LBL_Name=&Name:
k_Text=Text:
k_Amount=Menge:
k_LevelInput=Stärke angeben
k_Level=Stärke:
Nun Englisch:
Delphi-Quellcode:
BTN_Close=&Back
LBL_Name=&Name:
[AlarmForm]
k_Text=Text:
k_Amount=Amount:
k_LevelInput=Specify strength
k_Level=Strength:
Wie man sieht weise ich Konstanten den prefix "k_" zu. Daher könnte ich solche in der INI/Sprachdatei einfach identifizieren. Wie jedoch im Programm? Für Komponenten (also bspw. Labels (LBL_xyz), Buttons (BTN_xyz), usw habe ich das Problem bereits via FindComponent gelöst).
Mein Problem sind 'nur' noch die Konstanten und Variablen im Programm selbst, also Strings von bpsw. Dialogen.

@ichbins:
dann müsste ich für jeden neuen Text der evtl. in neueren Versionen im Programm vorkommt jedesmal einen neuen Array der verschiedenen Sprachen anlegen. Das möchte ich egtl. vermeiden und über exterene Dateien lösen. Die Funktion zur Übersetzung im Programm soll dann in neueren Versionen nicht mehr verändert werden müssen.

ichbins 7. Nov 2005 15:43

Re: Konstanten/Variablen suchen und Werte ändern
 
German.ini:

Delphi-Quellcode:
[Form1]
1=Blablabla
2=Schwafelschwafelschwafel
3=Sülzsülzsülz
[Form2]
1=...
2=...


-------------------------------- 

Delphicode:

var i:tinifile;

language:='German';
i:=tinifile.create(language+'.ini');
form1.caption:=i.readstring('Form1','1');
...
konstanten kann man nicht verändern. Du musst eben beim Starten des Progs die Strings der Dialoge zuweisen. In der IDE kannst du gleich eine "Ersatzsprache" zuweisen, die das Prog verwendet wenn es keine german.ini findet.

dahead 7. Nov 2005 15:54

Re: Konstanten/Variablen suchen und Werte ändern
 
@ichbins:

jaja, das war mir bisher auch klar.

wenn man konstanten nicht (finden und) zuweisen kann, bleibt mir nichts anders übrig, als sie in ein array zu packen und dyn. zuzuweisen. ich hoffte nur, es gäbe eben eine möglichkeit.

Khabarakh 7. Nov 2005 17:53

Re: Konstanten/Variablen suchen und Werte ändern
 
Wenn du statt Konstanten Properties (z.B. von einem Single-Ton) nimmst, könntestt du per RTTI genau wie bei den Komponenten und FindComponent die Strings dynamisch aus der Datei laden.

dahead 8. Nov 2005 10:46

Re: Konstanten/Variablen suchen und Werte ändern
 
@Khabarakh:

Könntest du mir davon ein Beispiel zeigen?


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