Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Sprache ermitteln (https://www.delphipraxis.net/116965-windows-sprache-ermitteln.html)

TUX_der_Pinguin 9. Jul 2008 13:51


Windows Sprache ermitteln
 
Hallo,
ich möchte gern in meiner Software Fehlermeldungen einbinden diese sollen jenachdem welche Sprache in Windows eingestellt ist
angezeigt werden. Z.b. wenn bei einem Datei öffnen versuch die Routine abbricht weil die Datei nicht gefunden werden kann soll
folgende Meldung erscheinen...

Deutsch: "Die Datei "test.txt" konnte nicht gefunden werden!"
Englisch: "File "test.txt" not found!"

So jetzt habe ich hier im Forum gesucht und habe auch etwas gefunden ich bin mir nur noch nicht ganz sicher ob das der richtige ansatzt ist.

Hier mal eine kleine Testanwendung für die unterschiedlichen Möglichkeiten.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  bla:array[0..1023] of Char;

implementation

{$R *.dfm}

function GetLanguageNameByID(AID: Integer): WideString;
begin
  SetLength(Result,MAX_PATH);
  SetLength(Result, VerLanguageNameW(AID,@Result[1], length(Result)));
end;

function GetWindowsLanguage(LCTYPE: LCTYPE {type of information}): string;
var
  Buffer : PChar;
  Size : integer;
begin
  Size := GetLocaleInfo (LOCALE_USER_DEFAULT, LCType, nil, 0);
  GetMem(Buffer, Size);
  try
    GetLocaleInfo (LOCALE_USER_DEFAULT, LCTYPE, Buffer, Size);
    Result := string(Buffer);
  finally
    FreeMem(Buffer);
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  LabeledEdit1.Text := GetLanguageNameByID(GetSystemDefaultLangID);   //Deutsch (Deutschland)
  LabeledEdit2.Text := GetLanguageNameByID(GetUserDefaultLangID);   //Englisch (USA)

  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SENGCOUNTRY, @bla, sizeof(bla));
  Memo1.Lines.Add('Name des Landes (Englisch) : '+bla);         

  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SENGLANGUAGE, @bla, sizeof(bla));
  Memo1.Lines.Add('Name der Sprache auf Englisch: '+bla);

  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SLANGUAGE, @bla, sizeof(bla));
  Memo1.Lines.Add('Name der Sprache lokalisiert : '+bla);

  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SNATIVELANGNAME, @bla, sizeof(bla));
  Memo1.Lines.Add('Orginalname der Sprache : '+bla);

  GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SNATIVECTRYNAME , @bla, sizeof(bla));
  Memo1.Lines.Add('Orginalname des Landes : '+bla);


  Memo1.Lines.Add('');
  Memo1.Lines.Add(GetWindowsLanguage(LOCALE_ILANGUAGE));
  Memo1.Lines.Add(GetWindowsLanguage(LOCALE_SLANGUAGE));
  Memo1.Lines.Add(GetWindowsLanguage(LOCALE_SENGLANGUAGE));
  Memo1.Lines.Add(GetWindowsLanguage(LOCALE_SABBREVLANGNAME));
  Memo1.Lines.Add(GetWindowsLanguage(LOCALE_SNATIVELANGNAME));

end;


end.
Jetzt habe ich mein "Deutsches" Windows XP in den Reginal Einstellungen auf Englisch umgestellt und erhalte, als Ergebnis folgendes.

Delphi-Quellcode:
LabeledEdit1.Text := GetLanguageNameByID(GetSystemDefaultLangID);   //Deutsch (Deutschland)
LabeledEdit2.Text := GetLanguageNameByID(GetUserDefaultLangID);   //Englisch (USA)
Im Memofeld erscheinen dann folgende Informationen...
Zitat:

Name des Landes (Englisch) : Germany
Name der Sprache auf Englisch: German
Name der Sprache lokalisiert : Deutsch (Deutschland)
Orginalname der Sprache : Deutsch
Orginalname des Landes : Deutschland

0409
Englisch (USA)
English
ENU
English

Wenn ich die System Sprache abfrage ist klar das die Sprache angezeigt wird in der das Windows Installiert wird auch wenn
die Sprache umgestellt ist, oder aber ich zeige die Meldungen in der Sprache an die der Benutzer eingestellt hat. Dies
muß ich für mich entscheiden was mir sinnvoller erscheint.

