如何更改 Wagtail 的默认语言?

How to change Wagtail's default language?

我正在使用 headless Wagtail 并想将默认后端语言更改为葡萄牙语 (pt-pt)。 正在关注 wagtail's docs

# settings.py

USE_I18N = True

LANGUAGE_CODE = "pt-pt"

那么为什么我尝试发布一个 wagtail 页面时出现以下错误:

Environment:

Request Method: POST Request URL: http://127.0.0.1:8000/admin/pages/11/edit/

Django Version: 3.1.2 Python Version: 3.9.0 Installed Applications: ['home', 'search', 'news', 'about_us', 'product', 'dashboard', 'wagtail_headless_preview', 'wagtail.contrib.forms', 'wagtail.contrib.redirects', 'wagtail.embeds', 'wagtail.sites', 'wagtail.users', 'wagtail.snippets', 'wagtail.documents', 'wagtail.images', 'wagtail.search', 'wagtail.admin', 'wagtail.core', 'wagtail.api.v2', 'modelcluster', 'taggit', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'corsheaders'] Installed Middleware: ['django.middleware.locale.LocaleMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'wagtail.contrib.redirects.middleware.RedirectMiddleware']

Traceback (most recent call last): File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\django\core\handlers\exception.py", line 52, in inner response = get_response(request) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\django\core\handlers\base.py", line 195, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\django\views\decorators\cache.py", line 49, in wrapped_view_func response = view_func(request, *args, **kwargs) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\admin\urls_init.py", line 170, in wrapper return view_func(request, *args, **kwargs) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\admin\auth.py", line 179, in decorated_view response = view_func(request, *args, **kwargs) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\django\views\generic\base.py", line 85, in view return self.dispatch(request, *args, **kwargs) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\admin\views\pages\edit.py", line 138, in dispatch return super().dispatch(request) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\django\views\generic\base.py", line 116, in dispatch return handler(request, *args, **kwargs) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\admin\views\pages\edit.py", line 257, in post return self.form_valid(self.form) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\admin\views\pages\edit.py", line 283, in form_valid return self.publish_action() File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\admin\views\pages\edit.py", line 329, in publish_action revision = self.page.save_revision( File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\core\models.py", line 1385, in save_revision self.full_clean() File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\wagtail-2.11rc1-py3.9.egg\wagtail\core\models.py", line 1033, in full_clean super().full_clean(*args, **kwargs) File "C:\Users\diogo\OneDrive - Universidade de Tras-os-Montes e Alto Douro\Marfon\venv\lib\site-packages\django\db\models\base.py", line 1390, in full_clean raise ValidationError(errors)

Exception Type: ValidationError at /admin/pages/11/edit/ Exception Value: {'locale': ['locale instance with id 1 does not exist.']}

有什么建议吗?我还缺少一些额外的步骤吗?

您正在关注 Wagtail 2.0 的文档,该文档已经过时了。 Wagtail 2.11 的国际化支持文档(在撰写本文时尚未发布)可在此处找到:https://docs.wagtail.io/en/latest/advanced_topics/i18n.html

As mentioned there,当您在设置文件中配置语言时,您还需要在数据库中设置区域设置记录。这可以在数据迁移中完成,或者通过启用 wagtail.locales 应用程序并通过管理中的设置 -> 区域设置来完成:

INSTALLED_APPS = [
    # ...
    'wagtail.locales',
    # ...
]