You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django应用中如何使用德语非正式称呼“du”?

在Django中启用德语非正式称呼“du”的方案

嗨!我之前做德语本地化的Django项目时刚好碰到过这个需求,下面分两种常见场景给你详细说明实现方式:

场景1:全站统一使用非正式“du”称呼

如果你的站点面向的都是熟人或固定用户群体,不需要切换正式/非正式称呼,操作步骤很简单:

  1. 确认项目开启国际化支持
    打开项目的settings.py,检查并配置以下关键项:

    USE_I18N = True  # 必须设为True,开启国际化功能
    LANGUAGE_CODE = 'de'  # 设置默认语言为德语
    LOCALE_PATHS = [
        os.path.join(BASE_DIR, 'locale'),  # 指定自定义翻译文件的存放路径
    ]
    
  2. 生成并修改德语翻译文件
    用Django自带的命令生成德语翻译模板:

    django-admin makemessages -l de
    

    执行后会在locale/de/LC_MESSAGES/目录下生成django.po文件。打开这个文件,找到所有包含正式称呼“Sie”“Ihnen”的翻译条目,将对应的msgstr替换为“du”相关的非正式表达:
    比如原条目:

    msgid "Can you help me?"
    msgstr "Können Sie mir helfen?"
    

    修改为:

    msgid "Can you help me?"
    msgstr "Kannst du mir helfen?"
    
  3. 编译翻译文件使其生效
    修改完成后,执行编译命令:

    django-admin compilemessages
    

    之后你的站点在德语环境下,所有翻译文本都会自动使用“du”的非正式称呼。

场景2:允许用户自主选择正式/非正式称呼

如果需要让用户自行选择用“Sie”还是“du”,需要添加一些自定义逻辑:

  1. 给用户模型添加称呼偏好字段
    如果你使用自定义用户模型,直接添加字段;如果是默认User模型,可以用OneToOneField扩展:

    # 示例:自定义用户模型
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    class CustomUser(AbstractUser):
        # 选项:0=正式Sie,1=非正式du,默认使用非正式
        address_formality = models.IntegerField(
            default=1,
            choices=((0, 'Sie'), (1, 'du'))
        )
    
  2. 添加上下文处理器传递用户偏好
    在你的app中新建context_processors.py文件,编写一个处理器将用户的称呼偏好传到模板:

    def address_formality(request):
        if request.user.is_authenticated:
            return {'address_formality': request.user.address_formality}
        return {'address_formality': 1}  # 未登录用户默认使用非正式
    

    然后在settings.py的TEMPLATES配置中,将这个处理器加入context_processors列表:

    TEMPLATES = [
        {
            # 其他配置项
            'OPTIONS': {
                'context_processors': [
                    # 原有处理器
                    'your_app_name.context_processors.address_formality',
                ],
            },
        },
    ]
    
  3. 模板中根据偏好加载对应翻译
    最优雅的方式是结合翻译上下文,在django.po中为同一个msgid添加不同上下文的翻译:

    msgctxt "formal"
    msgid "Can you help me?"
    msgstr "Können Sie mir helfen?"
    
    msgctxt "informal"
    msgid "Can you help me?"
    msgstr "Kannst du mir helfen?"
    

    然后在模板里根据用户偏好调用对应上下文的翻译:

    {% if address_formality == 1 %}
        {% trans "Can you help me?" context "informal" %}
    {% else %}
        {% trans "Can you help me?" context "formal" %}
    {% endif %}
    

这样就能灵活实现德语称呼的正式/非正式切换啦~

内容的提问来源于stack exchange,提问作者Aliquis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:30:45