在 Django 中实现模型字段的翻译功能,可以通过使用 django-modeltranslation 库来实现。以下是一个详细的步骤,以及相应的代码示例和注释:
1. 安装 django-modeltranslation 库:
首先,需要通过 pip 安装 django-modeltranslation 库:
```bash
pip install django-modeltranslation
```
2. 添加 'django_modeltranslation' 到 INSTALLED_APPS 列表中:
在 Django 的 settings.py 文件中,将 'django_modeltranslation' 添加到 INSTALLED_APPS 列表中:
```python
INSTALLED_APPS = [
...,
'django_modeltranslation',
]
```
3. 创建一个 translations.py 文件,并定义模型字段的翻译:
在 Django 应用的目录下,创建一个名为 translations.py 的文件,并在该文件中定义需要翻译的模型字段。例如,如果我们有一个 User 模型,我们需要为 username 字段进行翻译,可以这样定义:
```python
# user/translations.py
from modeltranslation.translator import TranslationOptions, register
from .models import User
@register(User)
class UserTranslationOptions(TranslationOptions):
fields = ('username',)
```
4. 在 settings.py 文件中,添加 LANGUAGES 和 MIDDLEWARE_CLASSES 配置:
在 Django 的 settings.py 文件中,添加 LANGUAGES 和 MIDDLEWARE_CLASSES 配置。例如:
```python
# settings.py
...
LANGUAGES = (
('en', 'English'),
('zh-hans', 'Simplified Chinese'),
)
MIDDLEWARE_CLASSES = [
...,
'django.middleware.locale.LocaleMiddleware',
]
...
```
5. 在 urls.py 文件中,添加 i18n_patterns 配置:
在 Django 的 urls.py 文件中,添加 i18n_patterns 配置。例如:
```python
# urls.py
from django.conf.urls import url, include, i18n_patterns
urlpatterns = [
...,
url(r'^i18n/', include('django.conf.urls.i18n')),
...,
] + i18n_patterns(
...,
url(r'^admin/', admin.site.urls),
...,
)
```
6. 在用户请求时,设置请求的语言:
在 Django 视图中,可以设置用户的语言。例如:
```python
# views.py
from django.utils import translation
def view(request):
if 'lang' in request.GET:
lang = request.GET['lang']
translation.activate(lang)
request.session[translation.LANGUAGE_SESSION_KEY] = lang
return render(request, 'template.html')
```
7. 保存模型实例并查询:
在 Django 视图中,可以创建一个模型实例并保存。然后,查询该实例时,会根据用户的语言显示翻译后的结果。例如:
```python
# views.py
from django.shortcuts import render
from .models import User
def view(request):
user = User(username='John Doe')
user.save()
return render(request, 'template.html', {'user': user})
```
8. 创建 template.html 文件,并展示翻译后的结果:
在 Django 应用的目录下,创建一个名为 template.html 的文件,并在该文件中显示模型实例的 username 字段。例如:
```html
<!-- templates/template.html -->
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
<h1>{{ user.username }}</h1>
...
</body>
</html>
```
测试用例:
1. 启动 Django 服务:
在终端中,运行以下命令启动 Django 服务:
```bash
python manage.py runserver
```
2. 打开浏览器,访问 http://127.0.0.1:8000/ ,可以看到模型的 username 字段是英文的。
3. 访问 http://127.0.0.1:8000/?lang=zh-hans ,可以看到模型的 username 字段是中文的。
应用场景:
在需要提供多语言支持的网站中,可以使用 django-modeltranslation 来实现模型字段的翻译。例如,一个电商网站可以允许用户选择不同的语言来查看产品描述和名称等。