AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Stringkonstanten als Resourcestring deklarieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringkonstanten als Resourcestring deklarieren

Ein Thema von Luckie · begonnen am 5. Nov 2003 · letzter Beitrag vom 25. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 19:52
Erst mal wo von ich rede. Man kann String Konstanten einmal so deklarieren:
Delphi-Quellcode:
const
  Test = 'Test';
Oder so:
Delphi-Quellcode:
resourcestring
  Test = 'Test';
Letzteres bewirkt, dass der String als ResourceString in einem Stringtable in die Ressource der Exe einkompiliert wird.

So, in dem Buch "Delphi in a nutshell" schreibt der Autor dazu:
Zitat:
You should expect your components to be used in an application that requires localization, and plan ahead.
Daraus schließe ich, dass es mit Ressourcestrings einfachher ist, Code an andere Landessprachen anzupassen. Und das ist der Punkt, den ich nicht verstehe. Die Strings stehen dann zwar in der Ressource der Exe, aber was hilft mir das, wenn ich die Anwendung übersetzen will? Da ich sowieso wieder kompilieren muss, kann ich auch die normalen Stringkonstanten im Quelltext übersetzten.

Oder kann mir jemand die Begründung des Autors erklären?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 20:03
Zitat von Luckie:
Da ich sowieso wieder kompilieren muss,
Wieso das? Strings in einer Stringtable lassen sich direkt in der EXE-Datei verändern - normale Stringkonstanten nicht.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#3

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 20:08
Bei der Initialisierung der RTL Deines Programms wird nach einer DLL gesucht, welche die Daten in der anderen Sprache enthält.
Falls eine passende gefunden wird, werden die Ressourcen aus der DLL anstatt der einkompilierten verwendet.

Bei Foo.exe wird im gleichen Verzeichnis nach Foo.deu (dreistellige Sprachkennung (Deutsch (Deutschland)) des Benutzers) und Foo.de (zweistellige Sprachkennung (Deutsch) des Benutzers) gesucht. Wobei das pro Benutzer/Programm unter HKEY_CURRENT_USER\Software\Borland\Locales überschrieben werden kann.


ps: Das bezieht sich nicht nur auf Strings, sondern auch auf Forms und andere Ressourcen. Zur einfacheren Verwaltung/Erstellung von Spach-DLLs gibt es in den teureren Delphi-Versionen einen Ressource-DLL Wizard und Language-Tools.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 20:14
Aha. Ich brauche also nur eine Sprach DLL beilegen und wenn die Sprache des Stringtables in der Ressource nicht mit der Sprache des Systems übereinstimmt aber eine entsprechende Sprach DLL gefunden wird, dann wird diese genommen?

Die Sprache des Stringtables ist
Zitat:
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
Also Sprach neutral. Sollte das jetzt auf einem Englischen System laufen und wird eien Englische gefunden, dann wird diese genommen, ansonsten die aus der Exe?

Ich glaube, ich habe es verstanden.

Ach noch was, wie müsste so eine Sprach DLL aufgebaut sein?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 20:36
Haben wir doch schon ausprobiert für den Movie Organizer.
Mit "wir" meine ich den (oft von mir) genervten Chakotay und mich.

Nummer 1: Du schaust nach dem Kompilieren nach, welche IDs die Strings bekommen haben. Leider vergibt Delphi IMHO die Nummern selbst, so dass man keinen Einfluss hat. Nehmen wir also an, der String hätte die ID 39678. Dann benutzt du die selbe ID für den lokalisierten String in deinem Ressourcenskript (Stringtable).

Nummer 2: Bei VCL-Programmen genügt es, die Texte in den DFMs zu übersetzen.

Die Ressource (*.res) mit den Strings und die übersetzten DFMs werden dann in eine leere DLL gespeichert, die die Endung erhält, die man wünscht
{$E deu} Kompilieren, und fertig. Wenn du die DLL dann in das Projektverzeichnis wirfst, in dem sich auch die originale EXE befindet, benutzt das Programm automatisch die Bibliothek, wenn auf dem Zielrechner Deutsch als Sprache eingestellt ist.

Du schaust dir als Beispiel entweder Nicos und CRAs DelphUBB an, oder du holst dir bei mir den D5-Quellcode des o.g. Programms.
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 20:41
Hallo,

ressourcestring haben außerdem den Vorteil, dass sie (im Gegensatz zu Konstanten) nur einmal in der exe gespeichert werden, auch wenn sie mehrmals verwendet werden. Allerdings dürfen sie maximal 1024 Zeichen lang sein (siehe LoadResString in System.pas) und man kann Resourcestrings nicht aus zuvor definierten Resourcestrings "zusammenbauen".
Delphi-Quellcode:
const
  cSelect = 'select * from TESTTABLE ';
  cWhere = 'where NR=:NR';
  cSQL = sSelect + sWhere; // das funktioniert

resourcestring
  rSelect = 'select * from TESTTABLE ';
  rWhere = 'where NR=:NR';
  rSQL = sSelect + sWhere; // das nicht
anbei mal ein Beipiel für 'ne Ressourcen-DLL. Vermutlich braucht man aber die Professional-Version von Delphi, um vernünftig damit arbeiten zu können.
Angehängte Dateien
Dateityp: zip resapp.zip (30,0 KB, 150x aufgerufen)
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 20:54
Klappt noch nicht so ganz.
eng.rc:
Code:
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
65520,    "File %s successfully splitted."
}
DLL:
Code:
library eng;

{$E en}

{$R eng.res}

begin
end.
Erzeugte Sprach DLL eng.en.

Den Wert in der Registry habe ich ergänzt:
D:\Programmierung\Delphi\Programme\NonVCL\in Bearbeitung\FileSplitter New\Source -> en

Beim Starten der Exe nimmt er aber nicht den String aus der Sprach DLL.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 21:07
Was ist, wenn du der DLL mal die Endung ".deu" gibst? Geht es dann?

Wie dem auch sei, @Luckie. Aus dem Grund haben wir mit Chris den MO in Englisch gestaltet. Sollte sich das Programm wirklich mal richtig verbreiten (@Chris: ), dann haben die anderen wenigstens die englische Version und müssen sich nicht mit der deutschen Sprache rumschlagen. Und auf einem deutschen System wird dann eben die DEU-Ressource verwendet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 21:11
Aha. Exename.deu, dann geht es. Da stimmt was mit dem Registry Key nicht. Im Pfad sind nämlich Leerzeichen. Mal sehen.

[edit]
Auch wenn ich die Leerzeichen im Pfad entferne geht es nicht.

Hmpf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Stringkonstanten als Resourcestring deklarieren

  Alt 5. Nov 2003, 22:40
Hm, ich bekomme das einfach nicht gebacken. Wenn ich der Sprach DLL die endung "deu2 oder "de2 gebe, dann nimmt er die. Aber erscheint die Registry Einstellungen zu ignorieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 23:29 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