After some digging, here's what I have found:
Archivist gets its locale from the 'locale' property. If that's not set, then it gets it from the system/context/user setting 'cultureKey'.
The problem is that the default propertyset of Archivist includes a property called 'locale' with a value of 'true'. This may be a bug in Archivist.
After deleting this property from the Archivist snippet, Archivist properly sets its locale based on 'cultureKey', and everything works correctly.
Alternatively, the locale can be set directly in the snippet call:
[[!Archivist? &locale=`es_ES.UTF-8`]]
This works even if you don't delete the bogus 'locale' property from the Archivist snippet.
Note that the value must be 'es_ES.UTF-8', not simply 'es'. I don't know if having cultureKey set to 'es_ES.UTF-8' instead of 'es' breaks anything else.