Không dịch tin nhắn của chính mình (tiết kiệm request)
2 loại dịch:
Dịch toàn bộ tin nhắn: Dịch theo phân trang, kéo tới đâu thì dịch tin nhắn tới đó.
Dịch từng tin nhắn: đè vào tin nhắn sẽ hiện popup
Ngôn ngữ app: dùng localeName, người dùng muốn đổi thì vào Cài đặt của điện thoại
Không dùng Cloud Functions: do không biết dùng và vì e nghĩ nó dịch ngay khi có tin nhắn mới thêm vào Firestore ngay cả khi người dùng chưa chọn dịch. Phương pháp e dùng thay thế: dịch ở local flutter app:
Get translation từ Firestore về theo đường dẫn "translations/{messageId}" (như trong ảnh), thêm collection "translations" để tách biệt với collection "public" (để khi tải tin nhắn về nó không bị tải luôn translations).
Kiểm tra mã ngôn ngữ đã có trên Firestore thì không cần Gemini dịch, mà lấy từ Firestore luôn.r
Gom những ngôn ngữ chưa có trên Firestore lại, rồi đẩy cho Gemini dịch, yêu cầu nó trả về phản hồi với key là MÃ ngôn ngữ.
Cuối cùng đẩy lên Firestore theo đường dẫn lúc nãy để BỔ SUNG ngôn ngữ & dịch cho translation của message đó.
Có 2 loại Settings:1. Settings dịch:
Nhập ngôn ngữ thay vì chọn chúng từ danh sách có sẵn: có thể nhập ngôn ngữ hoặc mã ngôn ngữ (vietnamese, vietnam, vi...), khi config Gemini thì bảo nó chuyển đổi sang MÃ ngôn ngữ trong phản hồi trả về (để khi dịch thì check translation trên - - - Firestore đã có mã ngôn ngữ đó chưa)
Trong màn nhập ngôn ngữ, có những hint gợi ý (cũng là những ngôn ngữ đã từng chọn (history))
2. Settings app (mới demo chưa thực thi):
Tùy chọn "Tắt dịch toàn bộ tin nhắn"
Tùy chọn "Tự động dịch tin nhắn mỗi lần vào app":
Sử dụng ngôn ngữ mặc định (locale)
Sử dụng ngôn ngữ yêu thích
Tùy chọn "Dịch nhanh bằng cách bấm vào tin nhấn 1 lần duy nhất": đối với dịch từng tin nhắn.
Có thể chứa tùy chọn ngôn ngữ yêu thích (như anh Đệ đã làm)
Có thể chứa tùy chọn ngôn ngữ app (như anh Phi đã làm)
Hạn chế:
chưa có backend (em sẽ update dần), mọi thứ đang xử lý ở frontend.
Một số chỗ còn dùng FutureBuilder thay vì BlocBuilder theo kiến trúc của dự án.
Ý tưởng:
Có 2 loại Settings: 1. Settings dịch:
Hạn chế:
Video Demo: https://github.com/user-attachments/assets/02917bb1-56b1-483f-af3f-c41022c25135