Hey, guys! You should definitely take a look at the main problems here:
1. (extremely) excessive logging leads to increasing page load times (danyab's loading times went over 7-8 seconds/page);
2. missing locale should not lead to empty strings in the UI, but simply fall back to English.
The quickest and least invasive approach code-wise (although not optimal) would be to first load the English locale, then the site's locale. Of course the sub-optimal thing about this is doubling the I/O reads for locale. But there would be no errors reported with old locale, no empty strings displayed on the sites, and it would be easy to notice English strings here and there, so the site admins would then update their locale.
In the future, using gettext or similar would be welcome. The advantage of gettext is having the English strings directly in the code (so no I/O penalty), and if it's defined in the site's locale, English will be overridden on a per-string basis.
Plurals are also better handled with gettext, considering there are languages with more than 1 plural form. Of course the correct plural forms could also be implemented in the existing locale system, but that's ultimately up to what you decide to do about the i18n system.
The translations could also be versioned/timestamped in the future, so the site owners know when they have an update available without constantly checking the project's website.
By the way, v7 didn't have the issue of excessive logging, but only kept one report per error, so there was no performance impact in cases like this one.