Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FormatDateTime liefert englische Wochentage (https://www.delphipraxis.net/147561-formatdatetime-liefert-englische-wochentage.html)

Hepdepaddel 11. Feb 2010 12:39


FormatDateTime liefert englische Wochentage
 
Moin Moin,

auf einigen (wenigen) Kundenrechnern liefert FormatDateTime englische Werte.

FormatDateTime('ddd, dd.mm.yy', MeinDatum)

ergibt dann

Thu, 11.02.10

statt

Die, 11.02.10

Die Kunden versichern, ein deutsches Windows zu nutzen. Soweit ich Screenshots von den Kundenrechnern geprüft habe, ist unter "Region & Sprache" auf der Registerkarte "Formate" auch tatsächlich Deutsch eingestellt.

Hat jemand eine Idee, woher die englischen Wochentagsnamen kommen könnten?

Gruß

Hepdepaddel

Luckie 11. Feb 2010 12:41

Re: FormatDateTime liefert englische Wochentage
 
Und was ist beim langen Datumsformat eingetragen?

Tyrael Y. 11. Feb 2010 12:53

Re: FormatDateTime liefert englische Wochentage
 
Wenn ich mich nicht ganz irre sind die ResourceStrings dafür in SysConst.pas eingetragen.
Diese werden von dort in einen festen Array geschrieben und dann im Programmablauf genutzt.

Dies soll bedeuten, hast du keine Lokalisierung deines Programms mit dementsprechenden Tools
vorgenommen, werden diese Strings genau in der Sprache beim Kunden auftauchen, in der Sie von
deinem Delphi kompiliert worden sind.

Dies gilt auch für alle Delphi-Fehlermeldungen.

DeddyH 11. Feb 2010 12:55

Re: FormatDateTime liefert englische Wochentage
 
Delphi-Referenz durchsuchenSysUtils.FormatDateTime
Zitat:

The first form of FormatDateTime is not thread-safe, because it uses localization information contained in global variables. The second form of FormatDateTime, which is thread-safe, refers to localization information contained in the FormatSettings parameter. Before calling the thread-safe form of FormatDateTime, you must populate FormatSettings with localization information. To populate FormatSettings with a set of default locale values, call GetLocaleFormatSettings.

Luckie 11. Feb 2010 12:56

Re: FormatDateTime liefert englische Wochentage
 
Oder kurz: In welcher Sprache ist dein Delphi mit dem das Programm erstellt wurde. Allerdings glaube ich nicht, dass es daran liegt, denn genau das sollen ja die Format-Funktionen vermeiden und Datum/Zeit gemäß der Systemeinstellungen formatieren.

himitsu 11. Feb 2010 13:00

Re: FormatDateTime liefert englische Wochentage
 
Doch liegt es, dann Delphi bringt seine eigenen Wochentagstrings mit ... schau mal in die SysConst.pas

Willst du die sprachabhängigen Strings von Windows, so wirst du diese selber auslesen müssen.
Wenn du diese dann in SysUtils.DefLongDayNames einträgst, dann kannst du weiterhin die Delphi-Funktionen, wie FormatDateTime, nutzen.

[edit] oder man hört mal auf DeddyH :angel2:

Luckie 11. Feb 2010 13:08

Re: FormatDateTime liefert englische Wochentage
 
Zitat:

Zitat von himitsu
Willst du die sprachabhängigen Strings von Windows, so wirst du diese selber auslesen müssen.

Das habe ich noch nie gemacht und wüsste auch gar nicht, wie das geht.

Tyrael Y. 11. Feb 2010 13:10

Re: FormatDateTime liefert englische Wochentage
 
Schnellster und einfachster Weg zur Lösung deines Problems - mach was DeddyH sagt ;)

(Deine Delphi-Fehlermeldungen werden in deinem Fall trotzdem auf englisch erscheinen, deshalb ist eine Lokalisierung über kurz oder lang zu überdenken.)

Luckie 11. Feb 2010 13:11

Re: FormatDateTime liefert englische Wochentage
 
Nicht seine, sondern die von Delphi und da auch nur die, die er nicht behandelt und bis ganz oben durchschlagen.

