Django 多语言支持

一、开启多语言支持

1. 配置中间件

在我使用的 Django 1.11.6 中,默认没有加入 i18n 的 middleware ,所以需要我们自己手动加入相关 middleware 。

你需要将'django.middleware.locale.LocaleMiddleware',加入 middleware_classes 中,同时,由于 locale 依赖于 session ,将其放在 SessionMiddleware后,同时由于 CommonMiddleware 需要一个语言来激活对应的 URL 显示,所以你需要将 django.middleware.locale.LocaleMiddleware 放在 CommonMiddleware 之前,就像下面这样。

middleware

middleware

MIDDLEWARE_CLASSES = (
    ...
   'django.contrib.sessions.middleware.SessionMiddleware',
   ...
   'django.middleware.locale.LocaleMiddleware',
   ...
   'django.middleware.common.CommonMiddleware',
   ...
)

2. 确认 I18N 相关配置为 True

在 Settings.py 的底部,你可以看到下面这些配置,确保其中的值都为 True

settings

settings

# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

3. 设置 locale 路径

在 settings.py 中加入如下的代码

path

path

LOCALE_PATHS = (
    'locale',
)

这表明我们的 locale 文件默认会放在 app 目录中的 locale 目录下

二、在 views 中引入 ugettext

在 views.py 中加入如下代码

from django.utils.translation import ugettext as _

将所有需要输出的文字使用 _() 方法进行输出

比如

menu_text = _("Menu")

对于一些有变量的文字来说,也可以进行处理

比如

output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d}

三、在模板中引入 uggettext

    如果你希望在模板中引入多语言,可以通过如下方法来使用

    首先,需要在要引入多语言页面的顶部加入 {% load i18n %}

    在对应的位置使用 trans 方法来获取文字,比如

    {% trans "Menu" %}
    

    四、生成多语言模板文件

    在命令行中,进入到应用目录下,执行如下命令

    django-admin makemessages -l zh-CN
    

    command

    command

    这样就会默认在当前应用的 locale 目录下,为我们生成对应的配置文件

    file

    file

    我们打开 django.po ,就能看到其中需要翻译的内容了。

    中文的 language code 为 zh-hans

    五、使用 PoEdit 来编辑多语言文件

    我们也可以使用 Poedit 来打开我们的 .po 文件,然后进行编辑

    点击要翻译的条目,在下方的编辑框中进行输入。
    在编辑框的右侧,还有机器翻译的内容,可以供我们参考。

    PoEdito 在编辑完成,保存后,会自动生成 .mo 编译文件,如果没有生成,你可以在命令行中生成。

    django-admin compilemessages

    这样,就可以生成对应的编译文件了。

    0 Comments (192 Views)

    Leave a Reply

    Your email address will not be published. Required fields are marked *