Django-cms占位符翻译,关于语言的渲染

时间:2016-06-29 23:57:34

标签: django-cms

我想知道如何在Django-cms中手动翻译占位符。

如果我使用标签{% placeholder "test" %},我只能为所有语言定义一次测试值。是否可以为网站上使用的所有语言多次定义相同的占位符?或者我应该创建不同的占位符test_entest_frtest_es并在模板中使用if子句?它不是很优雅。

1 个答案:

答案 0 :(得分:0)

您还没有提供有关如何构建网页的任何详细信息,但我猜测您已使用自定义的占位符设置创建了自己的网页。如果您在设置中配置多种语言,则默认情况下,任何常规django-cms页面都是可翻译的。

请注意,最好分别翻译包含占位符的容器而不是每个占位符。

如果您定义自己的网页,则可以使用django-hvad(这也是django-cms使用的内容)来识别这些翻译:

# models.py

from cms.models import PlaceholderField, Placeholder
from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
from django.db.models import Q
from django.utils.translation import ugettext_lazy as _
from hvad.manager import TranslationAwareManager

class LanguageManager(TranslationAwareManager):
    def for_language(self, language):
        return self.get_queryset().filter(Q(language__isnull=True) | Q(language=language))


class CustomPage(models.Model):

    language = models.CharField(_('language'), max_length=5, null=True, blank=True, choices=settings.LANGUAGES,
                                help_text=_('leave empty to display in all languages'))

    placeholder_abstract = PlaceholderField('abstract', related_name='%(class)s_abstracts')
    placeholder_content = PlaceholderField('content', related_name='%(class)s_contents')
    placeholder_links = PlaceholderField('links', related_name='%(class)s_links')

    created_by = models.ForeignKey(User, null=False, blank=False, related_name='+', editable=False)
    modified_by = models.ForeignKey(User, null=False, blank=False, related_name='+', editable=False)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_modified = models.DateTimeField(auto_now=True, editable=False)

    objects = LanguageManager()

Django Hvad还有更多用于翻译模型的好东西。