【问题标题】:Translation from data in database从数据库中的数据翻译
【发布时间】:2021-06-28 23:27:09
【问题描述】:

我在我的 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 直接在模板中进行翻译?

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

感谢您的帮助

【问题讨论】:

  • 使用谷歌翻译api
  • 1.您是否希望自动翻译保存在日志字段中的信息? 2.你要保存的字符串是用户写的还是系统自带的?

标签: django django-models django-templates translation


【解决方案1】:

是的 - 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 将尝试检测它正在翻译成哪种语言(通过您可以在文档链接上阅读的各种技术)。

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

【讨论】:

  • 您能解释一下如何通过这个特定示例选择目标语言吗?
  • 它被翻译成与用户浏览器中指定的语言相同的语言。或者,进入settings.py 并在变量LANGUAGE_CODE (LANGUAGE_CODE="de") 中设置您的语言代码以查看实际翻译
  • 我的问题是关于我如何“强制”输出到某种语言不管我的弓箭手/我的位置或任何语言环境
  • 删除LocaleMiddleware(检测您的翻译区域设置的中间件)('django.middleware.locale.LocaleMiddleware'),然后在LANGUAGE_CODE变量中设置默认翻译语言。这应该可以解决问题。
  • 忘掉浏览器吧。如何在独立函数中使用 Django 的翻译功能?
猜你喜欢
  • 2020-07-21
  • 1970-01-01
  • 2012-04-30
  • 2022-12-05
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 2011-10-19
  • 2015-03-03
相关资源
最近更新 更多