Ein Problem ist aber noch wie Frage ich auf "Deutsch" oder "Englisch" ab, wenn es eine andere Länderinstalltion ist Beisp.
"Deutsch (Schweiz)" oder "English (Great Briten)" usw.

Ich könnte mir das so vorstellen, ob das aber so vernünftig funktioniert...
Delphi-Quellcode:
GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SENGLANGUAGE, @bla, sizeof(bla));
if bla = 'Deutsch' then
  ShowMessage('Datei "test.txt" konnte nicht gefunden werden');

if bla = 'English' then
  ShowMessage('File not found!');

So Richtig zufrieden bin ich da irgendwie nicht mit, ob ich das jetzt alles so richtig habe oder es da noch ein anderer Ansatz vorhanden ist.

Luckie 9. Jul 2008 14:04

Re: Windows Sprache ermitteln
 
Zitat:

Zitat von TUX_der_Pinguin
Ein Problem ist aber noch wie Frage ich auf "Deutsch" oder "Englisch" ab, wenn es eine andere Länderinstalltion ist Beisp.
"Deutsch (Schweiz)" oder "English (Great Briten)" usw.

Also das würde ich nun nicht mehr unterscheiden. Oder willst du auch noch Sprachdateien in Scheizer Deutsch und Österreichisch beilegen?

TUX_der_Pinguin 9. Jul 2008 14:23

Re: Windows Sprache ermitteln
 
Das will ich ja grade nicht, ich will sicher sein das ich eine Abfrage habe die auf die ganze "Familie" abfragt egal ob das
ein Österreichisches oder ein Windows aus Lichtenstein ist.

Ich habe jetzt eine Abfrage genommen die mit 'LOCALE_SNATIVELANGNAME' arbeitet.

Delphi-Quellcode:
if AnsiLowerCase(GetWindowsLanguage(LOCALE_SNATIVELANGNAME)) = 'deutsch' then ...
Ich war mir halt nur nicht sicher ob das alles so klappt weil es ja die unterschiedlichen Ländern mit der gleichen Sprache gibt.
z.B. die Abkürzungen 'LOCALE_SABBREVLANGNAME' bringen mir nichts da "Niederländisch (Niederlande)" mit NLD und "Niederländisch (Belgien)" mit NLB abgekürzt wird.

hathor 9. Jul 2008 14:33

Re: Windows Sprache ermitteln
 
GetKeyboardLayout:

Man kann noch GetKeyboardLayout abfragen, dann hast Du das gesuchte Land.

oder so:

