部署到服务器后 Django Locale 不工作 [已修复]

Django Locale not working after deploying to server [ FIXED ]

当我在本地测试它时,翻译确实有效,但是当我将它部署在服务器上时,它不起作用。 有些词确实被翻译了,但它不是来自我的语言环境,它是 django 的默认翻译。

在settings.py中:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

LANGUAGE_CODE = 'en-us'
# LANGUAGE_CODE = 'zh-hans'  # i also tried just putting language code as zh-hans but still ntg gets translated.

TIME_ZONE = 'Asia/Kuala_Lumpur'

USE_I18N = True

USE_L10N = True

USE_TZ = True

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

LANGUAGES = [
    ('en', 'English'),
    ('zh-hans', '简体中文 zh-hans'),
]

在urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django_email_verification import urls as mail_urls
from rest_framework.authtoken import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('email/', include(mail_urls)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

urlpatterns += i18n_patterns(
    path('i18n/', include('django.conf.urls.i18n')),
    path('', include('main.urls')),
    prefix_default_language=False,
)

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


对于 LOCALE_PATHS 它是正确的,因为我在设置中输入 print(LOCALE_PATHS) 并且它给了我正确的语言环境路径“home/username/django_project/locale"

我做了 python manage.py makemessages -l zh_hanspython manage.py compilemessages 并重新启动了我的服务器,但还是一样。

顺便说一句,我正在使用 AWS ubuntu 和 apache2。 (不是 apache 问题,因为我在安装 apache 之前尝试 python manage.py runserver 0.0.0.0:8000,但它仍然是一样的)

我的开发组是 windows,我的服务器是 ubuntu(不知道它有什么帮助,但是是的)

完全没有错误,只是没有翻译。

可能是什么问题?谁能帮帮我?

很有可能 Django 无法正确读取您的翻译文件。

您的区域设置文件夹中的文件夹名称是什么? Ubuntu 似乎更喜欢 大写的 语言环境名称,例如 zh_Hanszh_HANS。尝试更改文件夹名称,以便 Ubuntu 可以正确读取它。

请注意,当您更改文件夹名称时,您应该先将其更改为其他名称,因为有时 Ubuntu 会认为从小写更改为大写并没有真正改变任何内容。所以做一个像这样的中间步骤:

cd locales
mv zh_hans/ zh/
mv zh/ zh_Hans/

其他调试问题的方法

如果检测到正确的当前语言代码,您也可以使用 django.utils.translation.get_language() 进行打印。因此,如果上面的行打印出 zh-hans 但您仍然没有看到您的翻译正在加载,则可能与语言环境路径或 Django 未加载文件有关。

您也可以登录管理站点查看是否加载了默认翻译。