Android Building Multi-Language Database SQLite
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
1 CÂU TRẢ LỜI
@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 ...
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ỏ.
@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
@TUITC
Đã 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
@conghdql4 Dạ không, mình dùng cái này ạ, https://developers.google.com/ml-kit/language/translation/android
@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
@tranminhnhat Chào bạn,
Để hỗ trợ đa ngôn ngữ cho dữ liệu lấy từ SQLite trong ứng dụng Android sử dụng Kotlin, bạn có thể thực hiện theo các bước sau:
Lưu Trữ Dữ Liệu Đa Ngôn Ngữ: Trong cơ sở dữ liệu SQLite của bạn, hãy thiết kế bảng sao cho có thể lưu trữ dữ liệu bằng nhiều ngôn ngữ. Một cách là tạo các cột riêng biệt cho mỗi ngôn ngữ, ví dụ: name_en, name_hi cho tiếng Anh và tiếng Hindi.
Xác Định Ngôn Ngữ Người Dùng: Sử dụng API của Android để xác định ngôn ngữ hiện tại của thiết bị. Bạn có thể lấy thông tin này từ Locale.getDefault().
Truy Vấn Dữ Liệu Theo Ngôn Ngữ: Khi thực hiện truy vấn dữ liệu từ SQLite, hãy chọn cột dữ liệu phù hợp với ngôn ngữ của người dùng. Ví dụ, nếu người dùng sử dụng tiếng Hindi, hãy truy vấn dữ liệu từ cột name_hi.
Hiển Thị Dữ Liệu: Sau khi lấy dữ liệu phù hợp với ngôn ngữ người dùng, bạn có thể hiển thị chúng trong ứng dụng của mình.
Để hiểu rõ hơn về cách thực hiện, bạn có thể tham khảo các tài liệu và hướng dẫn chi tiết trên trang https://www.oanhviela.com, nơi cung cấp nhiều bài viết và tài nguyên hữu ích về lập trình Android và Kotlin.
Nếu bạn có thắc mắc cụ thể hoặc gặp vấn đề trong quá trình thực hiện, đừng ngần ngại đặt câu hỏi thêm để cộng đồng có thể hỗ trợ bạn tốt nhất!
Chúc bạn thành công với dự án của mình! #kotlin #android #sqlite #đa_ngôn_ngữ