Delphi-Quellcode:
const
  IDAfrikaans                = $0436; IDAlbanian                 = $041C;
  IDArabicAlgeria            = $1401; IDArabicBahrain            = $3C01;
  IDArabicEgypt              = $0C01; IDArabicIraq               = $0801;
  IDArabicJordan             = $2C01; IDArabicKuwait             = $3401;
  IDArabicLebanon            = $3001; IDArabicLibya              = $1001;
  IDArabicMorocco            = $1801; IDArabicOman               = $2001;
  IDArabicQatar              = $4001; IDArabic                   = $0401;
  IDArabicSyria              = $2801; IDArabicTunisia            = $1C01;
  IDArabicUAE                = $3801; IDArabicYemen              = $2401;
  IDArmenian                 = $042B; IDAssamese                 = $044D;
  IDAzeriCyrillic            = $082C; IDAzeriLatin               = $042C;
  IDBasque                   = $042D; IDByelorussian             = $0423;
  IDBengali                  = $0445; IDBulgarian                = $0402;
  IDBurmese                  = $0455; IDCatalan                  = $0403;
  IDChineseHongKong          = $0C04; IDChineseMacao             = $1404;
  IDSimplifiedChinese        = $0804; IDChineseSingapore         = $1004;
  IDTraditionalChinese       = $0404; IDCroatian                 = $041A;
  IDCzech                    = $0405; IDDanish                   = $0406;
  IDBelgianDutch             = $0813; IDDutch                    = $0413;
  IDEnglishAUS               = $0C09; IDEnglishBelize            = $2809;
  IDEnglishCanadian          = $1009; IDEnglishCaribbean         = $2409;
  IDEnglishIreland           = $1809; IDEnglishJamaica           = $2009;
  IDEnglishNewZealand        = $1409; IDEnglishPhilippines       = $3409;
  IDEnglishSouthAfrica       = $1C09; IDEnglishTrinidad          = $2C09;
  IDEnglishUK                = $0809; IDEnglishUS                = $0409;
  IDEnglishZimbabwe          = $3009; IDEstonian                 = $0425;
  IDFaeroese                 = $0438; IDFarsi                    = $0429;
  IDFinnish                  = $040B; IDBelgianFrench            = $080C;
  IDFrenchCameroon           = $2C0C; IDFrenchCanadian           = $0C0C;
  IDFrenchCotedIvoire        = $300C; IDFrench                   = $040C;
  IDFrenchLuxembourg         = $140C; IDFrenchMali               = $340C;
  IDFrenchMonaco             = $180C; IDFrenchReunion            = $200C;
  IDFrenchSenegal            = $280C; IDSwissFrench              = $100C;
  IDFrenchWestIndies         = $1C0C; IDFrenchZaire              = $240C;
  IDFrisianNetherlands       = $0462; IDGaelicIreland            = $083C;
  IDGaelicScotland           = $043C; IDGalician                 = $0456;
  IDGeorgian                 = $0437; IDGermanAustria            = $0C07;
  IDGerman                   = $0407; IDGermanLiechtenstein      = $1407;
  IDGermanLuxembourg         = $1007; IDSwissGerman              = $0807;
  IDGreek                    = $0408; IDGujarati                 = $0447;
  IDHebrew                   = $040D; IDHindi                    = $0439;
  IDHungarian                = $040E; IDIcelandic                = $040F;
  IDIndonesian               = $0421; IDItalian                  = $0410;
  IDSwissItalian             = $0810; IDJapanese                 = $0411;
  IDKannada                  = $044B; IDKashmiri                 = $0460;
  IDKazakh                   = $043F; IDKhmer                    = $0453;
  IDKirghiz                  = $0440; IDKonkani                  = $0457;
  IDKorean                   = $0412; IDLao                      = $0454;
  IDLatvian                  = $0426; IDLithuanian               = $0427;
  IDMacedonian               = $042F; IDMalaysian                = $043E;
  IDMalayBruneiDarussalam    = $083E; IDMalayalam                = $044C;
  IDMaltese                  = $043A; IDManipuri                 = $0458;
  IDMarathi                  = $044E; IDMongolian                = $0450;
  IDNepali                   = $0461; IDNorwegianBokmol          = $0414;
  IDNorwegianNynorsk         = $0814; IDOriya                    = $0448;
  IDPolish                   = $0415; IDBrazilianPortuguese      = $0416;
  IDPortuguese               = $0816; IDPunjabi                  = $0446;
  IDRhaetoRomanic            = $0417; IDRomanianMoldova          = $0818;
  IDRomanian                 = $0418; IDRussianMoldova           = $0819;
  IDRussian                  = $0419; IDSamiLappish              = $043B;
  IDSanskrit                 = $044F; IDSerbianCyrillic          = $0C1A;
  IDSerbianLatin             = $081A; IDSesotho                  = $0430;
  IDSindhi                   = $0459; IDSlovak                   = $041B;
  IDSlovenian                = $0424; IDSorbian                  = $042E;
  IDSpanishArgentina         = $2C0A; IDSpanishBolivia           = $400A;
  IDSpanishChile             = $340A; IDSpanishColombia          = $240A;
  IDSpanishCostaRica         = $140A; IDSpanishDominicanRepublic = $1C0A;
  IDSpanishEcuador           = $300A; IDSpanishElSalvador        = $440A;
  IDSpanishGuatemala         = $100A; IDSpanishHonduras          = $480A;
  IDMexicanSpanish           = $080A; IDSpanishNicaragua         = $4C0A;
  IDSpanishPanama            = $180A; IDSpanishParaguay          = $3C0A;
  IDSpanishPeru              = $280A; IDSpanishPuertoRico        = $500A;
  IDSpanishModernSort        = $0C0A; IDSpanish                  = $040A;
  IDSpanishUruguay           = $380A; IDSpanishVenezuela         = $200A;
  IDSutu                     = $0430; IDSwahili                  = $0441;
  IDSwedishFinland           = $081D; IDSwedish                  = $041D;
  IDTajik                    = $0428; IDTamil                    = $0449;
  IDTatar                    = $0444; IDTelugu                   = $044A;
  IDThai                     = $041E; IDTibetan                  = $0451;
  IDTsonga                   = $0431; IDTswana                   = $0432;
  IDTurkish                  = $041F; IDTurkmen                  = $0442;
  IDUkrainian                = $0422; IDUrdu                     = $0420;
  IDUzbekCyrillic            = $0843; IDUzbekLatin               = $0443;
  IDVenda                    = $0433; IDVietnamese               = $042A;
  IDWelsh                    = $0452; IDXhosa                    = $0434;
  IDZulu                     = $0435;

