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

django-multilingual-model的Python项目详细描述


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

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

这是什么?

一种基于模型翻译的低效、最小且非常简单的方法 关于外键关系和属性代理。

项目代码是从 original project由 谷歌代码上的yazzgoth。

使用量

为当前所选语言设置翻译属性时 在这个线程中,它将自动生成该属性的正确值 对于当前语言。所以对于一本在 从客户的模板中请求book.title 检测到的语言是英语,只会产生 书名。

型号.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'

兼容性

目前Django1.4到1.6是为Python2.6、2.7和3.3维护的。

管理集成

管理员: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. 多语言模型中的模型多语言翻译有一个字段 命名为“语言代码”。在以前的版本中,最大长度设置为5。这个有 已更改为7以允许更长的语言代码有效。这 在某些情况下可能会破坏验证。一种反映这种变化的方法 数据库的级别是手动更改模型的数据库表 翻译出来的。
  2. 在admin.py中,translationLine类已重命名为 行中的翻译。translationline很快就会被弃用。另外 到translationstackedinline,现在有一个translationtabularinline。

设置

多语言故障无提示
当 找不到当前语言,多语言返回默认值为 错误。默认为与调试相反
多语言返回默认值
在没有翻译时是否返回到多语言代码 可以找到当前激活语言的。默认为true
多语言代码
当多语言返回默认值时使用的默认语言是true。 默认为语言代码
多种语言
一组可供翻译的语言。默认为语言
多语言隐藏语言
在管理中隐藏选择语言和删除翻译的功能。 当多语言包含一种语言时,默认为true

许可证

此应用程序在GNU Affero通用公共许可版本3下发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用jackson序列化/反序列化具有不同属性的子属性   javascript驱动程序。getTitle()从错误页面获取数据   java web应用程序的增量部署   java字符引用“&#x10”是无效的XML字符   java MyEclipse+Hibernate不按ID排序属性集?   找不到IBM Filenet P8更改预处理器Java实现   java比较器,用于按浮点参数对对象arraylist排序   java如何调试。来自eclipse或其他版本的bsh文件   不允许使用java rest api post方法   java如何在Servlet中打开弹出窗口,然后重定向页面   java的replaceAll方法对我不起作用我做错了什么?   我收到了javax。网ssl。SSLHandshakeException:握手期间远程主机关闭连接