实际上,如果您在 settings.py、视图和模板中正确进行了所有配置,并且安装了 gettext 并且一切正常,那么您可能需要检查您的虚拟环境在哪里。例如,如果它在项目文件夹的根文件夹中,我想你的结构是 myapp_project/venv/
另外,我假设您已经在根 myapp_project 文件夹中创建了一个名为 locale 的空文件夹。
如果您要翻译法语,请尝试像这样运行它,例如:
注意:用您命名的虚拟环境替换 venv。
这是简短的回答
django-admin.py makemessages -l fr -i venv
上面的内容将为您提供local/fr/LC_MESSAGES/django.po,但您现在必须运行第二个命令,将makemessages 创建的.po 文件编译为.mo 文件夹中的.mo 文件
所以,然后运行:
django-admin.py compilemessages
现在这应该为您提供 django.po 文件。
这是长答案
如果您使用 i18n_patterns 正确配置了您的 urls.py,并且您在 .po 文件中填写了 msgstr "" 的翻译,然后再次运行 django-admin.py compilemessages,您现在可以运行您的服务器并转到您想要的页面 127.0.0.1:8000/fr/你应该会看到你的翻译。
如果您想知道您的 settings.py 文件应该是什么样子(法语)。它至少应该看起来像这样的一部分。
from django.utils.translation import gettext_lazy as _
LANGUAGES = [
('fr', _('French')),
('en', _('English')),
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
此外,在 MIDDLEWARE 列表中的 settings.py 中,请确保添加该组件。 'django.middleware.locale.LocaleMiddleware' 重要的是,当它从上到下执行时,将该组件放在列表中的哪个位置。所以把它放在会话组件下。
对于您的主应用程序(您可能有几个或一个)urls.py 文件,请确保您导入 from django.conf.urls.i18n import i18n_patterns。
接下来在同一个urls.py 文件中确保您确实添加/或编辑了网址格式。以下是它的外观示例:
urlpatterns += i18n_patterns (
path('', include('pages.urls')),
path('meals/', include('meals.urls')),
prefix_default_language=False
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
你可以玩这个,显然上面的路径不包括管理员。所以只是玩玩,但只是让您了解它应该是什么样子,以便/fr/ url 工作。
您还会注意到prefix_default_language=False 行上方,这是为了防止/en/ 默认模式。在这个例子中,我们将英语翻译成法语。所以模式中不需要 /en/。
不要忘记在您的模板中...是的,所有这些,无论它是否是父模板都没有关系。您必须包含 {% load i18n %} 才能使其正常工作。
重要提示:
当你回到你的模板文件并开始更新你的文本内容并添加你的 transblocks 等。在你这样做之后。回到你的终端并停止你的服务器,如果你的根目录中有你的 venv 文件夹,你必须运行这些命令:
django-admin.py makemessages -l fr -i venv
django-admin.py compilemessages
现在您可以打开 django.po 文件并将您的翻译添加到模板中已编辑的文本内容中。如果您的 venv 文件夹不在您的根文件夹中。你可以直接运行django-admin.py makemessages -l fr。
如果您不这样做,您最终将在 .po 文件中手动执行操作。你不想那样做。
我希望这会有所帮助。