为翻译项目收集的辅助工具和混入类。
项目描述
Aldryn Translation Tools
已弃用项目的延续 Divio Aldryn搜索.
为翻译django-CMS项目收集的共享辅助工具和混入类。
要使用它,请使用pip将其安装到您的项目中
pip install djangocms-aldryn-translation-tools
贡献
我们感谢所有帮助创建和维护此软件包的贡献者。
贡献者名单在贡献页面上。
admin.AllTranslationsMixin
自动在变更列表中添加语言“标签”列表。标签颜色表示该对象的翻译状态。灰色表示未翻译,蓝色表示已翻译。使用较深的颜色表示当前语言。
每个标签都链接到对象变更表单上的特定语言标签。
在HVAD中也有类似的功能,现在基于Parler的项目也有这个功能。
预览
要使用此功能,只需导入并将混入类添加到您的Model Admin类中即可
from parler.admin import TranslatableAdmin from aldryn_translation_tools.admin import AllTranslationsMixin class GroupAdmin(AllTranslationsMixin, TranslatableAdmin): # ....
如果您希望将标签放入不同的列中,您可以将 all_translations 添加到 list_display 列表中您想要的位置,否则“语言”列将自动放置在最右边。
models.TranslatedAutoSlugMixin
这是一个可翻译的模型混合,它会在 save() 时自动为对象生成合适的 slug。
如果 slug_globally_unique 为 True,则 slug 必须在所有语言中都是唯一的。
如果 slug_globally_unique 为 False(默认值),则这里使用的策略是,如果 slug 属于不同的语言,则允许两个对象使用相同的 slug。所以如果这个用于翻译的文章模型,这些 URL 是有效的
/en/pain - 一篇关于身体不适的英文文章
/fr/pain - 一篇关于面包的法文文章
当然,这意味着在从 URL 解析对象时,必须注意考虑 URL 的语言部分。
在使用此混合时,还必须将实现模型上的 slug_source_field_name 属性设置为要从中派生 slug 的翻译字段的名称。如果您需要从多个字段(翻译或其他)派生更多 slug,只需覆盖方法 get_slug_source 以提供 slug 的源字符串。
配置属性
slug_default
提供要使用的默认 slug 的懒惰翻译字符串,如果对象没有源字符串来派生 slug,则使用。
slug_field_name
提供存储生成的 slug 的翻译字段的名称。
slug_globally_unique
一个布尔标志,用于控制 slug 是否全局唯一,或仅在每个语言中唯一。默认值为 False。
slug_max_length
声明 slug 的最大长度。默认值为 slug_field 的 max_length,并通过内省确定。
slug_separator
这确定在添加到 slug 之前使用的分隔符。它不决定用于 slug 本身的分隔符,它始终是 -。这只是为了与 aldryn_common 中的 slugify() 方法兼容,但它不推荐使用。默认为 -。
slug_source_field_name
提供用于派生 slug 的翻译字段的名称。如果有多个字段或其他复杂来源需要,请覆盖方法 get_slug_source()。注意,如果覆盖了 get_slug_source(),建议还覆盖 get_slug_default()。
公共方法
get_slug_default
天真地从对象中构建翻译的默认 slug。为了获得更好的结果,只需将类上的 slug_default 属性设置为懒惰翻译字符串。或者,如果您需要以更程序化的方式确定默认 slug,可以覆盖此方法。
示例:如果您的模型是“新闻文章”,源字段是“标题”,则此方法将返回“news-article-without-title”。
get_slug_max_length
接受可选参数 idx_len。
检查 slug 字段以确定最大长度,考虑到可能的分隔符以及最多 [idx_len] 位数字。
get_slug_source
简单返回 slug 源字段的值。对于使用多个字段(已翻译或未翻译)作为源等更复杂的情况,可以重写。
models.TranslationHelperMixin
公开方法
known_translation_getter()
签名
(value, language) = obj.known_translation_getter(field, default=None, language_code=None, any_language=False)
类似 Parler 的 safe_translation_getter(),但尊重 settings.CMS_LANGUAGES 中定义的回退首选项,并提供作为元组的翻译值及其表示的语言。
这在解决给定语言的对象的绝对 URL 时特别有帮助。如果使用回退(尊重首选项),则返回的 language_code 可以用于为 reverse() 设置正确的上下文,以获取与结果语言一致的 URL。
例如
from django.utils.translation import override from aldryn_translation_tools.models import TranslationHelperMixin from cms.utils.i18n import get_current_language from parler.models import TranslatableModel, TranslatedFields class Fruit(TranslationHelperMixin, TranslatableModel): translations = TranslatableFields( name=models.CharField(...), slug=models.CharField(...) ) def get_absolute_url(self, language=None): language = language or get_current_language() (slug, language) = self.known_translation_getter('slug', default=None, language_code=language, any_language=False) with override(language): return reverse('fruit-detail', kwargs={'slug': slug})
相比之下,如果我们只做了类似这样的事情
... def get_absolute_url(self, language=None) language = language or get_current_language() slug = self.safe_translation_getter('slug', default=None, language_code=language, any_language=False) with override(language): return reverse('fruit-detail', kwargs={'slug': slug})
那么,如果水果 苹果 尚未翻译成 FR,那么 slug 可能会出现在回退语言中,而 URL 的其余部分则在请求的语言中,因此,而不是获取语言一致的回退 URL
/en/apple/
你可能会得到
/fr/apple/
这最多会让网站访客感到困惑,但更有可能不存在,导致 NoReverseFound 异常或 404,这显然没有尊重开发人员设置的回退首选项。
项目详情
djangocms-aldryn-translation-tools-1.0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 031e6d0b000e540b6f3a71108601779a352b59ea59dae76dc95d13a06b8d90ea |
|
MD5 | 70eff54ba837d36c782338610cbe243c |
|
BLAKE2b-256 | a050aa59f17b763d32d433fa22b390e8f7c4d8104e3e05d8679e76bbd1767717 |
djangocms_aldryn_translation_tools-1.0.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a0d484516e48ddaed5cff587a4f0940bd87a2b169487e168906c990d0e07933e |
|
MD5 | 6a79506a6adbef0b746b7f89f78347dd |
|
BLAKE2b-256 | 5b01589253e76975c9d479180fb4359d5b36f4ab18a62592a74e7056dfd9b363 |