Hola!!
Creo que no sería necesario crear unas funciones tan "complejas", ya que hay funciones en Delphi que creo que realizan la misma acción. Por ejemplo, quedaría más sencillo de la siguiente manera
Código Delphi
[-]
function GetDateStr(DateTime: TDateTime; Lang: Cardinal): string;
var
fs: TFormatSettings;
begin
GetLocaleFormatSettings(Lang, fs);
Result := FormatDateTime('dddd, d "de" mmmm "del" yyyy', DateTime, fs);
end;