Django 国际化不起作用
我在我的模板中无法显示翻译。以下是我所做的步骤:
- 在我的模板文件(index.html)中,我加载了国际化(i18n),并在需要翻译的地方使用了
trans
标签。 - 在我的项目目录中,我运行了
./manage.py makemessages -l es
。 - 我的 django.po 文件在
./conf/locale/es/LC_MESSAGES/django.po
这个路径下。 - 我在这个文件中编辑了翻译内容。
- 然后我运行了
./manage.py compilemessages
。 - 我在 settings.py 文件中把
LANGUAGE_CODE
设置为 'es'。 - 在
MIDDLEWARE_CLASSES
中,我把django.middleware.locale.LocaleMiddleware
加在了 SessionMiddleware 和 CommonMiddleware 之间。 - 重启了 Django,刷新了我的页面。
但是页面上还是只显示英文内容。我哪里做错了?我是不是漏掉了什么?
3 个回答
Django的LocaleMiddleware
会根据用户的请求来判断使用哪种语言,并相应地替换LANGUAGE_CODE
。它的工作步骤如下:
- 首先,它会检查会话中是否有一个叫
django_language
的变量。如果有,就用这个变量里的语言。如果没有,就继续到第2步。 - 接着,它会查看浏览器的cookies里是否有类似的变量(这个变量的名字你可以自己定义)。如果也没有,就继续到第3步。
- 然后,它会尝试从
HTTP_ACCEPT_LANGUAGE
这个头信息中判断语言。如果还是无法判断,就到第4步。 - 最后,它会使用
LANGUAGE_CODE
设置的语言作为默认语言。
除了第4步外,在所有步骤中,它都会检查你在LANGUAGES
设置中是否有这个语言。LANGUAGES
是一个包含语言代码和语言名称的元组。确保你设置或覆盖了默认值,因为默认值是所有可用的Django语言的元组。
如果你的Django网站有多种语言:
确保你的会话或cookies设置正确。你可以使用Django内部的视图来设置语言(django.views.i18n.set_language
)。
如果你只有一种语言:
如果你只使用西班牙语,通常不需要太担心这些。只要确保LANGUAGES
和LANGUAGE_CODE
设置正确就可以了。如果在LANGUAGES
中没有提供浏览器的语言,它不会尝试将页面语言设置为浏览器的语言。此外,你还应该确保USE_I18N = True
。这应该是默认设置,所以至少要确保你没有在其他地方把它设置成False
。
你有没有试过在你的设置文件里设置 LOCALE_PATHS
呢?这对我来说解决了问题……想了解更多信息,可以看看我为类似问题写的 一个回答,或者查看 Django 的 官方文档关于 LOCALE_PATHS
设置的部分。
好的,我找到了问题所在……我的po文件放在了 ./conf/locale
这个文件夹里,而不是直接放在 ./locale
里。
我之所以创建了 ./conf/locale
这个文件夹,是因为当我运行 django-admin.py makemessages
的时候,它提示我这么做。不过,如果你的文件是在本地项目目录下,那么只需要放在 ./locale
里就可以了。