DeddyH 11. Feb 2010 13:12

Re: FormatDateTime liefert englische Wochentage
 
Zitat:

Zitat von himitsu
[edit] oder man hört mal auf DeddyH :angel2:

Eben ;)
Delphi-Quellcode:
var Settings: TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, Settings);
  ShowMessage(FormatDateTime('ddd, dd.mm.yy', now, Settings));
end;

Tyrael Y. 11. Feb 2010 13:14

Re: FormatDateTime liefert englische Wochentage
 
Zitat:

Zitat von Luckie
Nicht seine, sondern die von Delphi und da auch nur die, die er nicht behandelt und bis ganz oben durchschlagen.

Das sag ich doch. :D
Ok mal ganz genau meinen Satz ausgeschrieben.
"Die Fehlermeldungen in deinem Programm, die nicht von Windows oder dir selber stammen, sondern von Delphi selbst mitgeliefert werden, werden in deinem fall immer noch auf englisch erscheinen...."

Besser? :mrgreen:

Luckie 11. Feb 2010 13:17

Re: FormatDateTime liefert englische Wochentage
 
Besser.

Hepdepaddel 11. Feb 2010 13:33

Re: FormatDateTime liefert englische Wochentage
 
Erst einmal besten Dank für die vielen Antworten, aufgrund der Mittagspause konnte ich die Diskussion nicht früher einfangen. Ich versuche mal, alle genannten Aspekte aufzugreifen :)

Es sind wie gesagt ja nur wenige Rechner - weniger als 0.1% der Kunden melden das Problem. Selbst mit Dunkelziffer dürfte der Anteil verschwindend gering sein.

Von daher kann ich mir nicht vorstellen, dass es an der Delphiversion liegt. Die ist zudem deutsch. Das scheint mir eher an einer exotischen Einstellung auf den betroffenen Rechnern zu liegen.

Auf den Testrechnern funktioniert alles rund, genau wie auf dem Entwicklungsrechner - wechsle ich dort die Einstellung von Deutsch auf Englisch, zeigt das Programm erwartungsgemäß andere Wochentagsbezeichnungen.

Threads nutze ich nicht, da wird die ganz normale FormatDateTime aufgerufen.

Ach ja: Das lange Datumsformat ist beispielsweise in einem Fall "TTTT, T.MMMM JJJJ" das ist auch auf meinem Win7-System die normale Einstellung. Hier klappt es.

Gruß

Hepdepaddel

Tyrael Y. 11. Feb 2010 13:49

Re: FormatDateTime liefert englische Wochentage
 
Ich habe mir die Mühe gemacht und eben mal in den Delphi SourceCode geschaut, was Delphi macht.

Wie von mir vermutet nimmt Delphi die ResourcenStrings aus SysConst.pas und schreibt diese in einen festen globalen Array.
Dieser Array wird in FormateDateTime benutzt.

Das heißt, genau die Sprache muss erscheinen, die im SysConst.pas des Rechners steht mit dem das Programm kompiliert wird, ausser es findet doch eine Lokalisierung statt.

Ausser du nutzt doch den Weg den DeddyH beschrieben hat, ohne daß es dir bewusst ist, da du es woanders im Source setzt, dann werden die lokalen Betriebssystem-Einstellungen verwendet.

Ein dazwischen bzw. wie du sagst "exotische Einstellungen" kann es nach meiner Meinung nicht geben.

Hepdepaddel 11. Feb 2010 16:12

Re: FormatDateTime liefert englische Wochentage
 
Vielen Dank für Deine Mühe und den Blick in den Quelltext! Ehrlich gesagt kann ich mit dem Weg, den DeddyH "beschrieben" hat, nicht viel anfangen, weil ich den nicht verstehe. Das ist ein Zitat aus der Online-Hilfe. Threads nutze ich da nicht und GetLocaleFormatSettings rufe ich in der ganzen Applikation nicht einmal auf.

Zitat:

