Django 国际化翻译中的 gettext 和 gettext_lazy

20 篇文章 0 订阅
8 篇文章 0 订阅
本文探讨了在Django应用中如何正确使用ugettext()和ugettext_lazy(),特别是在模型定义时,理解lazy特性对于避免语言切换问题的重要性。模型字段应使用ugettext_lazy(),确保在不同语言环境中动态更新.
摘要由CSDN通过智能技术生成

Django API 提供了几个有用的模块来帮助你翻译你的应用程序. 它们都在django.utils.translation中使用,大多数情况下, 我们会使用到ugettext()和ugettext_lazy().

「u」前缀代表「unicode」, 因为大多数情况下,我们经常使用 Unicode, 所以使用ugettext()代替gettext(), 使用ugettext_lazy()代替gettext_lazy().

顾名思义, lazy该函数是对翻译字符串的引用, 而不是实际翻译的文本. 因此在访问值的时候会进行转换, 而不是调用的时候.

注意这个特性,Django 启动的时候一些特定的代码只执行一次, 比如在models, forms 和 model forms.

那么, 我们假设在模型定义的时候使用ugettext(), 而不是ugettext_lazy()会怎么样?

  • 1. Django 启动, 默认语言是英文.
  • 2. Django 选择了英文版的field labels
  • 3. 用户将网站语言改为简体中文.
  • 4. field labels依然是英文显示.

因为models的字段定义仅仅被执行一次,并且在执行定义代码的时候语言不是简体中文(一般是英文).

要避免这种行为,要必须正确的使用ugettext()和ugettext_lazy()

下面总结了, 在合适的地方使用合适的函数:

  • ugettext_lazy():
    • models.py (fields, verbose_name, help_text, methods short_description);
    • forms.py (labels, help_text, empty_label);
    • apps.py (verbose_name).
  • ugettext():
    • views.py
    • 其他类似于在请求过程中调用的代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值