Trong bài viết này, chúng ta sẽ học cách tạo bản dịch cho bất kỳ instance model nào. Đôi khi bạn cần lưu trữ dữ liệu như ID, tên, trích dẫn, v.v. và hiển thị chúng bằng nhiều ngôn ngữ khác nhau. Thông thường điều này đòi hỏi nhiều thao tác với database, nhưng hôm nay tôi sẽ chỉ cho bạn cách đạt được kết quả tương tự chỉ với vài dòng cấu hình.
Thiết lập dự án
Tạo dự án Django và một app. Cấu hình urls và thêm app vào INSTALLED_APPS. Chúng ta chỉ cần làm việc với settings.py, admin.py, models.py và admin URL.
Ví dụ chi tiết
1. Cài đặt package
pip install django-klingon
2. Cấu hình settings.py
INSTALLED_APPS += ['klingon'] KLINGON_DEFAULT_LANGUAGE = 'en'
Thêm klingon vào INSTALLED_APPS và đặt tiếng Anh làm ngôn ngữ mặc định.
3. Tạo Model (models.py)
from django.db import models
from klingon.models import Translatable
class TeacherData(models.Model, Translatable):
name = models.CharField(max_length=100)
ClassTeacherOF = models.CharField(max_length=100)
Salary = models.CharField(max_length=100)
a_simple_word = models.CharField(max_length=100)
# Định nghĩa trường cần dịch
translatable_fields = ('a_simple_word',)
Chúng ta tạo model và chỉ định trường a_simple_word là trường cần dịch qua thuộc tính translatable_fields.
4. Cấu hình Admin (admin.py)
from django.contrib import admin
from .models import TeacherData
from klingon.admin import TranslationInline, create_translations
class TeacherAdmin(admin.ModelAdmin):
inlines = [TranslationInline]
actions = [create_translations]
admin.site.register(TeacherData, TeacherAdmin)
Đăng ký model với admin và thêm inline translation cùng action tạo bản dịch.
Kiểm tra kết quả
Chạy Python shell và thực hiện:
In [1]: from formhandlingapp.models import *
In [2]: data = TeacherData.objects.create(name="ama4", ClassTeacherOF="10", Salary="33322", a_simple_word="how are you")
In [3]: data.set_translation('jp', 'a_simple_word', 'お元気ですか')
Bây giờ bạn có thể thấy đối tượng bản dịch được tạo. Bạn cũng có thể thêm bản dịch qua views.py.
Truy cập https://127.0.0.1/admin/ để xem giao diện quản trị với tính năng dịch thuật.
