For some languages (eg. Hebrew, Russian (Cyrillic)) even doing all of this does not change the ??? text (Delphi 7 bug). You would need to include the following in the Delphi project file (.dpr) at the beginning of the initialization code:
// Localization: force to use Locale System Default so all text is displayed correctly
// to fix Delphi7 bug (see Bug Report 2460: http://qc.borland.com/wc/qcmain.aspx?d=2460)
//ShowMessage(format('GetThreadLocale = %d, GetSystemDefaultLCID = %d, GetUserDefaultLCID = %d',
// [GetThreadLocale, GetSystemDefaultLCID, GetUserDefaultLCID]));
SetThreadLocale(LOCALE_SYSTEM_DEFAULT); // same as SetThreadLocale($0419);