Bu bölümde blog gönderilerini gerçek zamanlı olarak çeviren bir özellik ekleniyor. Özellik hem sunucu hem de istemci taraflı bileşenler içeriyor: Microsoft Translator API, langdetect ile dil tespiti ve Ajax (asenkron JavaScript istekleri) kullanılıyor.
Geleneksel sunucu taraflı modelde her eylem tam sayfa yenilenmesine neden olur. Ajax modelinde ise tarayıcı sayfayı yenilemeden arka planda sunucuya HTTP istekleri gönderir ve gelen yanıtla sayfanın yalnızca ilgili kısmını günceller. Bu bölümde, çeviri özelliği sayfa yenilenmeden dinamik olarak uygulanacak.
(venv) $ pip install langdetect
(venv) $ pip install requests
app/models.py — Post Modeline language Alanı Ekleclass Post(db.Model):
# ...
language: so.Mapped[Optional[str]] = so.mapped_column(sa.String(5))
(venv) $ flask db migrate -m "add language to posts"
(venv) $ flask db upgrade
app/routes.py — Gönderi Oluşturulurken Dili Tespit Et ve Kaydetfrom langdetect import detect, LangDetectException
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
@login_required
def index():
form = PostForm()
if form.validate_on_submit():
try:
language = detect(form.post.data)
except LangDetectException:
language = ''
post = Post(body=form.post.data, author=current_user,
language=language)
# ...
detect() — metni analiz ederek dil kodu döndürür (örn. 'en', 'es').LangDetectException — dil tespit edilemezse fırlatılır; bu durumda boş string kaydedilir.