function GetWindowsLanguage: string;
var
  langid: Cardinal;
  langcode: string;
  CountryName: array[0..4] of char;
  LanguageName: array[0..4] of char;
  works: boolean;
begin
  // The return value of GetLocaleInfo is compared with 3 = 2 characters and a zero
  works := 3 = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, LanguageName, SizeOf(LanguageName));
  works := works and (3 = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, CountryName,
    SizeOf(CountryName)));
  if works then begin
    // Windows 98, Me, NT4, 2000, XP and newer
    LangCode := PChar(@LanguageName[0]);
    if lowercase(LangCode)='no' then LangCode:='nb';
    LangCode:=LangCode + '_' + PChar(@CountryName[0]);
  end else begin
    // This part should only happen on Windows 95.
    langid := GetThreadLocale;
    case langid of
      IDBelgianDutch: langcode := 'nl_BE';
      IDBelgianFrench: langcode := 'fr_BE';
      IDBrazilianPortuguese: langcode := 'pt_BR';
      IDDanish: langcode := 'da_DK';
      IDDutch: langcode := 'nl_NL';
      IDEnglishUK: langcode := 'en_GB';
      IDEnglishUS: langcode := 'en_US';
      IDFinnish: langcode := 'fi_FI';
      IDFrench: langcode := 'fr_FR';
      IDFrenchCanadian: langcode := 'fr_CA';
      IDGerman: langcode := 'de_DE';
      IDGermanLuxembourg: langcode := 'de_LU';
      IDGreek: langcode := 'el_GR';
      IDIcelandic: langcode := 'is_IS';
      IDItalian: langcode := 'it_IT';
      IDKorean: langcode := 'ko_KO';
      IDNorwegianBokmol: langcode := 'nb_NO';
      IDNorwegianNynorsk: langcode := 'nn_NO';
      IDPolish: langcode := 'pl_PL';
      IDPortuguese: langcode := 'pt_PT';
      IDRussian: langcode := 'ru_RU';
      IDSpanish, IDSpanishModernSort: langcode := 'es_ES';
      IDSwedish: langcode := 'sv_SE';
      IDSwedishFinland: langcode := 'sv_FI';
    else
      langcode := 'C';
    end;
  end;
  Result := langcode;
end;

TUX_der_Pinguin 9. Jul 2008 15:09

Re: Windows Sprache ermitteln
 
Auch mit "GetKeyBoardLayout" wird es nicht gehen, ich habe jetzt den Test mit Vista Ultimate gemacht, dort läßt sich
die Sprache ja "komplett" umstellen. Rufe ich jetzt meine Testanwendung auf, wenn ich Vista auf Englisch umstelle, so
zeigt mir die Anwendung als Sprache "Deutsch" an was ja korrekt ist, weil die Regional Einstellungen sind ja auch alle
auf Deutsch. Ich brauche aber die Sprache in der das Betriebssystem arbeitet.

Wenn man z.B. mit Application.MessageBox() einen Dialog anzeigen läßt so werden die Buttons ja auch in der jeweiligen
Sprache eingestellt (Beisp. "Ja/Nein" bzw. "Yes/No") und genau sowas will ich für meine eigenen Dialoge auch haben.

Nur wie bekomme ich herraus in welcher Sprache das Windows vorliegt. Ich hätte gern unabhängig von den Regional Einstellungen
die eingestellte Sprache.