Die erste Form von FormatDateTime ist nicht Thread-sicher, da die landesspezifischen Informationen der globalen Variablen verwendet werden. Der Thread-sicheren zweiten Form werden die landesspezifischen Informationen im Parameter FormatSettings übergeben. Bevor Sie diese Form von FormatDateTime aufrufen, müssen Sie die Informationen in den Parameter FormatSettings schreiben. Die landesspezifischen Standardinformationen können FormatSettings mit GetLocaleFormatSettings zugewiesen werden.

FormatDateTime wird nur mit zwei Parametern aufgerufen - nie mit dreien, die dann die FormatSettings beinhalten würden. Laut der Hilfe werden dann globale Lokalisierungsinformationen genutzt. Also wird in meinem Fall ja völlig zu Recht lokalisiert. Das widerspricht Deiner Quelltextanalyse, wonach nicht lokalisiert wird.

Zusammenfassend:

Wenn keine Lokalisierung statt fände, müsste es Deutsch sein, dann wäre das ein seltsamer Fehler.

Wenn eine Lokalisierung statt fände, müsste das auf einem deutschen Win7 mit den Einstellungen Deutsch sein, dann wäre das ein seltsamer Fehler.

Bleibt in beiden Fällen leider kein Ergebnis. :wall:

Gruß

Hepdepaddel

ConstantGardener 11. Feb 2010 19:16

Re: FormatDateTime liefert englische Wochentage
 
Hallo Hepdepaddel,

leider kann ich dir auch keine Lösung für dein Problem nennen, ich kann nur bestätigen daß es disen Fehler gibt. Auch bei uns tritt bei eingien wenigen Kunden der beschriebene Effekt auf. Es werden englische Tagesbezeichnungen ausgegeben obwohl das Entwicklungssystem und der Zielrechner deutsche Versionen nutzen und auch alle Einstellungen auf deutsch stehen. Das ist schon etwas "strange", und vor allem so gut nachzuvollziehen. :wall:

Interessant ist, daß der Fehler bisher nur unter Windows 7 Systemen auftritt.

mfg

CG

Hepdepaddel 11. Feb 2010 20:16

Re: FormatDateTime liefert englische Wochentage
 
Herzlichen Dank für die Rückmeldung. Es tut schon einmal gut, zu wissen, dass ich nicht bekloppt bin :)

Win7 trifft auch bei mir zu. D2007, auch auf Win7 entwickelt. Was setzt Ihr ein?

Gruß

Hepdepaddel

ConstantGardener 11. Feb 2010 23:45

Re: FormatDateTime liefert englische Wochentage
 
@Hepdepaddel

wir entwickeln auf XP Prof und D2006. Sind aber schon beim portieren auf D2010/Win7. Fehler tritt scheinbar nur auf Windows 7 auf.

Gruß CG

Blup 12. Feb 2010 07:23

Re: FormatDateTime liefert englische Wochentage
 
Bei einem vergleichbaren Problem hat es geholfen Windows komplett auf US-Englisch umzustellen und anschließend wieder auf Deutsch.
Zur Sicherheit dazwischen neu starten.
Vermutung:
Der PC wurde vom Hersteller orginal mit Windows7 US-Englisch installiert.
Die Lokalisierung erfolgte erst vor der Auslieferung über ein (nicht ganz perfektes) Script.

ConstantGardener 12. Feb 2010 10:51

Re: FormatDateTime liefert englische Wochentage
 
@Blup

danke für den Tip werde ich meinen 2 Kunden mal versuchen nahezubringen. Ist aber trotzdem etwas verwunderlich, da Delphi die Arraywerte ja angeblich mit einkompiliert. Ich melde mich wenn es was bringt. Danke schonmal für den Hinweis.

hoika 12. Feb 2010 11:35

Re: FormatDateTime liefert englische Wochentage
 
Hallo,

Zitat:

Ist aber trotzdem etwas verwunderlich
Nein ist es nicht ...
Wie haben Kunden in Österreich mit XP-Proff in Österreicht-Deutsch ...
da steht dann Janner, oder wie der Januar bei denen heisst ;)


Heiko

ConstantGardener 12. Feb 2010 13:17

Re: FormatDateTime liefert englische Wochentage
 
@Hoika,

