Sprach ID des OS ermitteln, .. [gelöst]

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1730
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Sprach ID des OS ermitteln, .. [gelöst]

Beitrag von corpsman »

Hallo Zusammen,

bisher hatte ich immer

https://lazarus-ccr.sourceforge.io/docs ... geids.html

genutzt, doch das ist deprecated und nun nicht mehr verfügbar (zumindest unter meiner Trunk version).

Gemäß des Hinweises versuche ich auf

https://lazarus-ccr.sourceforge.io/docs ... ageid.html

um zu steigen. Doch während LazGetLanguageIDs korrekt "en" zurück gegeben hatte bekomme ich bei getlanguageid lediglich "C" als LanguageID und "C" als LanguageCode während CountryCode '' ist

Wenn ich mir dann die ausgabe von locale anschaue
corpsman@corpsman:~$ locale
LANG=C.UTF-8
LANGUAGE=en_US
LC_CTYPE="C.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=C.UTF-8
LC_COLLATE=de_DE.UTF-8
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="C.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
Verstehe ich jetzt wo dieses C her kommt, nur leider nutzt mir das herzlich wenig, kennt jemand einen eleganteren Weg als local mittels TProcess auf zu rufen und das selbst zu parsen ?

[Edit]
OK, also laut google, ist mein System auf C weil ich deutsche Zahlen und Kalender habe, der Rest vom OS aber englisch ist (was stimmt), ..
Zuletzt geändert von corpsman am Mo 12. Jan 2026, 13:28, insgesamt 1-mal geändert.
--
Just try it

Benutzeravatar
theo
Beiträge: 11121
Registriert: Mo 11. Sep 2006, 19:01

Re: Sprach ID des OS ermitteln, ..

Beitrag von theo »

corpsman hat geschrieben: Mo 12. Jan 2026, 07:11 Verstehe ich jetzt wo dieses C her kommt, nur leider nutzt mir das herzlich wenig, kennt jemand einen eleganteren Weg als local mittels TProcess auf zu rufen und das selbst zu parsen ?
Das ja sowieso nicht. Sind ja z.T. Umgebungsvariablen:

Code: Alles auswählen

GetEnvironmentVariable('LANG');
GetEnvironmentVariable('LANGUAGE');
Und sonst, wenn du nun mal diese Einstellung hast, dann gibt er dir diese zurück. Das ist ja nicht falsch.

https://community.hpe.com/t5/operating- ... -p/4418194

Für praktische Zwecke kann man C vielleicht als EN interpretieren.

Benutzeravatar
Zvoni
Beiträge: 503
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Sprach ID des OS ermitteln, ..

Beitrag von Zvoni »

Dein Problem ergibt keinen Sinn.
Hab gerade in den Quellcode geschaut:

LazGetLanguageIDs in LazUTF8 (Deprecated) ruft ja direkt GetLanguageID in Translations auf.

Code: Alles auswählen

procedure LazGetLanguageIDs(var Lang, FallbackLang: String);
var
  LangID: TLanguageID;
begin
  LangID := GetLanguageID;  //--> In Unit "Translations"
  Lang := LangID.LanguageID;
  FallbackLang := LangID.LanguageCode;
end;           
Der code in GetLanguageID, welcher NICHT für Windows ist

Code: Alles auswählen

EnvVarContents := GetEnvironmentVariable('LC_ALL');
    if Length(EnvVarContents) = 0 then
    begin
      EnvVarContents := GetEnvironmentVariable('LC_MESSAGES');
      if Length(EnvVarContents) = 0 then
        EnvVarContents := GetEnvironmentVariable('LANG');
    end;          
//schnipp
Result := GetLanguageIDFromLocaleName(EnvVarContents);
EDIT: Das "C" in "C.UTF8" ist eigentlich eher der Hinweis, dass es das Locale des Computers ist, und nicht des Users
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1730
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Sprach ID des OS ermitteln, ..

Beitrag von corpsman »

Hmm meine Anwendung schaut nach ob das Ergebnis in einer Gültigen menge ist, wenn dies nicht der Fall ist nimmt es "en" an.

Wenn ich euch richtig verstehe ist das auf meinem Rechner noch nie "richtig" gewesen, ich habs nur nicht gemerkt, weil der Code ja noch compilierte, und nun da ich auf ein neueres Lazarus gewechselt habe und die die deprecated funktion rausgeworfen haben bin ich dem irrglauben aufgesessen dass es nicht stimmt, was aber wohl nicht der Fall war.

Danke für die Klarstellung (y)
--
Just try it

Antworten