hathor 9. Jul 2008 15:12

Re: Windows Sprache ermitteln
 
Guck noch mal auf meinen Beitrag...

Garfield 9. Jul 2008 16:08

Re: Windows Sprache ermitteln
 
Ich würde es versuchen mit:

LOCALE_SISO639LANGNAME - 'ISO abbreviated language name

http://de.wikipedia.org/wiki/ISO_639
http://alis.isoc.org/langues/iso639.de.htm

LOCALE_SISO3166CTRYNAME - 'ISO abbreviated country name

http://de.wikipedia.org/wiki/ISO_3166
http://www.iso.org/iso/country_codes...e_elements.htm

So wie es auch hathor von gnugettext übernommen hat.

Nachtrag:

Zitat:

Zitat von TUX_der_Pinguin
Nur wie bekomme ich herraus in welcher Sprache das Windows vorliegt. Ich hätte gern unabhängig von den Regional Einstellungen
die eingestellte Sprache.

Vermutlich indem Du LOCALE_USER_DEFAULT gegen LOCALE_SYSTEM_DEFAULT austauscht.

Luckie 9. Jul 2008 16:10

Re: Windows Sprache ermitteln
 
Zitat:

Zitat von hathor
Man kann noch GetKeyboardLayout abfragen, dann hast Du das gesuchte Land.

Das kann aber auch daneben gehen. Es gibt Programmierer, die Deutsch als Sprache eingestelllt haben, aber ein amerikanisches Keyboardlayout benutzen.

RavenIV 9. Jul 2008 16:14

Re: Windows Sprache ermitteln
 
Warum nimmst Du nicht fertige Sachen dafür?
z.B. Multilizer oder Gnu Gettext?
Da macht die Komponente die Spracherkennung.

Apollonius 9. Jul 2008 16:17

Re: Windows Sprache ermitteln
 
Ich denke, Lokalisierung macht man am besten mit Ressourcen. LoadString lädt immer den String in der System-Sprache (wobei ich nicht weiß, ob das die Installationssprache ist oder die der Regionaleinstellungen), sofern er vorliegt.

TUX_der_Pinguin 10. Jul 2008 07:24

Re: Windows Sprache ermitteln
 
Ich werde mir die von euch genannten Lösungen an sehen und mal probieren ob und was mir weiterhilft.

Es geht in diesem Fall nicht um eine komplette Lokalisierung der Anwendung, sondern beim Start der Software kann
es halt vorkommen das Einstellungen und somit die vom Benutzer eingestellte Sprache nicht geladen werden können
daraufhin soll der Anwender eine Fehlermeldung bekommen in der "Systemsprache", weil die vom Anwender eingestellte
Sprache ja nicht bekannt ist.

TUX_der_Pinguin 10. Jul 2008 08:20

Re: Windows Sprache ermitteln
 
Ich habe noch mal den Test gemacht mit Vista welches ich auf das "Englische" Sprachpaket umgestellt habe, die Informationen
die ich mit "GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,.." erhalte ist immer Deutsch, klar das Vista ist im Grunde ein Deutsch aber
Windows zeigt ja auch alles in Englisch an und ein Dialog der per "Application.MessageBox()" erstellt wurde, wird auch übersetzt.

Ich verstehe das so, das die Regional Einstellungen nur die Formatierungen (Datum, Dezimaltrennzeichen etc.) und ggf. das Tastatur
Layout beeinflussen und das muß ja nicht gleich der Systemsprache sein, wie Luckie auch geschrieben hat, muß ein Tastatur
Layout nicht der zur Zeit dargestellten Sprache entsprechen.

Ich könnte es auch belassen die Meldungen einfach in der Sprache anzuzeigen in der das Betriebssystem installiert wurde,
jedoch fände ich es nett wenn ich auch die Sprachpakete von Vista und XP berücksichtigen könnte und ich mich nicht auf
diesen ganzen Regional quatsch einlassen muß.

Die Muhkuh 10. Jul 2008 08:30

Re: Windows Sprache ermitteln
 
Zitat:

Zitat von RavenIV
z.B. Multilizer oder Gnu Gettext?

