anchor.diff:  (in-package :local-time-locale)
   
  -(defmethod %get-locale ((name string))
  +(defmethod %get-locale ((name string) &key (on-none :error))
     "We accept either - or _ seperated values in our string and are case
   insenstive"
  -  (%get-locale (intern (substitute #\- #\_ (string-upcase name)) 'keyword)))
  +  (%get-locale (intern (substitute #\- #\_ (string-upcase name)) 'keyword) :on-none on-none))
   
   (defmethod %shortened-locale ((locale symbol))
     (let ((string (symbol-name locale)))
  
positive.code:       (if p (intern (subseq string 0 p) 'keyword)
  	  nil))))
      
  (defmethod %get-locale ((name symbol))
    (or (gethash name *locale-cache*)
        (let ((new-locale (make-locale name))
  	    (shortened-locale (%shortened-locale name)))
  	(cond (new-locale
  	       (setf (gethash name *locale-cache*) new-locale))
  	      (shortened-locale
  	       (%get-locale shortened-locale))
  	      (t (error "failed to find locale"))))))
  
  (defmacro with-locale (locale-name &rest body)
    `(let* ((*default-locale* (%get-locale ,locale-name)))
       ,@body))
  
  (defun set-locale (locale-name)
  
negative.code: 
  ;; Set the default.  See comment in local-time-locale about the
  ;; authors nationality.
  (set-locale :en-us)
  