一个南方兼容的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>;
```
<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>;
```