Once you’ve got language extensions and MultiViews working, you’ll probably want to set a cookie to record the user’s language preference. You can do this in a MT4 template like so:
<div class="lang-links"><mt:if name="page-lang" like=".en$"><a href="index.ja.html" onclick="createCookie('language','ja',365);">日本語</a> | English<mt:else>日本語 | <a href="index.en.html" onclick="createCookie('language','en',365);">English </a></mt:else></mt:if></div>
(Note this uses the previously mentioned page-lang snippet. Also there’s an extra space after “English” for line breaking purposes if you c&p.)
I used PPK’s createCookie Javascript:
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
Now all you have to do is set these preferences in a .htaccess file:
# i18n with content negotiation
# enable MultiViews for extensionless URIs
Options +MultiViews +FollowSymLinks
# add acceptible languages
AddLanguage ja .ja
AddLanguage en .en
# set language priority
LanguagePriority ja en
# serve priority language if priority conflict or
# no acceptable language (>= Apache 2.0.30)
ForceLanguagePriority Prefer Fallback
# override using cookies (theoretically)
SetEnvIf HTTP_COOKIE "language=en" prefer-language=en
SetEnvIf HTTP_COOKIE "language=ja" prefer-language=ja
I tried linking the script and calling it via ids:
document.getElementById('cookie-en').onclick = function () {
createCookie('language','en',365);
}
document.getElementById('cookie-ja').onclick = function () {
createCookie('language','ja',365);
}
but I’m currently doing things old-skool because … Apache’s caching seems to override this setting. Crap. To check for this reload pages that should be in a different language based on your cookie to preserve sanity. The FireFox Web Developer’s Toolbar has an excellent “View Cookie Information” option for testing cookies are being set correctly.