部署到服务器后,Django Locale无法正常工作[修正]

时间:2020-11-04 18:33:31

标签: python django apache locale django-i18n

当我在本地对其进行测试时,翻译确实有效,但是当我将其部署在服务器上时,它不起作用。 有些单词确实可以翻译,但这不是我的语言环境,而是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,但还是一样)

我的dev comp是Windows,我的服务器是ubuntu(不确定,但可能会有所帮助)

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

可能是什么问题?有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

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未加载文件有关。

您还可以登录到管理站点,查看是否已加载默认翻译。