Version 3.9 fixes lots of bugs and this list is selective.

* \select@language did not set \languagename. This meant the language
  in force when auxiliary files were loaded was the one used in, for
  example, shorthands -- if the language was german, a
  \select@language{spanish} had no effect.

* \foreignlanguage and otherlanguage* messed up
   \extras<language>. Scripts, encodings and many other things were
   not switched correctly.

* The :ENC mechanism for hyphenation patterns used the encoding of the
  _previous_ language, not that of the language being selected.

* ' (with activeacute) had the original value when writing to an
  auxiliary file, and things like an infinite loop could happen. It
  worked incorrectly with ^ (if activated) and also if deactivated.

* Active chars where not reset at the end of language options, and
  that lead to incompatibilities between languages.

* \textormath raised and error with a conditional.

* \aliasshorthand didn't work (or only in a few and very specific
  cases).

* \l@english was defined incorrectly (using \let instead of \chardef).

* ldf files not bundled with babel were not recognized when called as global
  options.
 
