从数据库中的数据翻译

Translation from data in database

我在我的 Django 应用程序中实现了一个日志系统,这个系统对于任何用户的每一个动作都会将信息保存在数据库中。这是模型:

class Log(models.Model):
    user = models.ForeignKey(to=User, on_delete=models.PROTECT)
    log = models.CharField(max_length=255)
    type = models.CharField(max_length=50)
    date = models.DateTimeField(auto_now_add=True)
    company = models.ForeignKey(to=Company, on_delete=models.PROTECT)

我的观点是关于日志字段的翻译。例如我的语言是英语,它会在数据库中保存“确实创建了一个新客户”,但是如果我用法语更改语言,我显然会再次以英语获得。 同样,如果法国人创建日志,我将有一些法语日志,其他日志则为英语。 我的问题是这个日志字段有数百种不同的可能性。

Django 是否可以像使用 {% translate %} 标签那样在模板中翻译来自数据库的数据?

我在想在翻译文件中有这数百种可能性,然后 Django 直接在模板中翻译它?

权限名称也有同样的问题。用户可以将权限授予其他用户,但这些权限名称是英文的。

感谢您的帮助

是的 - Django 有一个内置的方法用于此 .gettext(),如文档中所述: https://docs.djangoproject.com/en/3.1/topics/i18n/translation/

这会将字符串翻译成最终用户的语言。您可以在模板或模型中使用它。

要在您的模板中使用它:

<!-- load i18n -->
{% load i18n %} 

<!-- translate text -->
<title>{% translate "This is the title." %}</title>

<!-- translate string variable passed from context -->
<title>{% translate myvar %}</title>

在模板中,translate 在底层字符串上调用 .gettext()

希望对您有所帮助 ;)

额外信息:

Django 的 LocaleMiddleware 将尝试检测它正在翻译的语言(通过各种技术,您可以在文档 link 上阅读)。

但是,如果中间件无法检测到最终用户需要哪种语言,它将使用 settings.pyLANGUAGE_CODE 变量中指定的语言。这是 Django 将翻译成的默认语言。