django国际化处理

django的国际化是个比较大的坑,百度出来的好多都是形式正确,而实际并不work![我使用的是django2.2LTS版本]

设置文件 settings.py 配置

setting.py有3个注意点

  • MIDDLEWARE
  • TEMPLATES
  • 其他(主要是LANGUAGE 和 i18N,L10N)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    IDDLEWARE = [
    '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',
    ]
    TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
    'context_processors': [
    'django.template.context_processors.i18n',
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    ],
    },
    },
    ]
    LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
    ]
    LANGUAGE_CODE = 'zh-hans'
    USE_I18N = True
    USE_L10N = True

    需要多语言对应的文件,一般为model和view

    需要引入相关的包,本人在Bodhi上不需要安装gettext,据说在windows下面需要自己安装
    1
    2
    3
    4
    5
    from django.shortcuts import render
    from django.utils.translation import gettext_lazy as _
    def index(request):
    context = {'display_welcome': _("Welcome!")}
    return render(request, 'index.html', context)

    命令行操作及翻译

  1. 坑就在这里了,必须是zh_Hans(H必须为大写

    1
    django-admin makemessages -l zh_Hans
  2. 到对应的目录下面去寻找django.po文件,应该为/locale/zh_Hans/LC_MESSAGES
    把文件里msgid对应的msgstr翻译好。

  3. 再执行编译命令

    1
    django-admin compilemessages