С Божией помощью решение было найдено.
Дни недели TLang кое-как видит, можно перевести стандартно в TLang.
Названия месяцев, теоретически, можно было бы подставить в стилях (calendarstyle, months.Items), но в FMX.Calendar.Style не предусмотрена очистка или проверка списка на отсутствие пользовательских значений, а идет добавление 12 месяцев из региональных настроек в конец списка, и это, фактически, ошибка в исходном коде fmx. Даже если этот способ бы и получился TLang не дает возможности перевести Items. И непонятно, удастся ли менять значения в ран-тайме. Поэтому перевод месяцев был сделан с помощью подмены стиля.
Я изначально пытался сделать одно управляющее событие с кодом языка. Но с++ вызов шаблона TCalendar->Model->SendMessage<UnicodeString> линкер ни в какую принимать не захотел, поэтому сделал по одному простому сообщению без параметров на каждый язык. Вызов
switch(Lang)
{
case 0:
L = "ru";
BDay->Model->SendMessage(MM_LOCALE_RUS);
EDay->Model->SendMessage(MM_LOCALE_RUS);
break;
case 1:
L = "en";
BDay->Model->SendMessage(MM_LOCALE_ENG);
EDay->Model->SendMessage(MM_LOCALE_ENG);
break;
}
LoadLangFromStrings(Lang1->LangStr[L]);