问题描述
当我在本地对其进行测试时,翻译确实有效,但是当我将其部署在服务器上时,它不起作用。 有些单词确实可以翻译,但这不是我的语言环境,而是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
,但还是一样)
我的dev comp是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未加载文件有关。
您还可以登录到管理站点,查看是否已加载默认翻译。