Django的全美达是一个Django应用程序在Django的模型翻译内容与NBSP;每一种语言被存储并在数据库级别不同的列自动管理。
使用全美达
创建翻译模型
看看这个模型:
类图书(models.Model):
 标题= models.CharField(MAX_LENGTH = 200)
 描述= models.TextField()
 机身= models.TextField(默认值='')
 价格= models.FloatField()
假设你想描述和身体翻译。使用全美达后所产生的模式是:
来自全美达Transmeta的进口
类图书(models.Model):
  __ metaclass__ =全美达
 标题= models.CharField(MAX_LENGTH = 200)
 描述= models.TextField()
 机身= models.TextField(默认值='')
 价格= models.FloatField()
 类元:
 翻译=('说明','体',)
请确保您已设置默认值,可用的语言在你的settings.py:
LANGUAGE_CODE ='上课'
ugettext =拉姆达s:秒#假ugettext功能,Django的文档说
语言=(
 ('上课',ugettext('西班牙')),
 ('恩',ugettext('英语')),
)
这是与./manage.py sqlall命令生成的SQL:
开始;
CREATE TABLE“fooapp_book”(
 “身份证”串行NOT NULL PRIMARY KEY,
 “称号”VARCHAR(200)NOT NULL,
 “description_en”的文字,
 “description_es”文字NOT NULL,
 “body_es”文字NOT NULL,
 “body_en”文字NOT NULL,
 “价格”双精度NOT NULL
)
;
COMMIT;
注:*全美达创建一个列每种语言。不要担心需要新的语言在未来,全美达解决了这个问题你。 *如果一个场为null =假,并且不具有默认值,全美达将仅创建一个NOT NULL字段,缺省语言。字段其他辅助语言将是空。另外,主要语言将被要求在管理应用程序,而其他字段将是可选的(用空白=真)。这样做是因为对内容翻译正常的做法是先在主要语言添加内容,后来有翻译人员翻译成其他语言。 *您可以使用./manage.py使用syncdb创建数据库模式。
打在Python外壳
全美达的每一个可用语言模型中定义的每个翻译领域创建一个字段。字段名称后缀的语言短代码,例如:description_es,description_en,等等。此外,它创建了一个FIELD_NAME的getter检索的活动语言的字段值。
让我们玩了一下在Python shell来更好的理解它是如何工作:
>>>从fooapp.models进口图书
>>> B = Book.objects.create(description_es = u'mi descripcion',description_en = u'my说明“)
>>> b.description
u'my说明“
>>>从django.utils.translation进口激活
>>>激活(“ES”)
>>> b.description
u'mi descripcion“
>>> b.description_en
u'my说明“
添加新的语言
如果你需要新的语言添加到现有的,你只需要改变你的settings.py,并要求全美达再次同步数据库。例如,法国添加到我们的项目中,你需要将它添加到settings.py语言:
语言=(
 ('上课',ugettext('西班牙')),
 ('恩',ugettext('英语')),
 (“FR”,ugettext(“法国”)),
)
并执行一个特殊的sync_transmeta_db命令:
  ./ manage.py sync_transmeta_db
缺少语言从“fooapp.book”模式“说明”字段:FR
SQL同步“fooapp.book”模式:
  ALTER TABLE“fooapp_book”ADD COLUMN“description_fr”文本
(Y / N)[N]:要执行一个SQL确实ÿ
执行SQL ...完成
缺少语言从“fooapp.book”模式“体”字段:FR
SQL同步“fooapp.book”模式:
  ALTER TABLE“fooapp_book”ADD COLUMN“body_fr”文本
(Y / N)[N]:要执行一个SQL确实ÿ
执行SQL ...完成
并完成了!
添加新的翻译领域
现在想象一下,使用这个Web应用程序(带很多书创建)几个月后,你需要做的书翻译的价格(例如,由于书价取决于货币)。
要做到这一点,首先添加价格模型的翻译领域列表:
类图书(models.Model):
  ...
 价格= models.FloatField()
 类元:
 翻译=('说明','体','价格',)
所有这一切现在剩下的是调用sync_transmeta_db命令来更新数据库架构:
  ./ manage.py sync_transmeta_db
语言:
  1。西班牙语
  2。英语
选择在其中把当前翻译数据的语言。
什么是当前数据的语言? (1-2):1
缺少语言从“fooapp.book”模式“价格”字段:ES,EN
SQL同步“fooapp.book”模式:
  ALTER TABLE“fooapp_book”ADD COLUMN“price_es”双精度
  UPDATE“fooapp_book”SET“price_es”=“价格”
  ALTER TABLE“fooapp_book”ALTER COLUMN“price_es”SET NOT NULL
  ALTER TABLE“fooapp_book”ADD COLUMN“price_en”双精度
  ALTER TABLE“fooapp_book”DROP COLUMN“价格”
(Y / N)[N]:要执行一个SQL确实ÿ
执行SQL ...完成
这是什么命令的作用是地狱?
不仅sync_transmeta_db命令创建新翻译领域的新数据库列......从旧价格字段的数据复制到的语言之一,这就是为什么命令要求您提供实际数据目标语言领域。
管理一体化
全美达透明显示所有翻译领域进入管理界面。这是容易的,因为模型有实际上许多领域(每个语言)。
改变在管理表单字段是一个相当普遍的任务,全美达包括canonical_fieldname效用函数一次申请这些变化对所有的语言领域。这是更好地用一个例子解释:
来自全美达进口canonical_fieldname
类BookAdmin(admin.ModelAdmin):
 高清formfield_for_dbfield(个体经营,db_field,** kwargs):
 场=超(BookAdmin,个体经营).formfield_for_dbfield(db_field,** kwargs)
  db_fieldname = canonical_fieldname(db_field)
 如果db_fieldname ==“描述”:
 #这适用于所有description_ *领域
  field.widget = MyCustomWidget()
  ELIF field.name =='body_es“:
 #这仅适用于body_es场
  field.widget = MyCustomWidget()
 返回字段
特点
- 在自动模式创建与翻译领域。
- 在可翻译领域整合到Django的管理界面。
- 在命令同步数据库架构添加新的翻译领域和新的语言。
什么在此版本中是新的
- 新增get_mandatory_fieldname功能。
什么在0.6.9版本新
- 支持的方法get_field_language的字段名用下划线
什么在0.6.8版本新
- 修正了命令sync_transmeta_db一个小错误(UnboundLocalError:局部变量f的赋值之前引用)
什么在0.6.7版本新
- 更改的全美达标签表示(verbose_name)
什么在0.6.6版本新
- 在改进和可用性命令sync_transmeta_db
- 修正了一些bug
- 文档
什么在0.6.5版本新
- 在改进和可用性命令sync_transmeta_db
- 在与最后的Django(命令sync_transmeta_db) 工程
- 作品(命令sync_transmeta_db)
与MySQL
什么在0.6.4版本新
- 修正错误与继承模式。
什么在0.6.3版本新
- 在允许使用TRANSMETA_LANGUAGES设置。
- 在增加了两个选项sync_transmeta_db:-y(假设是所有)和-d(默认语言代码)
什么在0.6.2版本新
- 在工作时,默认的语言环境有拼写变异为ES-ES或EN-US。
要求
- 在Django的
- 在Python中
评论没有发现