Ich hab nur drauf gewartet, dass es endlich jemand schreibt. Mit GNU GetText hab ich schon gute Erfahrung gemacht und ist sehr zu empfehlen!

TUX_der_Pinguin 10. Jul 2008 08:41

Re: Windows Sprache ermitteln
 
Zitat:

Zitat von Die Muhkuh
Zitat:

Zitat von RavenIV
z.B. Multilizer oder Gnu Gettext?

Ich hab nur drauf gewartet, dass es endlich jemand schreibt. Mit GNU GetText hab ich schon gute Erfahrung gemacht und ist sehr zu empfehlen!

So dann erzählt mal wie mir GnuText oder Multilizer sagen kann um welche Sprache es sich handelt, ich habe die beiden möglichkeiten
noch nie benutzt, es geht nach wie vor nicht um eine Lokalisierung einer ganzen Anwendung sondern eine einfache Abfrage um eine
Handvoll Meldungen beim Start des Programms in verschiedenen Sprachen anzuzeigen.

Die Muhkuh 10. Jul 2008 08:46

Re: Windows Sprache ermitteln
 
Hi,

kannst ja mal einen Blick reinwerfen: http://dybdahl.dk/dxgettext/download/ :)

RavenIV 10. Jul 2008 09:08

Re: Windows Sprache ermitteln
 
Aus der Praxis kenn ich nur den Multilizer.
Der erkennt die Windows-Sprache selbständig.
Auch schon Meldungen bei Programmstart werden somit in der Sprache der Windowsinstallation angezeigt.

Kritisch wird es allerdings, wenn z.B. ein eigentliche englisches Windows auf Französisch umgestellt wird.
Dann kommt Multilizer durcheinander und zeigt die Texte in der Multilizer-Standardsprache an. Je nachdem wie die eingestellt ist, gibt es tolle Effekte.

Wir hatten dies nömlich mal bei meinem vorherigen Arbeitgeber.
Ein Windows, das in Englisch installiert war (also englisches Windows XP).
Der Computer wurde von einem Kunden zurückgenommen, weil ein Hardware-Fehler vermutet wurde. Dieser Fehler trat bei uns nie auf. PC kommt ins Lager.
Dann kam ein anderer Kunde und wollte das Windows auf Französisch.
Also englischen PC geholt, Sprache auf Französisch umgestellt.
Software (mit Multilizer) drauf gepackt.
Gestartet und die Texte kamen auf Deutsch.
In der Zeit, die wir für Fehlersuche verbraten hatten, hätten wir 10x ein franz.Windows besorgen und installieren können.

TUX_der_Pinguin 10. Jul 2008 10:08

Re: Windows Sprache ermitteln
 
So noch mal bitte ganz langsam und zum Mitschreiben, wie kann ich GnuText oder Multilizer dazu verwenden, OHNE meine
ganze Anwendung damit zu Lokalisieren, herauszubekomme um welche Sprache es sich handelt.

Ich stelle mir das ungefähr so vor, ich lade eine X-Belibige .pas oder sonst was Datei herrunter füge diese in mein Projekt ein
und erhalte eine Funktion oder Prozedur die mir die Information liefert die ich benötige.

Das Ziel sieht ungefährt so aus:

Beispiel 1:
WinXP Deutsch, Regional Einstellungen Russisch, Sprache Englisch => Englische Meldungen

Beispiel 2:
WinXP Deutsch, Regional Einstellungen Deutsch, Sprache Deutsch => Deutsche Meldungen

Beispiel 3:
Vista Deutsch, Regional Einstellung Deutsch, Sprache Englisch => Englische Meldungen


Mir ist ja klar das mir keiner meine Arbeit abnimmt, nur habe ich noch nie mit den bereits mehrfach erwähnten Tools gearbeitet,
und ich denke mal jemand der es schon getan hatte weiß sofort wie es geht, den ich müßte erst mal die Tools downloaden/installieren
und dann gucken was sie genau sind, wie sie arbeiten und dann evtl. feststellen das es gar nicht geht.

RavenIV 10. Jul 2008 10:12

Re: Windows Sprache ermitteln
 
Mit Multilizer oder gettext wirst Du Dein Vorhaben nicht lösen können.
Und falls es doch einen Weg gibt, dann wäre das übertrieben.

