Asked Oct 22nd, 8:18 AM 54 0 1
  • 54 0 1
0

Android Building Multi-Language Database SQLite

Share
  • 54 0 1

Xin chào mọi người. Em là một lập trình mới và đang có 1 câu hỏi liên quan đến kotlin và sqlite database. Em muốn đa ngôn ngữ cho database trước khi view lên thì Em nên làm như thế nào ? Ví dụ: Ngôn ngữ trong database của em là tiếng anh, Nhưng khi người dùng ở Ấn Độ sẽ load dữ liệu là ấn độ. Lưu ý: Đó là dữ liệu lấy từ sqlite chứ không phải là trong string.xml Mong được hỗ trợ. #kotlin #android

Avatar Tran Minh Nhat @tranminhnhat
Oct 22nd, 8:27 AM

Nếu là mình, thì mình sẽ lưu cả dữ liệu tiếng Anh và tiếng Ấn Độ vào sqlite db, nhưng có thêm 1 cột "language".Khi truy vấn thì tùy vào việc kiểm tra người dùng chọn ngôn ngữ gì thì sẽ query ra các dữ liệu có ngôn ngữ tương ứng.

Kiểu: SELECT a, b, c FROM table WHERE language="en";

Ưu điểm là đơn giản, nhược điểm là chỉ hiệu quả tốt với lượng dữ liệu nhỏ.

0
| Reply
Share
Avatar Tu Le @TUITC
Oct 22nd, 8:38 AM

@tranminhnhat Dạ em đã thử cách đó và được nhưng mà nếu dữ liệu lên 10 ngôn ngữ là bị phình ra. Cách 2: Em đã thử dùng thư viện Translate API của google
2.1. Ưu điểm: Không cần dụng database, database không bị phình -> chiến dung lượng
2.2. Nhược điểm: Phải download thư viên ngôn ngữ cần dịch xong -> dịch (Mạng yếu sẽ mất khoảng 30s->1p). Offline không làm việc. Gói ngôn ngữ sau khi tải về sẽ tính vào phần dung lượng của app nhìn app là thấy chiếm nhiều dung lượng 😦

Hiện tại em bị bí không biết làm sao luôn

0
| Reply
Share
Avatar CongHD @conghdql4
Oct 22nd, 9:32 AM

@TUITC

Cách 2: Em đã thử dùng thư viện Translate API của google

Đã dùng API rồi thì cần gì phải down thêm ngôn ngữ vậy bạn ? Mình nghĩ là call API thì chỉ cần input là từ cần dịch, ngôn ngữ đích thì output sẽ là từ đã được dịch.

P/S: Mình chưa thử Google translate API nhưng mình nghĩ nó sẽ hoạt động như trên

Tham khảo, Tham khảo

0
| Reply
Share
Avatar Tu Le @TUITC
Oct 22nd, 9:44 AM
0
| Reply
Share
Avatar CongHD @conghdql4
Oct 22nd, 10:00 AM

@TUITC Nếu bạn muốn dùng csdl mà không muốn nó phình thì mình suggest bạn cách này : Thay vì bạn thêm cột language thì bạn thêm các cột tương ứng với các ngôn ngữ khác nhau như english, jappanese, vietnamese, indian. Thì lúc đó bạn select theo kiểu select indian from table where word = 'something'

Lưu ý : Lúc này dữ liệu sẽ phình theo chiều ngang thay vì phình theo chiều dọc 😄

0
| Reply
Share

1 ANSWERS


Answered Oct 23rd, 9:24 AM
0

@TUITC Câu hỏi của bạn mang tính chất local database nhưng sau khi đọc comment mình thấy bạn đang cần 1 i18n service. Nó hỗ trợ gì ?

  • Khi đổi ngôn ngữ sẽ tải về file ngôn ngữ đó và cache lại -> chỉ tải 1 lần -> offline vẫn chạy
  • Có thể mặc định sẵn ngôn ngữ nào đó.
  • Hỗ trợ fallback -> tức với ngôn ngữ ấn độ key đó chưa được dịch sẽ lấy từ tiếng anh or ngôn ngữ mặc định đã cài đặt
  • Có thể edit chỉnh sửa thêm ngôn ngữ trên
  • Và nhiều option nhỏ nhỏ khác.

Nhưng 1 server phải code đẻ ra api or dùng các dịch vụ i18n trả phí or mất phí trên mạng như https://locize.com về phía thư viện client có thể dùng https://github.com/i18next/i18next-android

Thông tin thêm. i18n là một Ecosystem nên server or client lib không nhất thiết từ 1 dịch vụ nào đó. Vì nó là một quy chuẩn chung. Nên có thể search i18n client android, or i18n service ...

Share
Viblo
Let's register a Viblo Account to get more interesting posts.