AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wie erkennt eine Delphi-Exe die Systemsprache?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie erkennt eine Delphi-Exe die Systemsprache?

Ein Thema von Sherlock · begonnen am 20. Nov 2013 · letzter Beitrag vom 20. Nov 2013
Antwort Antwort
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#1

Wie erkennt eine Delphi-Exe die Systemsprache?

  Alt 20. Nov 2013, 10:39
Hi,
ich habe da mal eine grundsätzliche Frage (siehe Titel). Hintergrund/Erläuterung: Ich weiss wie ich lokalisiere, bzw. nutze ohnehin den Sisulizer. Im Quellcode muss man nichts tun, denn die nötige Ressource wird automagisch gezogen. Der automagische Teil interessiert mich dabei. Ich weiss, daß sich dieser Teil mit D2010 geändert hat. Ich habe aber auch noch eine D2007 Version in freier Wildbahn herumfliegen, die sich nun etwas störrisch verhält und mich vor ein Rätsel stellt.

Nochmal: Es geht darum wie eine Delphi-Anwendung zur Laufzeit ohne weiteres Zutun des Entwicklers die Systemsprache ermittelt und dann die richtige Ressource zieht. Am besten noch als Gegenüberstellung prä 2010 und post 2010, damit ich weiss wo ich ansetzen muss

Ich wäre sehr dankbar für Erleuchtung.

Grüße,
Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

AW: Wie erkennt eine Delphi-Exe die Systemsprache?

  Alt 20. Nov 2013, 11:09
Naja, die .exe an sich gar nicht

Es gibt in der Win32 API die Funktion GetUserDefaultLCID (http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx), die Dir die Locale ID gibt. Anhand derer kannst Du die Culture ermitteln.

Seit Windows Viste empfiehlt Microsoft allerdings eher die Verwendung von GetUserDefaultLocaleName (http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wie erkennt eine Delphi-Exe die Systemsprache?

  Alt 20. Nov 2013, 11:17
Da ich das nicht selber in den Code transportiert habe, ist das ist doch offensichtlich irgendwo in der VCL vergraben. Vermutlich in der Unit Windows und passiert demnach ganz von alleine, sobald ich die einbinde. Und aus meiner Sicht damit eben doch in der EXE
Aber die MSDN Links helfen mir eventuell schon weiter. Vielen Dank dafür!

Grüßle,
Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wie erkennt eine Delphi-Exe die Systemsprache?

  Alt 20. Nov 2013, 11:24
Schau einmal in der Unit SysUtils nach... da findest du unter initialization GetFormatSettings. Darin wiederum findest du InitSysLocale.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie erkennt eine Delphi-Exe die Systemsprache?

  Alt 20. Nov 2013, 11:49
YEAH! Das ist es, da schau ich mal nach was sich zwischen D2007 und XE2 getan hat. Super! Danke!

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie erkennt eine Delphi-Exe die Systemsprache?

  Alt 20. Nov 2013, 12:01
Es geht darum wie eine Delphi-Anwendung zur Laufzeit ohne weiteres Zutun des Entwicklers die Systemsprache ermittelt und dann die richtige Ressource zieht.
Wenn du meinst, wie Delphi z.B. auf einem Deutschen System die Resource mit der Endung DE und auf einem Englischen die mit einem EN lädt. Das passiert in der System.pas, genauer in GetResourceModuleName. Wenn nicht (s.u.) überschrieben, dann wird eine Systemeinstellung genommen. Der Mechanismus, der diese ermittelt, ist ziemlich komplex - wer mag, kann das gerne mal analysieren.

Mann kann aber, wie erwähnt, die verwendete Resource auch fest einstellen. Die entsprechenden Einträge findet man in der Registry unter verschiedenen Schlüsseln (in der Reihenfolge):

Delphi-Quellcode:
HKEY_CURRENT_USER\Software\Embarcadero\Locales
HKEY_LOCAL_MACHINE\Software\Embarcadero\Locales
HKEY_CURRENT_USER\Software\CodeGear\Locales
HKEY_LOCAL_MACHINE\Software\CodeGear\Locales
HKEY_CURRENT_USER\Software\Borland\Locales
HKEY_CURRENT_USER\Software\Borland\Delphi\Locales
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#7

AW: Wie erkennt eine Delphi-Exe die Systemsprache?

  Alt 20. Nov 2013, 13:52
Es gibt in der Win32 API die Funktion GetUserDefaultLCID (http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx), die Dir die Locale ID gibt. Anhand derer kannst Du die Culture ermitteln.

Seit Windows Viste empfiehlt Microsoft allerdings eher die Verwendung von GetUserDefaultLocaleName (http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx).
Ich hatte mir letztens über GetLocaleInfo + LOCALE_USER_DEFAULT die Sprache ausgelesen, aber das sollte auf's Gleich rauskommen.

Bei LOCALE_SABBREVLANGNAME bekommt man dann DEU, ENG usw.

[edit]
Bei GetUserDefaultLocaleName wurde auch GetLocaleInfoEx verlinkt, also kann es wohl nicht so falsch sein.
Da XP nun tot ist, kann/sollte ich mein GetLocaleInfo durch GetLocaleInfoEx upgraden, bzw. ich schau grade mal, was genau GetUserDefaultLocaleName für einen String liefert.
[edit2]
GetUserDefaultLocaleName ist im XE3 natürlich noch nichtmal deklariert.

de-DE
en-US
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Nov 2013 um 14:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:10 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