Irgendeine API-Funktion kann Dir doch bestimmt sagen, welche Sprache das Windows hat und welche Sprache gerade aktuell eingestellt ist.
Mach Dich mal auf die Suche im MSDN.

TUX_der_Pinguin 10. Jul 2008 10:40

Re: Windows Sprache ermitteln
 
Zitat:

Zitat von RavenIV
Mit Multilizer oder gettext wirst Du Dein Vorhaben nicht lösen können.
Und falls es doch einen Weg gibt, dann wäre das übertrieben.

Irgendeine API-Funktion kann Dir doch bestimmt sagen, welche Sprache das Windows hat und welche Sprache gerade aktuell eingestellt ist.
Mach Dich mal auf die Suche im MSDN.

Alles klar vielen dank für die Info. Jetzt bin ich genau wieder am Anfang meines Problems, auf der Suche nach solch einer Funktion. :(

teebee 10. Jul 2008 10:48

Re: Windows Sprache ermitteln
 
Was kommt denn bei
Delphi-Quellcode:
Var Lang: String;

BufSize := GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVLANGNAME,Nil,0);
 SetLength(Lang,BufSize);
 GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVLANGNAME,PChar(Lang),BufSize);
heraus?
Mit den ersten beiden Zeichen müsstest Du eigentlich etwas anfangen können.
Gruß,teebee

Sherlock 10. Jul 2008 11:00

Re: Windows Sprache ermitteln
 
Warum willst Du das alles selber machen?

Nimm doch Sakuras feines Tool: http://www.wischnewski.tv/de/products/dw32pl.html

Sherlock

TUX_der_Pinguin 10. Jul 2008 11:35

Re: Windows Sprache ermitteln
 
Zitat:

Zitat von teebee
Was kommt denn bei
Delphi-Quellcode:
Var Lang: String;

BufSize := GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVLANGNAME,Nil,0);
 SetLength(Lang,BufSize);
 GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVLANGNAME,PChar(Lang),BufSize);
heraus?
Mit den ersten beiden Zeichen müsstest Du eigentlich etwas anfangen können.
Gruß,teebee

Also mit deinem Vorschlag würde folgendes passieren

Beispiel 1:
WinXP Deutsch, Regional Einstellungen Russisch, Sprache Englisch => Russisch Meldungen (Richtig wäre Englisch)

Beispiel 2:
WinXP Deutsch, Regional Einstellungen Deutsch, Sprache Deutsch => Deutsche Meldungen (Ausnahmsweise korrekt)

Beispiel 3:
Vista Deutsch, Regional Einstellung Deutsch, Sprache Englisch => Deutsche Meldungen (Richtig wäre Englisch)


Mit "Richtig wäre" meine ich das ergebnis welches ich haben möchte.

Zitat:

Zitat von Sherlock
Warum willst Du das alles selber machen?

Nimm doch Sakuras feines Tool: http://www.wischnewski.tv/de/products/dw32pl.html

Sherlock

Ich möchte mich ungern wiederholen ich will mein Programm nicht Lokalisieren mit solch einem Tool, da meine Anwendung
bereits Lokalisiert ist nur an dem Punkt wo die Meldungen kommen noch nicht, ich werde mein Programm nicht kompl. umschreiben.

Daher suche ich eine einfach Methode die gewünschte Information zu bekommen, was anscheind nicht geht.

RavenIV 10. Jul 2008 11:46

Re: Windows Sprache ermitteln
 
Zitat:

Zitat von TUX_der_Pinguin
Ich möchte mich ungern wiederholen ich will mein Programm nicht Lokalisieren mit solch einem Tool, da meine Anwendung
bereits Lokalisiert ist nur an dem Punkt wo die Meldungen kommen noch nicht, ich werde mein Programm nicht kompl. umschreiben.

Irgendwo und irgendwie hast Du ja die Lokalisierung schon eingebaut.
Wieso funktioniert das nur bei diesen Meldungen noch nicht?

Solltest vielleicht Dein Konzept überdenken, anstatt einfach nur einen Flicken drauf zu kleben.
Manchmal tut man sich leichter, wenn man gewisse Dinge umgebaut oder über den Haufen geworfen hat.

