第三方软件包的语言选择,Django

2024-05-02 12:03:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理这个问题大约2天。让我告诉你我做了什么,为什么做,然后问我的问题

我有一个项目,我想支持多语言,但现在它应该只支持一种语言,我会随着时间的推移添加其他语言。因此,我的设置.py具有以下功能:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'phonenumber_field',
    'project.apps.ProjectConfig',
]

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'project/templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
                'django.template.context_processors.i18n'
            ],
        },
    },
]

LANGUAGE_CODE = 'tr'

LANGUAGES = [
    ('tr', 'Türkçe')
]

LOCALE_PATHS = [
    BASE_DIR / 'project/locale',
]

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

我现在只翻译了forms.py和models.py文件。 并运行makemessages:

python manage.py makemessages -l tr --ignore=venv/*

(我忽略了venv文件夹) 我所有的消息ID都是英文的,我将它们翻译成正确的方式,如下所示:

msgid "Phone"
msgstr "Telefon"

然后:

python manage.py compilemessages --ignore=venv/*

在所有这些之后,我的网站被正确地翻译成我想要的语言(这是现在唯一的语言),Django管理页面现在是“tr”,因为项目语言设置为“tr”。表单错误也是“tr”

但是。我在表格和模型中使用第三方phonenumber_字段包。尽管这个模块有自己的“tr”翻译的“.po”和“.mo”文件,但我的手机字段错误不在“tr”中,它们始终是“en”

我不知道为什么Django admin应用程序检测到我的语言代码,但phonenumber字段没有检测到

我想为项目中的所有应用设置默认语言

谢谢你的帮助


Tags: 项目djangopyproject语言truevenvadmin