gpt4 book ai didi

python - Django应用程序布局: Internationalization

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:54 24 4
gpt4 key购买 nike

在 django 项目中存储语言常量的最佳方式是什么?

例如,我们知道,对于翻译,我们需要执行以下操作:

from django.utils.translation import gettext_lazy as _

class MyThing(models.Model):
name = models.CharField(help_text=_('This is the help text'))

如果我们有很多变体,我们可以使用这样的字典:

from django.utils.translation import gettext_lazy as _
MYTRANSLATION = {
'term1':_('term1'),
'term2':_('term2'),
...
}

所以,我的问题是,在哪里存储带有语言常量的字典...直接在 View 中、在模型中、在应用程序文件夹中的单独文件中、在项目的根文件夹中等等...最好的方法是什么?你在哪里存储你的语言常量?

最佳答案

我认为这确实取决于。如果您有一个面向公众的大型网站,想要翻译成 N 种语言,那么它们就不是恒定的,只要内容发生变化,就需要专门的翻译人员进行更新。对于这样的项目,gettext 完全不适合,因为 gettext 对于非技术人员来说很难使用。该网站还需要重新编译和重新部署来更新翻译,如果内容经常更改,这将是主要的破坏因素。 gettext 适用于桌面应用程序(某种程度上,它仍然是翻译人员的主要皮塔),但不适用于网站。

相反,请使用 https://github.com/ojii/django-nani 。创建一个表来保存模板中的所有可翻译字符串:

class I18NString(TranslatableModel):
key = models.SlugField(unique = True)
translations = TranslatedFields(
text = models.TextField(),
)

对于您需要的每段文本,将其添加为 I18NString 中的一行。例如,您可以添加带有“short-introduction-text”键的行,并在其中添加英语和德语版本的介绍文本。

然后,对于每个页面加载,加载当前语言的所有翻译:

# For performance, memcached should be used.   
strings = I18NString.objects.language(request.COUNTRY_CODE).all()
trans = dict((s.key, s.text) for s in strings)

将 trans 字典传递给模板并渲染翻译后的字符串:

{{ trans.short-introduction-text }}

关于python - Django应用程序布局: Internationalization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6980850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com