如何在Django Admin中实现多语言翻译和国际化支持

2023-04-11 00:00:00 翻译 多语言 国际化

Django Admin中的多语言翻译和国际化支持可以使用Django自带的翻译框架来实现,主要包括以下步骤:

  1. 在项目的settings.py文件中配置语言列表和翻译文件存放路径:
# settings.py

LANGUAGE_CODE = 'zh-hans'

LANGUAGES = [
    ('en', 'English'),
    ('zh-hans', '中文简体'),
    ('zh-hant', '中文繁体'),
]

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
]

其中,LANGUAGE_CODE指定默认语言,LANGUAGES定义所有支持的语言列表,LOCALE_PATHS指定翻译文件存放路径。

  1. 在Admin中需要翻译的文本中使用翻译函数,例如:
# models.py

from django.db import models
from django.utils.translation import gettext_lazy as _

class Blog(models.Model):
    title = models.CharField(_("标题"), max_length=100)
    content = models.TextField(_("内容"))

    def __str__(self):
        return self.title

在这个例子中,使用了gettext_lazy函数将“标题”和“内容”进行了翻译,翻译文件会自动生成在LOCALE_PATHS指定的路径下。

  1. 在Django项目中生成翻译文件,并进行翻译,例如:
$ python manage.py makemessages -l zh_Hans # 生成翻译文件
$ python manage.py compilemessages # 编译翻译文件

在运行makemessages命令后,会在LOCALE_PATHS指定的路径下生成.po文件,可以使用Poedit等软件进行编辑和翻译。完成翻译后,使用compilemessages命令编译.po文件,生成.mo文件。

  1. 在Django Admin中添加语言切换功能。可以使用Django自带的LanguageMiddleware中间件来实现:
# settings.py

MIDDLEWARE = [
    # ...
    'django.middleware.locale.LocaleMiddleware',
    # ...
]

# urls.py

from django.conf.urls.i18n import i18n_patterns

urlpatterns += i18n_patterns(
    path('admin/', admin.site.urls),
)

在这个例子中,在中间件中添加LocaleMiddleware后,Django会自动根据请求头信息(比如Accept-Language)来选择最合适的语言,同时在每个URL前面添加对应的语言前缀,例如“/en/admin/”或“/zh-hans/admin/”。切换语言后,Django会自动跳转到对应的URL。

最后,假设我们要在Django Admin的首页添加一个欢迎信息,可以在admin.py文件中实现:

# admin.py

from django.utils.translation import gettext as _

@admin.register(models.Blog)
class BlogAdmin(admin.ModelAdmin):
    pass

@admin.site.index
def welcome(request):
    return render(request, "admin/welcome.html", {
        "welcome": _("欢迎来到pidancode.com!")
    })

在这个例子中,使用了gettext函数将欢迎信息翻译成了当前语言,然后在Admin首页的视图函数中将翻译后的字符串渲染到了模板中。在模板中,可以使用{% trans %}标签来实现内部字符串的翻译。

相关文章