Fixing ad_urlencode and/or ns_urlencode to do the right thing should
be straightforward, and not that hard.
Carl's item 3 above, "language to be determined using content
negotiation", is the only part whose design and implementation in
OpenACS seems unclear so far, and probably needs discussion.
(I haven't actually worked with XoWiki yet, so the below may be
ignorant of any related features it already yes...)
This language negotion thing sounds like a good approach, if it works.
The major caveat I'd make is that regardless of whether language
negotion succeeds or fails, it should always be possible for
the user to see the other languages/versions of that document
available, explicitly select an alternate version, send
others a link to either the specific document/language URL or the
generic URL, etc.
In other words, the language negotion should give the most reasonable
default, but the user should always have the option of easily taking
over explicit control, by simply clicking on the appropriate links.
If a user uses the generic URL, and gets the German version via
language negotion, he should always be able, via some website UI, to
see that there are also English and Spanish versions available, and
explicitly access those specific versions if he so chooses.
Note, this is entirely separate from telling the website, "No, I don't
want any German docs from you, please change my site-wide preference
to English." The user should also be able to do that, but that should
be mostly orthogonal to the per-item access I'm talking about above.
After all, a user may prefer German as his default, but want to read
the original English version of a specific document, email the URL of
the Spanish version to a colleage saying, "Heh, I think the translator
mis-translated paragraph 8 of our paper, but my Spanish is rusty, what
do you think?", etc.