Django 国际化不起作用

5 投票
3 回答
3533 浏览
提问于 2025-04-17 04:39

我在我的模板中无法显示翻译。以下是我所做的步骤:

  1. 在我的模板文件(index.html)中,我加载了国际化(i18n),并在需要翻译的地方使用了 trans 标签。
  2. 在我的项目目录中,我运行了 ./manage.py makemessages -l es
  3. 我的 django.po 文件在 ./conf/locale/es/LC_MESSAGES/django.po 这个路径下。
  4. 我在这个文件中编辑了翻译内容。
  5. 然后我运行了 ./manage.py compilemessages
  6. 我在 settings.py 文件中把 LANGUAGE_CODE 设置为 'es'。
  7. MIDDLEWARE_CLASSES 中,我把 django.middleware.locale.LocaleMiddleware 加在了 SessionMiddleware 和 CommonMiddleware 之间。
  8. 重启了 Django,刷新了我的页面。

但是页面上还是只显示英文内容。我哪里做错了?我是不是漏掉了什么?

3 个回答

2

Django的LocaleMiddleware会根据用户的请求来判断使用哪种语言,并相应地替换LANGUAGE_CODE。它的工作步骤如下:

  1. 首先,它会检查会话中是否有一个叫django_language的变量。如果有,就用这个变量里的语言。如果没有,就继续到第2步。
  2. 接着,它会查看浏览器的cookies里是否有类似的变量(这个变量的名字你可以自己定义)。如果也没有,就继续到第3步。
  3. 然后,它会尝试从HTTP_ACCEPT_LANGUAGE这个头信息中判断语言。如果还是无法判断,就到第4步。
  4. 最后,它会使用LANGUAGE_CODE设置的语言作为默认语言。

除了第4步外,在所有步骤中,它都会检查你在LANGUAGES设置中是否有这个语言。LANGUAGES是一个包含语言代码和语言名称的元组。确保你设置或覆盖了默认值,因为默认值是所有可用的Django语言的元组。

如果你的Django网站有多种语言:

确保你的会话或cookies设置正确。你可以使用Django内部的视图来设置语言(django.views.i18n.set_language)。

如果你只有一种语言:

如果你只使用西班牙语,通常不需要太担心这些。只要确保LANGUAGESLANGUAGE_CODE设置正确就可以了。如果在LANGUAGES中没有提供浏览器的语言,它不会尝试将页面语言设置为浏览器的语言。此外,你还应该确保USE_I18N = True。这应该是默认设置,所以至少要确保你没有在其他地方把它设置成False

5

你有没有试过在你的设置文件里设置 LOCALE_PATHS 呢?这对我来说解决了问题……想了解更多信息,可以看看我为类似问题写的 一个回答,或者查看 Django 的 官方文档关于 LOCALE_PATHS 设置的部分

0

好的,我找到了问题所在……我的po文件放在了 ./conf/locale 这个文件夹里,而不是直接放在 ./locale 里。

我之所以创建了 ./conf/locale 这个文件夹,是因为当我运行 django-admin.py makemessages 的时候,它提示我这么做。不过,如果你的文件是在本地项目目录下,那么只需要放在 ./locale 里就可以了。

撰写回答