当我在本地测试它时,翻译确实有效,但当我在服务器上部署它时,它不起作用。有些单词确实被翻译了,但它不是来自我的语言环境,这是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_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没有加载的文件有关。
您也可以登录到管理网站,查看是否加载了默认翻译。
对我来说,我的翻译成功了,但第三次没有。
因此,我必须将 zh_hans因为site-packages
中第三个库中的zh_hans文件夹重命名为Linux
是区分大小写的,Django忽略了zh_hans