Articles

You should use GetSystemLayoutList function to get identifiers of all system languages and use VerLanguagename function to convert these IDs to locales.

procedure TForm1.Button1Click(Sender: TObject);
var
  Count, i: Integer;
  MyLang: PChar;
  Layouts: array [0..16] of Integer;
const
  Size: Integer = 250;
begin
  GetMem(MyLang, Size);
  Count:=GetKeyboardLayoutList(16, Layouts);
  Memo1.Lines.Clear;
  for i:=0 to Count-1 do
  begin
    VerLanguageName(Layouts[i], MyLang, Size);
    Memo1.Lines.Add(StrPas(MyLang));
  end;
  FreeMem(MyLang);
end;