2012年4月9日月曜日

i18n_patterns の残念なところ

さて、さっそく blog を作り始めたのですが、i18n_pattern で ちょっと困ったことが。

それは、Django を sub URL に置いていると、常に先頭に 言語のプレフィックスがついてしまうのです。 そこで、django/middleware/locale.py を自分のプロジェクトにコピーし、 以下の部分を

if is_valid_path(language_path, urlconf):
    language_url = "%s://%s/%s%s" % (
        request.is_secure() and 'https' or 'http',
        request.get_host(), language, request.get_full_path())
    return HttpResponseRedirect(language_url)

次のように修正しました。

if is_valid_path(language_path, urlconf):
    protocol = "%s://%s" % (
            request.is_secure() and 'https' or 'http',
            request.get_host())
    url_base = "%s%s" % (language, request.get_full_path())
    url_base = settings.PROJECT_URL + url_base.replace(
            settings.PROJECT_URL, '/')
    return HttpResponseRedirect(protocol + url_base)

ここでPROJECT_URL は、settings.py の中で、

PROJECT_URL = '/~mucius/'

のように設定しています。

果たして、これがベストかどうかは疑問ですが、 とりあえず動いているようなのでよしとします。