一个南方兼容的django字段套件,可以轻松管理基于文本内容(包括文件/图像)的多个翻译。

django-multilingualfield的Python项目详细描述


#django多语种字段<


<35<35<35<35<

a[south(http://south.aeracode.org/)-兼容的django字段套件,方便管理基于文本内容(包括文件/图像)的多个翻译(包括文件/图像)的文本内容(包括文件/图像)的多个翻译。





<0.3






a[south(http://south.aeracode.aeracode.org/)-兼容的django字段套件,使管理基于文本内容(包括文件/图像)/>安装##



>安装容易用[pip(https://pypi.pypypi.org/pypi/pip/pip)安装容易用[pip(https://pypi.pypi.org/pypi/pip):

``bash
$pip install django多语种域
``

` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `3.4条。1
*`lxml`>;=3.1.2




>使用"django多语种字段"时,首先将"多语种字段"添加到"已安装的应用程序"中:


``python
```python
>已安装的应用程序(多语种字段)中,首先将"多语种字段"添加到"已安装的应用程序(已安装的应用程序)":


第二,确保`语言`(https://docs://docs://docs://docs ````````(https ` ` ` ` ` ` ` ` `.djangoproject.com/e网站n/dev/ref/settings/language s)已在设置文件中正确定义。

建议您手动设置[`language\u code`](https://docs.djangoproject.com/en/dev/ref/settings/language code)(即使您保留默认值'en us')*此外,*还可以用[`languages`](https://docs.djangoprojec)为该语言代码添加一个条目(作为第一语言t.com/en/dev/ref/settings/语言)。这里举个例子:

``python
language `语言代码'en'


language=[
('en','english'),
('es','espa&;241;ol');;请参见下面的注意事项

```
``
>;请参见下面的注意事项

````
` ` `
` ` ` `
` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `gt;`&;241;`是'nin'的utf8编码

模板中的"ul*字段您需要将django的"django.middleware.locale.localmiddleware"添加到您的["middleware"类](https://docs.djangoproject.com/en/dev/ref/setting s/"std:setting-middleware"类)设置和添加到您的["template"上下文中的"django.core.context"处理器.i18n处理器`](https://docs.djangoproject.com/en/dev/ref/settings/std:setting-template-context-processors)设置:

``python
middleware+=(
'django.middleware.locale.localemidleware',


template-context-processors+=(
'django.core.context-processor随着人们对语言的依赖程度的增加,

``````


<
<
>;更好地理解以及django如何确定语言偏好阅读官方django文档中i18n主题页中标题恰当的"['django如何发现语言偏好]"部分(https://docs.djangoproject.com/en/dev/topics/i18n/translation/django如何发现语言偏好)。

概述

django有[优秀的翻译工具](https://docs.django project.com/en/dev/topics/i18n/translation/)但是wgbh最近的一个项目需要手动为网站提供的几乎所有文本和图像内容编写翻译。

由于多种原因,每个需要翻译的字段(即"title"和"title")的"charfield"、"textfield"或"imagefield"属性:

1。这将是一个巨大的痛苦来记录。
2.模板和/或视图可能会被大量粗糙的if/else语句污染。
3。该网站需要在支持英语和西班牙语的情况下启动,但我认为新的语言将在未来添加,并希望以后添加的语言尽可能流畅。


安哥拉项目。` multilingalfield.fields.multilingalcharfield`:功能与d詹戈的"django.db.models.charfield"
2.`多语言字段.字段.多语言文本字段':功能反映了django的'django.db.models.textfield`
2的功能。`多语言字段.字段.多语言文件字段':功能反映了django的'django.db.models.filefield`

列(与"varchar"或"text"相反);它们只在它们使用的小部件/表单中分开。

在数据库级别**将不会强制使用`**长度(仅在表单创建和输入验证期间)。


\hon
来自django.db import models

ax_length_=300

long_description=mlf_fields.多语言文本字段(
blank=true,
null=true

image=mlf_fields.多语言文件字段(
上载到"images/",
blank=true,
null=true
`````

`django multilingual field`与[south]完全集成(http://south.aeracode.org/),因此请迁移到您心中的内容!


35 \35 \35 \35 \ \35 \35 \35 \35 \35 \35 \ \35 \ \35 35 35 \35 35 \/>…然后'django multilingual field'将存储translations表示以下结构中单个"text"db列中作为xml的文本:

``xml
<;languages>;
<;language code="en">;
hello
<;language>;
<;language code="es">;
hola
<;language>;
<;language
```
>;
`````
>;注意,上面的示例包括用于可读性的空格,存储在数据库中的最后一个值将删除所有介于标记空白之间的空白空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白之间的空白。

应用程序所服务的内容将被应用程序所服务的内容删除。

即使"多语言字符域"和"多语言"ingualtextfield`实例作为xml存储在数据库中,它们作为python对象提供给应用程序。上述XML块将返回具有两个属性的"multilingual field.fields.multilingual text"的实例:

*`en`(值为"u'hello`)
*`es`(值为"u'hola`)

通过调用[`django.utils.translation.get_language`](https://docs.djangoproject.com/en/dev/ref/utils/django.utils.translation.get_language))将通过直接访问字段返回。


python shell中的model(`testmodel`):

``bash
$python manage.py shell
`````
``python
>;>从testapp导入testmodel
>;>从多语言字段导入testmodel。数据结构导入多语言文本> gt;title.en='hello'
>>>>>gt;title.es='hola'
>>>gt;x=testmodel(title=title)
>>>>;x.save()
>>>>;x.title.en
>u'hello'
>>>>>>>;x.title.es
>u'hola'
>>>>>>x.title
>u'hello'
>>u'hello'
>>>>>>>>>>;来自安安安安安安安安安安安安安安安安安安安安安安安安安安翻译IMPART通过manage.py加载python shell时,激活"获取语言",激活"获取语言"
gt;
"en-us"
"注意:en-us"将始终是活动线程中的当前语言。若要了解为什么
请访问:https://code.djangangroproject.com/ticket/12131/ticket/12131;评论:6
>>gt;激活('en')
>;gt;获取语言()
>'en'
>;激活('es')
>;获取语言()
'en'
>;激活('es')
>;激活('es')
>;gt;获取语言()
>'es'
>;x.title
>u'hola'
>>;激活('en'en'en'>>>>>>>>;激活('en'en'en'>>>>>>>)
>;gt;gt;x.title
'en'
```


"settings.languages"中列出的ch语言。


在您的管理配置中,将"admin.modeladmin"替换为"multilingual fieldmodeladmin",用于具有多语言*字段的模型:

``python
\testapp.admin
来自django.contrib import admin

来自多语言字段。admin import multilingual fieldmodeladmin

从.models导入testmodel



class testmodel admin(multilingual fieldmodeladmin):
"
将管理友好的样式添加到所有多语言*字段中
admin.site.register(testmodel,testmodeladmin)
````

2。使用[`formfield_overrides`]手动指定多语言*小部件(https://docs.djangoproject.com/en/dev/ref/contrib/admin/django.contrib.admin.modeladmin.formfield_overrides):

``python
eld import widgets as mlf_widgets
从多语言字段导入widgets as mlf_fields


from.models import testmodel



class testmodel admin(admin.modeladmin):
"
为testm的所有多语言*字段添加管理员友好的样式设置
通过formfield覆盖
"
列表显示=('title',)
formfield覆盖={
mlf_字段。多语言字符字段:{
"小部件":mlf_小部件。多语言字符字段djangoadminwidget
},
mlf_字段。m多语言文本域:{
"小部件":mlf\u小部件。多语言文本域djangoadminwidget
},
}


admin.site.register(testmodel,testmodeladmin)
````

3。在modelform子类上手动指定多语言*小部件:

``python
testapp.forms
from django.forms.models导入modelform


odelform(modelform):

class meta:
model=testmodel
fields=(
"title"、
"short_description"、
"long_description"
)widgets={
"title":mlf_widgets.multilinguarcharfielddjangoadminwidget,
"简短描述":mlf_widgets.multilinguarcharfielddjangoadminwidget,
"详细描述":mlf_widgets.multilinguardtextfieldjangoadminwidget
}
````

集成m进入您的管理配置:

`` python
testapp.admin
来自django.contrib import admin

来自.forms import testmodelform
来自.models import testmodel


class testmodeladmin(admin.modeladmin):
"
通过自定义表单为所有多语言*字段添加管理友好的样式
"
"
form=testmodelform

admin.site.register(testmodel,testmodeladmin)
`````

sage是一个简单而直接的示例模板,用于显示如何呈现"testmodel"的实例:

``python
{%load i18n%}
<;html>;
<;head>;
<;title>;{object.title}<;title>;
<;head>;
<;body>;
<;h1>;{{object.title}<;h2>;
<;p>;{{object.short{description}<;/p>;
{%if object.long{description%}
{object.long{description}
{%else%}
%trans'未提供详细说明'%}
{%
<;lt;
<;br/><;
<;
``


>;


<;lt;lt;lt;lt;lt;lt;lt;lt;
>````
>;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\br/>
前上面的示例对于大多数用例(当您想要呈现与用户当前语言线程相关联的值时)是典型的,但是您始终可以访问特定于语言的属性:

``html
{%load i18n%}
<;html>;
<;head>;
<;title>;{object.title}<;/title>;
<;/head>;
<;正文>;
<;h1>;{{object.title}}<;/h2>;
<;!--强制object.title的英文显示-->;
<;h2>;{%trans'title(english)%}:{{object.title.en}<;/h2>;

<;!--强制以西班牙语显示object.title-->;
<;h2>;{%trans'title(西班牙语)%}:{{object.title.es}<;/h2>;

<;p>;{{object.short戋description}<;/p>;
{%if object.long戋description%}
{object.long戋description}
{%else%}
{%trans'未提供详细说明'%}
{%endif%}
<;/body>;
<;/html>;
```

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

推荐PyPI第三方库


热门话题
java如何使用Spring和JSF向客户端授予临时权限   java除了Array/ArrayList之外,还有其他保存矩阵元素的方法吗   java BeanValidation不适用于单选按钮   通过java程序连接到配置单元数据库时出错   java如何使用maven解决二级依赖关系   JfreeChart/Java中带有图例的数据表   合并数组时发生java运行时错误   安全性如何在JavaEE中保护WebSocket端点?   java有没有一种方法可以使用insert方法为树插入值   java编程“静态”的另一种方式:代码可以吗?   java阅读文本文件时如何跳过3行   %04X在C中的含义以及如何在java中编写   java我如何验证一个方法不是仅在一个测试范围内对模拟调用的?   java如何在mac中使用启动appium desktop 1.6.1。球棒   仅匹配最多10位小数的java正则表达式