Xin thứ lỗi cho độ dài của câu hỏi này. Tôi cần giải thích tất cả những điều này để giúp đỡ người khác và tránh những người đóng góp hữu ích để đưa ra câu trả lời mà không yêu cầu làm rõ.
Yêu cầu của tôi trong một dòng: "để cho phép điện thoại Android hiển thị đúng các ký tự tiếng Tamil".
Xây dựng: Tiếng Tamil, giống như bất kỳ ngôn ngữ Ấn Độ nào khác có hệ thống kết xuất ký tự phức tạp. Không giống như tiếng Anh hoặc chữ viết Latinh khác, nó có glyph (những gì bạn thấy trên màn hình) bao gồm nhiều hơn một ký tự. Android không có khả năng hiển thị các tập lệnh phức tạp như vậy (có ngoại lệ). Mục đích của tôi là muốn biết làm thế nào tôi có thể cung cấp khả năng như vậy cho điện thoại hoặc máy tính bảng Android.
Nền tảng nhỏ mà tôi thu thập được cho đến nay: Để hiển thị glyph trên màn hình, trước tiên Android cần một tệp phông chữ phù hợp. Thiết bị Android có một thư mục / hệ thống / phông chữ trong đó có một vài trong số chúng. Tệp thú vị nhất trong thư mục đó là DroidSansFallback.ttf. Như tên cho thấy, khi hệ thống của Android không tìm thấy ký tự trong phông chữ hệ thống (có thể là DroidSans.ttf hoặc DroidSans-Bold.ttf, v.v.), nó sẽ quay lại tìm kiếm nó trong DroidSansFallback.ttf.
Bằng cách thay thế một tệp phông chữ phù hợp từ PC (Latha.ttf hoặc Lohit-Tamil.ttf - đây là các phông chữ cho tiếng Tamil) và DroidSansFallback.ttf sẽ cho phép hiển thị các ký tự tiếng Tamil trong thiết bị. Nó không phải là dễ dàng để thay thế và nó liên quan đến việc root thiết bị và gắn hệ thống như có thể ghi.
Mặc cho những rắc rối đó, ngay cả khi DroidSansFallback.ttf được thay thế, các ký tự tiếng Tamil được hiển thị không được hiển thị đúng. Ký tự "" trong tiếng Tamil là kết hợp của hai ký tự và thay vì được hiển thị là "", nó sẽ được hiển thị là "த" không có khoảng trắng ở giữa. Mặc dù điều này là đủ để đọc các tin nhắn ngắn, nhưng nó không thể được sử dụng để đọc sách, v.v.
Từ Android 4.0 trên các phường, tiếng Tamil và một số ngôn ngữ khác được hỗ trợ thông qua trình duyệt như đã nói trong tổng quan về API của Android 4.x như được thấy dưới đây.
Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex
character support needed for combining glyphs) in WebView and the built-in Browser
Các từ cần chú ý là "trong WebView và Trình duyệt tích hợp", có nghĩa là các ký tự tiếng Tamil sẽ được hiển thị hoàn hảo nếu nó được hiển thị dưới dạng nội dung HTML và sẽ không được hiển thị theo cách khác. Opera và một vài trình duyệt khác đã làm điều này ngay cả trước Android 4.0 bằng cách thay thế hình ảnh thay vì ký tự.
Tôi nhận thấy rằng trong một số thiết bị nhắm vào thị trường Ấn Độ (ví dụ: LG Optimus One, hầu hết điện thoại và máy tính bảng của Samsung) có thể hiển thị tiếng Tamil chính xác cả trong trình duyệt và ngay cả ở những nơi ngoài trình duyệt như trong danh bạ, tin nhắn văn bản, tên tệp, v.v. Thật ngạc nhiên khi họ làm điều này ngay cả trong Android 2.3 trở đi. Tôi cũng nhận thấy rằng mô hình tương tự nhắm mục tiêu quốc gia không phải Ấn Độ chạy cùng phiên bản Android không hỗ trợ hiển thị ký tự tiếng Tamil.
Điều này khiến tôi phải điều tra thêm và đi đến kết luận rằng Android (như các HĐH dựa trên Linux khác) phụ thuộc vào một công cụ kết xuất phông chữ để hiển thị các ký tự phức tạp như vậy. Hai động cơ mà tôi bắt gặp là Skia và Harfbuzz. Tôi nhận thấy LG sử dụng skia và Samsung sử dụng thư viện Harfbuzz trong thiết bị của họ để mang lại khả năng này.
Tôi đã xem qua nhiều trang web đề nghị thay thế các thư viện và phông chữ này. Nó không hoạt động và kết quả là đóng băng. May mắn thay, tôi đã sao lưu bằng clockworkmod và do đó tôi đã khôi phục điện thoại của mình.
Mặc dù tôi đã giải thích điều này với tiếng Tamil, nhưng điều này có thể áp dụng cho hầu hết các ngôn ngữ Ấn Độ.
Đây là câu hỏi của tôi (nếu bạn vẫn đang đọc;)) Bây giờ, chắc chắn rằng rõ ràng phải có một tệp TTF để cung cấp các ký tự và một thư viện thích hợp (libskia.so hoặc libharfbuzz.so) để hiển thị chúng chính xác. Có ai biết làm thế nào các nhà sản xuất có thể cung cấp khả năng? Tôi thậm chí đã sẵn sàng để xây dựng ROM của riêng mình từ AOSP (Dự án mã nguồn mở Android).