das ist klar. Es ist nur verwunderlich wenn alle Ländereinstellungen auf deutsch (Deutschland) stehen aber englische Tagesnamen ausgegeben werden. Wenn die Tagesnamen aus den Windowseinstellungen kommen (was ich erwartet hatte beim LongDayNames-Array) kann da was nicht passen.

Schiffi 19. Feb 2010 14:02

Re: FormatDateTime liefert englische Wochentage
 
Hallo allerseits,

nachdem ich mir nun schon nen' Wolf zu dem Theam gesucht habe, habe ich zumindestens einen kleinen Beitrag: Der Fehler tritt auf, wenn es WIN 7 Enterprise/Ultim. englisch + MUI Languagepack z.B. deutsch ist. In WIN 7 Regio sieht alles ok aus, aber die VCL Programme liefern weiterhin die englischen locals. Und das ist nicht schö, warum weiß ich noch nicht.

Gruß
Schiffi :gruebel:

ConstantGardener 19. Feb 2010 14:27

Re: FormatDateTime liefert englische Wochentage
 
@schiffi,

willkommen im Sachsen-Anhalt-Thread :cyclops:

Das ist ja schonmal gut zu wissen, leider habe ich von meinen 2 "Problemkunden" noch keine Rückmeldung bezüglich Version Ihrer Win7 Installation. Und ob die Kunden rauskriegen ob Sie ne englische Version mit deutschem Sprachpaket haben bezweifle ich. Wenn ich mehr erfahre melde ich mich hier wieder.

cg

Schiffi 19. Feb 2010 15:36

Re: FormatDateTime liefert englische Wochentage
 
Ja, es ist zumindestens so bei meinen C++B.6 Programmen (Entspricht VCL Stand Delphi 7), die ich als Altlasten noch mitschleppe.

Alle Programme, die nur die reinen VCl Routinen benutzen, laufen auf meinem 'normalen' WIN 7 Pro Entwicklungsrechner einwandfrei. Auf Clients, die gerade für ne größere Kundengruppe mit win7 enterprise + dtsch. MUI Paket konfiguriert und getestet werden, bringen dieselben Programme die engl. Zahlendarst., Datümer und andere lustige Sachen :bouncing4:.

Nur die Apps, die ich mit Hilfe des guten alten Multilizers selber lokalisiert habe, scheren sich nicht drum und funzen....

Wie ich so sehe, scheint das aber auch bei neueren IDE / VCL so zu sein?

ConstantGardener 23. Feb 2010 13:25

Re: FormatDateTime liefert englische Wochentage
 
Hallo Schiffi,

auf StackOverflow berichten einige User über ähnliche Phänomene und mögliche Lösungen.

ps. Ich habe das entsprechende Projekt noch unter D2006 kompiliert. Die portierte Version unter D2010 ist noch nicht in freier Wildbahn. Deshalb weiß ich nicht ob der Fehler unter neuen IDE/VCLs weiterhin besteht.

cg

Hepdepaddel 9. Apr 2010 09:08

Re: FormatDateTime liefert englische Wochentage
 
Soooo... einem Kunden sei Dank haben wir nun eine Lösung:

Unter Windows 7 auf "Start (oder wie immer der runde Button unten links jetzt heißt)" > Systemsteuerung > Region und Sprache > Reiter: Format.

Klick auf den Button "Weitere Einstellungen".

Klick auf "Zurücksetzen" - auch falls die Einstellungen in Ordnung aussehen. :roll:

Schließen aller Fenster mit "OK".

Nach einem Neustart war das Problem auf bisher allen Problemrechnern gelöst.


Da das Thema ja nicht bei mir alleine auftrat, mag das für manchen Suchenden im Forum interessant sein.

Gruß

Hepdepaddel

oakins 14. Aug 2010 15:36

AW: FormatDateTime liefert englische Wochentage
 
Hey Hepdepaddel,

dieser Tipp war ultimativ gut. Habe mich schon ewig mit diesen englischen Systemeinstellungen in deutschen Umgebungen herumgeärgert und jeweils Einstellungen wie ThousandSeparator, DateSeparator, ShortDateFormat etc. im OnCreate des Hauptformulars (unschön aber wirkungsvoll) gesetzt. Nun brauche ich diese Hacks nicht mehr, judihui!

Oakins


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