跳转到主要内容

Django模型的简单多语言支持。

项目描述

https://secure.travis-ci.org/dokterbob/django-multilingual-model.png?branch=master

Django模型的简单多语言支持

这是什么?

一种基于外键关系和属性代理的效率低下、最小化和绝对简单的模型翻译方法。

该项目代码是从yazzgoth在Google代码上的原始项目分叉而来的。

用法

当一个翻译属性的值设置为当前线程中选定的语言时,它将自动返回该属性当前语言的正确值。所以对于一本有英文翻译的书籍,如果一个检测到的语言为英文的客户从模板中请求book.title,它将简单地返回书籍标题的英文翻译。

models.py

from multilingual_model.models import MultilingualModel, MultilingualTranslation

class BookTranslation(MultilingualTranslation):
    class Meta:
        unique_together = ('parent', 'language_code')

    parent = models.ForeignKey('Book', related_name='translations')

    title = models.CharField(max_length=32)
    description = models.TextField()

class Book(MultilingualModel):
    ISBN = models.IntegerField()


>>> book = Book(ISBN="1234567890")
>>> book.save()
>>> book_en = BookTranslation(language_code='en')
>>> book_en.title = "Django for Dummies"
>>> book_en.description = "Django described in simple words."
>>> book_en.parent = book
>>> book_en.save()
>>> book_pl = BookTranslation(language_code='pl')
>>> book_pl.title = "Django dla Idiotow"
>>> book_pl.description = "Django opisane w prostych slowach"
>>> book_pl.parent = book
>>> book_pl.save()
>>> # now here comes the magic
>>> book.title_en
u'Django for Dummies'
>>> book.description_pl
u'Django opisane w prostych slowach'

兼容性

目前维护Django 1.4至1.6版本,适用于Python 2.6、2.7和3.3。

管理集成

admin.py

from django.contrib import admin
import models

from multilingual_model.admin import TranslationStackedInline


class BookTranslationInline(TranslationStackedInline):
   model = models.BookTranslation

class BookAdmin(admin.ModelAdmin):
   list_display = ["ISBN"]
   inlines = [BookTranslationInline]

admin.site.register(models.Book, BookAdmin)

使用翻译字段进行__unicode__表示

为了使__unicode__函数的翻译工作,需要一些魔法。默认情况下包含了一个辅助方法,允许您执行以下操作

def __unicode__(self):
    return self.unicode_wrapper('title', default='Unnamed')

从早期版本升级

如果您从早期版本升级,需要注意两个重要事实

  1. 多语言模型中的Model MultilingualTranslation字段名为“language_code”。在先前版本中,max_length设置为5。现在已更改为7,以允许更长的语言代码有效。这可能会在某些情况下破坏验证。要在数据库级别反映此更改,可以手动更改模型翻译的数据库表。

  2. 在admin.py中,类TranslationInline已重命名为TranslationStackedInline。TranslationInline将很快被弃用。除了TranslationStackedInline之外,现在还有一个TranslationTabularInline。

设置

MULTILINGUAL_FAIL_SILENTLY

当当前语言找不到翻译且MULTILINGUAL_FALL_BACK_TO_DEFAULT为False时,返回None而不是引发ValueError。默认为DEBUG的反义。

MULTILINGUAL_FALL_BACK_TO_DEFAULT

当找不到当前激活语言的翻译时,是否回退到MULTILINGUAL_LANGUAGE_CODE。默认为True。

MULTILINGUAL_LANGUAGE_CODE

当MULTILINGUAL_FALL_BACK_TO_DEFAULT为True时使用的默认语言。默认为LANGUAGE_CODE。

MULTILINGUAL_LANGUAGES

可翻译的语言集合。默认为LANGUAGES。

MULTILINGUAL_HIDE_LANGUAGE

在管理界面中隐藏选择语言和删除翻译的功能。当MULTILINGUAL_LANGUAGES包含单个语言时,默认为True。

许可证

本应用程序根据GNU Affero通用公共许可证版本3发布。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

django-multilingual-model-0.6.tar.gz (22.0 kB 查看哈希值)

上传时间

构建分发

django_multilingual_model-0.6-py2.py3-none-any.whl (12.7 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面