国际化的set_language重定向视图不起作用

1 投票
2 回答
972 浏览
提问于 2025-04-17 06:41

为了实现国际化,我做了这些步骤,但还没有成功:

settings.py 文件中,我进行了如下设置:

LANGUAGE_CODE = 'en-us'
SITE_ID = 1
USE_I18N = True
USE_L10N = True
LANGUAGES = (
    ('fa', gettext('Persian')),
    ('en', gettext('English')),
)
LOCALE_PATHS = (
    'fa/LC_MESSAGES/django.po',
    'fa/LC_MESSAGES/django.mo',
    'en/LC_MESSAGES/django.po',
    'en/LC_MESSAGES/django.mo',
    '$PYTHONPATH/django/conf/locale/fa/LC_MESSAGES'
)
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.middleware.csrf.CsrfResponseMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
)

我在我的应用文件夹里创建了消息文件并进行了编译。

我在模板中创建了翻译字符串。

为了在不同语言之间切换,我在我的模板中添加了以下内容:

<form action="/i18n/setlang/" method="post" class="forms">
{% csrf_token %}
<input name="next" type="hidden" value="/next/page/" />
<select name="language" id="select_langauge" class="m_show hide">
{% for lang in LANGUAGES %}
    {% if lang.0 != '' %}
        <option value="{{lang.0}}">{{lang.1}}</option>
    {% endif %}
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>

urls.py 文件中,我也做了一些设置:

(r'^i18n/', include('django.conf.urls.i18n'))

但是当我提交这个表单来切换语言时,我遇到了这个错误:

Page not found (404)
Request Method:     GET
Request URL:    http://127.0.0.1:8080/next/page/

我是不是遗漏了什么?

提前谢谢你们 :)

2 个回答

1

你需要提供locale的绝对路径——也就是存放你翻译文件的文件夹。路径大概是这样的:

LOCALE_PATHS = (
    'C:/abolute_path_to_your_project/.../locale/',
)

这个locale文件夹里应该包含你的翻译文件,结构大致是这样的:

.../locale/
         - en/LC_MESSAGES/django.po
                          django.mo
         - fr/LC_MESSAGES/django.po
                          django.mo
2

我觉得Django会试着把你引导到 /next/page/ 这个地址。

<input name="next" type="hidden" value="/next/page/" />

但是,你的网址设置里没有这个路径,对吧?

撰写回答