Django Locale部署到服务器后无法工作[FIXED]



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

In 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/djang_project/locate";

我确实做了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没有加载的文件有关。

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

对我来说,我的翻译成功了,但第三次没有。

因此,我必须将site-packages中第三个库中的zh_hans文件夹重命名为

zh_hans因为Linux是区分大小写的,Django忽略了zh_hans

最新更新