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传递位置作为FragmentPagerAdapter中片段的参数   html Java Jsoup循环打印   java如何使用FileOutputStream写入数据而不丢失旧数据?   java在测试用例类/方法中执行sql before/after/in   java在javafx中注册鼠标处理程序,但处理程序不是内联的   Android嵌入了一个C++库的java代码,不需要TopPLE程序来嵌入它?   片段类内部的java ProgressBar导致setMax方法出现NullPointerException?   带有google app engine的java Activator Play框架   java如何解析星级而不是字符串?   java如何在基本实体中定义通用主键字段?   通过扩展实现Java克隆   使用CipherOutputStream的java递归加密提供一个空字节[]   在运行时提取字段值的Java服务   Java 11和spring boot从spring boot应用程序的fat jar中的依赖项jar加载资源   java尝试使用J2SE枚举所有可用的Wifi网络   使用Java库进行SWIFT MT消息解析   java拆分非逗号分隔的字符串   java为什么toString()不能是静态方法?   java在连接到集群数据库时遇到mongo异常   java访问Hashmap中存储的json有效负载值