I guess a proper presentation would require a bit more time. Here I have a fake calendar with essential structure. 35 is the total number of slots for dates, 31 is the number of days in this fake Month, 5 is the offset for the first day (Sunday being 0). The dates fold up as shown on to the first row as a bonus feature.
Prepend[
Prepend[
Partition[
RotateRight[
PadRight[Range[31], 35, ""], 5]
, 7, 7],
{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}]
, {"Month", SpanFromLeft}] // Grid

EDIT-1
Clear[mCal]
mCal[d_DateObject, lang_String : "English"] :=
Module[{day, month, year, firstDay, monthNames, dayNames, dayRules,
daysInMonth, calM, todayPos},
day = If[MissingQ[d["Day"]], "", d["Day"]];
month = d["Month"];
year = If[MissingQ[d["Year"]], Today["Year"], d["Year"]];
daysInMonth = {31, If[LeapYearQ[{year}], 29, 28], 31, 30, 31, 30,
31, 31, 30, 31, 30, 31};
monthNames = {
"January", "February", "March", "April"
, "May", "June", "July", "August"
, "September", "October", "November", "December"};
dayNames = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
dayRules = {Monday -> 1, Tuesday -> 2, Wednesday -> 3,
Thursday -> 4, Friday -> 5, Saturday -> 6, Sunday -> 0};
firstDay = (DateObject[{year, month, 1}]["DayName"] /. dayRules);
calM = Partition[
RotateRight[
PadRight[Range[daysInMonth[[month]]], 35, ""], firstDay]
, 7, 7];
todayPos = If[day == "", {0, 0}, First@Position[calM, day] + {2, 0}];
Prepend[
Prepend[calM, Style[#, 14] & /@ dayNames]
, {Style[monthNames[[month]] <> " " <> ToString@year, 20
, FontFamily ->
"Old English Text MT"
], SpanFromLeft}] // Grid[#
, Spacings -> {0.4, 0.8}
(*,Frame[Rule]All*)
, Background -> {None, None
, {todayPos -> GrayLevel[0.85]}
}
, Alignment -> {Center, Center}
, Dividers -> {{False}, {False, True, True, {False}}}
, ItemSize -> {2, {2.5, 2, {1.2}}}
, ItemStyle -> {Automatic, Automatic, {
{{2, -1}, {1, 1}} -> Red
, {{2, -1}, {6, 6}} -> Darker@Darker@Green
, {{2, -1}, {7, 7}} -> Blue}
}
] &
]
Usage:
If a date is provided it is highlighted. English is the default (only) language available.
d1 = DateObject[{2022, 11}];
d2 = DateObject[Today]
mCal /@ {d1, d2}
Calendar 2023
cal2023 = Grid[
Partition[#, 3] &@
(Framed[#, FrameMargins -> {{2, 4}, {3, 3}}] & /@
mCal /@ (DateObject[{2023, #}] & /@ Range[12])
), Spacings -> {0.2, 0.2}
];
Export["C:/cal2023.pdf", cal2023]