This has been troubling us for a while and hard to debug as after clearing cookies it is fine again. But I believe it comes from Aoe_BackendDefaultLanguage.
This is a sample from Magento's own core code:
Mage::getSingleton('adminhtml/session')->setLocale(Mage::app()->getLocale()->getLocaleCode());
And this is what you are doing in Aoe_BackendDefaultLanguage_Model_Observer:
$localeCode = Mage::getModel('core/locale')->getLocale();
And since in Mage_Adminhtml_Model_Observer we have so:
public function bindLocale($observer)
{
if ($locale=$observer->getEvent()->getLocale()) {
if ($choosedLocale = Mage::getSingleton('adminhtml/session')->getLocale()) {
$locale->setLocaleCode($choosedLocale);
}
}
return $this;
}
How this manifests in the Mage_Directory_Model_Currency is that is calls for the currency($currency) function in Mage_Core_Model_Locale and that has:
self::$_currencyCache[$this->getLocaleCode()][$currency])
As getLocaleCode() returns an object, it will fail to set the values in the array, returns null and you cannot call methods on null - thus the error.
So just replace the getLocale() with getLocaleCode() and it should be fine.