![]() |
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:
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)
const
k_DaysLong = 'Tage'; Danke schonmal im Voraus. |
Re: Konstanten/Variablen suchen und Werte ändern
Stichwort "Multilizer".
suchen kannst du dann wohl selber... |
Re: Konstanten/Variablen suchen und Werte ändern
Oder wie wäre es mit
![]() |
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! |
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. |
Re: Konstanten/Variablen suchen und Werte ändern
Zitat:
Bei uns in der Firma verwenden wir den Multilizer und haben durchweg nur positive Erfahrungen gemacht. gruessle |
Re: Konstanten/Variablen suchen und Werte ändern
probier doch folgendes:
Statt:
Delphi-Quellcode:
Konstanten im sinne von ID deklarieren:
const
Text1='bla'; Text2='sülz'; ...
Delphi-Quellcode:
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.
const
Text1= 1; Text2= 2; 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; |
Re: Konstanten/Variablen suchen und Werte ändern
Anstelle von Konstanten sollte man gleich resourcestring verwenden:
Delphi-Quellcode:
Damit stehen dir alle Wege offen, diese Texte nachträglich zu übersetzen.
resourcestring
SDaysLong = 'Tage'; SDayLong = 'Tag'; SMonth = 'Monat'; Borland verwendet übrigens für (Resource-)String-Konstanten den Prefix "S". |
DP-Maintenance
Dieses Thema wurde von "Daniel" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
|
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' |
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:
Nun Englisch:
[AlarmForm]
BTN_Close=&Zurück LBL_Name=&Name: k_Text=Text: k_Amount=Menge: k_LevelInput=Stärke angeben k_Level=Stärke:
Delphi-Quellcode:
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).
BTN_Close=&Back
LBL_Name=&Name: [AlarmForm] k_Text=Text: k_Amount=Amount: k_LevelInput=Specify strength k_Level=Strength: 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. |
Re: Konstanten/Variablen suchen und Werte ändern
German.ini:
Delphi-Quellcode:
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.
[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'); ... |
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. |
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.
|
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