Last modified: 2014-10-16 11:00:47 UTC
Steps to reproduce: 1. Pick your favourite extension to break - I like Extension:UploadWizard 2. Change the name of its messages file in the extension's main PHP file - something like "$wgExtensionMessagesFiles['UploadWizard'] = 'LolUploadWizard.i18n.php';", but *do not* create that file. 3. Load a page that uses the message(s) in that message file - like Special:UploadWizard 4. Note the error. Expected behaviour. 5. Copy the actual messages file to the filename you made up, e.g. "cp UploadWizard.i18n.php LolUploadWizard.i18n.php" 6. Reload the page from step 3 - note that the error is gone, but no messages load 7. Refresh as much as you'd like. Rebuild the message and l10n caches if you want. Hilariously ineffective. 8. Change the name back in the PHP file and refresh the page. Tada. You could alternatively change it to a different nonexistent filename, refresh the page once, and then change it back to a proper name, and refresh it again. The change of filename causes the refresh. This is probably some overly clever feature that I'm misreading, but it means that if I forget to create an i18n file at first, I'll mysteriously not have messages load on the site. Which causes a bit of confusion. Some better handling somewhere might be good.
Last time we had a problem like this, IIRC it was due to timestamps of the file? have you tried touch'ing it?
I'm unable to reproduce with json i18n.