Entwickler-Ecke
Windows API - Gebietsschema?
Tpercon - Do 19.06.03 15:08
Titel: Gebietsschema?
Wie ermittel ich das auf dem System eingestellte Gebietsschema?
Gruß
Anonymous - Di 24.06.03 00:44
per
Quelltext
1:
| LANGID GetSystemDefaultLangID(void); |
Sollte in der Windows.pas deklariert sein.[/code]
Tpercon - Mo 07.07.03 10:07
Wie bekomme ich an Hand des Identifier die Sprache?
Tpercon - Mo 07.07.03 12:16
Daher habe ich die Infos ja, nur es muß doch eine Funktion geben, die die zugehörige Language des Identifier (siehe Language Identifiers and Locales) ausliest.
Anonymous - Mo 07.07.03 14:35
Die LangID besteht aus der Sprache an sich und der Sortier-ID ... was genau willst du haben?
Tpercon - Mo 07.07.03 14:43
Ich wüßte gerne wie ich z.B. von der 0x0407 auf Deutschland komme?!
Tpercon - Mo 07.07.03 15:15
@ Assarbad: Gefunden habe ich das auch, nur kann ich das leider nicht für meine Frage umsetzen.
@ Tino: Das ist perfekt! Danke dir!
Anonymous - Mo 07.07.03 15:22
Sekunde mal. Ich erwartete hier mit einem Programmierer zu sprechen.
- Die LCID ist die Locale ID (i.e. Gebietsschema).
- Die LangID ist die Sprache als Zahl codiert.LangID:=Word(LCID);
- Die SortID ist ab dem 16. Byte zu haben (4bit = 1 Nibble breit)...SortID:=Byte((LCID AND $F0000) shr 16);
Jetzt alles fit?
Tpercon - Mo 07.07.03 15:43
Und diese Decodierung bekomm ich halt nicht hin. :oops:
Anonymous - Mo 07.07.03 15:52
Wie, es klappt auch nicht mit obigem Source, oder du konntest das nicht aus der Doku ableiten? Weil wenn der Source nicht funzt, muss ich nochmal nachschauen.
Tpercon - Mo 07.07.03 15:59
Ich bekomme es nicht hin, die LangID als lesbaren String auszugeben.
Delete - Mo 07.07.03 16:47
| Tpercon hat folgendes geschrieben: |
| Und diese Decodierung bekomm ich halt nicht hin. :oops: |
Vielleicht ist das bei neuen Delphi-Versionen anders, aber bei Delphi 5 hat Borland ein paar der nützlichen Makros vergessen, mit denen man bei Microsoft verwöhnt wird. Ausgehend von den Makros aus der "WinNT.h" und den Beschreibungen im PSDK habe ich mir die Makros selbst geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| function MAKELANGID(usPrimaryLanguage, usSubLanguage: BYTE): WORD; begin Result := (usSubLanguage shl 10) or usPrimaryLanguage; end;
function PRIMARYLANGID(lgid: WORD): Word; begin Result := lgid and $3ff; end;
function SUBLANGID(lgid: WORD): WORD; begin Result := lgid shr 10; end;
function MAKELCID(wLanguageId, wSortId: WORD): DWORD; begin Result := (wSortId shl 16) or wLanguageId; end;
function MAKESORTLCID(wLanguageId, wSortId, wSortVersion: WORD): DWORD; begin Result := MAKELCID(wLanguageId,wSortId) or (wSortVersion shl 20); end;
function LANGIDFROMLCID(lcid: DWORD): WORD; begin Result := WORD(lcid); end;
function SORTIDFROMLCID(lcid: DWORD): WORD; begin Result := WORD((lcid shr 16) and $F); end;
function SORTVERSIONFROMLCID(lcid: DWORD): WORD; begin Result := WORD((lcid shr 20) and $F); end; |
Damit geht die "Dekodierung" natürlich sehr einfach, wenn man nicht zufällig einen Assarbad in der Nähe hat, der aushilft. :mrgreen:
Ansonsten fällt mir nur ein, mit Dankeshymnen à
| Zitat: |
| @ Tino: Das ist perfekt! Danke dir! |
zu warten bis man den Code auch wirklich ausprobiert und Grund zum Danken hat. :wink: Wobei ich sagen muss, wenn ich folgendes mache:
Delphi-Quelltext
1: 2: 3:
| SetLength (txt,MAX_PATH); SetLength (txt,VerLanguageName(GetUserDefaultLangId,@txt[1],sizeof(txt))); ShowMessage(Format('%s',[txt])); |
dann erhalte ich
DEU als Ergebnis. Na gut, ich habe auch mehr erwartet ... :roll: ... aber der FAQ-Code ist nach meiner bescheidenen Meinung in Ordnung.
Anonymous - Mo 07.07.03 17:00
Titel: Mit Erdbeergeschmack? ... hiero
@Mathias: Schmeiss deinen Code mal in die Code-Library der DP :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| program Project1; {$APPTYPE CONSOLE} uses Windows;
var bla:array[0..1023] of Char; begin GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SENGCOUNTRY, @bla, sizeof(bla)); Writeln('Name des Landes (Englisch) : ',bla); GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SENGLANGUAGE, @bla, sizeof(bla)); Writeln('Name der Sprache auf Englisch: ',bla); GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SLANGUAGE, @bla, sizeof(bla)); Writeln('Name der Sprache lokalisiert : ',bla); GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SNATIVELANGNAME, @bla, sizeof(bla)); Writeln('Orginalname der Sprache : ',bla); GetLocaleInfo(GetSystemDefaultLCID, LOCALE_SNATIVECTRYNAME , @bla, sizeof(bla)); Writeln('Orginalname des Landes : ',bla); Readln; end. |
Delete - Mo 07.07.03 17:59
Titel: Re: Mit Erdbeergeschmack? ... hiero
| MathiasSimmack hat folgendes geschrieben: |
| Na gut, ich habe auch mehr erwartet ... |
... aber dann hätte ich auch vielleicht length(txt) anstelle von sizeof(txt) benutzen müssen:
Delphi-Quelltext
1: 2: 3: 4:
| SetLength (txt,MAX_PATH); SetLength (txt, VerLanguageName(GetUserDefaultLangId,@txt[1],length(txt))); ShowMessage(txt); |
So sehe ich selbstverständlich "Deutsch (Standard)". Also - mein Fehler. :oops:
| Assarbad hat folgendes geschrieben: |
| @Mathias: Schmeiss deinen Code mal in die Code-Library der DP :) |
Ok, wieso nicht.
Tino - Di 08.07.03 08:51
Titel: Re: Mit Erdbeergeschmack? ... hiero
| MathiasSimmack hat folgendes geschrieben: |
| Assarbad hat folgendes geschrieben: | | @Mathias: Schmeiss deinen Code mal in die Code-Library der DP :) |
Ok, wieso nicht. |
Hier würden sich mehr als 3000 User auch über den Code in der FAQ freuen :-)
Anonymous - Di 08.07.03 10:11
Hallo Tino,
ist ja fast wie im echten Leben. Jeder benutzt eine eigene Terminologie ... da braucht sich keiner wundern, daß keiner mehr was versteht :mrgreen:
Ich werd's wahrscheinlich nachtragen ...
Delete - Di 08.07.03 13:58
Ja, bitte - sei mal nachtragend und schreib gleich meine Funktionen mit dazu. Wie in der DP halt. Dann brauch ich das nicht machen ...
Anonymous - Di 08.07.03 18:51
@Tino & Mathias: Habs nachgetragen ...
Jetzt bin ich nicht mehr nachtragend :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!