The attached diff-file should fix the problem. It introduces three new functions, two in t3lib_BEfunc and one in t3lib_div. The one in t3lib_div is only a helper for a change in EXT:lang/lang.php.
The default behaviour is changed in the following way: In typo3/template.php at the end there's the initialization routine for the $LANG-object. If a BE-user is detected, it behaves the same as bevor - $LANG is initialized with the users selected language. If not, it checks for the GP-var lang. If this is set, it is used, if not, the browser's accept languages are evaluated.
For evaluating these languages, a new function t3lib_BEfunc::getBrowserAcceptLanguages has been written. It returns an array with all languages, optionally also with variants like de-DE, in the order in which they appeared. This array is then checked in lang::init() for a language available in the BE. The first which is found is used, if none is found, the default is used.
The advantage of modifying $LANG is that now we also could translate the error messages ("no pages are found on the rootlevel", "Yeah, that's a classic..." etc.) [though I would say that "Yeah, that's a classic" should stay the way it is as it is really part of TYPO3's soul ;)]
Additionally, it displays a language-selector-box right above the form-fields on the login-screen.
Please check this patch. If you need them, I also have l10n-files for de ready.