部署到服务器后 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_hans
和 python manage.py compilemessages
并重新启动了我的服务器,但还是一样。
顺便说一句,我正在使用 AWS ubuntu 和 apache2。 (不是 apache 问题,因为我在安装 apache 之前尝试 python manage.py runserver 0.0.0.0:8000
,但它仍然是一样的)
我的开发组是 windows,我的服务器是 ubuntu(不知道它有什么帮助,但是是的)
完全没有错误,只是没有翻译。
可能是什么问题?谁能帮帮我?
很有可能 Django 无法正确读取您的翻译文件。
您的区域设置文件夹中的文件夹名称是什么?
Ubuntu 似乎更喜欢 大写的 语言环境名称,例如 zh_Hans
或 zh_HANS
。尝试更改文件夹名称,以便 Ubuntu 可以正确读取它。
请注意,当您更改文件夹名称时,您应该先将其更改为其他名称,因为有时 Ubuntu 会认为从小写更改为大写并没有真正改变任何内容。所以做一个像这样的中间步骤:
cd locales
mv zh_hans/ zh/
mv zh/ zh_Hans/
其他调试问题的方法
如果检测到正确的当前语言代码,您也可以使用 django.utils.translation.get_language()
进行打印。因此,如果上面的行打印出 zh-hans
但您仍然没有看到您的翻译正在加载,则可能与语言环境路径或 Django 未加载文件有关。
您也可以登录管理站点查看是否加载了默认翻译。
当我在本地测试它时,翻译确实有效,但是当我将它部署在服务器上时,它不起作用。 有些词确实被翻译了,但它不是来自我的语言环境,它是 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_hans
和 python manage.py compilemessages
并重新启动了我的服务器,但还是一样。
顺便说一句,我正在使用 AWS ubuntu 和 apache2。 (不是 apache 问题,因为我在安装 apache 之前尝试 python manage.py runserver 0.0.0.0:8000
,但它仍然是一样的)
我的开发组是 windows,我的服务器是 ubuntu(不知道它有什么帮助,但是是的)
完全没有错误,只是没有翻译。
可能是什么问题?谁能帮帮我?
很有可能 Django 无法正确读取您的翻译文件。
您的区域设置文件夹中的文件夹名称是什么?
Ubuntu 似乎更喜欢 大写的 语言环境名称,例如 zh_Hans
或 zh_HANS
。尝试更改文件夹名称,以便 Ubuntu 可以正确读取它。
请注意,当您更改文件夹名称时,您应该先将其更改为其他名称,因为有时 Ubuntu 会认为从小写更改为大写并没有真正改变任何内容。所以做一个像这样的中间步骤:
cd locales
mv zh_hans/ zh/
mv zh/ zh_Hans/
其他调试问题的方法
如果检测到正确的当前语言代码,您也可以使用 django.utils.translation.get_language()
进行打印。因此,如果上面的行打印出 zh-hans
但您仍然没有看到您的翻译正在加载,则可能与语言环境路径或 Django 未加载文件有关。
您也可以登录管理站点查看是否加载了默认翻译。