This is a code snippet from my Calendar program and like you I hard coded.
const
EngMonths: Array[1..12] of String = ('January','February','March','April',
'May','June','July','August','September','October','November','December');
HebMonths: Array[1..12] of String = ('ינואר','פברואר','מרץ','אפריל','מאי',
'יוני','יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר');
EngDayNames: Array[1..7] of String = ('Su','Mo','Tu','We','Th','Fr','Sa');
HebDayNames: Array[1..7] of String = ('א','ב','ג','ד','ה','ו','ש');
But this only solves for 2 languages so...
A word of caution: Trying to edit RTL text in Lazarus code editor is nearly impossible.
I will have to take a look at Formatdatetime.
Edit: FormatDateTime does not seem to work out too well. It seems to depend on Locale and if your Locale Language is Hebrew, the numbers are OK but text is just '????'. Anyway, I usually log in to my English account, but need a Hebrew Calendar, so being Locale dependent doesn't always work.