Wenn Du nicht bereit bist, Änderungen vorzunehmen, warum hast Du dann um Ideen gefragt?

TUX_der_Pinguin 10. Jul 2008 12:20

Re: Windows Sprache ermitteln
 
Beim Programmstart weiß ich nicht welche Sprache eingestellt ist, da diese Information in einer ini Datei liegt die erst
noch geladen werden muß, ist diese nicht vorhanden gibts ein weiteres Problem um diese Information zu bekommen.
Dann sind die Texte selbst bis auf die Fehlermeldungs Texte in einer DLL in Form von Tabellen. Bisher hatte ich die
Fehlermeldungen in Englisch angezeigt und wollte nur jetzt wissen ob mir Windows irgendwie verraten kann welche
Sprache eingestellt ist unabhänig von irgendwelchen Regionaleinstellungen etc.

Klar gibt es Tools von Sakura, GnuText, Multilizer und vieles mehr die sicherlich auch alle ihren Zweck erfüllen und ich
auch bereit bin mir diese mal näher anzusehen nur da ich meine Anwendung bereits auf meine art lokalisiert habe möchte ich
nicht für solch eine Kleinigkeit meine ganze Anwendung umschreiben was sicherlich einige Zeit in Anspruch nehmen würde.

Und daher gebe ich auf, ich wollte nur wissen ob es eine Möglichkeit gibt die Sprache zuermitteln, aber mir kann anscheind
niemand weiter helfen also lasse ich es sein, ich danke allen Beteiligten für ihre mühe und ihre Zeit.

Wünsche noch einen schönen Tag.

hathor 11. Jul 2008 09:52

Re: Windows Sprache ermitteln
 
WARUM fragst Du den User nicht einfach, welche Sprache bevorzugt wird?

Auf guten, barrierefreien Websites wird man doch auch gefragt!

kopernikus 6. Feb 2009 12:58

Re: Windows Sprache ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die WindowsAPI stellt vier verschiedene Abfragemöglichkeiten für die Sprache zur
Verfügung:

Regionale Einstellungen (locale):
---------------------------------
System:
GetSystemDefaultLangID

User:
GetUserDefaultLangID

Einstellungen für die Sprache (user interface):
-----------------------------------------------
(verfügbar erst ab Windows ME, bzw. 2000)
System:
GetSystemDefaultUILanguage

User:
GetUserDefaultUILanguage

Alle Funktionen geben als Ergebnis den "language identifier" zurück, z.B.
$407 für deutsch, &409 für englisch

Weitere Hinweise in " Platform SDK for Windows XP"

Implementierung unter Delphi 7:
-------------------------------
"GetSystemDefaultLangID" und "GetUserDefaultLangID" sind in "Windows.pas" deklariert.

"GetSystemDefaultUILanguage" und "GetUserDefaultUILanguage" fehlen und müssen
daher selbst deklariert werden.

Für Anwendungen unter Windows 2000 und neuer:

interface
...
{$EXTERNALSYM GetSystemDefaultUILanguage}
function GetSystemDefaultUILanguage: LANGID; stdcall;

{$EXTERNALSYM GetUserDefaultUILanguage}
function GetUserDefaultUILanguage: LANGID; stdcall;

implementation
...
function GetSystemDefaultUILanguage; external kernel32 name 'GetSystemDefaultUILanguage';
function GetUserDefaultUILanguage; external kernel32 name 'GetUserDefaultUILanguage';

Für eine Kompatibilität zu älteren Betriebssystem müssen diese beiden Deklarationen dynamisch
eingefügt werden (siehe Anhang).


Hinweis zu GnuGetText for Delphi:
---------------------------------
Die dort enthaltene Funktion "GetWindowsLanguage" fragt die regionalen Einstellungen ab,
was bei unterschiedlichen Sprach- und Regionaleinstellunegn zu falschen Ergebnissen führt.

Bsp:
Ein englisches Windows mit regionalen Einstellungen für Deutschland (Datum, Uhrzeit, etc.)
liefert $407 (deutsch) zurück. Als System-Sprache sollte aber englisch erkannt werden.

Das richtige Ergebnis liefert o.g. Funktion "GetUserDefaultUILanguage" (Ergebnis: $409).


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